diff --git a/src/main/java/dk/camelot64/kickc/model/VariableBuilder.java b/src/main/java/dk/camelot64/kickc/model/VariableBuilder.java index 5c454f050..0b6b89b59 100644 --- a/src/main/java/dk/camelot64/kickc/model/VariableBuilder.java +++ b/src/main/java/dk/camelot64/kickc/model/VariableBuilder.java @@ -79,6 +79,7 @@ public class VariableBuilder { variable.setNoModify(this.isNoModify()); variable.setVolatile(this.isVolatile()); variable.setExport(this.isExport()); + variable.setPermanent(this.isPermanent()); variable.setOptimize(this.isOptimize()); variable.setRegister(this.getRegister()); if(variable.getRegister() instanceof Registers.RegisterMainMem) { diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass2NopCastInlining.java b/src/main/java/dk/camelot64/kickc/passes/Pass2NopCastInlining.java index 106618ce8..463808a10 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass2NopCastInlining.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass2NopCastInlining.java @@ -68,6 +68,10 @@ public class Pass2NopCastInlining extends Pass2SsaOptimization { } if(isNopCast && assignment.getlValue() instanceof VariableRef) { + final Variable assignmentVar = getScope().getVariable((VariableRef) assignment.getlValue()); + if(assignmentVar.isKindLoadStore()) + continue; + boolean isIntermediateVar = false; if(castValue.getValue() instanceof VariableRef && ((VariableRef) castValue.getValue()).isIntermediate()) { isIntermediateVar = true; @@ -86,7 +90,6 @@ public class Pass2NopCastInlining extends Pass2SsaOptimization { // 3. Delete the cast variable delete.add((SymbolRef) castValue.getValue()); // Change the type of the assignment variable - Variable assignmentVar = getScope().getVariable((VariableRef) assignment.getlValue()); Variable castVar = getScope().getVariable((VariableRef) castValue.getValue()); assignmentVar.setType(castVar.getType()); // Remove the assignment diff --git a/src/main/java/dk/camelot64/kickc/passes/calcs/PassNCalcLiveRangeVariables.java b/src/main/java/dk/camelot64/kickc/passes/calcs/PassNCalcLiveRangeVariables.java index 88f2ac359..6aa546121 100644 --- a/src/main/java/dk/camelot64/kickc/passes/calcs/PassNCalcLiveRangeVariables.java +++ b/src/main/java/dk/camelot64/kickc/passes/calcs/PassNCalcLiveRangeVariables.java @@ -89,8 +89,6 @@ public class PassNCalcLiveRangeVariables extends PassNCalcBase previousStmts = getPreviousStatements(nextStmt); for(PreviousStatement previousStmt : previousStmts) { if(PreviousStatement.Type.NORMAL.equals(previousStmt.getType())) { - // Add all used variables to the previous statement (taking into account phi from blocks) - modified |= initUsedVars(liveRanges, nextStmt, previousStmt); // Add all vars alive in the next statement for(VariableRef aliveVar : aliveNextStmt) { if(!definedNextStmt.contains(aliveVar)) { @@ -101,6 +99,8 @@ public class PassNCalcLiveRangeVariables extends PassNCalcBase usedNextStmt = referenceInfo.getUsedVars(stmt); - if(stmt instanceof StatementPhiBlock) { - // If current statement is a phi add the used variables to previous based on the phi entries - StatementPhiBlock phi = (StatementPhiBlock) stmt; + Collection usedNextStmt = referenceInfo.getUsedVars(nextStmt); + if(nextStmt instanceof StatementPhiBlock) { + // If next statement is a phi add the used variables to previous based on the phi entries + StatementPhiBlock phi = (StatementPhiBlock) nextStmt; ControlFlowBlock previousBlock = getProgram().getStatementInfos().getBlock(previousStmt.getStatementIdx()); for(StatementPhiBlock.PhiVariable phiVariable : phi.getPhiVariables()) { diff --git a/src/main/java/dk/camelot64/kickc/passes/calcs/PassNCalcVariableReferenceInfos.java b/src/main/java/dk/camelot64/kickc/passes/calcs/PassNCalcVariableReferenceInfos.java index c1dd825ac..5340833c9 100644 --- a/src/main/java/dk/camelot64/kickc/passes/calcs/PassNCalcVariableReferenceInfos.java +++ b/src/main/java/dk/camelot64/kickc/passes/calcs/PassNCalcVariableReferenceInfos.java @@ -5,9 +5,7 @@ import dk.camelot64.kickc.model.Program; import dk.camelot64.kickc.model.VariableReferenceInfos; import dk.camelot64.kickc.model.iterator.ProgramValue; import dk.camelot64.kickc.model.iterator.ProgramValueIterator; -import dk.camelot64.kickc.model.statements.Statement; -import dk.camelot64.kickc.model.statements.StatementLValue; -import dk.camelot64.kickc.model.statements.StatementPhiBlock; +import dk.camelot64.kickc.model.statements.*; import dk.camelot64.kickc.model.symbols.Variable; import dk.camelot64.kickc.model.values.*; @@ -34,13 +32,7 @@ public class PassNCalcVariableReferenceInfos extends PassNCalcBase()); Collection blockSymbols = blockVarReferences.get(block.getLabel()); for(Statement statement : block.getStatements()) { - LinkedHashSet stmtSymbolVarRefs = new LinkedHashSet<>(); - ProgramValueIterator.execute(statement, - (programValue, currentStmt, stmtIt, currentBlock) -> { - if(programValue.get() instanceof SymbolVariableRef) - stmtSymbolVarRefs.add((SymbolVariableRef) programValue.get()); - } - , null, null); + Collection stmtUsedVars = getUsedVars(statement); Collection stmtDefinedVars = getDefinedVars(statement); // Add variable definitions to the statement statementVarReferences.putIfAbsent(statement.getIndex(), new ArrayList<>()); @@ -55,15 +47,13 @@ public class PassNCalcVariableReferenceInfos extends PassNCalcBase()); - Collection references = symbolVarReferences.get(referencedVarRef); - VariableReferenceInfos.ReferenceInStatement referenceInStmt = new VariableReferenceInfos.ReferenceInStatement(statement.getIndex(), VariableReferenceInfos.ReferenceToSymbolVar.ReferenceType.USE, referencedVarRef); - references.add(referenceInStmt); - stmtSymbols.add(referenceInStmt); - if(!blockSymbols.contains(referenceInStmt)) blockSymbols.add(referenceInStmt); - } + for(SymbolVariableRef referencedVarRef : stmtUsedVars) { + symbolVarReferences.putIfAbsent(referencedVarRef, new ArrayList<>()); + Collection references = symbolVarReferences.get(referencedVarRef); + VariableReferenceInfos.ReferenceInStatement referenceInStmt = new VariableReferenceInfos.ReferenceInStatement(statement.getIndex(), VariableReferenceInfos.ReferenceToSymbolVar.ReferenceType.USE, referencedVarRef); + references.add(referenceInStmt); + stmtSymbols.add(referenceInStmt); + if(!blockSymbols.contains(referenceInStmt)) blockSymbols.add(referenceInStmt); } } } @@ -90,6 +80,58 @@ public class PassNCalcVariableReferenceInfos extends PassNCalcBase getUsedVars(Statement statement) { + LinkedHashSet usedVars = new LinkedHashSet<>(); + if(statement instanceof StatementLValue) { + final StatementLValue statementLValue = (StatementLValue) statement; + if(!((statementLValue).getlValue() instanceof VariableRef)) { + // No assignments - find all vars referenced + usedVars.addAll(getReferenced((statementLValue).getlValue())); + } + if(statementLValue instanceof StatementAssignment) { + usedVars.addAll(getReferenced(((StatementAssignment) statementLValue).getrValue1())); + usedVars.addAll(getReferenced(((StatementAssignment) statementLValue).getrValue2())); + } else if(statementLValue instanceof StatementCall) { + if(((StatementCall) statement).getParameters() != null) + for(RValue parameter : ((StatementCall) statementLValue).getParameters()) { + usedVars.addAll(getReferenced(parameter)); + } + } else if(statementLValue instanceof StatementCallPointer) { + usedVars.addAll(getReferenced(((StatementCallPointer) statementLValue).getProcedure())); + if(((StatementCallPointer) statement).getParameters() != null) + for(RValue parameter : ((StatementCallPointer) statementLValue).getParameters()) { + usedVars.addAll(getReferenced(parameter)); + } + } else if(statementLValue instanceof StatementCallFinalize) { + // No vars + } else { + throw new InternalError("Statement type not handled " + statementLValue); + } + } else if(statement instanceof StatementPhiBlock) { + for(StatementPhiBlock.PhiVariable phiVariable : ((StatementPhiBlock) statement).getPhiVariables()) { + for(StatementPhiBlock.PhiRValue value : phiVariable.getValues()) { + usedVars.addAll(getReferenced(value.getrValue())); + } + } + } else { + // No assignments - find all vars referenced + ProgramValueIterator.execute(statement, + (programValue, currentStmt, stmtIt, currentBlock) -> { + if(programValue.get() instanceof SymbolVariableRef) + usedVars.add((SymbolVariableRef) programValue.get()); + } + , null, null); + } + return usedVars; + } + /** * Get all variables referenced in an rValue * diff --git a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java index fa89ec834..d6e1ff534 100644 --- a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java +++ b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java @@ -37,6 +37,12 @@ public class TestPrograms { public TestPrograms() { } + + @Test + public void testMaCoalesceProblem() throws IOException, URISyntaxException { + compileAndCompare("ma_coalesce_problem"); + } + @Test public void testVarModelMaMem3() throws IOException, URISyntaxException { compileAndCompare("varmodel-ma_mem-3"); diff --git a/src/test/kc/ma_coalesce_problem.kc b/src/test/kc/ma_coalesce_problem.kc new file mode 100644 index 000000000..8d69e2acc --- /dev/null +++ b/src/test/kc/ma_coalesce_problem.kc @@ -0,0 +1,26 @@ +// Demonstrates problem with __ma coalescing +// c1a is erroneously zp-coalesced with c1A + +#pragma var_model(ma_mem, pointer_ma_zp, parameter_ssa_mem) + +const char* SCREEN = 0x0400; + +// Plasma state variables +char c1A = 0; + +void main() { + while(true) { + char c1a = c1A; + for (char i = 0; i < 40; ++i) { + SCREEN[i] = SINTABLE[c1a]; + c1a += 4; + } + c1A += 3; + } +} + +const char[0x100] align(0x100) SINTABLE = kickasm {{ + .for(var i=0;i<$100;i++) + .byte round(127.5+127.5*sin(2*PI*i/256)) +}}; + diff --git a/src/test/ref/address-0.log b/src/test/ref/address-0.log index 199f28714..d2cabeba0 100644 --- a/src/test/ref/address-0.log +++ b/src/test/ref/address-0.log @@ -93,7 +93,7 @@ main::@2: scope:[main] from main::@1 VARIABLE REGISTER WEIGHTS -(byte) i loadstore !zp[-1]:2 11.400000000000002 +(byte) i loadstore !zp[-1]:2 9.5 (void()) main() Initial phi equivalence classes @@ -161,11 +161,11 @@ main: { REGISTER UPLIFT POTENTIAL REGISTERS Statement [0] (byte) i ← (byte) 3 [ i ] ( [ i ] ) always clobbers reg byte a Statement [5] if((byte) i<(byte) 7) goto main::@2 [ i ] ( main:2 [ i ] ) always clobbers reg byte a -Statement [7] *((const byte*) SCREEN + (byte) i) ← (byte) i [ ] ( main:2 [ ] ) always clobbers reg byte a reg byte y +Statement [7] *((const byte*) SCREEN + (byte) i) ← (byte) i [ i ] ( main:2 [ i ] ) always clobbers reg byte a reg byte y Potential registers zp[1]:2 [ i ] : zp[1]:2 , REGISTER UPLIFT SCOPES -Uplift Scope [] 11.4: zp[1]:2 [ i ] +Uplift Scope [] 9.5: zp[1]:2 [ i ] Uplift Scope [main] Uplifting [] best 338 combination zp[1]:2 [ i ] @@ -251,7 +251,7 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (const byte*) SCREEN = (byte*) 1024 -(byte) i loadstore !zp[-1]:2 zp[1]:2 11.400000000000002 +(byte) i loadstore !zp[-1]:2 zp[1]:2 9.5 (void()) main() (label) main::@1 (label) main::@2 diff --git a/src/test/ref/address-0.sym b/src/test/ref/address-0.sym index cf3870cae..58596b8d0 100644 --- a/src/test/ref/address-0.sym +++ b/src/test/ref/address-0.sym @@ -2,7 +2,7 @@ (label) @begin (label) @end (const byte*) SCREEN = (byte*) 1024 -(byte) i loadstore !zp[-1]:2 zp[1]:2 11.400000000000002 +(byte) i loadstore !zp[-1]:2 zp[1]:2 9.5 (void()) main() (label) main::@1 (label) main::@2 diff --git a/src/test/ref/address-1.log b/src/test/ref/address-1.log index 8a4a52b50..06a045a8c 100644 --- a/src/test/ref/address-1.log +++ b/src/test/ref/address-1.log @@ -94,7 +94,7 @@ main::@2: scope:[main] from main::@1 VARIABLE REGISTER WEIGHTS (void()) main() -(byte) main::i loadstore !zp[-1]:2 19.0 +(byte) main::i loadstore !zp[-1]:2 14.25 Initial phi equivalence classes Added variable main::i to live range equivalence class [ main::i ] @@ -159,11 +159,11 @@ main: { REGISTER UPLIFT POTENTIAL REGISTERS Statement [4] (byte) main::i ← (byte) 3 [ main::i ] ( main:2 [ main::i ] ) always clobbers reg byte a Statement [5] if((byte) main::i<(byte) 7) goto main::@2 [ main::i ] ( main:2 [ main::i ] ) always clobbers reg byte a -Statement [7] *((const byte*) SCREEN + (byte) main::i) ← (byte) main::i [ ] ( main:2 [ ] ) always clobbers reg byte a reg byte y +Statement [7] *((const byte*) SCREEN + (byte) main::i) ← (byte) main::i [ main::i ] ( main:2 [ main::i ] ) always clobbers reg byte a reg byte y Potential registers zp[1]:2 [ main::i ] : zp[1]:2 , REGISTER UPLIFT SCOPES -Uplift Scope [main] 19: zp[1]:2 [ main::i ] +Uplift Scope [main] 14.25: zp[1]:2 [ main::i ] Uplift Scope [] Uplifting [main] best 311 combination zp[1]:2 [ main::i ] @@ -254,7 +254,7 @@ FINAL SYMBOL TABLE (label) main::@1 (label) main::@2 (label) main::@return -(byte) main::i loadstore !zp[-1]:2 zp[1]:2 19.0 +(byte) main::i loadstore !zp[-1]:2 zp[1]:2 14.25 zp[1]:2 [ main::i ] diff --git a/src/test/ref/address-1.sym b/src/test/ref/address-1.sym index 80963b0a3..218ef3c3a 100644 --- a/src/test/ref/address-1.sym +++ b/src/test/ref/address-1.sym @@ -6,6 +6,6 @@ (label) main::@1 (label) main::@2 (label) main::@return -(byte) main::i loadstore !zp[-1]:2 zp[1]:2 19.0 +(byte) main::i loadstore !zp[-1]:2 zp[1]:2 14.25 zp[1]:2 [ main::i ] diff --git a/src/test/ref/address-2.log b/src/test/ref/address-2.log index eb7bbc086..b3cc4a837 100644 --- a/src/test/ref/address-2.log +++ b/src/test/ref/address-2.log @@ -93,7 +93,7 @@ main::@2: scope:[main] from main::@1 VARIABLE REGISTER WEIGHTS -(byte) i loadstore !mem[-1]:8192 11.400000000000002 +(byte) i loadstore !mem[-1]:8192 9.5 (void()) main() Initial phi equivalence classes @@ -161,11 +161,11 @@ main: { REGISTER UPLIFT POTENTIAL REGISTERS Statement [0] (byte) i ← (byte) 3 [ i ] ( [ i ] ) always clobbers reg byte a Statement [5] if((byte) i<(byte) 7) goto main::@2 [ i ] ( main:2 [ i ] ) always clobbers reg byte a -Statement [7] *((const byte*) SCREEN + (byte) i) ← (byte) i [ ] ( main:2 [ ] ) always clobbers reg byte a reg byte y +Statement [7] *((const byte*) SCREEN + (byte) i) ← (byte) i [ i ] ( main:2 [ i ] ) always clobbers reg byte a reg byte y Potential registers mem[1]:8192 [ i ] : mem[1]:8192 , REGISTER UPLIFT SCOPES -Uplift Scope [] 11.4: mem[1]:8192 [ i ] +Uplift Scope [] 9.5: mem[1]:8192 [ i ] Uplift Scope [main] Uplifting [] best 369 combination mem[1]:8192 [ i ] @@ -251,7 +251,7 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (const byte*) SCREEN = (byte*) 1024 -(byte) i loadstore !mem[-1]:8192 mem[1]:8192 11.400000000000002 +(byte) i loadstore !mem[-1]:8192 mem[1]:8192 9.5 (void()) main() (label) main::@1 (label) main::@2 diff --git a/src/test/ref/address-2.sym b/src/test/ref/address-2.sym index b004b3ee2..c825559b7 100644 --- a/src/test/ref/address-2.sym +++ b/src/test/ref/address-2.sym @@ -2,7 +2,7 @@ (label) @begin (label) @end (const byte*) SCREEN = (byte*) 1024 -(byte) i loadstore !mem[-1]:8192 mem[1]:8192 11.400000000000002 +(byte) i loadstore !mem[-1]:8192 mem[1]:8192 9.5 (void()) main() (label) main::@1 (label) main::@2 diff --git a/src/test/ref/address-3.log b/src/test/ref/address-3.log index 1aadd2dda..05f2b67a1 100644 --- a/src/test/ref/address-3.log +++ b/src/test/ref/address-3.log @@ -94,7 +94,7 @@ main::@2: scope:[main] from main::@1 VARIABLE REGISTER WEIGHTS (void()) main() -(byte) main::i loadstore !mem[-1]:8192 19.0 +(byte) main::i loadstore !mem[-1]:8192 14.25 Initial phi equivalence classes Added variable main::i to live range equivalence class [ main::i ] @@ -159,11 +159,11 @@ main: { REGISTER UPLIFT POTENTIAL REGISTERS Statement [4] (byte) main::i ← (byte) 3 [ main::i ] ( main:2 [ main::i ] ) always clobbers reg byte a Statement [5] if((byte) main::i<(byte) 7) goto main::@2 [ main::i ] ( main:2 [ main::i ] ) always clobbers reg byte a -Statement [7] *((const byte*) SCREEN + (byte) main::i) ← (byte) main::i [ ] ( main:2 [ ] ) always clobbers reg byte a reg byte y +Statement [7] *((const byte*) SCREEN + (byte) main::i) ← (byte) main::i [ main::i ] ( main:2 [ main::i ] ) always clobbers reg byte a reg byte y Potential registers mem[1]:8192 [ main::i ] : mem[1]:8192 , REGISTER UPLIFT SCOPES -Uplift Scope [main] 19: mem[1]:8192 [ main::i ] +Uplift Scope [main] 14.25: mem[1]:8192 [ main::i ] Uplift Scope [] Uplifting [main] best 342 combination mem[1]:8192 [ main::i ] @@ -254,7 +254,7 @@ FINAL SYMBOL TABLE (label) main::@1 (label) main::@2 (label) main::@return -(byte) main::i loadstore !mem[-1]:8192 mem[1]:8192 19.0 +(byte) main::i loadstore !mem[-1]:8192 mem[1]:8192 14.25 mem[1]:8192 [ main::i ] diff --git a/src/test/ref/address-3.sym b/src/test/ref/address-3.sym index 948b710c1..1aa4b2b07 100644 --- a/src/test/ref/address-3.sym +++ b/src/test/ref/address-3.sym @@ -6,6 +6,6 @@ (label) main::@1 (label) main::@2 (label) main::@return -(byte) main::i loadstore !mem[-1]:8192 mem[1]:8192 19.0 +(byte) main::i loadstore !mem[-1]:8192 mem[1]:8192 14.25 mem[1]:8192 [ main::i ] diff --git a/src/test/ref/address-4.log b/src/test/ref/address-4.log index 56d225219..56e8c2a74 100644 --- a/src/test/ref/address-4.log +++ b/src/test/ref/address-4.log @@ -116,7 +116,7 @@ VARIABLE REGISTER WEIGHTS (void()) main() (byte~) main::$1 22.0 (byte~) main::$2 22.0 -(byte) main::i loadstore !zp[-1]:2 19.75 +(byte) main::i loadstore !zp[-1]:2 9.875 Initial phi equivalence classes Added variable main::i to live range equivalence class [ main::i ] @@ -208,16 +208,16 @@ main: { REGISTER UPLIFT POTENTIAL REGISTERS Statement [4] (byte) main::i ← (byte) 0 [ main::i ] ( main:2 [ main::i ] ) always clobbers reg byte a Statement [5] if((byte) main::i<(byte) 8) goto main::@2 [ main::i ] ( main:2 [ main::i ] ) always clobbers reg byte a -Statement [7] (byte~) main::$1 ← (byte) main::i << (byte) 1 [ main::$1 ] ( main:2 [ main::$1 ] ) always clobbers reg byte a -Statement [8] *((const word*) SCREEN + (byte~) main::$1) ← (const word) main::ch [ ] ( main:2 [ ] ) always clobbers reg byte a -Statement [10] (byte~) main::$2 ← (byte) main::i << (byte) 1 [ main::$2 ] ( main:2 [ main::$2 ] ) always clobbers reg byte a -Statement [11] *((const word*) SCREEN + (byte~) main::$2) ← (const word) main::ch [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [7] (byte~) main::$1 ← (byte) main::i << (byte) 1 [ main::i main::$1 ] ( main:2 [ main::i main::$1 ] ) always clobbers reg byte a +Statement [8] *((const word*) SCREEN + (byte~) main::$1) ← (const word) main::ch [ main::i ] ( main:2 [ main::i ] ) always clobbers reg byte a +Statement [10] (byte~) main::$2 ← (byte) main::i << (byte) 1 [ main::i main::$2 ] ( main:2 [ main::i main::$2 ] ) always clobbers reg byte a +Statement [11] *((const word*) SCREEN + (byte~) main::$2) ← (const word) main::ch [ main::i ] ( main:2 [ main::i ] ) always clobbers reg byte a Potential registers zp[1]:2 [ main::i ] : zp[1]:2 , Potential registers zp[1]:3 [ main::$1 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:4 [ main::$2 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 22: zp[1]:3 [ main::$1 ] 22: zp[1]:4 [ main::$2 ] 19.75: zp[1]:2 [ main::i ] +Uplift Scope [main] 22: zp[1]:3 [ main::$1 ] 22: zp[1]:4 [ main::$2 ] 9.88: zp[1]:2 [ main::i ] Uplift Scope [] Uplifting [main] best 681 combination reg byte a [ main::$1 ] reg byte a [ main::$2 ] zp[1]:2 [ main::i ] @@ -328,7 +328,7 @@ FINAL SYMBOL TABLE (label) main::@2 (label) main::@return (const word) main::ch = (word) $102 -(byte) main::i loadstore !zp[-1]:2 zp[1]:2 19.75 +(byte) main::i loadstore !zp[-1]:2 zp[1]:2 9.875 zp[1]:2 [ main::i ] reg byte a [ main::$1 ] diff --git a/src/test/ref/address-4.sym b/src/test/ref/address-4.sym index 8def5d014..19c0ee41f 100644 --- a/src/test/ref/address-4.sym +++ b/src/test/ref/address-4.sym @@ -9,7 +9,7 @@ (label) main::@2 (label) main::@return (const word) main::ch = (word) $102 -(byte) main::i loadstore !zp[-1]:2 zp[1]:2 19.75 +(byte) main::i loadstore !zp[-1]:2 zp[1]:2 9.875 zp[1]:2 [ main::i ] reg byte a [ main::$1 ] diff --git a/src/test/ref/address-of-0.log b/src/test/ref/address-of-0.log index f6d0624fe..6bcafd4a1 100644 --- a/src/test/ref/address-of-0.log +++ b/src/test/ref/address-of-0.log @@ -108,7 +108,7 @@ main::@return: scope:[main] from main::@1 VARIABLE REGISTER WEIGHTS (void()) main() -(byte) main::b loadstore 11.5 +(byte) main::b loadstore 9.200000000000001 (byte) main::c (byte) main::c#0 22.0 @@ -180,13 +180,13 @@ main: { REGISTER UPLIFT POTENTIAL REGISTERS Statement [4] (byte) main::b ← (byte) 0 [ main::b ] ( main:2 [ main::b ] ) always clobbers reg byte a -Statement [6] *((const byte*) main::SCREEN + (byte) main::b) ← (byte) main::c#0 [ ] ( main:2 [ ] ) always clobbers reg byte y +Statement [6] *((const byte*) main::SCREEN + (byte) main::b) ← (byte) main::c#0 [ main::b ] ( main:2 [ main::b ] ) always clobbers reg byte y Statement [8] if((byte) main::b!=(byte) $b) goto main::@1 [ main::b ] ( main:2 [ main::b ] ) always clobbers reg byte a Potential registers zp[1]:2 [ main::b ] : zp[1]:2 , Potential registers zp[1]:3 [ main::c#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 22: zp[1]:3 [ main::c#0 ] 11.5: zp[1]:2 [ main::b ] +Uplift Scope [main] 22: zp[1]:3 [ main::c#0 ] 9.2: zp[1]:2 [ main::b ] Uplift Scope [] Uplifting [main] best 331 combination reg byte a [ main::c#0 ] zp[1]:2 [ main::b ] @@ -276,7 +276,7 @@ FINAL SYMBOL TABLE (label) main::@1 (label) main::@return (const byte*) main::SCREEN = (byte*) 1024 -(byte) main::b loadstore zp[1]:2 11.5 +(byte) main::b loadstore zp[1]:2 9.200000000000001 (const byte*) main::bp = &(byte) main::b (byte) main::c (byte) main::c#0 reg byte a 22.0 diff --git a/src/test/ref/address-of-0.sym b/src/test/ref/address-of-0.sym index 8b55da92f..e9bad97d1 100644 --- a/src/test/ref/address-of-0.sym +++ b/src/test/ref/address-of-0.sym @@ -5,7 +5,7 @@ (label) main::@1 (label) main::@return (const byte*) main::SCREEN = (byte*) 1024 -(byte) main::b loadstore zp[1]:2 11.5 +(byte) main::b loadstore zp[1]:2 9.200000000000001 (const byte*) main::bp = &(byte) main::b (byte) main::c (byte) main::c#0 reg byte a 22.0 diff --git a/src/test/ref/bitmap-plot-0.log b/src/test/ref/bitmap-plot-0.log index f54c16bbd..dcc0ab688 100644 --- a/src/test/ref/bitmap-plot-0.log +++ b/src/test/ref/bitmap-plot-0.log @@ -1443,7 +1443,7 @@ VARIABLE REGISTER WEIGHTS (byte) bitmap_plot::y (byte) bitmap_plot::y#0 15.0 (byte*) bitmap_screen -(byte) frame_cnt loadstore 1.1538461538461537 +(byte) frame_cnt loadstore 1.1111111111111112 (void()) init_irq() interrupt(HARDWARE_CLOBBER)(void()) irq() (void()) main() @@ -2208,7 +2208,7 @@ Removing always clobbered register reg byte y as potential for zp[1]:12 [ memset Statement [75] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ( main:3::bitmap_init:6 [ frame_cnt bitmap_init::y#2 bitmap_init::yoffs#1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:17 [ bitmap_init::y#2 bitmap_init::y#1 ] Statement [80] *((const byte*) BGCOL) ← (const byte) WHITE [ frame_cnt ] ( [ frame_cnt ] ) always clobbers reg byte a -Statement [81] if((byte) 0==(byte) frame_cnt) goto irq::@1 [ ] ( [ ] ) always clobbers reg byte a +Statement [81] if((byte) 0==(byte) frame_cnt) goto irq::@1 [ frame_cnt ] ( [ frame_cnt ] ) always clobbers reg byte a Statement [83] *((const byte*) BGCOL) ← (const byte) BLACK [ ] ( [ ] ) always clobbers reg byte a Statement [84] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER [ ] ( [ ] ) always clobbers reg byte a Statement [85] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y @@ -2245,7 +2245,7 @@ Statement [56] *((byte*) memset::dst#2) ← (byte) memset::c#4 [ memset::c#4 mem Statement [68] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte) 7 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ( main:3::bitmap_init:6 [ frame_cnt bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ) always clobbers reg byte a Statement [75] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ( main:3::bitmap_init:6 [ frame_cnt bitmap_init::y#2 bitmap_init::yoffs#1 ] ) always clobbers reg byte a Statement [80] *((const byte*) BGCOL) ← (const byte) WHITE [ frame_cnt ] ( [ frame_cnt ] ) always clobbers reg byte a -Statement [81] if((byte) 0==(byte) frame_cnt) goto irq::@1 [ ] ( [ ] ) always clobbers reg byte a +Statement [81] if((byte) 0==(byte) frame_cnt) goto irq::@1 [ frame_cnt ] ( [ frame_cnt ] ) always clobbers reg byte a Statement [83] *((const byte*) BGCOL) ← (const byte) BLACK [ ] ( [ ] ) always clobbers reg byte a Statement [84] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER [ ] ( [ ] ) always clobbers reg byte a Statement [85] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y @@ -2279,7 +2279,7 @@ Uplift Scope [bitmap_init] 39.88: zp[2]:18 [ bitmap_init::yoffs#2 bitmap_init::y Uplift Scope [main] 42.17: zp[1]:7 [ main::vy#2 main::vy#8 main::vy#1 ] 33: zp[2]:5 [ main::vx#2 main::vx#6 main::vx#1 ] 12.25: zp[2]:2 [ main::x#2 main::x#1 ] 11: zp[1]:4 [ main::y#2 main::y#1 ] Uplift Scope [memset] 41.33: zp[2]:13 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 2.17: zp[2]:31 [ memset::end#0 ] 2: zp[2]:8 [ memset::num#2 ] 1.38: zp[1]:12 [ memset::c#4 ] 0: zp[2]:10 [ memset::str#3 ] Uplift Scope [bitmap_plot] 15: zp[1]:23 [ bitmap_plot::y#0 ] 4: zp[2]:26 [ bitmap_plot::$1 ] 4: zp[1]:30 [ bitmap_plot::$2 ] 3: zp[2]:21 [ bitmap_plot::x#0 ] 3: zp[2]:28 [ bitmap_plot::plotter#1 ] 1: zp[2]:24 [ bitmap_plot::plotter#0 ] -Uplift Scope [] 1.15: zp[1]:20 [ frame_cnt ] +Uplift Scope [] 1.11: zp[1]:20 [ frame_cnt ] Uplift Scope [bitmap_clear] Uplift Scope [init_irq] Uplift Scope [irq] @@ -3079,7 +3079,7 @@ FINAL SYMBOL TABLE (const byte*) bitmap_plot_yhi[(number) $100] = { fill( $100, 0) } (const byte*) bitmap_plot_ylo[(number) $100] = { fill( $100, 0) } (byte*) bitmap_screen -(byte) frame_cnt loadstore zp[1]:7 1.1538461538461537 +(byte) frame_cnt loadstore zp[1]:7 1.1111111111111112 (void()) init_irq() (label) init_irq::@return interrupt(HARDWARE_CLOBBER)(void()) irq() diff --git a/src/test/ref/bitmap-plot-0.sym b/src/test/ref/bitmap-plot-0.sym index 68870234a..3761b1930 100644 --- a/src/test/ref/bitmap-plot-0.sym +++ b/src/test/ref/bitmap-plot-0.sym @@ -75,7 +75,7 @@ (const byte*) bitmap_plot_yhi[(number) $100] = { fill( $100, 0) } (const byte*) bitmap_plot_ylo[(number) $100] = { fill( $100, 0) } (byte*) bitmap_screen -(byte) frame_cnt loadstore zp[1]:7 1.1538461538461537 +(byte) frame_cnt loadstore zp[1]:7 1.1111111111111112 (void()) init_irq() (label) init_irq::@return interrupt(HARDWARE_CLOBBER)(void()) irq() diff --git a/src/test/ref/bitmap-plot-1.log b/src/test/ref/bitmap-plot-1.log index bec9e3865..c68f7ac80 100644 --- a/src/test/ref/bitmap-plot-1.log +++ b/src/test/ref/bitmap-plot-1.log @@ -3292,7 +3292,7 @@ VARIABLE REGISTER WEIGHTS (word) divr16u::return#0 5.285714285714286 (word) divr16u::return#2 4.0 (word) divr16u::return#3 4.0 -(byte) frame_cnt loadstore 0.6521739130434783 +(byte) frame_cnt loadstore 0.6382978723404255 (void()) init_irq() interrupt(HARDWARE_CLOBBER)(void()) irq() (void()) main() @@ -5769,7 +5769,7 @@ Statement [217] if((word) divr16u::rem#6<(const word) sin16s_gen2::wavelength#0) Statement [219] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) sin16s_gen2::wavelength#0 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:3::sin16s_gen2:6::div32u16u:130::divr16u:198 [ frame_cnt divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:3::sin16s_gen2:6::div32u16u:130::divr16u:202 [ frame_cnt div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a Statement [223] (word) rem16u#1 ← (word) divr16u::rem#11 [ divr16u::return#0 rem16u#1 ] ( main:3::sin16s_gen2:6::div32u16u:130::divr16u:198 [ frame_cnt divr16u::return#0 rem16u#1 ] main:3::sin16s_gen2:6::div32u16u:130::divr16u:202 [ frame_cnt div32u16u::quotient_hi#0 divr16u::return#0 rem16u#1 ] ) always clobbers reg byte a Statement [225] *((const byte*) BGCOL) ← (const byte) WHITE [ frame_cnt ] ( [ frame_cnt ] ) always clobbers reg byte a -Statement [226] if((byte) 0==(byte) frame_cnt) goto irq::@1 [ ] ( [ ] ) always clobbers reg byte a +Statement [226] if((byte) 0==(byte) frame_cnt) goto irq::@1 [ frame_cnt ] ( [ frame_cnt ] ) always clobbers reg byte a Statement [228] *((const byte*) BGCOL) ← (const byte) BLACK [ ] ( [ ] ) always clobbers reg byte a Statement [229] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER [ ] ( [ ] ) always clobbers reg byte a Statement [230] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y @@ -5893,7 +5893,7 @@ Statement [217] if((word) divr16u::rem#6<(const word) sin16s_gen2::wavelength#0) Statement [219] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) sin16s_gen2::wavelength#0 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:3::sin16s_gen2:6::div32u16u:130::divr16u:198 [ frame_cnt divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:3::sin16s_gen2:6::div32u16u:130::divr16u:202 [ frame_cnt div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a Statement [223] (word) rem16u#1 ← (word) divr16u::rem#11 [ divr16u::return#0 rem16u#1 ] ( main:3::sin16s_gen2:6::div32u16u:130::divr16u:198 [ frame_cnt divr16u::return#0 rem16u#1 ] main:3::sin16s_gen2:6::div32u16u:130::divr16u:202 [ frame_cnt div32u16u::quotient_hi#0 divr16u::return#0 rem16u#1 ] ) always clobbers reg byte a Statement [225] *((const byte*) BGCOL) ← (const byte) WHITE [ frame_cnt ] ( [ frame_cnt ] ) always clobbers reg byte a -Statement [226] if((byte) 0==(byte) frame_cnt) goto irq::@1 [ ] ( [ ] ) always clobbers reg byte a +Statement [226] if((byte) 0==(byte) frame_cnt) goto irq::@1 [ frame_cnt ] ( [ frame_cnt ] ) always clobbers reg byte a Statement [228] *((const byte*) BGCOL) ← (const byte) BLACK [ ] ( [ ] ) always clobbers reg byte a Statement [229] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER [ ] ( [ ] ) always clobbers reg byte a Statement [230] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y @@ -6008,7 +6008,7 @@ Uplift Scope [mulu16_sel] 24: zp[2]:53 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu1 Uplift Scope [memset] 41.33: zp[2]:31 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 2.17: zp[2]:137 [ memset::end#0 ] 2: zp[2]:26 [ memset::num#2 ] 1.38: zp[1]:30 [ memset::c#4 ] 0: zp[2]:28 [ memset::str#3 ] Uplift Scope [bitmap_plot] 7.5: zp[1]:110 [ bitmap_plot::y#0 ] 4: zp[2]:115 [ bitmap_plot::$1 ] 4: zp[1]:119 [ bitmap_plot::$2 ] 3.75: zp[2]:111 [ bitmap_plot::x#0 ] 3: zp[2]:117 [ bitmap_plot::plotter#1 ] 1: zp[2]:113 [ bitmap_plot::plotter#0 ] Uplift Scope [div32u16u] 4: zp[4]:143 [ div32u16u::return#2 ] 4: zp[2]:215 [ div32u16u::quotient_lo#0 ] 1.33: zp[4]:217 [ div32u16u::return#0 ] 0.8: zp[2]:211 [ div32u16u::quotient_hi#0 ] -Uplift Scope [] 0.8: zp[2]:223 [ rem16u#1 ] 0.65: zp[1]:65 [ frame_cnt ] +Uplift Scope [] 0.8: zp[2]:223 [ rem16u#1 ] 0.64: zp[1]:65 [ frame_cnt ] Uplift Scope [bitmap_clear] Uplift Scope [init_irq] Uplift Scope [irq] @@ -8073,7 +8073,7 @@ FINAL SYMBOL TABLE (word) divr16u::return#0 return zp[2]:12 5.285714285714286 (word) divr16u::return#2 return zp[2]:12 4.0 (word) divr16u::return#3 return zp[2]:12 4.0 -(byte) frame_cnt loadstore zp[1]:14 0.6521739130434783 +(byte) frame_cnt loadstore zp[1]:14 0.6382978723404255 (void()) init_irq() (label) init_irq::@return interrupt(HARDWARE_CLOBBER)(void()) irq() diff --git a/src/test/ref/bitmap-plot-1.sym b/src/test/ref/bitmap-plot-1.sym index e9e3c7fdf..bc6e44940 100644 --- a/src/test/ref/bitmap-plot-1.sym +++ b/src/test/ref/bitmap-plot-1.sym @@ -129,7 +129,7 @@ (word) divr16u::return#0 return zp[2]:12 5.285714285714286 (word) divr16u::return#2 return zp[2]:12 4.0 (word) divr16u::return#3 return zp[2]:12 4.0 -(byte) frame_cnt loadstore zp[1]:14 0.6521739130434783 +(byte) frame_cnt loadstore zp[1]:14 0.6382978723404255 (void()) init_irq() (label) init_irq::@return interrupt(HARDWARE_CLOBBER)(void()) irq() diff --git a/src/test/ref/bitmap-plot-2.log b/src/test/ref/bitmap-plot-2.log index 83556de02..09fda018f 100644 --- a/src/test/ref/bitmap-plot-2.log +++ b/src/test/ref/bitmap-plot-2.log @@ -3494,7 +3494,7 @@ VARIABLE REGISTER WEIGHTS (word) divr16u::return#0 5.285714285714286 (word) divr16u::return#2 4.0 (word) divr16u::return#3 4.0 -(byte) frame_cnt loadstore 0.5555555555555556 +(byte) frame_cnt loadstore 0.5454545454545455 (void()) init_irq() interrupt(HARDWARE_CLOBBER)(void()) irq() (void()) main() @@ -6045,7 +6045,7 @@ Statement [226] if((word) divr16u::rem#6<(const word) sin16s_gen2::wavelength#0) Statement [228] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) sin16s_gen2::wavelength#0 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:3::sin16s_gen2:6::div32u16u:139::divr16u:207 [ frame_cnt divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:3::sin16s_gen2:6::div32u16u:139::divr16u:211 [ frame_cnt div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a Statement [232] (word) rem16u#1 ← (word) divr16u::rem#11 [ divr16u::return#0 rem16u#1 ] ( main:3::sin16s_gen2:6::div32u16u:139::divr16u:207 [ frame_cnt divr16u::return#0 rem16u#1 ] main:3::sin16s_gen2:6::div32u16u:139::divr16u:211 [ frame_cnt div32u16u::quotient_hi#0 divr16u::return#0 rem16u#1 ] ) always clobbers reg byte a Statement [234] *((const byte*) BGCOL) ← (const byte) WHITE [ frame_cnt ] ( [ frame_cnt ] ) always clobbers reg byte a -Statement [235] if((byte) 0==(byte) frame_cnt) goto irq::@1 [ ] ( [ ] ) always clobbers reg byte a +Statement [235] if((byte) 0==(byte) frame_cnt) goto irq::@1 [ frame_cnt ] ( [ frame_cnt ] ) always clobbers reg byte a Statement [237] *((const byte*) BGCOL) ← (const byte) BLACK [ ] ( [ ] ) always clobbers reg byte a Statement [238] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER [ ] ( [ ] ) always clobbers reg byte a Statement [239] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y @@ -6179,7 +6179,7 @@ Statement [226] if((word) divr16u::rem#6<(const word) sin16s_gen2::wavelength#0) Statement [228] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) sin16s_gen2::wavelength#0 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:3::sin16s_gen2:6::div32u16u:139::divr16u:207 [ frame_cnt divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:3::sin16s_gen2:6::div32u16u:139::divr16u:211 [ frame_cnt div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a Statement [232] (word) rem16u#1 ← (word) divr16u::rem#11 [ divr16u::return#0 rem16u#1 ] ( main:3::sin16s_gen2:6::div32u16u:139::divr16u:207 [ frame_cnt divr16u::return#0 rem16u#1 ] main:3::sin16s_gen2:6::div32u16u:139::divr16u:211 [ frame_cnt div32u16u::quotient_hi#0 divr16u::return#0 rem16u#1 ] ) always clobbers reg byte a Statement [234] *((const byte*) BGCOL) ← (const byte) WHITE [ frame_cnt ] ( [ frame_cnt ] ) always clobbers reg byte a -Statement [235] if((byte) 0==(byte) frame_cnt) goto irq::@1 [ ] ( [ ] ) always clobbers reg byte a +Statement [235] if((byte) 0==(byte) frame_cnt) goto irq::@1 [ frame_cnt ] ( [ frame_cnt ] ) always clobbers reg byte a Statement [237] *((const byte*) BGCOL) ← (const byte) BLACK [ ] ( [ ] ) always clobbers reg byte a Statement [238] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER [ ] ( [ ] ) always clobbers reg byte a Statement [239] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y @@ -6296,7 +6296,7 @@ Uplift Scope [mulu16_sel] 24: zp[2]:56 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu1 Uplift Scope [memset] 41.33: zp[2]:34 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 2.17: zp[2]:136 [ memset::end#0 ] 2: zp[2]:29 [ memset::num#2 ] 1.38: zp[1]:33 [ memset::c#4 ] 0: zp[2]:31 [ memset::str#3 ] Uplift Scope [bitmap_plot] 7.5: zp[1]:109 [ bitmap_plot::y#0 ] 4: zp[2]:114 [ bitmap_plot::$1 ] 4: zp[1]:118 [ bitmap_plot::$2 ] 3.75: zp[2]:110 [ bitmap_plot::x#0 ] 3: zp[2]:116 [ bitmap_plot::plotter#1 ] 1: zp[2]:112 [ bitmap_plot::plotter#0 ] Uplift Scope [div32u16u] 4: zp[4]:142 [ div32u16u::return#2 ] 4: zp[2]:214 [ div32u16u::quotient_lo#0 ] 1.33: zp[4]:216 [ div32u16u::return#0 ] 0.8: zp[2]:210 [ div32u16u::quotient_hi#0 ] -Uplift Scope [] 0.8: zp[2]:222 [ rem16u#1 ] 0.56: zp[1]:68 [ frame_cnt ] +Uplift Scope [] 0.8: zp[2]:222 [ rem16u#1 ] 0.55: zp[1]:68 [ frame_cnt ] Uplift Scope [bitmap_clear] Uplift Scope [init_irq] Uplift Scope [irq] @@ -8449,7 +8449,7 @@ FINAL SYMBOL TABLE (word) divr16u::return#0 return zp[2]:14 5.285714285714286 (word) divr16u::return#2 return zp[2]:14 4.0 (word) divr16u::return#3 return zp[2]:14 4.0 -(byte) frame_cnt loadstore zp[1]:16 0.5555555555555556 +(byte) frame_cnt loadstore zp[1]:16 0.5454545454545455 (void()) init_irq() (label) init_irq::@return interrupt(HARDWARE_CLOBBER)(void()) irq() diff --git a/src/test/ref/bitmap-plot-2.sym b/src/test/ref/bitmap-plot-2.sym index 63229e477..3bab7c864 100644 --- a/src/test/ref/bitmap-plot-2.sym +++ b/src/test/ref/bitmap-plot-2.sym @@ -130,7 +130,7 @@ (word) divr16u::return#0 return zp[2]:14 5.285714285714286 (word) divr16u::return#2 return zp[2]:14 4.0 (word) divr16u::return#3 return zp[2]:14 4.0 -(byte) frame_cnt loadstore zp[1]:16 0.5555555555555556 +(byte) frame_cnt loadstore zp[1]:16 0.5454545454545455 (void()) init_irq() (label) init_irq::@return interrupt(HARDWARE_CLOBBER)(void()) irq() diff --git a/src/test/ref/clobber-a-problem.log b/src/test/ref/clobber-a-problem.log index 6a30ce549..336b9092d 100644 --- a/src/test/ref/clobber-a-problem.log +++ b/src/test/ref/clobber-a-problem.log @@ -169,7 +169,7 @@ interrupt(HARDWARE_CLOBBER)(void()) irq() (byte) irq::raster_next#0 2.6666666666666665 (byte) irq::raster_next#1 4.0 (byte) irq::raster_next#2 6.0 -(byte) irq_raster_next loadstore 8.0 +(byte) irq_raster_next loadstore 4.0 (void()) main() Initial phi equivalence classes @@ -293,7 +293,7 @@ irq: { REGISTER UPLIFT POTENTIAL REGISTERS Statement [1] (byte) irq_raster_next ← (byte) 0 [ ] ( [ ] ) always clobbers reg byte a Statement [5] *((const void()**) KERNEL_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) irq() [ ] ( main:3 [ ] ) always clobbers reg byte a -Statement [7] *((const byte*) BORDERCOL) ← (const byte) DARK_GREY [ ] ( [ ] ) always clobbers reg byte a +Statement [7] *((const byte*) BORDERCOL) ← (const byte) DARK_GREY [ irq_raster_next ] ( [ irq_raster_next ] ) always clobbers reg byte a Statement [8] (byte) irq_raster_next ← (byte) irq_raster_next + (byte) $15 [ irq_raster_next ] ( [ irq_raster_next ] ) always clobbers reg byte a reg byte x Statement [15] *((const byte*) BORDERCOL) ← (const byte) BLACK [ ] ( [ ] ) always clobbers reg byte a Statement [16] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y @@ -303,7 +303,7 @@ Potential registers zp[1]:4 [ irq::$0 ] : zp[1]:4 , reg byte a , reg byte x , re REGISTER UPLIFT SCOPES Uplift Scope [irq] 12.67: zp[1]:2 [ irq::raster_next#2 irq::raster_next#0 irq::raster_next#1 ] 4: zp[1]:4 [ irq::$0 ] -Uplift Scope [] 8: zp[1]:3 [ irq_raster_next ] +Uplift Scope [] 4: zp[1]:3 [ irq_raster_next ] Uplift Scope [main] Uplifting [irq] best 246 combination reg byte x [ irq::raster_next#2 irq::raster_next#0 irq::raster_next#1 ] reg byte a [ irq::$0 ] @@ -460,7 +460,7 @@ interrupt(HARDWARE_CLOBBER)(void()) irq() (byte) irq::raster_next#0 reg byte x 2.6666666666666665 (byte) irq::raster_next#1 reg byte x 4.0 (byte) irq::raster_next#2 reg byte x 6.0 -(byte) irq_raster_next loadstore zp[1]:2 8.0 +(byte) irq_raster_next loadstore zp[1]:2 4.0 (void()) main() (label) main::@return diff --git a/src/test/ref/clobber-a-problem.sym b/src/test/ref/clobber-a-problem.sym index 945c7e753..eb2dc41de 100644 --- a/src/test/ref/clobber-a-problem.sym +++ b/src/test/ref/clobber-a-problem.sym @@ -16,7 +16,7 @@ interrupt(HARDWARE_CLOBBER)(void()) irq() (byte) irq::raster_next#0 reg byte x 2.6666666666666665 (byte) irq::raster_next#1 reg byte x 4.0 (byte) irq::raster_next#2 reg byte x 6.0 -(byte) irq_raster_next loadstore zp[1]:2 8.0 +(byte) irq_raster_next loadstore zp[1]:2 4.0 (void()) main() (label) main::@return diff --git a/src/test/ref/comparison-rewriting.asm b/src/test/ref/comparison-rewriting.asm index 4cfc629ac..0d41b73d3 100644 --- a/src/test/ref/comparison-rewriting.asm +++ b/src/test/ref/comparison-rewriting.asm @@ -3,11 +3,12 @@ :BasicUpstart(main) .pc = $80d "Program" main: { + .label SCREEN = $400 .label sc = 2 .label screen = 4 - lda #<$400 + lda #$400 + lda #>SCREEN sta.z sc+1 __b1: lda #' ' @@ -18,19 +19,19 @@ main: { inc.z sc+1 !: lda.z sc+1 - cmp #>$400+$3e8+1 + cmp #>SCREEN+$3e8+1 bne __b1 lda.z sc - cmp #<$400+$3e8+1 + cmp #$400 + lda #>SCREEN sta.z screen+1 ldx #0 __b4: @@ -84,7 +85,7 @@ main: { jmp __b4 __b3: lda header,x - sta $400,x + sta SCREEN,x inx jmp __b2 header: .text " < <= == >= >" diff --git a/src/test/ref/comparison-rewriting.cfg b/src/test/ref/comparison-rewriting.cfg index 13d990a39..957568c84 100644 --- a/src/test/ref/comparison-rewriting.cfg +++ b/src/test/ref/comparison-rewriting.cfg @@ -13,17 +13,17 @@ main: scope:[main] from @1 [4] phi() to:main::@1 main::@1: scope:[main] from main main::@1 - [5] (byte*) main::sc#2 ← phi( main/(byte*) 1024 main::@1/(byte*) main::sc#1 ) + [5] (byte*) main::sc#2 ← phi( main/(const byte*) main::SCREEN main::@1/(byte*) main::sc#1 ) [6] *((byte*) main::sc#2) ← (byte) ' ' [7] (byte*) main::sc#1 ← ++ (byte*) main::sc#2 - [8] if((byte*) main::sc#1!=(byte*) 1024+(word) $3e8+(byte) 1) goto main::@1 + [8] if((byte*) main::sc#1!=(const byte*) main::SCREEN+(word) $3e8+(byte) 1) goto main::@1 to:main::@2 main::@2: scope:[main] from main::@1 main::@3 [9] (byte) main::i#2 ← phi( main::@1/(byte) 0 main::@3/(byte) main::i#1 ) [10] if(*((const byte*) main::header + (byte) main::i#2)!=(byte) 0) goto main::@3 to:main::@4 main::@4: scope:[main] from main::@10 main::@2 - [11] (byte*) main::screen#11 ← phi( main::@10/(byte*) main::screen#1 main::@2/(byte*) 1024 ) + [11] (byte*) main::screen#2 ← phi( main::@10/(byte*) main::screen#1 main::@2/(const byte*) main::SCREEN ) [11] (byte) main::i1#10 ← phi( main::@10/(byte) main::i1#1 main::@2/(byte) 0 ) [12] if((byte) main::i1#10<(byte) 9+(byte) 1) goto main::@5 to:main::@return @@ -31,9 +31,9 @@ main::@return: scope:[main] from main::@4 [13] return to:@return main::@5: scope:[main] from main::@4 - [14] (byte*) main::screen#1 ← (byte*) main::screen#11 + (byte) $28 - [15] (byte~) main::$4 ← (byte) '0' + (byte) main::i1#10 - [16] *((byte*) main::screen#1) ← (byte~) main::$4 + [14] (byte*) main::screen#1 ← (byte*) main::screen#2 + (byte) $28 + [15] (byte~) main::$3 ← (byte) '0' + (byte) main::i1#10 + [16] *((byte*) main::screen#1) ← (byte~) main::$3 [17] if((byte) main::i1#10>=(byte) 5) goto main::@6 to:main::@11 main::@11: scope:[main] from main::@5 @@ -67,6 +67,6 @@ main::@10: scope:[main] from main::@15 main::@9 [27] (byte) main::i1#1 ← ++ (byte) main::i1#10 to:main::@4 main::@3: scope:[main] from main::@2 - [28] *((byte*) 1024 + (byte) main::i#2) ← *((const byte*) main::header + (byte) main::i#2) + [28] *((const byte*) main::SCREEN + (byte) main::i#2) ← *((const byte*) main::header + (byte) main::i#2) [29] (byte) main::i#1 ← ++ (byte) main::i#2 to:main::@2 diff --git a/src/test/ref/comparison-rewriting.log b/src/test/ref/comparison-rewriting.log index f3a5e22e2..2fad46276 100644 --- a/src/test/ref/comparison-rewriting.log +++ b/src/test/ref/comparison-rewriting.log @@ -12,111 +12,105 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte*) main::screen#0 ← (byte*)(number) $400 - (byte*~) main::$0 ← (byte*) main::screen#0 + (number) $3e8 - (byte*) main::sc#0 ← (byte*) main::screen#0 + (byte*) main::sc#0 ← (const byte*) main::SCREEN to:main::@1 main::@1: scope:[main] from main main::@1 - (byte*) main::screen#2 ← phi( main/(byte*) main::screen#0 main::@1/(byte*) main::screen#2 ) (byte*) main::sc#2 ← phi( main/(byte*) main::sc#0 main::@1/(byte*) main::sc#1 ) *((byte*) main::sc#2) ← (byte) ' ' - (byte*) main::sc#1 ← (byte*) main::sc#2 + rangenext(main::screen#2,main::$0) - (bool~) main::$1 ← (byte*) main::sc#1 != rangelast(main::screen#2,main::$0) - if((bool~) main::$1) goto main::@1 + (byte*) main::sc#1 ← (byte*) main::sc#2 + rangenext(main::SCREEN,main::SCREEN+$3e8) + (bool~) main::$0 ← (byte*) main::sc#1 != rangelast(main::SCREEN,main::SCREEN+$3e8) + if((bool~) main::$0) goto main::@1 to:main::@2 main::@2: scope:[main] from main::@1 - (byte*) main::screen#16 ← phi( main::@1/(byte*) main::screen#2 ) (byte) main::i#0 ← (byte) 0 to:main::@3 main::@3: scope:[main] from main::@2 main::@4 - (byte*) main::screen#10 ← phi( main::@2/(byte*) main::screen#16 main::@4/(byte*) main::screen#3 ) (byte) main::i#2 ← phi( main::@2/(byte) main::i#0 main::@4/(byte) main::i#1 ) - (bool~) main::$2 ← *((const byte*) main::header + (byte) main::i#2) != (number) 0 - if((bool~) main::$2) goto main::@4 + (bool~) main::$1 ← *((const byte*) main::header + (byte) main::i#2) != (number) 0 + if((bool~) main::$1) goto main::@4 to:main::@5 main::@4: scope:[main] from main::@3 - (byte*) main::screen#3 ← phi( main::@3/(byte*) main::screen#10 ) (byte) main::i#3 ← phi( main::@3/(byte) main::i#2 ) - *((byte*) main::screen#3 + (byte) main::i#3) ← *((const byte*) main::header + (byte) main::i#3) + *((const byte*) main::SCREEN + (byte) main::i#3) ← *((const byte*) main::header + (byte) main::i#3) (byte) main::i#1 ← ++ (byte) main::i#3 to:main::@3 main::@5: scope:[main] from main::@3 - (byte*) main::screen#18 ← phi( main::@3/(byte*) main::screen#10 ) + (byte*) main::screen#0 ← (const byte*) main::SCREEN (byte) main::i1#0 ← (byte) 0 to:main::@9 main::@9: scope:[main] from main::@16 main::@5 - (byte*) main::screen#11 ← phi( main::@16/(byte*) main::screen#17 main::@5/(byte*) main::screen#18 ) + (byte*) main::screen#8 ← phi( main::@16/(byte*) main::screen#13 main::@5/(byte*) main::screen#0 ) (byte) main::i1#2 ← phi( main::@16/(byte) main::i1#1 main::@5/(byte) main::i1#0 ) - (bool~) main::$3 ← (byte) main::i1#2 <= (number) 9 - if((bool~) main::$3) goto main::@10 + (bool~) main::$2 ← (byte) main::i1#2 <= (number) 9 + if((bool~) main::$2) goto main::@10 to:main::@return main::@10: scope:[main] from main::@9 (byte) main::i1#3 ← phi( main::@9/(byte) main::i1#2 ) - (byte*) main::screen#4 ← phi( main::@9/(byte*) main::screen#11 ) - (byte*) main::screen#1 ← (byte*) main::screen#4 + (number) $28 - (byte~) main::$4 ← (byte) '0' + (byte) main::i1#3 - *((byte*) main::screen#1 + (number) 0) ← (byte~) main::$4 - (bool~) main::$5 ← (byte) main::i1#3 < (number) 5 - (bool~) main::$6 ← ! (bool~) main::$5 - if((bool~) main::$6) goto main::@12 + (byte*) main::screen#2 ← phi( main::@9/(byte*) main::screen#8 ) + (byte*) main::screen#1 ← (byte*) main::screen#2 + (number) $28 + (byte~) main::$3 ← (byte) '0' + (byte) main::i1#3 + *((byte*) main::screen#1 + (number) 0) ← (byte~) main::$3 + (bool~) main::$4 ← (byte) main::i1#3 < (number) 5 + (bool~) main::$5 ← ! (bool~) main::$4 + if((bool~) main::$5) goto main::@12 to:main::@19 main::@12: scope:[main] from main::@10 main::@19 - (byte*) main::screen#12 ← phi( main::@10/(byte*) main::screen#1 main::@19/(byte*) main::screen#5 ) + (byte*) main::screen#9 ← phi( main::@10/(byte*) main::screen#1 main::@19/(byte*) main::screen#3 ) (byte) main::i1#4 ← phi( main::@10/(byte) main::i1#3 main::@19/(byte) main::i1#9 ) - (bool~) main::$7 ← (byte) main::i1#4 <= (number) 5 - (bool~) main::$8 ← ! (bool~) main::$7 - if((bool~) main::$8) goto main::@13 + (bool~) main::$6 ← (byte) main::i1#4 <= (number) 5 + (bool~) main::$7 ← ! (bool~) main::$6 + if((bool~) main::$7) goto main::@13 to:main::@20 main::@19: scope:[main] from main::@10 (byte) main::i1#9 ← phi( main::@10/(byte) main::i1#3 ) - (byte*) main::screen#5 ← phi( main::@10/(byte*) main::screen#1 ) - *((byte*) main::screen#5 + (number) 2) ← (byte) '+' + (byte*) main::screen#3 ← phi( main::@10/(byte*) main::screen#1 ) + *((byte*) main::screen#3 + (number) 2) ← (byte) '+' to:main::@12 main::@13: scope:[main] from main::@12 main::@20 - (byte*) main::screen#13 ← phi( main::@12/(byte*) main::screen#12 main::@20/(byte*) main::screen#6 ) + (byte*) main::screen#10 ← phi( main::@12/(byte*) main::screen#9 main::@20/(byte*) main::screen#4 ) (byte) main::i1#5 ← phi( main::@12/(byte) main::i1#4 main::@20/(byte) main::i1#10 ) - (bool~) main::$9 ← (byte) main::i1#5 == (number) 5 - (bool~) main::$10 ← ! (bool~) main::$9 - if((bool~) main::$10) goto main::@14 + (bool~) main::$8 ← (byte) main::i1#5 == (number) 5 + (bool~) main::$9 ← ! (bool~) main::$8 + if((bool~) main::$9) goto main::@14 to:main::@21 main::@20: scope:[main] from main::@12 (byte) main::i1#10 ← phi( main::@12/(byte) main::i1#4 ) - (byte*) main::screen#6 ← phi( main::@12/(byte*) main::screen#12 ) - *((byte*) main::screen#6 + (number) 5) ← (byte) '+' + (byte*) main::screen#4 ← phi( main::@12/(byte*) main::screen#9 ) + *((byte*) main::screen#4 + (number) 5) ← (byte) '+' to:main::@13 main::@14: scope:[main] from main::@13 main::@21 - (byte*) main::screen#14 ← phi( main::@13/(byte*) main::screen#13 main::@21/(byte*) main::screen#7 ) + (byte*) main::screen#11 ← phi( main::@13/(byte*) main::screen#10 main::@21/(byte*) main::screen#5 ) (byte) main::i1#6 ← phi( main::@13/(byte) main::i1#5 main::@21/(byte) main::i1#11 ) - (bool~) main::$11 ← (byte) main::i1#6 >= (number) 5 - (bool~) main::$12 ← ! (bool~) main::$11 - if((bool~) main::$12) goto main::@15 + (bool~) main::$10 ← (byte) main::i1#6 >= (number) 5 + (bool~) main::$11 ← ! (bool~) main::$10 + if((bool~) main::$11) goto main::@15 to:main::@22 main::@21: scope:[main] from main::@13 (byte) main::i1#11 ← phi( main::@13/(byte) main::i1#5 ) - (byte*) main::screen#7 ← phi( main::@13/(byte*) main::screen#13 ) - *((byte*) main::screen#7 + (number) 8) ← (byte) '+' + (byte*) main::screen#5 ← phi( main::@13/(byte*) main::screen#10 ) + *((byte*) main::screen#5 + (number) 8) ← (byte) '+' to:main::@14 main::@15: scope:[main] from main::@14 main::@22 - (byte*) main::screen#15 ← phi( main::@14/(byte*) main::screen#14 main::@22/(byte*) main::screen#8 ) + (byte*) main::screen#12 ← phi( main::@14/(byte*) main::screen#11 main::@22/(byte*) main::screen#6 ) (byte) main::i1#7 ← phi( main::@14/(byte) main::i1#6 main::@22/(byte) main::i1#12 ) - (bool~) main::$13 ← (byte) main::i1#7 > (number) 5 - (bool~) main::$14 ← ! (bool~) main::$13 - if((bool~) main::$14) goto main::@16 + (bool~) main::$12 ← (byte) main::i1#7 > (number) 5 + (bool~) main::$13 ← ! (bool~) main::$12 + if((bool~) main::$13) goto main::@16 to:main::@23 main::@22: scope:[main] from main::@14 (byte) main::i1#12 ← phi( main::@14/(byte) main::i1#6 ) - (byte*) main::screen#8 ← phi( main::@14/(byte*) main::screen#14 ) - *((byte*) main::screen#8 + (number) $b) ← (byte) '+' + (byte*) main::screen#6 ← phi( main::@14/(byte*) main::screen#11 ) + *((byte*) main::screen#6 + (number) $b) ← (byte) '+' to:main::@15 main::@16: scope:[main] from main::@15 main::@23 - (byte*) main::screen#17 ← phi( main::@15/(byte*) main::screen#15 main::@23/(byte*) main::screen#9 ) + (byte*) main::screen#13 ← phi( main::@15/(byte*) main::screen#12 main::@23/(byte*) main::screen#7 ) (byte) main::i1#8 ← phi( main::@15/(byte) main::i1#7 main::@23/(byte) main::i1#13 ) (byte) main::i1#1 ← ++ (byte) main::i1#8 to:main::@9 main::@23: scope:[main] from main::@15 (byte) main::i1#13 ← phi( main::@15/(byte) main::i1#7 ) - (byte*) main::screen#9 ← phi( main::@15/(byte*) main::screen#15 ) - *((byte*) main::screen#9 + (number) $e) ← (byte) '+' + (byte*) main::screen#7 ← phi( main::@15/(byte*) main::screen#12 ) + *((byte*) main::screen#7 + (number) $e) ← (byte) '+' to:main::@16 main::@return: scope:[main] from main::@9 return @@ -134,16 +128,15 @@ SYMBOL TABLE SSA (label) @begin (label) @end (void()) main() -(byte*~) main::$0 +(bool~) main::$0 (bool~) main::$1 (bool~) main::$10 (bool~) main::$11 (bool~) main::$12 (bool~) main::$13 -(bool~) main::$14 (bool~) main::$2 -(bool~) main::$3 -(byte~) main::$4 +(byte~) main::$3 +(bool~) main::$4 (bool~) main::$5 (bool~) main::$6 (bool~) main::$7 @@ -167,6 +160,7 @@ SYMBOL TABLE SSA (label) main::@5 (label) main::@9 (label) main::@return +(const byte*) main::SCREEN = (byte*)(number) $400 (const byte*) main::header[] = (byte*) " < <= == >= >" (byte) main::i (byte) main::i#0 @@ -199,11 +193,6 @@ SYMBOL TABLE SSA (byte*) main::screen#11 (byte*) main::screen#12 (byte*) main::screen#13 -(byte*) main::screen#14 -(byte*) main::screen#15 -(byte*) main::screen#16 -(byte*) main::screen#17 -(byte*) main::screen#18 (byte*) main::screen#2 (byte*) main::screen#3 (byte*) main::screen#4 @@ -213,21 +202,21 @@ SYMBOL TABLE SSA (byte*) main::screen#8 (byte*) main::screen#9 -Adding number conversion cast (unumber) $3e8 in (byte*~) main::$0 ← (byte*) main::screen#0 + (number) $3e8 -Adding number conversion cast (unumber) 0 in (bool~) main::$2 ← *((const byte*) main::header + (byte) main::i#2) != (number) 0 -Adding number conversion cast (unumber) 9 in (bool~) main::$3 ← (byte) main::i1#2 <= (number) 9 -Adding number conversion cast (unumber) $28 in (byte*) main::screen#1 ← (byte*) main::screen#4 + (number) $28 -Adding number conversion cast (unumber) 0 in *((byte*) main::screen#1 + (number) 0) ← (byte~) main::$4 -Adding number conversion cast (unumber) 5 in (bool~) main::$5 ← (byte) main::i1#3 < (number) 5 -Adding number conversion cast (unumber) 5 in (bool~) main::$7 ← (byte) main::i1#4 <= (number) 5 -Adding number conversion cast (unumber) 2 in *((byte*) main::screen#5 + (number) 2) ← (byte) '+' -Adding number conversion cast (unumber) 5 in (bool~) main::$9 ← (byte) main::i1#5 == (number) 5 -Adding number conversion cast (unumber) 5 in *((byte*) main::screen#6 + (number) 5) ← (byte) '+' -Adding number conversion cast (unumber) 5 in (bool~) main::$11 ← (byte) main::i1#6 >= (number) 5 -Adding number conversion cast (unumber) 8 in *((byte*) main::screen#7 + (number) 8) ← (byte) '+' -Adding number conversion cast (unumber) 5 in (bool~) main::$13 ← (byte) main::i1#7 > (number) 5 -Adding number conversion cast (unumber) $b in *((byte*) main::screen#8 + (number) $b) ← (byte) '+' -Adding number conversion cast (unumber) $e in *((byte*) main::screen#9 + (number) $e) ← (byte) '+' +Adding number conversion cast (unumber) $3e8 in (byte*) main::sc#1 ← (byte*) main::sc#2 + rangenext(main::SCREEN,main::SCREEN+$3e8) +Adding number conversion cast (unumber) 0 in (bool~) main::$1 ← *((const byte*) main::header + (byte) main::i#2) != (number) 0 +Adding number conversion cast (unumber) 9 in (bool~) main::$2 ← (byte) main::i1#2 <= (number) 9 +Adding number conversion cast (unumber) $28 in (byte*) main::screen#1 ← (byte*) main::screen#2 + (number) $28 +Adding number conversion cast (unumber) 0 in *((byte*) main::screen#1 + (number) 0) ← (byte~) main::$3 +Adding number conversion cast (unumber) 5 in (bool~) main::$4 ← (byte) main::i1#3 < (number) 5 +Adding number conversion cast (unumber) 5 in (bool~) main::$6 ← (byte) main::i1#4 <= (number) 5 +Adding number conversion cast (unumber) 2 in *((byte*) main::screen#3 + (number) 2) ← (byte) '+' +Adding number conversion cast (unumber) 5 in (bool~) main::$8 ← (byte) main::i1#5 == (number) 5 +Adding number conversion cast (unumber) 5 in *((byte*) main::screen#4 + (number) 5) ← (byte) '+' +Adding number conversion cast (unumber) 5 in (bool~) main::$10 ← (byte) main::i1#6 >= (number) 5 +Adding number conversion cast (unumber) 8 in *((byte*) main::screen#5 + (number) 8) ← (byte) '+' +Adding number conversion cast (unumber) 5 in (bool~) main::$12 ← (byte) main::i1#7 > (number) 5 +Adding number conversion cast (unumber) $b in *((byte*) main::screen#6 + (number) $b) ← (byte) '+' +Adding number conversion cast (unumber) $e in *((byte*) main::screen#7 + (number) $e) ← (byte) '+' Successful SSA optimization PassNAddNumberTypeConversions Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast $3e8 @@ -262,52 +251,50 @@ Finalized unsigned number type (byte) 5 Finalized unsigned number type (byte) $b Finalized unsigned number type (byte) $e Successful SSA optimization PassNFinalizeNumberTypeConversions -Inversing boolean not [26] (bool~) main::$6 ← (byte) main::i1#3 >= (byte) 5 from [25] (bool~) main::$5 ← (byte) main::i1#3 < (byte) 5 -Inversing boolean not [30] (bool~) main::$8 ← (byte) main::i1#4 > (byte) 5 from [29] (bool~) main::$7 ← (byte) main::i1#4 <= (byte) 5 -Inversing boolean not [36] (bool~) main::$10 ← (byte) main::i1#5 != (byte) 5 from [35] (bool~) main::$9 ← (byte) main::i1#5 == (byte) 5 -Inversing boolean not [42] (bool~) main::$12 ← (byte) main::i1#6 < (byte) 5 from [41] (bool~) main::$11 ← (byte) main::i1#6 >= (byte) 5 -Inversing boolean not [48] (bool~) main::$14 ← (byte) main::i1#7 <= (byte) 5 from [47] (bool~) main::$13 ← (byte) main::i1#7 > (byte) 5 +Inversing boolean not [23] (bool~) main::$5 ← (byte) main::i1#3 >= (byte) 5 from [22] (bool~) main::$4 ← (byte) main::i1#3 < (byte) 5 +Inversing boolean not [27] (bool~) main::$7 ← (byte) main::i1#4 > (byte) 5 from [26] (bool~) main::$6 ← (byte) main::i1#4 <= (byte) 5 +Inversing boolean not [33] (bool~) main::$9 ← (byte) main::i1#5 != (byte) 5 from [32] (bool~) main::$8 ← (byte) main::i1#5 == (byte) 5 +Inversing boolean not [39] (bool~) main::$11 ← (byte) main::i1#6 < (byte) 5 from [38] (bool~) main::$10 ← (byte) main::i1#6 >= (byte) 5 +Inversing boolean not [45] (bool~) main::$13 ← (byte) main::i1#7 <= (byte) 5 from [44] (bool~) main::$12 ← (byte) main::i1#7 > (byte) 5 Successful SSA optimization Pass2UnaryNotSimplification -Alias (byte*) main::sc#0 = (byte*) main::screen#0 -Alias (byte*) main::screen#16 = (byte*) main::screen#2 Alias (byte) main::i#2 = (byte) main::i#3 -Alias (byte*) main::screen#10 = (byte*) main::screen#3 (byte*) main::screen#18 -Alias (byte*) main::screen#11 = (byte*) main::screen#4 +Alias (byte*) main::screen#2 = (byte*) main::screen#8 Alias (byte) main::i1#2 = (byte) main::i1#3 (byte) main::i1#9 -Alias (byte*) main::screen#1 = (byte*) main::screen#5 -Alias (byte*) main::screen#12 = (byte*) main::screen#6 +Alias (byte*) main::screen#1 = (byte*) main::screen#3 +Alias (byte*) main::screen#4 = (byte*) main::screen#9 Alias (byte) main::i1#10 = (byte) main::i1#4 -Alias (byte*) main::screen#13 = (byte*) main::screen#7 +Alias (byte*) main::screen#10 = (byte*) main::screen#5 Alias (byte) main::i1#11 = (byte) main::i1#5 -Alias (byte*) main::screen#14 = (byte*) main::screen#8 +Alias (byte*) main::screen#11 = (byte*) main::screen#6 Alias (byte) main::i1#12 = (byte) main::i1#6 -Alias (byte*) main::screen#15 = (byte*) main::screen#9 +Alias (byte*) main::screen#12 = (byte*) main::screen#7 Alias (byte) main::i1#13 = (byte) main::i1#7 Successful SSA optimization Pass2AliasElimination Alias (byte) main::i1#10 = (byte) main::i1#2 (byte) main::i1#11 (byte) main::i1#12 (byte) main::i1#13 (byte) main::i1#8 -Alias (byte*) main::screen#1 = (byte*) main::screen#12 (byte*) main::screen#13 (byte*) main::screen#14 (byte*) main::screen#15 (byte*) main::screen#17 +Alias (byte*) main::screen#1 = (byte*) main::screen#4 (byte*) main::screen#10 (byte*) main::screen#11 (byte*) main::screen#12 (byte*) main::screen#13 Successful SSA optimization Pass2AliasElimination -Identical Phi Values (byte*) main::screen#16 (byte*) main::sc#0 -Identical Phi Values (byte*) main::screen#10 (byte*) main::screen#16 -Successful SSA optimization Pass2IdenticalPhiElimination -Simple Condition (bool~) main::$1 [7] if((byte*) main::sc#1!=rangelast(main::sc#0,main::$0)) goto main::@1 -Simple Condition (bool~) main::$2 [12] if(*((const byte*) main::header + (byte) main::i#2)!=(byte) 0) goto main::@4 -Simple Condition (bool~) main::$3 [20] if((byte) main::i1#10<=(byte) 9) goto main::@10 -Simple Condition (bool~) main::$6 [27] if((byte) main::i1#10>=(byte) 5) goto main::@12 -Simple Condition (bool~) main::$8 [31] if((byte) main::i1#10>(byte) 5) goto main::@13 -Simple Condition (bool~) main::$10 [37] if((byte) main::i1#10!=(byte) 5) goto main::@14 -Simple Condition (bool~) main::$12 [43] if((byte) main::i1#10<(byte) 5) goto main::@15 -Simple Condition (bool~) main::$14 [49] if((byte) main::i1#10<=(byte) 5) goto main::@16 +Simple Condition (bool~) main::$0 [5] if((byte*) main::sc#1!=rangelast(main::SCREEN,main::SCREEN+$3e8)) goto main::@1 +Simple Condition (bool~) main::$1 [9] if(*((const byte*) main::header + (byte) main::i#2)!=(byte) 0) goto main::@4 +Simple Condition (bool~) main::$2 [17] if((byte) main::i1#10<=(byte) 9) goto main::@10 +Simple Condition (bool~) main::$5 [24] if((byte) main::i1#10>=(byte) 5) goto main::@12 +Simple Condition (bool~) main::$7 [28] if((byte) main::i1#10>(byte) 5) goto main::@13 +Simple Condition (bool~) main::$9 [34] if((byte) main::i1#10!=(byte) 5) goto main::@14 +Simple Condition (bool~) main::$11 [40] if((byte) main::i1#10<(byte) 5) goto main::@15 +Simple Condition (bool~) main::$13 [46] if((byte) main::i1#10<=(byte) 5) goto main::@16 Successful SSA optimization Pass2ConditionalJumpSimplification -Constant (const byte*) main::sc#0 = (byte*) 1024 +Constant (const byte*) main::sc#0 = main::SCREEN Constant (const byte) main::i#0 = 0 +Constant (const byte*) main::screen#0 = main::SCREEN Constant (const byte) main::i1#0 = 0 Successful SSA optimization Pass2ConstantIdentification -Rewriting conditional comparison [20] if((byte) main::i1#10<=(byte) 9) goto main::@10 -Rewriting conditional comparison [31] if((byte) main::i1#10>(byte) 5) goto main::@13 -Rewriting conditional comparison [49] if((byte) main::i1#10<=(byte) 5) goto main::@16 -Simplifying expression containing zero main::screen#1 in [24] *((byte*) main::screen#1 + (byte) 0) ← (byte~) main::$4 +Resolved ranged next value [3] main::sc#1 ← ++ main::sc#2 to ++ +Resolved ranged comparison value [5] if(main::sc#1!=rangelast(main::SCREEN,main::SCREEN+$3e8)) goto main::@1 to (byte*)(const byte*) main::SCREEN+(word) $3e8+(number) 1 +Rewriting conditional comparison [17] if((byte) main::i1#10<=(byte) 9) goto main::@10 +Rewriting conditional comparison [28] if((byte) main::i1#10>(byte) 5) goto main::@13 +Rewriting conditional comparison [46] if((byte) main::i1#10<=(byte) 5) goto main::@16 +Simplifying expression containing zero main::screen#1 in [21] *((byte*) main::screen#1 + (byte) 0) ← (byte~) main::$3 Successful SSA optimization PassNSimplifyExpressionWithZero +Adding number conversion cast (unumber) 1 in if((byte*) main::sc#1!=(byte*)(const byte*) main::SCREEN+(word) $3e8+(number) 1) goto main::@1 Adding number conversion cast (unumber) 9+1 in if((byte) main::i1#10<(byte) 9+(number) 1) goto main::@10 Adding number conversion cast (unumber) 1 in if((byte) main::i1#10<(unumber)(byte) 9+(number) 1) goto main::@10 Adding number conversion cast (unumber) 5+1 in if((byte) main::i1#10>=(byte) 5+(number) 1) goto main::@13 @@ -315,6 +302,8 @@ Adding number conversion cast (unumber) 1 in if((byte) main::i1#10>=(unumber)(by Adding number conversion cast (unumber) 5+1 in if((byte) main::i1#10<(byte) 5+(number) 1) goto main::@16 Adding number conversion cast (unumber) 1 in if((byte) main::i1#10<(unumber)(byte) 5+(number) 1) goto main::@16 Successful SSA optimization PassNAddNumberTypeConversions +Simplifying constant integer cast (const byte*) main::SCREEN+(word) $3e8+(unumber)(number) 1 +Simplifying constant integer cast 1 Simplifying constant integer cast (byte) 9+(unumber)(number) 1 Simplifying constant integer cast 1 Simplifying constant integer cast (byte) 5+(unumber)(number) 1 @@ -325,27 +314,16 @@ Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Constant right-side identified [0] (byte*~) main::$0 ← (const byte*) main::sc#0 + (word) $3e8 -Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte*) main::$0 = main::sc#0+$3e8 -Successful SSA optimization Pass2ConstantIdentification -Resolved ranged next value [3] main::sc#1 ← ++ main::sc#2 to ++ -Resolved ranged comparison value [4] if(main::sc#1!=rangelast(main::sc#0,main::$0)) goto main::@1 to (byte*)(const byte*) main::$0+(number) 1 -Adding number conversion cast (unumber) 1 in if((byte*) main::sc#1!=(byte*)(const byte*) main::$0+(number) 1) goto main::@1 -Successful SSA optimization PassNAddNumberTypeConversions -Simplifying constant integer cast (const byte*) main::$0+(unumber)(number) 1 -Simplifying constant integer cast 1 -Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions Inlining constant with var siblings (const byte*) main::sc#0 Inlining constant with var siblings (const byte) main::i#0 +Inlining constant with var siblings (const byte*) main::screen#0 Inlining constant with var siblings (const byte) main::i1#0 +Constant inlined main::screen#0 = (const byte*) main::SCREEN Constant inlined main::i#0 = (byte) 0 Constant inlined main::i1#0 = (byte) 0 -Constant inlined main::sc#0 = (byte*) 1024 -Constant inlined main::$0 = (byte*) 1024+(word) $3e8 +Constant inlined main::sc#0 = (const byte*) main::SCREEN Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@25(between main::@1 and main::@1) Adding NOP phi() at start of @begin @@ -360,7 +338,7 @@ Calls in [] to main:2 Created 4 initial phi equivalence classes Coalesced [31] main::i1#14 ← main::i1#1 -Coalesced [32] main::screen#19 ← main::screen#1 +Coalesced [32] main::screen#14 ← main::screen#1 Coalesced [35] main::i#4 ← main::i#1 Coalesced [36] main::sc#3 ← main::sc#1 Coalesced down to 4 phi equivalence classes @@ -403,17 +381,17 @@ main: scope:[main] from @1 [4] phi() to:main::@1 main::@1: scope:[main] from main main::@1 - [5] (byte*) main::sc#2 ← phi( main/(byte*) 1024 main::@1/(byte*) main::sc#1 ) + [5] (byte*) main::sc#2 ← phi( main/(const byte*) main::SCREEN main::@1/(byte*) main::sc#1 ) [6] *((byte*) main::sc#2) ← (byte) ' ' [7] (byte*) main::sc#1 ← ++ (byte*) main::sc#2 - [8] if((byte*) main::sc#1!=(byte*) 1024+(word) $3e8+(byte) 1) goto main::@1 + [8] if((byte*) main::sc#1!=(const byte*) main::SCREEN+(word) $3e8+(byte) 1) goto main::@1 to:main::@2 main::@2: scope:[main] from main::@1 main::@3 [9] (byte) main::i#2 ← phi( main::@1/(byte) 0 main::@3/(byte) main::i#1 ) [10] if(*((const byte*) main::header + (byte) main::i#2)!=(byte) 0) goto main::@3 to:main::@4 main::@4: scope:[main] from main::@10 main::@2 - [11] (byte*) main::screen#11 ← phi( main::@10/(byte*) main::screen#1 main::@2/(byte*) 1024 ) + [11] (byte*) main::screen#2 ← phi( main::@10/(byte*) main::screen#1 main::@2/(const byte*) main::SCREEN ) [11] (byte) main::i1#10 ← phi( main::@10/(byte) main::i1#1 main::@2/(byte) 0 ) [12] if((byte) main::i1#10<(byte) 9+(byte) 1) goto main::@5 to:main::@return @@ -421,9 +399,9 @@ main::@return: scope:[main] from main::@4 [13] return to:@return main::@5: scope:[main] from main::@4 - [14] (byte*) main::screen#1 ← (byte*) main::screen#11 + (byte) $28 - [15] (byte~) main::$4 ← (byte) '0' + (byte) main::i1#10 - [16] *((byte*) main::screen#1) ← (byte~) main::$4 + [14] (byte*) main::screen#1 ← (byte*) main::screen#2 + (byte) $28 + [15] (byte~) main::$3 ← (byte) '0' + (byte) main::i1#10 + [16] *((byte*) main::screen#1) ← (byte~) main::$3 [17] if((byte) main::i1#10>=(byte) 5) goto main::@6 to:main::@11 main::@11: scope:[main] from main::@5 @@ -457,14 +435,14 @@ main::@10: scope:[main] from main::@15 main::@9 [27] (byte) main::i1#1 ← ++ (byte) main::i1#10 to:main::@4 main::@3: scope:[main] from main::@2 - [28] *((byte*) 1024 + (byte) main::i#2) ← *((const byte*) main::header + (byte) main::i#2) + [28] *((const byte*) main::SCREEN + (byte) main::i#2) ← *((const byte*) main::header + (byte) main::i#2) [29] (byte) main::i#1 ← ++ (byte) main::i#2 to:main::@2 VARIABLE REGISTER WEIGHTS (void()) main() -(byte~) main::$4 22.0 +(byte~) main::$3 22.0 (byte) main::i (byte) main::i#1 22.0 (byte) main::i#2 18.333333333333332 @@ -476,25 +454,25 @@ VARIABLE REGISTER WEIGHTS (byte*) main::sc#2 16.5 (byte*) main::screen (byte*) main::screen#1 6.285714285714286 -(byte*) main::screen#11 11.0 +(byte*) main::screen#2 11.0 Initial phi equivalence classes [ main::sc#2 main::sc#1 ] [ main::i#2 main::i#1 ] [ main::i1#10 main::i1#1 ] -[ main::screen#11 main::screen#1 ] -Added variable main::$4 to live range equivalence class [ main::$4 ] +[ main::screen#2 main::screen#1 ] +Added variable main::$3 to live range equivalence class [ main::$3 ] Complete equivalence classes [ main::sc#2 main::sc#1 ] [ main::i#2 main::i#1 ] [ main::i1#10 main::i1#1 ] -[ main::screen#11 main::screen#1 ] -[ main::$4 ] +[ main::screen#2 main::screen#1 ] +[ main::$3 ] Allocated zp[2]:2 [ main::sc#2 main::sc#1 ] Allocated zp[1]:4 [ main::i#2 main::i#1 ] Allocated zp[1]:5 [ main::i1#10 main::i1#1 ] -Allocated zp[2]:6 [ main::screen#11 main::screen#1 ] -Allocated zp[1]:8 [ main::$4 ] +Allocated zp[2]:6 [ main::screen#2 main::screen#1 ] +Allocated zp[1]:8 [ main::$3 ] INITIAL ASM Target platform is c64basic / MOS6502X @@ -523,17 +501,18 @@ __bend_from___b1: __bend: // main main: { - .label __4 = 8 + .label SCREEN = $400 + .label __3 = 8 .label sc = 2 .label i = 4 .label screen = 6 .label i1 = 5 // [5] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: - // [5] phi (byte*) main::sc#2 = (byte*) 1024 [phi:main->main::@1#0] -- pbuz1=pbuc1 - lda #<$400 + // [5] phi (byte*) main::sc#2 = (const byte*) main::SCREEN [phi:main->main::@1#0] -- pbuz1=pbuc1 + lda #$400 + lda #>SCREEN sta.z sc+1 jmp __b1 // [5] phi from main::@1 to main::@1 [phi:main::@1->main::@1] @@ -551,12 +530,12 @@ main: { bne !+ inc.z sc+1 !: - // [8] if((byte*) main::sc#1!=(byte*) 1024+(word) $3e8+(byte) 1) goto main::@1 -- pbuz1_neq_pbuc1_then_la1 + // [8] if((byte*) main::sc#1!=(const byte*) main::SCREEN+(word) $3e8+(byte) 1) goto main::@1 -- pbuz1_neq_pbuc1_then_la1 lda.z sc+1 - cmp #>$400+$3e8+1 + cmp #>SCREEN+$3e8+1 bne __b1_from___b1 lda.z sc - cmp #<$400+$3e8+1 + cmp #main::@2] __b2_from___b1: @@ -573,10 +552,10 @@ main: { bne __b3 // [11] phi from main::@2 to main::@4 [phi:main::@2->main::@4] __b4_from___b2: - // [11] phi (byte*) main::screen#11 = (byte*) 1024 [phi:main::@2->main::@4#0] -- pbuz1=pbuc1 - lda #<$400 + // [11] phi (byte*) main::screen#2 = (const byte*) main::SCREEN [phi:main::@2->main::@4#0] -- pbuz1=pbuc1 + lda #$400 + lda #>SCREEN sta.z screen+1 // [11] phi (byte) main::i1#10 = (byte) 0 [phi:main::@2->main::@4#1] -- vbuz1=vbuc1 lda #0 @@ -595,7 +574,7 @@ main: { rts // main::@5 __b5: - // [14] (byte*) main::screen#1 ← (byte*) main::screen#11 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [14] (byte*) main::screen#1 ← (byte*) main::screen#2 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc.z screen @@ -603,12 +582,12 @@ main: { bcc !+ inc.z screen+1 !: - // [15] (byte~) main::$4 ← (byte) '0' + (byte) main::i1#10 -- vbuz1=vbuc1_plus_vbuz2 + // [15] (byte~) main::$3 ← (byte) '0' + (byte) main::i1#10 -- vbuz1=vbuc1_plus_vbuz2 lax.z i1 axs #-['0'] - stx.z __4 - // [16] *((byte*) main::screen#1) ← (byte~) main::$4 -- _deref_pbuz1=vbuz2 - lda.z __4 + stx.z __3 + // [16] *((byte*) main::screen#1) ← (byte~) main::$3 -- _deref_pbuz1=vbuz2 + lda.z __3 ldy #0 sta (screen),y // [17] if((byte) main::i1#10>=(byte) 5) goto main::@6 -- vbuz1_ge_vbuc1_then_la1 @@ -685,15 +664,15 @@ main: { inc.z i1 // [11] phi from main::@10 to main::@4 [phi:main::@10->main::@4] __b4_from___b10: - // [11] phi (byte*) main::screen#11 = (byte*) main::screen#1 [phi:main::@10->main::@4#0] -- register_copy + // [11] phi (byte*) main::screen#2 = (byte*) main::screen#1 [phi:main::@10->main::@4#0] -- register_copy // [11] phi (byte) main::i1#10 = (byte) main::i1#1 [phi:main::@10->main::@4#1] -- register_copy jmp __b4 // main::@3 __b3: - // [28] *((byte*) 1024 + (byte) main::i#2) ← *((const byte*) main::header + (byte) main::i#2) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 + // [28] *((const byte*) main::SCREEN + (byte) main::i#2) ← *((const byte*) main::header + (byte) main::i#2) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 ldy.z i lda header,y - sta $400,y + sta SCREEN,y // [29] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 inc.z i // [9] phi from main::@3 to main::@2 [phi:main::@3->main::@2] @@ -707,45 +686,45 @@ main: { REGISTER UPLIFT POTENTIAL REGISTERS Statement [6] *((byte*) main::sc#2) ← (byte) ' ' [ main::sc#2 ] ( main:2 [ main::sc#2 ] ) always clobbers reg byte a reg byte y -Statement [8] if((byte*) main::sc#1!=(byte*) 1024+(word) $3e8+(byte) 1) goto main::@1 [ main::sc#1 ] ( main:2 [ main::sc#1 ] ) always clobbers reg byte a +Statement [8] if((byte*) main::sc#1!=(const byte*) main::SCREEN+(word) $3e8+(byte) 1) goto main::@1 [ main::sc#1 ] ( main:2 [ main::sc#1 ] ) always clobbers reg byte a Statement [10] if(*((const byte*) main::header + (byte) main::i#2)!=(byte) 0) goto main::@3 [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:4 [ main::i#2 main::i#1 ] -Statement [14] (byte*) main::screen#1 ← (byte*) main::screen#11 + (byte) $28 [ main::i1#10 main::screen#1 ] ( main:2 [ main::i1#10 main::screen#1 ] ) always clobbers reg byte a +Statement [14] (byte*) main::screen#1 ← (byte*) main::screen#2 + (byte) $28 [ main::i1#10 main::screen#1 ] ( main:2 [ main::i1#10 main::screen#1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:5 [ main::i1#10 main::i1#1 ] -Statement [15] (byte~) main::$4 ← (byte) '0' + (byte) main::i1#10 [ main::i1#10 main::screen#1 main::$4 ] ( main:2 [ main::i1#10 main::screen#1 main::$4 ] ) always clobbers reg byte a -Statement [16] *((byte*) main::screen#1) ← (byte~) main::$4 [ main::i1#10 main::screen#1 ] ( main:2 [ main::i1#10 main::screen#1 ] ) always clobbers reg byte y +Statement [15] (byte~) main::$3 ← (byte) '0' + (byte) main::i1#10 [ main::i1#10 main::screen#1 main::$3 ] ( main:2 [ main::i1#10 main::screen#1 main::$3 ] ) always clobbers reg byte a +Statement [16] *((byte*) main::screen#1) ← (byte~) main::$3 [ main::i1#10 main::screen#1 ] ( main:2 [ main::i1#10 main::screen#1 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp[1]:5 [ main::i1#10 main::i1#1 ] Statement [18] *((byte*) main::screen#1 + (byte) 2) ← (byte) '+' [ main::i1#10 main::screen#1 ] ( main:2 [ main::i1#10 main::screen#1 ] ) always clobbers reg byte a reg byte y Statement [20] *((byte*) main::screen#1 + (byte) 5) ← (byte) '+' [ main::i1#10 main::screen#1 ] ( main:2 [ main::i1#10 main::screen#1 ] ) always clobbers reg byte a reg byte y Statement [22] *((byte*) main::screen#1 + (byte) 8) ← (byte) '+' [ main::i1#10 main::screen#1 ] ( main:2 [ main::i1#10 main::screen#1 ] ) always clobbers reg byte a reg byte y Statement [24] *((byte*) main::screen#1 + (byte) $b) ← (byte) '+' [ main::i1#10 main::screen#1 ] ( main:2 [ main::i1#10 main::screen#1 ] ) always clobbers reg byte a reg byte y Statement [26] *((byte*) main::screen#1 + (byte) $e) ← (byte) '+' [ main::i1#10 main::screen#1 ] ( main:2 [ main::i1#10 main::screen#1 ] ) always clobbers reg byte a reg byte y -Statement [28] *((byte*) 1024 + (byte) main::i#2) ← *((const byte*) main::header + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a +Statement [28] *((const byte*) main::SCREEN + (byte) main::i#2) ← *((const byte*) main::header + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a Statement [6] *((byte*) main::sc#2) ← (byte) ' ' [ main::sc#2 ] ( main:2 [ main::sc#2 ] ) always clobbers reg byte a reg byte y -Statement [8] if((byte*) main::sc#1!=(byte*) 1024+(word) $3e8+(byte) 1) goto main::@1 [ main::sc#1 ] ( main:2 [ main::sc#1 ] ) always clobbers reg byte a +Statement [8] if((byte*) main::sc#1!=(const byte*) main::SCREEN+(word) $3e8+(byte) 1) goto main::@1 [ main::sc#1 ] ( main:2 [ main::sc#1 ] ) always clobbers reg byte a Statement [10] if(*((const byte*) main::header + (byte) main::i#2)!=(byte) 0) goto main::@3 [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a -Statement [14] (byte*) main::screen#1 ← (byte*) main::screen#11 + (byte) $28 [ main::i1#10 main::screen#1 ] ( main:2 [ main::i1#10 main::screen#1 ] ) always clobbers reg byte a -Statement [15] (byte~) main::$4 ← (byte) '0' + (byte) main::i1#10 [ main::i1#10 main::screen#1 main::$4 ] ( main:2 [ main::i1#10 main::screen#1 main::$4 ] ) always clobbers reg byte a -Statement [16] *((byte*) main::screen#1) ← (byte~) main::$4 [ main::i1#10 main::screen#1 ] ( main:2 [ main::i1#10 main::screen#1 ] ) always clobbers reg byte y +Statement [14] (byte*) main::screen#1 ← (byte*) main::screen#2 + (byte) $28 [ main::i1#10 main::screen#1 ] ( main:2 [ main::i1#10 main::screen#1 ] ) always clobbers reg byte a +Statement [15] (byte~) main::$3 ← (byte) '0' + (byte) main::i1#10 [ main::i1#10 main::screen#1 main::$3 ] ( main:2 [ main::i1#10 main::screen#1 main::$3 ] ) always clobbers reg byte a +Statement [16] *((byte*) main::screen#1) ← (byte~) main::$3 [ main::i1#10 main::screen#1 ] ( main:2 [ main::i1#10 main::screen#1 ] ) always clobbers reg byte y Statement [18] *((byte*) main::screen#1 + (byte) 2) ← (byte) '+' [ main::i1#10 main::screen#1 ] ( main:2 [ main::i1#10 main::screen#1 ] ) always clobbers reg byte a reg byte y Statement [20] *((byte*) main::screen#1 + (byte) 5) ← (byte) '+' [ main::i1#10 main::screen#1 ] ( main:2 [ main::i1#10 main::screen#1 ] ) always clobbers reg byte a reg byte y Statement [22] *((byte*) main::screen#1 + (byte) 8) ← (byte) '+' [ main::i1#10 main::screen#1 ] ( main:2 [ main::i1#10 main::screen#1 ] ) always clobbers reg byte a reg byte y Statement [24] *((byte*) main::screen#1 + (byte) $b) ← (byte) '+' [ main::i1#10 main::screen#1 ] ( main:2 [ main::i1#10 main::screen#1 ] ) always clobbers reg byte a reg byte y Statement [26] *((byte*) main::screen#1 + (byte) $e) ← (byte) '+' [ main::i1#10 main::screen#1 ] ( main:2 [ main::i1#10 main::screen#1 ] ) always clobbers reg byte a reg byte y -Statement [28] *((byte*) 1024 + (byte) main::i#2) ← *((const byte*) main::header + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a +Statement [28] *((const byte*) main::SCREEN + (byte) main::i#2) ← *((const byte*) main::header + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a Potential registers zp[2]:2 [ main::sc#2 main::sc#1 ] : zp[2]:2 , Potential registers zp[1]:4 [ main::i#2 main::i#1 ] : zp[1]:4 , reg byte x , reg byte y , Potential registers zp[1]:5 [ main::i1#10 main::i1#1 ] : zp[1]:5 , reg byte x , -Potential registers zp[2]:6 [ main::screen#11 main::screen#1 ] : zp[2]:6 , -Potential registers zp[1]:8 [ main::$4 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:6 [ main::screen#2 main::screen#1 ] : zp[2]:6 , +Potential registers zp[1]:8 [ main::$3 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 40.33: zp[1]:4 [ main::i#2 main::i#1 ] 33: zp[2]:2 [ main::sc#2 main::sc#1 ] 28.6: zp[1]:5 [ main::i1#10 main::i1#1 ] 22: zp[1]:8 [ main::$4 ] 17.29: zp[2]:6 [ main::screen#11 main::screen#1 ] +Uplift Scope [main] 40.33: zp[1]:4 [ main::i#2 main::i#1 ] 33: zp[2]:2 [ main::sc#2 main::sc#1 ] 28.6: zp[1]:5 [ main::i1#10 main::i1#1 ] 22: zp[1]:8 [ main::$3 ] 17.29: zp[2]:6 [ main::screen#2 main::screen#1 ] Uplift Scope [] -Uplifting [main] best 2453 combination reg byte x [ main::i#2 main::i#1 ] zp[2]:2 [ main::sc#2 main::sc#1 ] reg byte x [ main::i1#10 main::i1#1 ] reg byte a [ main::$4 ] zp[2]:6 [ main::screen#11 main::screen#1 ] +Uplifting [main] best 2453 combination reg byte x [ main::i#2 main::i#1 ] zp[2]:2 [ main::sc#2 main::sc#1 ] reg byte x [ main::i1#10 main::i1#1 ] reg byte a [ main::$3 ] zp[2]:6 [ main::screen#2 main::screen#1 ] Uplifting [] best 2453 combination -Allocated (was zp[2]:6) zp[2]:4 [ main::screen#11 main::screen#1 ] +Allocated (was zp[2]:6) zp[2]:4 [ main::screen#2 main::screen#1 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -773,14 +752,15 @@ __bend_from___b1: __bend: // main main: { + .label SCREEN = $400 .label sc = 2 .label screen = 4 // [5] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: - // [5] phi (byte*) main::sc#2 = (byte*) 1024 [phi:main->main::@1#0] -- pbuz1=pbuc1 - lda #<$400 + // [5] phi (byte*) main::sc#2 = (const byte*) main::SCREEN [phi:main->main::@1#0] -- pbuz1=pbuc1 + lda #$400 + lda #>SCREEN sta.z sc+1 jmp __b1 // [5] phi from main::@1 to main::@1 [phi:main::@1->main::@1] @@ -798,12 +778,12 @@ main: { bne !+ inc.z sc+1 !: - // [8] if((byte*) main::sc#1!=(byte*) 1024+(word) $3e8+(byte) 1) goto main::@1 -- pbuz1_neq_pbuc1_then_la1 + // [8] if((byte*) main::sc#1!=(const byte*) main::SCREEN+(word) $3e8+(byte) 1) goto main::@1 -- pbuz1_neq_pbuc1_then_la1 lda.z sc+1 - cmp #>$400+$3e8+1 + cmp #>SCREEN+$3e8+1 bne __b1_from___b1 lda.z sc - cmp #<$400+$3e8+1 + cmp #main::@2] __b2_from___b1: @@ -818,10 +798,10 @@ main: { bne __b3 // [11] phi from main::@2 to main::@4 [phi:main::@2->main::@4] __b4_from___b2: - // [11] phi (byte*) main::screen#11 = (byte*) 1024 [phi:main::@2->main::@4#0] -- pbuz1=pbuc1 - lda #<$400 + // [11] phi (byte*) main::screen#2 = (const byte*) main::SCREEN [phi:main::@2->main::@4#0] -- pbuz1=pbuc1 + lda #$400 + lda #>SCREEN sta.z screen+1 // [11] phi (byte) main::i1#10 = (byte) 0 [phi:main::@2->main::@4#1] -- vbuxx=vbuc1 ldx #0 @@ -838,7 +818,7 @@ main: { rts // main::@5 __b5: - // [14] (byte*) main::screen#1 ← (byte*) main::screen#11 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [14] (byte*) main::screen#1 ← (byte*) main::screen#2 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc.z screen @@ -846,11 +826,11 @@ main: { bcc !+ inc.z screen+1 !: - // [15] (byte~) main::$4 ← (byte) '0' + (byte) main::i1#10 -- vbuaa=vbuc1_plus_vbuxx + // [15] (byte~) main::$3 ← (byte) '0' + (byte) main::i1#10 -- vbuaa=vbuc1_plus_vbuxx txa clc adc #'0' - // [16] *((byte*) main::screen#1) ← (byte~) main::$4 -- _deref_pbuz1=vbuaa + // [16] *((byte*) main::screen#1) ← (byte~) main::$3 -- _deref_pbuz1=vbuaa ldy #0 sta (screen),y // [17] if((byte) main::i1#10>=(byte) 5) goto main::@6 -- vbuxx_ge_vbuc1_then_la1 @@ -922,14 +902,14 @@ main: { inx // [11] phi from main::@10 to main::@4 [phi:main::@10->main::@4] __b4_from___b10: - // [11] phi (byte*) main::screen#11 = (byte*) main::screen#1 [phi:main::@10->main::@4#0] -- register_copy + // [11] phi (byte*) main::screen#2 = (byte*) main::screen#1 [phi:main::@10->main::@4#0] -- register_copy // [11] phi (byte) main::i1#10 = (byte) main::i1#1 [phi:main::@10->main::@4#1] -- register_copy jmp __b4 // main::@3 __b3: - // [28] *((byte*) 1024 + (byte) main::i#2) ← *((const byte*) main::header + (byte) main::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + // [28] *((const byte*) main::SCREEN + (byte) main::i#2) ← *((const byte*) main::header + (byte) main::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx lda header,x - sta $400,x + sta SCREEN,x // [29] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx inx // [9] phi from main::@3 to main::@2 [phi:main::@3->main::@2] @@ -994,7 +974,7 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (void()) main() -(byte~) main::$4 reg byte a 22.0 +(byte~) main::$3 reg byte a 22.0 (label) main::@1 (label) main::@10 (label) main::@11 @@ -1011,6 +991,7 @@ FINAL SYMBOL TABLE (label) main::@8 (label) main::@9 (label) main::@return +(const byte*) main::SCREEN = (byte*) 1024 (const byte*) main::header[] = (byte*) " < <= == >= >" (byte) main::i (byte) main::i#1 reg byte x 22.0 @@ -1023,13 +1004,13 @@ FINAL SYMBOL TABLE (byte*) main::sc#2 sc zp[2]:2 16.5 (byte*) main::screen (byte*) main::screen#1 screen zp[2]:4 6.285714285714286 -(byte*) main::screen#11 screen zp[2]:4 11.0 +(byte*) main::screen#2 screen zp[2]:4 11.0 zp[2]:2 [ main::sc#2 main::sc#1 ] reg byte x [ main::i#2 main::i#1 ] reg byte x [ main::i1#10 main::i1#1 ] -zp[2]:4 [ main::screen#11 main::screen#1 ] -reg byte a [ main::$4 ] +zp[2]:4 [ main::screen#2 main::screen#1 ] +reg byte a [ main::$3 ] FINAL ASSEMBLER @@ -1051,13 +1032,14 @@ Score: 1991 // @end // main main: { + .label SCREEN = $400 .label sc = 2 .label screen = 4 // [5] phi from main to main::@1 [phi:main->main::@1] - // [5] phi (byte*) main::sc#2 = (byte*) 1024 [phi:main->main::@1#0] -- pbuz1=pbuc1 - lda #<$400 + // [5] phi (byte*) main::sc#2 = (const byte*) main::SCREEN [phi:main->main::@1#0] -- pbuz1=pbuc1 + lda #$400 + lda #>SCREEN sta.z sc+1 // [5] phi from main::@1 to main::@1 [phi:main::@1->main::@1] // [5] phi (byte*) main::sc#2 = (byte*) main::sc#1 [phi:main::@1->main::@1#0] -- register_copy @@ -1068,18 +1050,18 @@ main: { lda #' ' ldy #0 sta (sc),y - // for(byte* sc : screen..screen+1000) + // for(byte* sc : SCREEN..SCREEN+1000) // [7] (byte*) main::sc#1 ← ++ (byte*) main::sc#2 -- pbuz1=_inc_pbuz1 inc.z sc bne !+ inc.z sc+1 !: - // [8] if((byte*) main::sc#1!=(byte*) 1024+(word) $3e8+(byte) 1) goto main::@1 -- pbuz1_neq_pbuc1_then_la1 + // [8] if((byte*) main::sc#1!=(const byte*) main::SCREEN+(word) $3e8+(byte) 1) goto main::@1 -- pbuz1_neq_pbuc1_then_la1 lda.z sc+1 - cmp #>$400+$3e8+1 + cmp #>SCREEN+$3e8+1 bne __b1 lda.z sc - cmp #<$400+$3e8+1 + cmp #main::@2] // [9] phi (byte) main::i#2 = (byte) 0 [phi:main::@1->main::@2#0] -- vbuxx=vbuc1 @@ -1092,10 +1074,10 @@ main: { cmp #0 bne __b3 // [11] phi from main::@2 to main::@4 [phi:main::@2->main::@4] - // [11] phi (byte*) main::screen#11 = (byte*) 1024 [phi:main::@2->main::@4#0] -- pbuz1=pbuc1 - lda #<$400 + // [11] phi (byte*) main::screen#2 = (const byte*) main::SCREEN [phi:main::@2->main::@4#0] -- pbuz1=pbuc1 + lda #$400 + lda #>SCREEN sta.z screen+1 // [11] phi (byte) main::i1#10 = (byte) 0 [phi:main::@2->main::@4#1] -- vbuxx=vbuc1 ldx #0 @@ -1112,7 +1094,7 @@ main: { // main::@5 __b5: // screen +=40 - // [14] (byte*) main::screen#1 ← (byte*) main::screen#11 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [14] (byte*) main::screen#1 ← (byte*) main::screen#2 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc.z screen @@ -1121,12 +1103,12 @@ main: { inc.z screen+1 !: // '0'+i - // [15] (byte~) main::$4 ← (byte) '0' + (byte) main::i1#10 -- vbuaa=vbuc1_plus_vbuxx + // [15] (byte~) main::$3 ← (byte) '0' + (byte) main::i1#10 -- vbuaa=vbuc1_plus_vbuxx txa clc adc #'0' // screen[0] = '0'+i - // [16] *((byte*) main::screen#1) ← (byte~) main::$4 -- _deref_pbuz1=vbuaa + // [16] *((byte*) main::screen#1) ← (byte~) main::$3 -- _deref_pbuz1=vbuaa ldy #0 sta (screen),y // if(i<5) @@ -1193,15 +1175,15 @@ main: { // [27] (byte) main::i1#1 ← ++ (byte) main::i1#10 -- vbuxx=_inc_vbuxx inx // [11] phi from main::@10 to main::@4 [phi:main::@10->main::@4] - // [11] phi (byte*) main::screen#11 = (byte*) main::screen#1 [phi:main::@10->main::@4#0] -- register_copy + // [11] phi (byte*) main::screen#2 = (byte*) main::screen#1 [phi:main::@10->main::@4#0] -- register_copy // [11] phi (byte) main::i1#10 = (byte) main::i1#1 [phi:main::@10->main::@4#1] -- register_copy jmp __b4 // main::@3 __b3: - // screen[i] = header[i] - // [28] *((byte*) 1024 + (byte) main::i#2) ← *((const byte*) main::header + (byte) main::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + // SCREEN[i] = header[i] + // [28] *((const byte*) main::SCREEN + (byte) main::i#2) ← *((const byte*) main::header + (byte) main::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx lda header,x - sta $400,x + sta SCREEN,x // for( byte i=0; header[i]!=0; i++) // [29] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx inx diff --git a/src/test/ref/comparison-rewriting.sym b/src/test/ref/comparison-rewriting.sym index d7163e84a..c3e541885 100644 --- a/src/test/ref/comparison-rewriting.sym +++ b/src/test/ref/comparison-rewriting.sym @@ -2,7 +2,7 @@ (label) @begin (label) @end (void()) main() -(byte~) main::$4 reg byte a 22.0 +(byte~) main::$3 reg byte a 22.0 (label) main::@1 (label) main::@10 (label) main::@11 @@ -19,6 +19,7 @@ (label) main::@8 (label) main::@9 (label) main::@return +(const byte*) main::SCREEN = (byte*) 1024 (const byte*) main::header[] = (byte*) " < <= == >= >" (byte) main::i (byte) main::i#1 reg byte x 22.0 @@ -31,10 +32,10 @@ (byte*) main::sc#2 sc zp[2]:2 16.5 (byte*) main::screen (byte*) main::screen#1 screen zp[2]:4 6.285714285714286 -(byte*) main::screen#11 screen zp[2]:4 11.0 +(byte*) main::screen#2 screen zp[2]:4 11.0 zp[2]:2 [ main::sc#2 main::sc#1 ] reg byte x [ main::i#2 main::i#1 ] reg byte x [ main::i1#10 main::i1#1 ] -zp[2]:4 [ main::screen#11 main::screen#1 ] -reg byte a [ main::$4 ] +zp[2]:4 [ main::screen#2 main::screen#1 ] +reg byte a [ main::$3 ] diff --git a/src/test/ref/complex/prebob/grid-bobs.log b/src/test/ref/complex/prebob/grid-bobs.log index b69b247f4..fe801395f 100644 --- a/src/test/ref/complex/prebob/grid-bobs.log +++ b/src/test/ref/complex/prebob/grid-bobs.log @@ -3121,7 +3121,6 @@ Simplifying expression containing zero renderBobCleanup::screen#0 in [294] *((by Simplifying expression containing zero PROTO_BOB in [411] *((const byte*) PROTO_BOB + (byte) 0) ← (byte) 0 Successful SSA optimization PassNSimplifyExpressionWithZero Eliminating unused variable - keeping the phi block (byte**) renderBobCleanupNext#24 -Eliminating unused variable - keeping the phi block (byte**) renderBobCleanupNext#11 Eliminating unused variable (byte) charsetFindOrAddGlyph::return#0 and assignment [159] (byte) charsetFindOrAddGlyph::return#0 ← (byte) charsetFindOrAddGlyph::glyph_id#11 Eliminating unused constant (const void*) memset::return#2 Eliminating unused constant (const byte) bob_charset_next_id#27 @@ -3152,6 +3151,8 @@ Finalized unsigned number type (byte) $20 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions +Identical Phi Values (byte**) renderBobCleanupNext#11 (byte**) renderBobCleanupNext#13 +Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [0] (byte*) memset::end#0 ← (const byte*) memset::$2 + (const word) memset::num#0 Constant right-side identified [49] (byte~) main::vicSelectGfxBank1_toDd001_$1 ← > (const word) main::vicSelectGfxBank1_toDd001_$0 Constant right-side identified [53] (word~) main::toD0181_$1 ← (const word) main::toD0181_$0 & (word) $3fff diff --git a/src/test/ref/complex/prebob/vogel-bobs.log b/src/test/ref/complex/prebob/vogel-bobs.log index 833c1bd6b..e5b896bad 100644 --- a/src/test/ref/complex/prebob/vogel-bobs.log +++ b/src/test/ref/complex/prebob/vogel-bobs.log @@ -3329,7 +3329,6 @@ Simplifying expression containing zero renderBobCleanup::screen#0 in [361] *((by Simplifying expression containing zero PROTO_BOB in [476] *((const byte*) PROTO_BOB + (byte) 0) ← (byte) 0 Successful SSA optimization PassNSimplifyExpressionWithZero Eliminating unused variable - keeping the phi block (byte**) renderBobCleanupNext#24 -Eliminating unused variable - keeping the phi block (byte**) renderBobCleanupNext#11 Eliminating unused variable (byte) bobCharsetFindOrAddGlyph::return#0 and assignment [199] (byte) bobCharsetFindOrAddGlyph::return#0 ← (byte) bobCharsetFindOrAddGlyph::glyph_id#11 Eliminating unused constant (const void*) memset::return#2 Eliminating unused constant (const byte) bob_charset_next_id#27 @@ -3359,6 +3358,8 @@ Finalized unsigned number type (byte) $20 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions +Identical Phi Values (byte**) renderBobCleanupNext#11 (byte**) renderBobCleanupNext#13 +Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [0] (byte*) memset::end#0 ← (const byte*) memset::$2 + (const word) memset::num#0 Constant right-side identified [82] (byte~) main::vicSelectGfxBank1_toDd001_$1 ← > (const word) main::vicSelectGfxBank1_toDd001_$0 Constant right-side identified [86] (word~) main::toD0181_$1 ← (const word) main::toD0181_$0 & (word) $3fff diff --git a/src/test/ref/complex/tetris/test-sprites.log b/src/test/ref/complex/tetris/test-sprites.log index 1bcd098c1..0e3d45278 100644 --- a/src/test/ref/complex/tetris/test-sprites.log +++ b/src/test/ref/complex/tetris/test-sprites.log @@ -1434,10 +1434,10 @@ sprites_irq::@1: scope:[sprites_irq] from sprites_irq::@9 VARIABLE REGISTER WEIGHTS -(byte) irq_cnt loadstore 6.0 -(byte) irq_raster_next loadstore 1.0 -(byte) irq_sprite_ptr loadstore 1.5555555555555558 -(byte) irq_sprite_ypos loadstore 14.0 +(byte) irq_cnt loadstore 0.48000000000000004 +(byte) irq_raster_next loadstore 0.44444444444444453 +(byte) irq_sprite_ptr loadstore 0.45161290322580644 +(byte) irq_sprite_ypos loadstore 0.48275862068965525 (void()) loop() (byte~) loop::$1 202.0 (byte) loop::idx @@ -2289,20 +2289,20 @@ Removing always clobbered register reg byte a as potential for zp[1]:9 [ sprites Statement [66] *((const byte*) SPRITES_XPOS + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:10::sprites_init:18 [ sprites_init::s#2 sprites_init::xpos#2 ] ) always clobbers reg byte a Statement [67] *((const byte*) SPRITES_COLS + (byte) sprites_init::s#2) ← (const byte) BLACK [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:10::sprites_init:18 [ sprites_init::s#2 sprites_init::xpos#2 ] ) always clobbers reg byte a Statement [68] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte) $18 [ sprites_init::s#2 sprites_init::xpos#1 ] ( main:10::sprites_init:18 [ sprites_init::s#2 sprites_init::xpos#1 ] ) always clobbers reg byte a -Statement [80] if(*((const byte*) RASTER)<(byte) sprites_irq::raster_sprite_gfx_modify) goto sprites_irq::@8 [ render_screen_showing irq_sprite_ptr sprites_irq::raster_sprite_gfx_modify ] ( [ render_screen_showing irq_sprite_ptr sprites_irq::raster_sprite_gfx_modify ] ) always clobbers reg byte a -Statement [82] if((byte) render_screen_showing==(byte) 0) goto sprites_irq::@1 [ sprites_irq::ptr#0 ] ( [ sprites_irq::ptr#0 ] ) always clobbers reg byte a +Statement [80] if(*((const byte*) RASTER)<(byte) sprites_irq::raster_sprite_gfx_modify) goto sprites_irq::@8 [ render_screen_showing irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt sprites_irq::raster_sprite_gfx_modify ] ( [ render_screen_showing irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt sprites_irq::raster_sprite_gfx_modify ] ) always clobbers reg byte a +Statement [82] if((byte) render_screen_showing==(byte) 0) goto sprites_irq::@1 [ irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt sprites_irq::ptr#0 ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt sprites_irq::ptr#0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:22 [ sprites_irq::ptr#0 ] -Statement [90] if((byte) irq_cnt==(byte) 9) goto sprites_irq::@3 [ irq_cnt ] ( [ irq_cnt ] ) always clobbers reg byte a -Statement [91] if((byte) irq_cnt==(byte) $a) goto sprites_irq::@4 [ ] ( [ ] ) always clobbers reg byte a -Statement [92] (byte) irq_raster_next ← (byte) irq_raster_next + (byte) $14 [ irq_raster_next ] ( [ irq_raster_next ] ) always clobbers reg byte a reg byte x -Statement [93] (byte) irq_sprite_ypos ← (byte) irq_sprite_ypos + (byte) $15 [ irq_raster_next ] ( [ irq_raster_next ] ) always clobbers reg byte a reg byte x +Statement [90] if((byte) irq_cnt==(byte) 9) goto sprites_irq::@3 [ irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt ] ) always clobbers reg byte a +Statement [91] if((byte) irq_cnt==(byte) $a) goto sprites_irq::@4 [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] ) always clobbers reg byte a +Statement [92] (byte) irq_raster_next ← (byte) irq_raster_next + (byte) $14 [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] ) always clobbers reg byte a reg byte x +Statement [93] (byte) irq_sprite_ypos ← (byte) irq_sprite_ypos + (byte) $15 [ irq_raster_next irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ptr ] ) always clobbers reg byte a reg byte x Statement [94] (byte) irq_sprite_ptr ← (byte) irq_sprite_ptr + (byte) 3 [ irq_raster_next ] ( [ irq_raster_next ] ) always clobbers reg byte a reg byte x Statement [95] *((const byte*) RASTER) ← (byte) irq_raster_next [ ] ( [ ] ) always clobbers reg byte a Statement [96] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER [ ] ( [ ] ) always clobbers reg byte a Statement [97] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y -Statement [98] (byte) irq_cnt ← (byte) 0 [ ] ( [ ] ) always clobbers reg byte a -Statement [99] (byte) irq_raster_next ← (const byte) IRQ_RASTER_FIRST [ irq_raster_next ] ( [ irq_raster_next ] ) always clobbers reg byte a -Statement [100] (byte) irq_sprite_ypos ← (byte) irq_sprite_ypos + (byte) $15 [ irq_raster_next ] ( [ irq_raster_next ] ) always clobbers reg byte a reg byte x +Statement [98] (byte) irq_cnt ← (byte) 0 [ irq_sprite_ypos irq_sprite_ptr ] ( [ irq_sprite_ypos irq_sprite_ptr ] ) always clobbers reg byte a +Statement [99] (byte) irq_raster_next ← (const byte) IRQ_RASTER_FIRST [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] ) always clobbers reg byte a +Statement [100] (byte) irq_sprite_ypos ← (byte) irq_sprite_ypos + (byte) $15 [ irq_raster_next irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ptr ] ) always clobbers reg byte a reg byte x Statement [101] (byte) irq_sprite_ptr ← (byte) irq_sprite_ptr + (byte) 3 [ irq_raster_next ] ( [ irq_raster_next ] ) always clobbers reg byte a reg byte x Statement [102] (byte) irq_raster_next ← (byte) irq_raster_next + (byte) $15 [ irq_raster_next ] ( [ irq_raster_next ] ) always clobbers reg byte a reg byte x Statement [103] (byte) irq_sprite_ypos ← (const byte) SPRITES_FIRST_YPOS [ irq_raster_next ] ( [ irq_raster_next ] ) always clobbers reg byte a @@ -2344,19 +2344,19 @@ Statement [65] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte) Statement [66] *((const byte*) SPRITES_XPOS + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:10::sprites_init:18 [ sprites_init::s#2 sprites_init::xpos#2 ] ) always clobbers reg byte a Statement [67] *((const byte*) SPRITES_COLS + (byte) sprites_init::s#2) ← (const byte) BLACK [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:10::sprites_init:18 [ sprites_init::s#2 sprites_init::xpos#2 ] ) always clobbers reg byte a Statement [68] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte) $18 [ sprites_init::s#2 sprites_init::xpos#1 ] ( main:10::sprites_init:18 [ sprites_init::s#2 sprites_init::xpos#1 ] ) always clobbers reg byte a -Statement [80] if(*((const byte*) RASTER)<(byte) sprites_irq::raster_sprite_gfx_modify) goto sprites_irq::@8 [ render_screen_showing irq_sprite_ptr sprites_irq::raster_sprite_gfx_modify ] ( [ render_screen_showing irq_sprite_ptr sprites_irq::raster_sprite_gfx_modify ] ) always clobbers reg byte a -Statement [82] if((byte) render_screen_showing==(byte) 0) goto sprites_irq::@1 [ sprites_irq::ptr#0 ] ( [ sprites_irq::ptr#0 ] ) always clobbers reg byte a -Statement [90] if((byte) irq_cnt==(byte) 9) goto sprites_irq::@3 [ irq_cnt ] ( [ irq_cnt ] ) always clobbers reg byte a -Statement [91] if((byte) irq_cnt==(byte) $a) goto sprites_irq::@4 [ ] ( [ ] ) always clobbers reg byte a -Statement [92] (byte) irq_raster_next ← (byte) irq_raster_next + (byte) $14 [ irq_raster_next ] ( [ irq_raster_next ] ) always clobbers reg byte a reg byte x -Statement [93] (byte) irq_sprite_ypos ← (byte) irq_sprite_ypos + (byte) $15 [ irq_raster_next ] ( [ irq_raster_next ] ) always clobbers reg byte a reg byte x +Statement [80] if(*((const byte*) RASTER)<(byte) sprites_irq::raster_sprite_gfx_modify) goto sprites_irq::@8 [ render_screen_showing irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt sprites_irq::raster_sprite_gfx_modify ] ( [ render_screen_showing irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt sprites_irq::raster_sprite_gfx_modify ] ) always clobbers reg byte a +Statement [82] if((byte) render_screen_showing==(byte) 0) goto sprites_irq::@1 [ irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt sprites_irq::ptr#0 ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt sprites_irq::ptr#0 ] ) always clobbers reg byte a +Statement [90] if((byte) irq_cnt==(byte) 9) goto sprites_irq::@3 [ irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt ] ) always clobbers reg byte a +Statement [91] if((byte) irq_cnt==(byte) $a) goto sprites_irq::@4 [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] ) always clobbers reg byte a +Statement [92] (byte) irq_raster_next ← (byte) irq_raster_next + (byte) $14 [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] ) always clobbers reg byte a reg byte x +Statement [93] (byte) irq_sprite_ypos ← (byte) irq_sprite_ypos + (byte) $15 [ irq_raster_next irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ptr ] ) always clobbers reg byte a reg byte x Statement [94] (byte) irq_sprite_ptr ← (byte) irq_sprite_ptr + (byte) 3 [ irq_raster_next ] ( [ irq_raster_next ] ) always clobbers reg byte a reg byte x Statement [95] *((const byte*) RASTER) ← (byte) irq_raster_next [ ] ( [ ] ) always clobbers reg byte a Statement [96] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER [ ] ( [ ] ) always clobbers reg byte a Statement [97] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y -Statement [98] (byte) irq_cnt ← (byte) 0 [ ] ( [ ] ) always clobbers reg byte a -Statement [99] (byte) irq_raster_next ← (const byte) IRQ_RASTER_FIRST [ irq_raster_next ] ( [ irq_raster_next ] ) always clobbers reg byte a -Statement [100] (byte) irq_sprite_ypos ← (byte) irq_sprite_ypos + (byte) $15 [ irq_raster_next ] ( [ irq_raster_next ] ) always clobbers reg byte a reg byte x +Statement [98] (byte) irq_cnt ← (byte) 0 [ irq_sprite_ypos irq_sprite_ptr ] ( [ irq_sprite_ypos irq_sprite_ptr ] ) always clobbers reg byte a +Statement [99] (byte) irq_raster_next ← (const byte) IRQ_RASTER_FIRST [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] ) always clobbers reg byte a +Statement [100] (byte) irq_sprite_ypos ← (byte) irq_sprite_ypos + (byte) $15 [ irq_raster_next irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ptr ] ) always clobbers reg byte a reg byte x Statement [101] (byte) irq_sprite_ptr ← (byte) irq_sprite_ptr + (byte) 3 [ irq_raster_next ] ( [ irq_raster_next ] ) always clobbers reg byte a reg byte x Statement [102] (byte) irq_raster_next ← (byte) irq_raster_next + (byte) $15 [ irq_raster_next ] ( [ irq_raster_next ] ) always clobbers reg byte a reg byte x Statement [103] (byte) irq_sprite_ypos ← (const byte) SPRITES_FIRST_YPOS [ irq_raster_next ] ( [ irq_raster_next ] ) always clobbers reg byte a @@ -2391,17 +2391,17 @@ REGISTER UPLIFT SCOPES Uplift Scope [loop] 227.25: zp[1]:6 [ loop::s#2 loop::s#1 ] 202: zp[1]:17 [ loop::$1 ] 194: zp[1]:7 [ loop::idx#2 loop::idx#0 loop::idx#1 ] Uplift Scope [main] 23.1: zp[1]:2 [ main::s#2 main::s#1 ] 22: zp[1]:16 [ main::$6 ] 16.5: zp[1]:15 [ main::s2#0 ] 11: zp[1]:4 [ main::ypos#2 main::ypos#1 ] 9.62: zp[1]:3 [ main::xpos#2 main::xpos#1 ] Uplift Scope [sprites_init] 25.3: zp[1]:8 [ sprites_init::s#2 sprites_init::s#1 ] 22: zp[1]:18 [ sprites_init::s2#0 ] 15.58: zp[1]:9 [ sprites_init::xpos#2 sprites_init::xpos#1 ] -Uplift Scope [] 25.67: zp[1]:5 [ sin_idx#10 sin_idx#3 ] 14: zp[1]:12 [ irq_sprite_ypos ] 6: zp[1]:14 [ irq_cnt ] 1.56: zp[1]:13 [ irq_sprite_ptr ] 1: zp[1]:11 [ irq_raster_next ] 0.4: zp[1]:10 [ render_screen_showing ] Uplift Scope [sprites_irq] 6.5: zp[1]:21 [ sprites_irq::raster_sprite_gfx_modify ] 4: zp[1]:20 [ sprites_irq::$0 ] 4: zp[1]:24 [ sprites_irq::ptr#4 ] 4: zp[1]:26 [ sprites_irq::ptr#2 ] 2.67: zp[1]:23 [ sprites_irq::ptr#3 ] 2.67: zp[1]:25 [ sprites_irq::ptr#1 ] 2.5: zp[1]:19 [ sprites_irq::ypos#0 ] 2.5: zp[1]:22 [ sprites_irq::ptr#0 ] +Uplift Scope [] 25.67: zp[1]:5 [ sin_idx#10 sin_idx#3 ] 0.48: zp[1]:12 [ irq_sprite_ypos ] 0.48: zp[1]:14 [ irq_cnt ] 0.45: zp[1]:13 [ irq_sprite_ptr ] 0.44: zp[1]:11 [ irq_raster_next ] 0.4: zp[1]:10 [ render_screen_showing ] Uplift Scope [sprites_irq_init] Uplifting [loop] best 13962 combination zp[1]:6 [ loop::s#2 loop::s#1 ] reg byte a [ loop::$1 ] reg byte x [ loop::idx#2 loop::idx#0 loop::idx#1 ] Uplifting [main] best 13682 combination reg byte y [ main::s#2 main::s#1 ] reg byte a [ main::$6 ] reg byte x [ main::s2#0 ] zp[1]:4 [ main::ypos#2 main::ypos#1 ] zp[1]:3 [ main::xpos#2 main::xpos#1 ] Limited combination testing to 100 combinations of 324 possible. Uplifting [sprites_init] best 13512 combination reg byte y [ sprites_init::s#2 sprites_init::s#1 ] reg byte x [ sprites_init::s2#0 ] zp[1]:9 [ sprites_init::xpos#2 sprites_init::xpos#1 ] -Uplifting [] best 13512 combination zp[1]:5 [ sin_idx#10 sin_idx#3 ] zp[1]:12 [ irq_sprite_ypos ] zp[1]:14 [ irq_cnt ] zp[1]:13 [ irq_sprite_ptr ] zp[1]:11 [ irq_raster_next ] zp[1]:10 [ render_screen_showing ] Uplifting [sprites_irq] best 13488 combination zp[1]:21 [ sprites_irq::raster_sprite_gfx_modify ] 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[1]:25 [ sprites_irq::ptr#1 ] zp[1]:19 [ sprites_irq::ypos#0 ] zp[1]:22 [ sprites_irq::ptr#0 ] Limited combination testing to 100 combinations of 12288 possible. +Uplifting [] best 13488 combination zp[1]:5 [ sin_idx#10 sin_idx#3 ] zp[1]:12 [ irq_sprite_ypos ] zp[1]:14 [ irq_cnt ] zp[1]:13 [ irq_sprite_ptr ] zp[1]:11 [ irq_raster_next ] zp[1]:10 [ render_screen_showing ] Uplifting [sprites_irq_init] best 13488 combination Attempting to uplift remaining variables inzp[1]:6 [ loop::s#2 loop::s#1 ] Uplifting [loop] best 13488 combination zp[1]:6 [ loop::s#2 loop::s#1 ] @@ -2409,22 +2409,22 @@ Attempting to uplift remaining variables inzp[1]:5 [ sin_idx#10 sin_idx#3 ] Uplifting [] best 13488 combination zp[1]:5 [ sin_idx#10 sin_idx#3 ] Attempting to uplift remaining variables inzp[1]:9 [ sprites_init::xpos#2 sprites_init::xpos#1 ] Uplifting [sprites_init] best 13488 combination zp[1]:9 [ sprites_init::xpos#2 sprites_init::xpos#1 ] -Attempting to uplift remaining variables inzp[1]:12 [ irq_sprite_ypos ] -Uplifting [] best 13488 combination zp[1]:12 [ irq_sprite_ypos ] Attempting to uplift remaining variables inzp[1]:4 [ main::ypos#2 main::ypos#1 ] Uplifting [main] best 13488 combination zp[1]:4 [ main::ypos#2 main::ypos#1 ] Attempting to uplift remaining variables inzp[1]:3 [ main::xpos#2 main::xpos#1 ] Uplifting [main] best 13488 combination zp[1]:3 [ main::xpos#2 main::xpos#1 ] Attempting to uplift remaining variables inzp[1]:21 [ sprites_irq::raster_sprite_gfx_modify ] Uplifting [sprites_irq] best 13488 combination zp[1]:21 [ sprites_irq::raster_sprite_gfx_modify ] -Attempting to uplift remaining variables inzp[1]:14 [ irq_cnt ] -Uplifting [] best 13488 combination zp[1]:14 [ irq_cnt ] Attempting to uplift remaining variables inzp[1]:25 [ sprites_irq::ptr#1 ] Uplifting [sprites_irq] best 13476 combination reg byte x [ sprites_irq::ptr#1 ] Attempting to uplift remaining variables inzp[1]:19 [ sprites_irq::ypos#0 ] Uplifting [sprites_irq] best 13461 combination reg byte a [ sprites_irq::ypos#0 ] Attempting to uplift remaining variables inzp[1]:22 [ sprites_irq::ptr#0 ] Uplifting [sprites_irq] best 13446 combination reg byte x [ sprites_irq::ptr#0 ] +Attempting to uplift remaining variables inzp[1]:12 [ irq_sprite_ypos ] +Uplifting [] best 13446 combination zp[1]:12 [ irq_sprite_ypos ] +Attempting to uplift remaining variables inzp[1]:14 [ irq_cnt ] +Uplifting [] best 13446 combination zp[1]:14 [ irq_cnt ] Attempting to uplift remaining variables inzp[1]:13 [ irq_sprite_ptr ] Uplifting [] best 13446 combination zp[1]:13 [ irq_sprite_ptr ] Attempting to uplift remaining variables inzp[1]:11 [ irq_raster_next ] @@ -3210,10 +3210,10 @@ FINAL SYMBOL TABLE (const byte*) SPRITES_YPOS = (byte*) 53249 (const word) SPRITE_PTRS = (word) $3f8 (const byte*) VIC_CONTROL = (byte*) 53265 -(byte) irq_cnt loadstore zp[1]:8 6.0 -(byte) irq_raster_next loadstore zp[1]:5 1.0 -(byte) irq_sprite_ptr loadstore zp[1]:7 1.5555555555555558 -(byte) irq_sprite_ypos loadstore zp[1]:6 14.0 +(byte) irq_cnt loadstore zp[1]:8 0.48000000000000004 +(byte) irq_raster_next loadstore zp[1]:5 0.44444444444444453 +(byte) irq_sprite_ptr loadstore zp[1]:7 0.45161290322580644 +(byte) irq_sprite_ypos loadstore zp[1]:6 0.48275862068965525 (void()) loop() (byte~) loop::$1 reg byte a 202.0 (label) loop::@1 diff --git a/src/test/ref/complex/tetris/test-sprites.sym b/src/test/ref/complex/tetris/test-sprites.sym index df3507ad6..89ffab6a0 100644 --- a/src/test/ref/complex/tetris/test-sprites.sym +++ b/src/test/ref/complex/tetris/test-sprites.sym @@ -43,10 +43,10 @@ (const byte*) SPRITES_YPOS = (byte*) 53249 (const word) SPRITE_PTRS = (word) $3f8 (const byte*) VIC_CONTROL = (byte*) 53265 -(byte) irq_cnt loadstore zp[1]:8 6.0 -(byte) irq_raster_next loadstore zp[1]:5 1.0 -(byte) irq_sprite_ptr loadstore zp[1]:7 1.5555555555555558 -(byte) irq_sprite_ypos loadstore zp[1]:6 14.0 +(byte) irq_cnt loadstore zp[1]:8 0.48000000000000004 +(byte) irq_raster_next loadstore zp[1]:5 0.44444444444444453 +(byte) irq_sprite_ptr loadstore zp[1]:7 0.45161290322580644 +(byte) irq_sprite_ypos loadstore zp[1]:6 0.48275862068965525 (void()) loop() (byte~) loop::$1 reg byte a 202.0 (label) loop::@1 diff --git a/src/test/ref/complex/tetris/tetris.log b/src/test/ref/complex/tetris/tetris.log index 5015b7a3e..cafe323d0 100644 --- a/src/test/ref/complex/tetris/tetris.log +++ b/src/test/ref/complex/tetris/tetris.log @@ -10548,10 +10548,10 @@ VARIABLE REGISTER WEIGHTS (byte) game_over#27 6.0 (byte) game_over#52 0.34782608695652173 (byte) game_over#65 0.42857142857142855 -(byte) irq_cnt loadstore 6.0 -(byte) irq_raster_next loadstore 1.0 -(byte) irq_sprite_ptr loadstore 1.5555555555555558 -(byte) irq_sprite_ypos loadstore 14.0 +(byte) irq_cnt loadstore 0.48000000000000004 +(byte) irq_raster_next loadstore 0.44444444444444453 +(byte) irq_sprite_ptr loadstore 0.45161290322580644 +(byte) irq_sprite_ypos loadstore 0.48275862068965525 (byte()) keyboard_event_get() (byte) keyboard_event_get::return (byte) keyboard_event_get::return#1 4.0 @@ -11017,7 +11017,7 @@ VARIABLE REGISTER WEIGHTS (byte*) render_show::toD0182_gfx (byte) render_show::toD0182_return (byte*) render_show::toD0182_screen -(dword) score_bcd loadstore 60.0 +(dword) score_bcd loadstore 0.04316546762589928 (void()) sid_rnd_init() (void()) sprites_init() (byte) sprites_init::s @@ -15606,12 +15606,12 @@ sprites_irq: { REGISTER UPLIFT POTENTIAL REGISTERS Statement [1] (byte) render_screen_showing ← (byte) 0 [ ] ( [ ] ) always clobbers reg byte a -Statement [2] (dword) score_bcd ← (dword) 0 [ ] ( [ ] ) always clobbers reg byte a -Statement [7] (byte) irq_raster_next ← (const byte) IRQ_RASTER_FIRST [ ] ( [ ] ) always clobbers reg byte a -Statement [8] (byte) irq_sprite_ypos ← (const byte) SPRITES_FIRST_YPOS+(byte) $15 [ ] ( [ ] ) always clobbers reg byte a -Statement [10] (byte) irq_sprite_ptr ← (const byte) toSpritePtr1_return#0+(byte) 3 [ ] ( [ ] ) always clobbers reg byte a -Statement [11] (byte) irq_cnt ← (byte) 0 [ ] ( [ ] ) always clobbers reg byte a -Statement [33] (byte*) current_piece_gfx#111 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ current_ypos#97 current_ypos#6 current_xpos#118 current_xpos#100 current_piece_gfx#111 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 ] ( main:13 [ current_ypos#97 current_ypos#6 current_xpos#118 current_xpos#100 current_piece_gfx#111 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 ] ) always clobbers reg byte a +Statement [2] (dword) score_bcd ← (dword) 0 [ score_bcd ] ( [ score_bcd ] ) always clobbers reg byte a +Statement [7] (byte) irq_raster_next ← (const byte) IRQ_RASTER_FIRST [ score_bcd ] ( [ score_bcd ] ) always clobbers reg byte a +Statement [8] (byte) irq_sprite_ypos ← (const byte) SPRITES_FIRST_YPOS+(byte) $15 [ score_bcd ] ( [ score_bcd ] ) always clobbers reg byte a +Statement [10] (byte) irq_sprite_ptr ← (const byte) toSpritePtr1_return#0+(byte) 3 [ score_bcd ] ( [ score_bcd ] ) always clobbers reg byte a +Statement [11] (byte) irq_cnt ← (byte) 0 [ score_bcd ] ( [ score_bcd ] ) always clobbers reg byte a +Statement [33] (byte*) current_piece_gfx#111 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ score_bcd current_ypos#97 current_ypos#6 current_xpos#118 current_xpos#100 current_piece_gfx#111 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 ] ( main:13 [ score_bcd current_ypos#97 current_ypos#6 current_xpos#118 current_xpos#100 current_piece_gfx#111 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:23 [ current_ypos#13 current_ypos#97 current_ypos#98 ] Removing always clobbered register reg byte a as potential for zp[1]:55 [ current_ypos#38 current_ypos#3 current_ypos#11 current_ypos#19 current_ypos#6 ] Removing always clobbered register reg byte a as potential for zp[1]:25 [ current_xpos#59 current_xpos#118 current_xpos#119 ] @@ -15621,9 +15621,9 @@ Removing always clobbered register reg byte a as potential for zp[1]:63 [ curren Removing always clobbered register reg byte a as potential for zp[1]:69 [ 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 ] Removing always clobbered register reg byte a as potential for zp[1]:59 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#21 current_movedown_slow#1 current_movedown_slow#23 current_movedown_slow#65 current_movedown_slow#10 ] Removing always clobbered register reg byte a as potential for zp[1]:70 [ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ] -Statement [38] (byte*) current_piece#101 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#101 current_movedown_slow#1 game_over#52 ] ( main:13 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#101 current_movedown_slow#1 game_over#52 ] ) always clobbers reg byte a -Statement [39] (byte*) current_piece_gfx#123 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#101 current_piece_gfx#123 current_movedown_slow#1 game_over#52 ] ( main:13 [ current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#101 current_piece_gfx#123 current_movedown_slow#1 game_over#52 ] ) always clobbers reg byte a -Statement [41] if(*((const byte*) RASTER)!=(byte) $ff) goto main::@2 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 ] ( main:13 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 ] ) always clobbers reg byte a +Statement [38] (byte*) current_piece#101 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#101 current_movedown_slow#1 game_over#52 ] ( main:13 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#101 current_movedown_slow#1 game_over#52 ] ) always clobbers reg byte a +Statement [39] (byte*) current_piece_gfx#123 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ score_bcd current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#101 current_piece_gfx#123 current_movedown_slow#1 game_over#52 ] ( main:13 [ score_bcd current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#101 current_piece_gfx#123 current_movedown_slow#1 game_over#52 ] ) always clobbers reg byte a +Statement [41] if(*((const byte*) RASTER)!=(byte) $ff) goto main::@2 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 ] ( main:13 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:2 [ render_screen_show#16 render_screen_show#13 ] Removing always clobbered register reg byte a as potential for zp[1]:3 [ render_screen_render#18 render_screen_render#11 ] Removing always clobbered register reg byte a as potential for zp[1]:64 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ] @@ -15631,23 +15631,23 @@ Removing always clobbered register reg byte a as potential for zp[1]:88 [ keyboa Removing always clobbered register reg byte a as potential for zp[1]:4 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ] Removing always clobbered register reg byte a as potential for zp[1]:58 [ level#33 level#10 level#17 level#19 level#21 ] Removing always clobbered register reg byte a as potential for zp[1]:60 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#62 level_bcd#21 level_bcd#8 ] -Statement [62] (byte*) current_piece_gfx#112 ← (byte*) current_piece_gfx#18 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 current_ypos#98 render_screen_render#64 current_xpos#119 current_piece_gfx#112 ] ( main:13 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 current_ypos#98 render_screen_render#64 current_xpos#119 current_piece_gfx#112 ] ) always clobbers reg byte a +Statement [62] (byte*) current_piece_gfx#112 ← (byte*) current_piece_gfx#18 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 current_ypos#98 render_screen_render#64 current_xpos#119 current_piece_gfx#112 ] ( main:13 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 current_ypos#98 render_screen_render#64 current_xpos#119 current_piece_gfx#112 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:24 [ render_screen_render#33 render_screen_render#64 ] -Statement [72] (byte) render_screen_render#11 ← (byte) render_screen_render#18 ^ (byte) $20 [ render_screen_show#16 render_screen_render#11 ] ( main:13::render_screen_swap:71 [ current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_show#16 render_screen_render#11 ] ) always clobbers reg byte a -Statement [73] (byte) render_screen_show#13 ← (byte) render_screen_show#16 ^ (byte) $20 [ render_screen_show#13 render_screen_render#11 ] ( main:13::render_screen_swap:71 [ current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_show#13 render_screen_render#11 ] ) always clobbers reg byte a -Statement [78] (byte*) render_bcd::screen#0 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#0 ] ( main:13::render_score:69 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#0 ] ) always clobbers reg byte a -Statement [81] (byte*) render_bcd::screen#1 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#1 ] ( main:13::render_score:69 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#1 ] ) always clobbers reg byte a -Statement [84] (byte*) render_bcd::screen#2 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#2 ] ( main:13::render_score:69 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#2 ] ) always clobbers reg byte a -Statement [87] (byte) render_bcd::bcd#3 ← > (word) lines_bcd#15 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#3 ] ( main:13::render_score:69 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#3 ] ) always clobbers reg byte a -Statement [88] (byte*) render_bcd::screen#3 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#3 render_bcd::screen#3 ] ( main:13::render_score:69 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#3 render_bcd::screen#3 ] ) always clobbers reg byte a +Statement [72] (byte) render_screen_render#11 ← (byte) render_screen_render#18 ^ (byte) $20 [ render_screen_show#16 render_screen_render#11 ] ( main:13::render_screen_swap:71 [ score_bcd current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_show#16 render_screen_render#11 ] ) always clobbers reg byte a +Statement [73] (byte) render_screen_show#13 ← (byte) render_screen_show#16 ^ (byte) $20 [ render_screen_show#13 render_screen_render#11 ] ( main:13::render_screen_swap:71 [ score_bcd current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_show#13 render_screen_render#11 ] ) always clobbers reg byte a +Statement [78] (byte*) render_bcd::screen#0 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#0 ] ( main:13::render_score:69 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#0 ] ) always clobbers reg byte a +Statement [81] (byte*) render_bcd::screen#1 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#1 ] ( main:13::render_score:69 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#1 ] ) always clobbers reg byte a +Statement [84] (byte*) render_bcd::screen#2 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#2 ] ( main:13::render_score:69 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#2 ] ) always clobbers reg byte a +Statement [87] (byte) render_bcd::bcd#3 ← > (word) lines_bcd#15 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#3 ] ( main:13::render_score:69 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#3 ] ) always clobbers reg byte a +Statement [88] (byte*) render_bcd::screen#3 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#3 render_bcd::screen#3 ] ( main:13::render_score:69 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#3 render_bcd::screen#3 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:12 [ 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 ] -Statement [90] (byte) render_bcd::bcd#4 ← < (word) lines_bcd#15 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#4 ] ( main:13::render_score:69 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#4 ] ) always clobbers reg byte a -Statement [91] (byte*) render_bcd::screen#4 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#4 render_bcd::screen#4 ] ( main:13::render_score:69 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#4 render_bcd::screen#4 ] ) always clobbers reg byte a -Statement [93] (byte*) render_bcd::screen#5 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::screen#5 ] ( main:13::render_score:69 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::screen#5 ] ) always clobbers reg byte a -Statement [98] (byte*) render_bcd::screen_pos#0 ← (byte*) render_bcd::screen#6 + (word) render_bcd::offset#6 [ render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] ( main:13::render_score:69::render_bcd:80 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:83 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:86 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:89 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:92 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:95 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] ) always clobbers reg byte a +Statement [90] (byte) render_bcd::bcd#4 ← < (word) lines_bcd#15 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#4 ] ( main:13::render_score:69 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#4 ] ) always clobbers reg byte a +Statement [91] (byte*) render_bcd::screen#4 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#4 render_bcd::screen#4 ] ( main:13::render_score:69 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#4 render_bcd::screen#4 ] ) always clobbers reg byte a +Statement [93] (byte*) render_bcd::screen#5 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::screen#5 ] ( main:13::render_score:69 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::screen#5 ] ) always clobbers reg byte a +Statement [98] (byte*) render_bcd::screen_pos#0 ← (byte*) render_bcd::screen#6 + (word) render_bcd::offset#6 [ render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] ( main:13::render_score:69::render_bcd:80 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:83 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:86 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:89 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:92 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:95 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:11 [ render_bcd::only_low#6 ] -Statement [100] (byte~) render_bcd::$5 ← (byte) render_bcd::bcd#6 >> (byte) 4 [ render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] ( main:13::render_score:69::render_bcd:80 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] main:13::render_score:69::render_bcd:83 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] main:13::render_score:69::render_bcd:86 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] main:13::render_score:69::render_bcd:89 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] main:13::render_score:69::render_bcd:92 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] main:13::render_score:69::render_bcd:95 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] ) always clobbers reg byte a -Statement [102] *((byte*) render_bcd::screen_pos#0) ← (byte~) render_bcd::$6 [ render_bcd::bcd#6 render_bcd::screen_pos#0 ] ( main:13::render_score:69::render_bcd:80 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:83 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:86 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:89 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:92 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:95 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::bcd#6 render_bcd::screen_pos#0 ] ) always clobbers reg byte y +Statement [100] (byte~) render_bcd::$5 ← (byte) render_bcd::bcd#6 >> (byte) 4 [ render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] ( main:13::render_score:69::render_bcd:80 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] main:13::render_score:69::render_bcd:83 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] main:13::render_score:69::render_bcd:86 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] main:13::render_score:69::render_bcd:89 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] main:13::render_score:69::render_bcd:92 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] main:13::render_score:69::render_bcd:95 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] ) always clobbers reg byte a +Statement [102] *((byte*) render_bcd::screen_pos#0) ← (byte~) render_bcd::$6 [ render_bcd::bcd#6 render_bcd::screen_pos#0 ] ( main:13::render_score:69::render_bcd:80 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:83 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:86 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:89 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:92 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:95 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::bcd#6 render_bcd::screen_pos#0 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp[1]:2 [ render_screen_show#16 render_screen_show#13 ] Removing always clobbered register reg byte y as potential for zp[1]:59 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#21 current_movedown_slow#1 current_movedown_slow#23 current_movedown_slow#65 current_movedown_slow#10 ] Removing always clobbered register reg byte y as potential for zp[1]:63 [ current_piece_char#29 current_piece_char#10 current_piece_char#16 current_piece_char#5 ] @@ -15662,88 +15662,88 @@ Removing always clobbered register reg byte y as potential for zp[1]:58 [ level# Removing always clobbered register reg byte y as potential for zp[1]:3 [ render_screen_render#18 render_screen_render#11 ] Removing always clobbered register reg byte y as potential for zp[1]:60 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#62 level_bcd#21 level_bcd#8 ] Removing always clobbered register reg byte y as potential for zp[1]:12 [ 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 ] -Statement [105] (byte~) render_bcd::$3 ← (byte) render_bcd::bcd#6 & (byte) $f [ render_bcd::screen_pos#3 render_bcd::$3 ] ( main:13::render_score:69::render_bcd:80 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:13::render_score:69::render_bcd:83 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:13::render_score:69::render_bcd:86 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:13::render_score:69::render_bcd:89 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:13::render_score:69::render_bcd:92 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:13::render_score:69::render_bcd:95 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::screen_pos#3 render_bcd::$3 ] ) always clobbers reg byte a -Statement [107] *((byte*) render_bcd::screen_pos#3) ← (byte~) render_bcd::$4 [ ] ( main:13::render_score:69::render_bcd:80 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:13::render_score:69::render_bcd:83 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:13::render_score:69::render_bcd:86 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:13::render_score:69::render_bcd:89 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:13::render_score:69::render_bcd:92 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:13::render_score:69::render_bcd:95 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 ] ) always clobbers reg byte y -Statement [113] (byte~) render_next::$6 ← (byte) next_piece_idx#12 << (byte) 1 [ next_piece_idx#12 render_next::screen_next_area#11 render_next::$6 ] ( main:13::render_next:37 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 next_piece_idx#12 render_next::screen_next_area#11 render_next::$6 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 next_piece_idx#12 render_next::screen_next_area#11 render_next::$6 ] ) always clobbers reg byte a +Statement [105] (byte~) render_bcd::$3 ← (byte) render_bcd::bcd#6 & (byte) $f [ render_bcd::screen_pos#3 render_bcd::$3 ] ( main:13::render_score:69::render_bcd:80 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:13::render_score:69::render_bcd:83 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:13::render_score:69::render_bcd:86 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:13::render_score:69::render_bcd:89 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:13::render_score:69::render_bcd:92 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:13::render_score:69::render_bcd:95 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::screen_pos#3 render_bcd::$3 ] ) always clobbers reg byte a +Statement [107] *((byte*) render_bcd::screen_pos#3) ← (byte~) render_bcd::$4 [ ] ( main:13::render_score:69::render_bcd:80 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:13::render_score:69::render_bcd:83 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:13::render_score:69::render_bcd:86 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:13::render_score:69::render_bcd:89 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:13::render_score:69::render_bcd:92 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:13::render_score:69::render_bcd:95 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 ] ) always clobbers reg byte y +Statement [113] (byte~) render_next::$6 ← (byte) next_piece_idx#12 << (byte) 1 [ next_piece_idx#12 render_next::screen_next_area#11 render_next::$6 ] ( main:13::render_next:37 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 next_piece_idx#12 render_next::screen_next_area#11 render_next::$6 ] main:13::render_next:67 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 next_piece_idx#12 render_next::screen_next_area#11 render_next::$6 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:16 [ next_piece_idx#12 next_piece_idx#76 next_piece_idx#77 ] -Statement [115] (byte*) render_next::next_piece_gfx#9 ← (byte*)*((const word*) PIECES + (byte~) render_next::$6) [ render_next::screen_next_area#11 render_next::next_piece_char#0 render_next::next_piece_gfx#9 ] ( main:13::render_next:37 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::screen_next_area#11 render_next::next_piece_char#0 render_next::next_piece_gfx#9 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_next::screen_next_area#11 render_next::next_piece_char#0 render_next::next_piece_gfx#9 ] ) always clobbers reg byte a +Statement [115] (byte*) render_next::next_piece_gfx#9 ← (byte*)*((const word*) PIECES + (byte~) render_next::$6) [ render_next::screen_next_area#11 render_next::next_piece_char#0 render_next::next_piece_gfx#9 ] ( main:13::render_next:37 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::screen_next_area#11 render_next::next_piece_char#0 render_next::next_piece_gfx#9 ] main:13::render_next:67 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_next::screen_next_area#11 render_next::next_piece_char#0 render_next::next_piece_gfx#9 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:131 [ render_next::next_piece_char#0 ] -Statement [118] (byte) render_next::cell#0 ← *((byte*) render_next::next_piece_gfx#2) [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#2 render_next::screen_next_area#5 render_next::c#2 render_next::cell#0 ] ( main:13::render_next:37 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#2 render_next::screen_next_area#5 render_next::c#2 render_next::cell#0 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#2 render_next::screen_next_area#5 render_next::c#2 render_next::cell#0 ] ) always clobbers reg byte a reg byte y +Statement [118] (byte) render_next::cell#0 ← *((byte*) render_next::next_piece_gfx#2) [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#2 render_next::screen_next_area#5 render_next::c#2 render_next::cell#0 ] ( main:13::render_next:37 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#2 render_next::screen_next_area#5 render_next::c#2 render_next::cell#0 ] main:13::render_next:67 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#2 render_next::screen_next_area#5 render_next::c#2 render_next::cell#0 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp[1]:172 [ play_spawn_current::$7 ] Removing always clobbered register reg byte y as potential for zp[1]:131 [ render_next::next_piece_char#0 ] Removing always clobbered register reg byte a as potential for zp[1]:17 [ render_next::l#7 render_next::l#1 ] Removing always clobbered register reg byte y as potential for zp[1]:17 [ render_next::l#7 render_next::l#1 ] Removing always clobbered register reg byte a as potential for zp[1]:22 [ render_next::c#2 render_next::c#1 ] Removing always clobbered register reg byte y as potential for zp[1]:22 [ render_next::c#2 render_next::c#1 ] -Statement [121] *((byte*) render_next::screen_next_area#5) ← (byte) 0 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ( main:13::render_next:37 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ) always clobbers reg byte a reg byte y -Statement [125] (byte*) render_next::screen_next_area#4 ← (byte*) render_next::screen_next_area#3 + (byte) $24 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] ( main:13::render_next:37 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] ) always clobbers reg byte a -Statement [129] *((byte*) render_next::screen_next_area#5) ← (byte) render_next::next_piece_char#0 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ( main:13::render_next:37 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ) always clobbers reg byte a reg byte y -Statement [134] (byte) render_moving::i#1 ← (byte) render_moving::i#3 + (byte) 4 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] ( main:13::render_moving:35 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] ) always clobbers reg byte a +Statement [121] *((byte*) render_next::screen_next_area#5) ← (byte) 0 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ( main:13::render_next:37 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] main:13::render_next:67 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ) always clobbers reg byte a reg byte y +Statement [125] (byte*) render_next::screen_next_area#4 ← (byte*) render_next::screen_next_area#3 + (byte) $24 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] ( main:13::render_next:37 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] main:13::render_next:67 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] ) always clobbers reg byte a +Statement [129] *((byte*) render_next::screen_next_area#5) ← (byte) render_next::next_piece_char#0 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ( main:13::render_next:37 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] main:13::render_next:67 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ) always clobbers reg byte a reg byte y +Statement [134] (byte) render_moving::i#1 ← (byte) render_moving::i#3 + (byte) 4 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] ( main:13::render_moving:35 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] main:13::render_moving:64 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:28 [ current_piece_char#68 current_piece_char#99 current_piece_char#100 ] Removing always clobbered register reg byte a as potential for zp[1]:29 [ render_moving::ypos#2 render_moving::ypos#0 render_moving::ypos#1 ] Removing always clobbered register reg byte a as potential for zp[1]:30 [ render_moving::l#4 render_moving::l#1 ] -Statement [140] (byte~) render_moving::$1 ← (byte) render_screen_render#33 + (byte) render_moving::ypos#2 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] ( main:13::render_moving:35 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] ) always clobbers reg byte a +Statement [140] (byte~) render_moving::$1 ← (byte) render_screen_render#33 + (byte) render_moving::ypos#2 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] ( main:13::render_moving:35 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] main:13::render_moving:64 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:31 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ] -Statement [141] (byte~) render_moving::$6 ← (byte~) render_moving::$1 << (byte) 1 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] ( main:13::render_moving:35 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] ) always clobbers reg byte a -Statement [142] (byte*) render_moving::screen_line#0 ← *((const byte**) screen_lines_1 + (byte~) render_moving::$6) [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] ( main:13::render_moving:35 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] ) always clobbers reg byte a -Statement [145] (byte) render_moving::current_cell#0 ← *((byte*) current_piece_gfx#64 + (byte) render_moving::i#4) [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] ( main:13::render_moving:35 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] ) always clobbers reg byte a +Statement [141] (byte~) render_moving::$6 ← (byte~) render_moving::$1 << (byte) 1 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] ( main:13::render_moving:35 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] main:13::render_moving:64 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] ) always clobbers reg byte a +Statement [142] (byte*) render_moving::screen_line#0 ← *((const byte**) screen_lines_1 + (byte~) render_moving::$6) [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] ( main:13::render_moving:35 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] main:13::render_moving:64 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] ) always clobbers reg byte a +Statement [145] (byte) render_moving::current_cell#0 ← *((byte*) current_piece_gfx#64 + (byte) render_moving::i#4) [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] ( main:13::render_moving:35 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] main:13::render_moving:64 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:32 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 ] Removing always clobbered register reg byte a as potential for zp[1]:33 [ render_moving::c#2 render_moving::c#1 ] -Statement [148] *((byte*) render_moving::screen_line#0 + (byte) render_moving::xpos#2) ← (byte) current_piece_char#68 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] ( main:13::render_moving:35 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] ) always clobbers reg byte a -Statement [154] (byte~) render_playfield::$0 ← (byte) render_screen_render#22 + (byte) render_playfield::l#2 [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$0 ] ( main:13::render_playfield:30 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$0 ] main:13::render_playfield:58 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$0 ] ) always clobbers reg byte a +Statement [148] *((byte*) render_moving::screen_line#0 + (byte) render_moving::xpos#2) ← (byte) current_piece_char#68 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] ( main:13::render_moving:35 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] main:13::render_moving:64 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] ) always clobbers reg byte a +Statement [154] (byte~) render_playfield::$0 ← (byte) render_screen_render#22 + (byte) render_playfield::l#2 [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$0 ] ( main:13::render_playfield:30 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$0 ] main:13::render_playfield:58 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:34 [ render_screen_render#22 render_screen_render#63 ] Removing always clobbered register reg byte a as potential for zp[1]:35 [ render_playfield::l#2 render_playfield::l#1 ] Removing always clobbered register reg byte a as potential for zp[1]:36 [ render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 ] -Statement [155] (byte~) render_playfield::$3 ← (byte~) render_playfield::$0 << (byte) 1 [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$3 ] ( main:13::render_playfield:30 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$3 ] main:13::render_playfield:58 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$3 ] ) always clobbers reg byte a -Statement [156] (byte*) render_playfield::screen_line#0 ← *((const byte**) screen_lines_1 + (byte~) render_playfield::$3) [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] ( main:13::render_playfield:30 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] main:13::render_playfield:58 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] ) always clobbers reg byte a -Statement [158] *((byte*) render_playfield::screen_line#2) ← *((const byte*) playfield + (byte) render_playfield::i#2) [ render_screen_render#22 render_playfield::l#2 render_playfield::i#2 render_playfield::screen_line#2 render_playfield::c#2 ] ( main:13::render_playfield:30 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#2 render_playfield::screen_line#2 render_playfield::c#2 ] main:13::render_playfield:58 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#2 render_playfield::screen_line#2 render_playfield::c#2 ] ) always clobbers reg byte a reg byte y +Statement [155] (byte~) render_playfield::$3 ← (byte~) render_playfield::$0 << (byte) 1 [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$3 ] ( main:13::render_playfield:30 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$3 ] main:13::render_playfield:58 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$3 ] ) always clobbers reg byte a +Statement [156] (byte*) render_playfield::screen_line#0 ← *((const byte**) screen_lines_1 + (byte~) render_playfield::$3) [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] ( main:13::render_playfield:30 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] main:13::render_playfield:58 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] ) always clobbers reg byte a +Statement [158] *((byte*) render_playfield::screen_line#2) ← *((const byte*) playfield + (byte) render_playfield::i#2) [ render_screen_render#22 render_playfield::l#2 render_playfield::i#2 render_playfield::screen_line#2 render_playfield::c#2 ] ( main:13::render_playfield:30 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#2 render_playfield::screen_line#2 render_playfield::c#2 ] main:13::render_playfield:58 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#2 render_playfield::screen_line#2 render_playfield::c#2 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp[1]:34 [ render_screen_render#22 render_screen_render#63 ] Removing always clobbered register reg byte y as potential for zp[1]:35 [ render_playfield::l#2 render_playfield::l#1 ] Removing always clobbered register reg byte y as potential for zp[1]:36 [ render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 ] Removing always clobbered register reg byte a as potential for zp[1]:39 [ render_playfield::c#2 render_playfield::c#1 ] Removing always clobbered register reg byte y as potential for zp[1]:39 [ render_playfield::c#2 render_playfield::c#1 ] -Statement [177] (byte) play_movement::render#2 ← (byte) play_movement::render#1 + (byte~) play_movement::$3 [ current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_movement::render#2 ] ( main:13::play_movement:53 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_movement::render#2 ] ) always clobbers reg byte a +Statement [177] (byte) play_movement::render#2 ← (byte) play_movement::render#1 + (byte~) play_movement::$3 [ score_bcd current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_movement::render#2 ] ( main:13::play_movement:53 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_movement::render#2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:123 [ play_movement::key_event#0 ] -Statement [182] (byte) play_movement::return#0 ← (byte) play_movement::render#2 + (byte~) play_movement::$4 [ current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::return#0 current_orientation#25 current_piece_gfx#21 current_xpos#26 ] ( main:13::play_movement:53 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::return#0 current_orientation#25 current_piece_gfx#21 current_xpos#26 ] ) always clobbers reg byte a -Statement [187] (byte~) play_move_rotate::$5 ← (byte) current_orientation#20 + (byte) $10 [ current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::$5 ] ( main:13::play_movement:53::play_move_rotate:179 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::$5 ] ) always clobbers reg byte a +Statement [182] (byte) play_movement::return#0 ← (byte) play_movement::render#2 + (byte~) play_movement::$4 [ score_bcd current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::return#0 current_orientation#25 current_piece_gfx#21 current_xpos#26 ] ( main:13::play_movement:53 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::return#0 current_orientation#25 current_piece_gfx#21 current_xpos#26 ] ) always clobbers reg byte a +Statement [187] (byte~) play_move_rotate::$5 ← (byte) current_orientation#20 + (byte) $10 [ current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::$5 ] ( main:13::play_movement:53::play_move_rotate:179 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::$5 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:145 [ play_movement::render#2 ] -Statement [193] (byte*) current_piece#98 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#3 play_collision::ypos#3 play_collision::orientation#3 current_piece#98 ] ( main:13::play_movement:53::play_move_rotate:179 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#3 play_collision::ypos#3 play_collision::orientation#3 current_piece#98 ] ) always clobbers reg byte a +Statement [193] (byte*) current_piece#98 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#3 play_collision::ypos#3 play_collision::orientation#3 current_piece#98 ] ( main:13::play_movement:53::play_move_rotate:179 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#3 play_collision::ypos#3 play_collision::orientation#3 current_piece#98 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:42 [ play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 ] Removing always clobbered register reg byte a as potential for zp[1]:46 [ play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 ] Removing always clobbered register reg byte a as potential for zp[1]:47 [ 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 ] Removing always clobbered register reg byte a as potential for zp[1]:45 [ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ] -Statement [199] (byte*) current_piece_gfx#7 ← (byte*) current_piece#15 + (byte) current_orientation#7 [ current_piece#15 current_ypos#19 current_xpos#26 current_orientation#7 current_piece_gfx#7 ] ( main:13::play_movement:53::play_move_rotate:179 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_xpos#26 current_orientation#7 current_piece_gfx#7 ] ) always clobbers reg byte a -Statement [200] (byte~) play_move_rotate::$7 ← (byte) current_orientation#20 - (byte) $10 [ current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::$7 ] ( main:13::play_movement:53::play_move_rotate:179 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::$7 ] ) always clobbers reg byte a -Statement [203] (byte*) play_collision::piece_gfx#0 ← (byte*) current_piece#17 + (byte) play_collision::orientation#5 [ play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] ( main:13::play_movement:53::play_move_rotate:179::play_collision:194 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:13::play_movement:53::play_move_leftright:174::play_collision:232 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:13::play_movement:53::play_move_leftright:174::play_collision:243 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:13::play_movement:53::play_move_down:167::play_collision:267 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:13::play_spawn_current:26::play_collision:296 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:13::play_spawn_current:28::play_collision:296 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280::play_collision:296 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] ) always clobbers reg byte a +Statement [199] (byte*) current_piece_gfx#7 ← (byte*) current_piece#15 + (byte) current_orientation#7 [ current_piece#15 current_ypos#19 current_xpos#26 current_orientation#7 current_piece_gfx#7 ] ( main:13::play_movement:53::play_move_rotate:179 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_xpos#26 current_orientation#7 current_piece_gfx#7 ] ) always clobbers reg byte a +Statement [200] (byte~) play_move_rotate::$7 ← (byte) current_orientation#20 - (byte) $10 [ current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::$7 ] ( main:13::play_movement:53::play_move_rotate:179 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::$7 ] ) always clobbers reg byte a +Statement [203] (byte*) play_collision::piece_gfx#0 ← (byte*) current_piece#17 + (byte) play_collision::orientation#5 [ play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] ( main:13::play_movement:53::play_move_rotate:179::play_collision:194 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:13::play_movement:53::play_move_leftright:174::play_collision:232 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:13::play_movement:53::play_move_leftright:174::play_collision:243 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:13::play_movement:53::play_move_down:167::play_collision:267 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:13::play_spawn_current:26::play_collision:296 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:13::play_spawn_current:28::play_collision:296 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280::play_collision:296 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:40 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 ] -Statement [205] (byte~) play_collision::$14 ← (byte) play_collision::yp#2 << (byte) 1 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] ( main:13::play_movement:53::play_move_rotate:179::play_collision:194 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] main:13::play_movement:53::play_move_leftright:174::play_collision:232 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] main:13::play_movement:53::play_move_leftright:174::play_collision:243 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] main:13::play_movement:53::play_move_down:167::play_collision:267 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] main:13::play_spawn_current:26::play_collision:296 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] main:13::play_spawn_current:28::play_collision:296 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280::play_collision:296 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] ) always clobbers reg byte a +Statement [205] (byte~) play_collision::$14 ← (byte) play_collision::yp#2 << (byte) 1 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] ( main:13::play_movement:53::play_move_rotate:179::play_collision:194 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] main:13::play_movement:53::play_move_leftright:174::play_collision:232 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] main:13::play_movement:53::play_move_leftright:174::play_collision:243 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] main:13::play_movement:53::play_move_down:167::play_collision:267 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] main:13::play_spawn_current:26::play_collision:296 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] main:13::play_spawn_current:28::play_collision:296 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280::play_collision:296 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:49 [ play_collision::i#2 play_collision::i#3 play_collision::i#10 play_collision::i#12 ] Removing always clobbered register reg byte a as potential for zp[1]:48 [ play_collision::l#6 play_collision::l#1 ] -Statement [206] (byte*) play_collision::playfield_line#0 ← *((const byte**) playfield_lines + (byte~) play_collision::$14) [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] ( main:13::play_movement:53::play_move_rotate:179::play_collision:194 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:13::play_movement:53::play_move_leftright:174::play_collision:232 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:13::play_movement:53::play_move_leftright:174::play_collision:243 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:13::play_movement:53::play_move_down:167::play_collision:267 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:13::play_spawn_current:26::play_collision:296 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:13::play_spawn_current:28::play_collision:296 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280::play_collision:296 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] ) always clobbers reg byte a -Statement [210] if(*((byte*) play_collision::piece_gfx#0 + (byte) play_collision::i#2)==(byte) 0) goto play_collision::@3 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] ( main:13::play_movement:53::play_move_rotate:179::play_collision:194 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_movement:53::play_move_leftright:174::play_collision:232 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_movement:53::play_move_leftright:174::play_collision:243 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_movement:53::play_move_down:167::play_collision:267 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_spawn_current:26::play_collision:296 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_spawn_current:28::play_collision:296 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280::play_collision:296 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] ) always clobbers reg byte a +Statement [206] (byte*) play_collision::playfield_line#0 ← *((const byte**) playfield_lines + (byte~) play_collision::$14) [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] ( main:13::play_movement:53::play_move_rotate:179::play_collision:194 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:13::play_movement:53::play_move_leftright:174::play_collision:232 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:13::play_movement:53::play_move_leftright:174::play_collision:243 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:13::play_movement:53::play_move_down:167::play_collision:267 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:13::play_spawn_current:26::play_collision:296 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:13::play_spawn_current:28::play_collision:296 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280::play_collision:296 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] ) always clobbers reg byte a +Statement [210] if(*((byte*) play_collision::piece_gfx#0 + (byte) play_collision::i#2)==(byte) 0) goto play_collision::@3 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] ( main:13::play_movement:53::play_move_rotate:179::play_collision:194 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_movement:53::play_move_leftright:174::play_collision:232 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_movement:53::play_move_leftright:174::play_collision:243 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_movement:53::play_move_down:167::play_collision:267 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_spawn_current:26::play_collision:296 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_spawn_current:28::play_collision:296 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280::play_collision:296 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:50 [ play_collision::xp#2 play_collision::xp#8 play_collision::xp#1 ] Removing always clobbered register reg byte a as potential for zp[1]:51 [ play_collision::c#2 play_collision::c#1 ] Removing always clobbered register reg byte a as potential for zp[1]:158 [ play_collision::i#1 ] -Statement [212] (byte~) play_collision::$5 ← (byte) play_collision::xp#2 & (byte) $80 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] ( main:13::play_movement:53::play_move_rotate:179::play_collision:194 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] main:13::play_movement:53::play_move_leftright:174::play_collision:232 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] main:13::play_movement:53::play_move_leftright:174::play_collision:243 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] main:13::play_movement:53::play_move_down:167::play_collision:267 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] main:13::play_spawn_current:26::play_collision:296 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] main:13::play_spawn_current:28::play_collision:296 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280::play_collision:296 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] ) always clobbers reg byte a -Statement [215] if(*((byte*) play_collision::playfield_line#0 + (byte) play_collision::xp#2)==(byte) 0) goto play_collision::@3 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] ( main:13::play_movement:53::play_move_rotate:179::play_collision:194 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_movement:53::play_move_leftright:174::play_collision:232 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_movement:53::play_move_leftright:174::play_collision:243 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_movement:53::play_move_down:167::play_collision:267 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_spawn_current:26::play_collision:296 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_spawn_current:28::play_collision:296 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280::play_collision:296 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] ) always clobbers reg byte a -Statement [231] (byte*) current_piece#97 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#97 play_collision::orientation#2 play_collision::ypos#2 play_collision::xpos#2 ] ( main:13::play_movement:53::play_move_leftright:174 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#97 play_collision::orientation#2 play_collision::ypos#2 play_collision::xpos#2 ] ) always clobbers reg byte a -Statement [242] (byte*) current_piece#96 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#96 play_collision::orientation#1 play_collision::ypos#1 play_collision::xpos#1 ] ( main:13::play_movement:53::play_move_leftright:174 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#96 play_collision::orientation#1 play_collision::ypos#1 play_collision::xpos#1 ] ) always clobbers reg byte a -Statement [266] (byte*) current_piece#95 ← (byte*) current_piece#10 [ current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece#95 play_collision::orientation#0 play_collision::ypos#0 play_collision::xpos#0 ] ( main:13::play_movement:53::play_move_down:167 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece#95 play_collision::orientation#0 play_collision::ypos#0 play_collision::xpos#0 ] ) always clobbers reg byte a -Statement [281] (byte*) current_piece#92 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#92 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 ] ( main:13::play_movement:53::play_move_down:167 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#92 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 ] ) always clobbers reg byte a -Statement [282] (byte*) current_piece_gfx#116 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#92 current_piece_gfx#116 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 ] ( main:13::play_movement:53::play_move_down:167 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#92 current_piece_gfx#116 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 ] ) always clobbers reg byte a -Statement [289] (byte~) play_spawn_current::$7 ← (byte) play_spawn_current::current_piece_idx#0 << (byte) 1 [ play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] ( main:13::play_spawn_current:26 [ current_movedown_slow#1 play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] main:13::play_spawn_current:28 [ current_movedown_slow#1 play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] ) always clobbers reg byte a +Statement [212] (byte~) play_collision::$5 ← (byte) play_collision::xp#2 & (byte) $80 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] ( main:13::play_movement:53::play_move_rotate:179::play_collision:194 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] main:13::play_movement:53::play_move_leftright:174::play_collision:232 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] main:13::play_movement:53::play_move_leftright:174::play_collision:243 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] main:13::play_movement:53::play_move_down:167::play_collision:267 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] main:13::play_spawn_current:26::play_collision:296 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] main:13::play_spawn_current:28::play_collision:296 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280::play_collision:296 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] ) always clobbers reg byte a +Statement [215] if(*((byte*) play_collision::playfield_line#0 + (byte) play_collision::xp#2)==(byte) 0) goto play_collision::@3 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] ( main:13::play_movement:53::play_move_rotate:179::play_collision:194 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_movement:53::play_move_leftright:174::play_collision:232 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_movement:53::play_move_leftright:174::play_collision:243 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_movement:53::play_move_down:167::play_collision:267 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_spawn_current:26::play_collision:296 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_spawn_current:28::play_collision:296 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280::play_collision:296 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] ) always clobbers reg byte a +Statement [231] (byte*) current_piece#97 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#97 play_collision::orientation#2 play_collision::ypos#2 play_collision::xpos#2 ] ( main:13::play_movement:53::play_move_leftright:174 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#97 play_collision::orientation#2 play_collision::ypos#2 play_collision::xpos#2 ] ) always clobbers reg byte a +Statement [242] (byte*) current_piece#96 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#96 play_collision::orientation#1 play_collision::ypos#1 play_collision::xpos#1 ] ( main:13::play_movement:53::play_move_leftright:174 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#96 play_collision::orientation#1 play_collision::ypos#1 play_collision::xpos#1 ] ) always clobbers reg byte a +Statement [266] (byte*) current_piece#95 ← (byte*) current_piece#10 [ score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece#95 play_collision::orientation#0 play_collision::ypos#0 play_collision::xpos#0 ] ( main:13::play_movement:53::play_move_down:167 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece#95 play_collision::orientation#0 play_collision::ypos#0 play_collision::xpos#0 ] ) always clobbers reg byte a +Statement [281] (byte*) current_piece#92 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#92 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 ] ( main:13::play_movement:53::play_move_down:167 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#92 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 ] ) always clobbers reg byte a +Statement [282] (byte*) current_piece_gfx#116 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ score_bcd current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#92 current_piece_gfx#116 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 ] ( main:13::play_movement:53::play_move_down:167 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#92 current_piece_gfx#116 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 ] ) always clobbers reg byte a +Statement [289] (byte~) play_spawn_current::$7 ← (byte) play_spawn_current::current_piece_idx#0 << (byte) 1 [ play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] ( main:13::play_spawn_current:26 [ score_bcd current_movedown_slow#1 play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] main:13::play_spawn_current:28 [ score_bcd current_movedown_slow#1 play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:171 [ play_spawn_current::current_piece_idx#0 ] -Statement [295] (byte*) current_piece#99 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#99 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] ( main:13::play_spawn_current:26 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#99 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] main:13::play_spawn_current:28 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#99 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#99 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] ) always clobbers reg byte a -Statement [308] (byte~) play_update_score::$2 ← < (word) lines_bcd#19 [ current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::$2 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::$2 ] ) always clobbers reg byte a +Statement [295] (byte*) current_piece#99 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#99 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] ( main:13::play_spawn_current:26 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#99 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] main:13::play_spawn_current:28 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#99 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#99 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] ) always clobbers reg byte a +Statement [308] (byte~) play_update_score::$2 ← < (word) lines_bcd#19 [ score_bcd current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::$2 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::$2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:170 [ play_update_score::removed#0 ] -Statement [310] (byte~) play_update_score::$9 ← (byte) play_update_score::removed#0 << (byte) 2 [ current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::$9 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::$9 ] ) always clobbers reg byte a +Statement [310] (byte~) play_update_score::$9 ← (byte) play_update_score::removed#0 << (byte) 2 [ score_bcd current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::$9 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::$9 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:177 [ play_update_score::lines_before#0 ] -Statement [311] (dword) play_update_score::add_bcd#0 ← *((const dword*) score_add_bcd + (byte~) play_update_score::$9) [ current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::add_bcd#0 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::add_bcd#0 ] ) always clobbers reg byte a -Statement [313] (word) lines_bcd#29 ← (word) lines_bcd#19 + (byte) play_update_score::removed#0 [ current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 play_update_score::add_bcd#0 lines_bcd#29 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 play_update_score::add_bcd#0 lines_bcd#29 ] ) always clobbers reg byte a -Statement [314] (dword) score_bcd ← (dword) score_bcd + (dword) play_update_score::add_bcd#0 [ current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 ] ) always clobbers reg byte a -Statement [316] (byte~) play_update_score::$4 ← < (word) lines_bcd#29 [ current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 play_update_score::$4 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 play_update_score::$4 ] ) always clobbers reg byte a -Statement [328] (byte~) play_increase_level::$1 ← (byte) level_bcd#21 & (byte) $f [ level#21 current_movedown_slow#65 level_bcd#21 play_increase_level::$1 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:320 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#29 level#21 current_movedown_slow#65 level_bcd#21 play_increase_level::$1 ] ) always clobbers reg byte a -Statement [330] (byte) level_bcd#8 ← (byte) level_bcd#21 + (byte) 6 [ level#21 current_movedown_slow#65 level_bcd#8 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:320 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#29 level#21 current_movedown_slow#65 level_bcd#8 ] ) always clobbers reg byte a reg byte x +Statement [311] (dword) play_update_score::add_bcd#0 ← *((const dword*) score_add_bcd + (byte~) play_update_score::$9) [ score_bcd current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::add_bcd#0 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::add_bcd#0 ] ) always clobbers reg byte a +Statement [313] (word) lines_bcd#29 ← (word) lines_bcd#19 + (byte) play_update_score::removed#0 [ score_bcd current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 play_update_score::add_bcd#0 lines_bcd#29 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 play_update_score::add_bcd#0 lines_bcd#29 ] ) always clobbers reg byte a +Statement [314] (dword) score_bcd ← (dword) score_bcd + (dword) play_update_score::add_bcd#0 [ score_bcd current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 ] ) always clobbers reg byte a +Statement [316] (byte~) play_update_score::$4 ← < (word) lines_bcd#29 [ score_bcd current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 play_update_score::$4 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 play_update_score::$4 ] ) always clobbers reg byte a +Statement [328] (byte~) play_increase_level::$1 ← (byte) level_bcd#21 & (byte) $f [ level#21 current_movedown_slow#65 level_bcd#21 play_increase_level::$1 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:320 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd lines_bcd#29 level#21 current_movedown_slow#65 level_bcd#21 play_increase_level::$1 ] ) always clobbers reg byte a +Statement [330] (byte) level_bcd#8 ← (byte) level_bcd#21 + (byte) 6 [ level#21 current_movedown_slow#65 level_bcd#8 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:320 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd lines_bcd#29 level#21 current_movedown_slow#65 level_bcd#8 ] ) always clobbers reg byte a reg byte x Removing always clobbered register reg byte x as potential for zp[1]:2 [ render_screen_show#16 render_screen_show#13 ] Removing always clobbered register reg byte x as potential for zp[1]:3 [ render_screen_render#18 render_screen_render#11 ] Removing always clobbered register reg byte x as potential for zp[1]:88 [ 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 ] @@ -15752,224 +15752,224 @@ Removing always clobbered register reg byte x as potential for zp[1]:70 [ game_o Removing always clobbered register reg byte x as potential for zp[1]:69 [ 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 ] Removing always clobbered register reg byte x as potential for zp[1]:58 [ level#33 level#10 level#17 level#19 level#21 ] Removing always clobbered register reg byte x as potential for zp[1]:59 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#21 current_movedown_slow#1 current_movedown_slow#23 current_movedown_slow#65 current_movedown_slow#10 ] -Statement [334] (byte~) play_increase_level::$5 ← (byte) play_increase_level::b#2 << (byte) 2 [ level#21 current_movedown_slow#65 level_bcd#62 play_increase_level::b#2 play_increase_level::$5 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:320 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#29 level#21 current_movedown_slow#65 level_bcd#62 play_increase_level::b#2 play_increase_level::$5 ] ) always clobbers reg byte a +Statement [334] (byte~) play_increase_level::$5 ← (byte) play_increase_level::b#2 << (byte) 2 [ level#21 current_movedown_slow#65 level_bcd#62 play_increase_level::b#2 play_increase_level::$5 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:320 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd lines_bcd#29 level#21 current_movedown_slow#65 level_bcd#62 play_increase_level::b#2 play_increase_level::$5 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:71 [ play_increase_level::b#2 play_increase_level::b#1 ] -Statement [335] *((const dword*) score_add_bcd + (byte~) play_increase_level::$5) ← *((const dword*) score_add_bcd + (byte~) play_increase_level::$5) + *((const dword*) SCORE_BASE_BCD + (byte~) play_increase_level::$5) [ level#21 current_movedown_slow#65 level_bcd#62 play_increase_level::b#2 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:320 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#29 level#21 current_movedown_slow#65 level_bcd#62 play_increase_level::b#2 ] ) always clobbers reg byte a -Statement [353] (byte) play_remove_lines::w#2 ← (byte) play_remove_lines::w#1 + (const byte) PLAYFIELD_COLS [ play_remove_lines::y#8 play_remove_lines::removed#11 play_remove_lines::r#1 play_remove_lines::w#2 ] ( main:13::play_movement:53::play_move_down:167::play_remove_lines:274 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_remove_lines::y#8 play_remove_lines::removed#11 play_remove_lines::r#1 play_remove_lines::w#2 ] ) always clobbers reg byte a +Statement [335] *((const dword*) score_add_bcd + (byte~) play_increase_level::$5) ← *((const dword*) score_add_bcd + (byte~) play_increase_level::$5) + *((const dword*) SCORE_BASE_BCD + (byte~) play_increase_level::$5) [ level#21 current_movedown_slow#65 level_bcd#62 play_increase_level::b#2 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:320 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd lines_bcd#29 level#21 current_movedown_slow#65 level_bcd#62 play_increase_level::b#2 ] ) always clobbers reg byte a +Statement [353] (byte) play_remove_lines::w#2 ← (byte) play_remove_lines::w#1 + (const byte) PLAYFIELD_COLS [ play_remove_lines::y#8 play_remove_lines::removed#11 play_remove_lines::r#1 play_remove_lines::w#2 ] ( main:13::play_movement:53::play_move_down:167::play_remove_lines:274 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_remove_lines::y#8 play_remove_lines::removed#11 play_remove_lines::r#1 play_remove_lines::w#2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:72 [ play_remove_lines::y#8 play_remove_lines::y#1 ] Removing always clobbered register reg byte a as potential for zp[1]:73 [ play_remove_lines::removed#11 play_remove_lines::removed#8 play_remove_lines::removed#1 ] Removing always clobbered register reg byte a as potential for zp[1]:74 [ play_remove_lines::r#2 play_remove_lines::r#3 play_remove_lines::r#1 ] -Statement [361] *((const byte*) playfield + (byte) play_remove_lines::w#6) ← (byte) 0 [ play_remove_lines::removed#8 play_remove_lines::w#6 ] ( main:13::play_movement:53::play_move_down:167::play_remove_lines:274 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_remove_lines::removed#8 play_remove_lines::w#6 ] ) always clobbers reg byte a +Statement [361] *((const byte*) playfield + (byte) play_remove_lines::w#6) ← (byte) 0 [ play_remove_lines::removed#8 play_remove_lines::w#6 ] ( main:13::play_movement:53::play_move_down:167::play_remove_lines:274 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_remove_lines::removed#8 play_remove_lines::w#6 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:77 [ 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 ] -Statement [365] (byte~) play_lock_current::$4 ← (byte) play_lock_current::yp#2 << (byte) 1 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::$4 ] ( main:13::play_movement:53::play_move_down:167::play_lock_current:272 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::$4 ] ) always clobbers reg byte a +Statement [365] (byte~) play_lock_current::$4 ← (byte) play_lock_current::yp#2 << (byte) 1 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::$4 ] ( main:13::play_movement:53::play_move_down:167::play_lock_current:272 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::$4 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:78 [ play_lock_current::yp#2 play_lock_current::yp#0 play_lock_current::yp#1 ] Removing always clobbered register reg byte a as potential for zp[1]:80 [ play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 ] Removing always clobbered register reg byte a as potential for zp[1]:79 [ play_lock_current::l#6 play_lock_current::l#1 ] -Statement [366] (byte*) play_lock_current::playfield_line#0 ← *((const byte**) playfield_lines + (byte~) play_lock_current::$4) [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::playfield_line#0 ] ( main:13::play_movement:53::play_move_down:167::play_lock_current:272 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::playfield_line#0 ] ) always clobbers reg byte a -Statement [370] if(*((byte*) current_piece_gfx#13 + (byte) play_lock_current::i#2)==(byte) 0) goto play_lock_current::@3 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ( main:13::play_movement:53::play_move_down:167::play_lock_current:272 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ) always clobbers reg byte a +Statement [366] (byte*) play_lock_current::playfield_line#0 ← *((const byte**) playfield_lines + (byte~) play_lock_current::$4) [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::playfield_line#0 ] ( main:13::play_movement:53::play_move_down:167::play_lock_current:272 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::playfield_line#0 ] ) always clobbers reg byte a +Statement [370] if(*((byte*) current_piece_gfx#13 + (byte) play_lock_current::i#2)==(byte) 0) goto play_lock_current::@3 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ( main:13::play_movement:53::play_move_down:167::play_lock_current:272 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:81 [ play_lock_current::xp#2 play_lock_current::xp#0 play_lock_current::xp#1 ] Removing always clobbered register reg byte a as potential for zp[1]:82 [ play_lock_current::c#2 play_lock_current::c#1 ] Removing always clobbered register reg byte a as potential for zp[1]:191 [ play_lock_current::i#1 ] -Statement [371] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::xp#2) ← (byte) current_piece_char#10 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ( main:13::play_movement:53::play_move_down:167::play_lock_current:272 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ) always clobbers reg byte a -Statement [382] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte) 3 [ keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] ( main:13::play_movement:53::play_move_down:167::keyboard_event_pressed:252 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:404 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:410 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:416 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:422 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] ) always clobbers reg byte a +Statement [371] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::xp#2) ← (byte) current_piece_char#10 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ( main:13::play_movement:53::play_move_down:167::play_lock_current:272 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ) always clobbers reg byte a +Statement [382] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte) 3 [ keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] ( main:13::play_movement:53::play_move_down:167::keyboard_event_pressed:252 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:404 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:410 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:416 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:422 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:54 [ 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 ] Removing always clobbered register reg byte a as potential for zp[1]:83 [ keyboard_event_pressed::keycode#5 ] -Statement [384] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte) 7 [ keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] ( main:13::play_movement:53::play_move_down:167::keyboard_event_pressed:252 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:404 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:410 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:416 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:422 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] ) always clobbers reg byte a +Statement [384] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte) 7 [ keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] ( main:13::play_movement:53::play_move_down:167::keyboard_event_pressed:252 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:404 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:410 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:416 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:422 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:193 [ keyboard_event_pressed::row_bits#0 ] -Statement [385] (byte) keyboard_event_pressed::return#11 ← (byte) keyboard_event_pressed::row_bits#0 & *((const byte*) keyboard_matrix_col_bitmask + (byte~) keyboard_event_pressed::$1) [ keyboard_event_pressed::return#11 ] ( main:13::play_movement:53::play_move_down:167::keyboard_event_pressed:252 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::return#11 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:404 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:410 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:416 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:422 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] ) always clobbers reg byte a -Statement [387] if((byte) keyboard_events_size#13==(byte) 0) goto keyboard_event_get::@return [ keyboard_events_size#13 ] ( main:13::keyboard_event_get:47 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 ] ) always clobbers reg byte a -Statement [389] (byte) keyboard_event_get::return#1 ← *((const byte*) keyboard_events + (byte) keyboard_events_size#4) [ keyboard_events_size#4 keyboard_event_get::return#1 ] ( main:13::keyboard_event_get:47 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#4 keyboard_event_get::return#1 ] ) always clobbers reg byte y -Statement [399] (byte) keyboard_event_scan::keycode#1 ← (byte) keyboard_event_scan::keycode#11 + (byte) 8 [ keyboard_event_scan::row#2 keyboard_events_size#30 keyboard_event_scan::keycode#1 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_events_size#30 keyboard_event_scan::keycode#1 ] ) always clobbers reg byte a +Statement [385] (byte) keyboard_event_pressed::return#11 ← (byte) keyboard_event_pressed::row_bits#0 & *((const byte*) keyboard_matrix_col_bitmask + (byte~) keyboard_event_pressed::$1) [ keyboard_event_pressed::return#11 ] ( main:13::play_movement:53::play_move_down:167::keyboard_event_pressed:252 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::return#11 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:404 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:410 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:416 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:422 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] ) always clobbers reg byte a +Statement [387] if((byte) keyboard_events_size#13==(byte) 0) goto keyboard_event_get::@return [ keyboard_events_size#13 ] ( main:13::keyboard_event_get:47 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 ] ) always clobbers reg byte a +Statement [389] (byte) keyboard_event_get::return#1 ← *((const byte*) keyboard_events + (byte) keyboard_events_size#4) [ keyboard_events_size#4 keyboard_event_get::return#1 ] ( main:13::keyboard_event_get:47 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#4 keyboard_event_get::return#1 ] ) always clobbers reg byte y +Statement [399] (byte) keyboard_event_scan::keycode#1 ← (byte) keyboard_event_scan::keycode#11 + (byte) 8 [ keyboard_event_scan::row#2 keyboard_events_size#30 keyboard_event_scan::keycode#1 ] ( main:13::keyboard_event_scan:45 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_events_size#30 keyboard_event_scan::keycode#1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:85 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] -Statement [429] (byte~) keyboard_event_scan::$15 ← (byte) keyboard_event_scan::row_scan#0 ^ *((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$15 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$15 ] ) always clobbers reg byte a +Statement [429] (byte~) keyboard_event_scan::$15 ← (byte) keyboard_event_scan::row_scan#0 ^ *((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$15 ] ( main:13::keyboard_event_scan:45 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$15 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:198 [ keyboard_event_scan::row_scan#0 ] Removing always clobbered register reg byte a as potential for zp[1]:86 [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ] Removing always clobbered register reg byte a as potential for zp[1]:87 [ 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 ] -Statement [432] if((byte) keyboard_events_size#10==(byte) 8) goto keyboard_event_scan::@10 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ) always clobbers reg byte a -Statement [433] (byte) keyboard_event_scan::event_type#0 ← (byte) keyboard_event_scan::row_scan#0 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_event_scan::col#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::event_type#0 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::event_type#0 ] ) always clobbers reg byte a -Statement [435] *((const byte*) keyboard_events + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ) always clobbers reg byte a reg byte y +Statement [432] if((byte) keyboard_events_size#10==(byte) 8) goto keyboard_event_scan::@10 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:13::keyboard_event_scan:45 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ) always clobbers reg byte a +Statement [433] (byte) keyboard_event_scan::event_type#0 ← (byte) keyboard_event_scan::row_scan#0 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_event_scan::col#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::event_type#0 ] ( main:13::keyboard_event_scan:45 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::event_type#0 ] ) always clobbers reg byte a +Statement [435] *((const byte*) keyboard_events + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:13::keyboard_event_scan:45 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp[1]:85 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] Removing always clobbered register reg byte y as potential for zp[1]:198 [ keyboard_event_scan::row_scan#0 ] Removing always clobbered register reg byte y as potential for zp[1]:86 [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ] Removing always clobbered register reg byte y as potential for zp[1]:87 [ 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 ] -Statement [441] *((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0 [ keyboard_event_scan::row#2 keyboard_event_scan::keycode#14 keyboard_events_size#29 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#14 keyboard_events_size#29 ] ) always clobbers reg byte a -Statement [442] (byte~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#10 | (byte) $40 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$23 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$23 ] ) always clobbers reg byte a -Statement [443] *((const byte*) keyboard_events + (byte) keyboard_events_size#10) ← (byte~) keyboard_event_scan::$23 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ) always clobbers reg byte y -Statement [445] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:13::keyboard_event_scan:45::keyboard_matrix_read:395 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 ] ) always clobbers reg byte a -Statement [446] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:13::keyboard_event_scan:45::keyboard_matrix_read:395 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_matrix_read::return#0 ] ) always clobbers reg byte a -Statement [448] if((byte) render_screen_show#16==(byte) 0) goto render_show::toD0181 [ render_screen_show#16 level#10 ] ( main:13::render_show:43 [ render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a -Statement [452] *((const byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1 + (byte) level#10) [ render_screen_show#16 level#10 ] ( main:13::render_show:43 [ render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a reg byte y -Statement [453] *((const byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2 + (byte) level#10) [ render_screen_show#16 level#10 ] ( main:13::render_show:43 [ render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a reg byte y -Statement [454] (byte) render_screen_showing ← (byte) render_screen_show#16 [ render_screen_show#16 level#10 ] ( main:13::render_show:43 [ render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a -Statement [459] (byte~) play_init::$2 ← (byte) play_init::j#2 << (byte) 1 [ play_init::j#2 play_init::pli#2 play_init::idx#2 play_init::$2 ] ( main:13::play_init:24 [ play_init::j#2 play_init::pli#2 play_init::idx#2 play_init::$2 ] ) always clobbers reg byte a +Statement [441] *((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0 [ keyboard_event_scan::row#2 keyboard_event_scan::keycode#14 keyboard_events_size#29 ] ( main:13::keyboard_event_scan:45 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#14 keyboard_events_size#29 ] ) always clobbers reg byte a +Statement [442] (byte~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#10 | (byte) $40 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$23 ] ( main:13::keyboard_event_scan:45 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$23 ] ) always clobbers reg byte a +Statement [443] *((const byte*) keyboard_events + (byte) keyboard_events_size#10) ← (byte~) keyboard_event_scan::$23 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:13::keyboard_event_scan:45 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ) always clobbers reg byte y +Statement [445] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:13::keyboard_event_scan:45::keyboard_matrix_read:395 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 ] ) always clobbers reg byte a +Statement [446] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:13::keyboard_event_scan:45::keyboard_matrix_read:395 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_matrix_read::return#0 ] ) always clobbers reg byte a +Statement [448] if((byte) render_screen_show#16==(byte) 0) goto render_show::toD0181 [ render_screen_show#16 level#10 ] ( main:13::render_show:43 [ score_bcd render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a +Statement [452] *((const byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1 + (byte) level#10) [ render_screen_show#16 level#10 ] ( main:13::render_show:43 [ score_bcd render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a reg byte y +Statement [453] *((const byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2 + (byte) level#10) [ render_screen_show#16 level#10 ] ( main:13::render_show:43 [ score_bcd render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a reg byte y +Statement [454] (byte) render_screen_showing ← (byte) render_screen_show#16 [ render_screen_show#16 level#10 ] ( main:13::render_show:43 [ score_bcd render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a +Statement [459] (byte~) play_init::$2 ← (byte) play_init::j#2 << (byte) 1 [ play_init::j#2 play_init::pli#2 play_init::idx#2 play_init::$2 ] ( main:13::play_init:24 [ score_bcd play_init::j#2 play_init::pli#2 play_init::idx#2 play_init::$2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:90 [ play_init::j#2 play_init::j#1 ] Removing always clobbered register reg byte a as potential for zp[1]:93 [ play_init::idx#2 play_init::idx#1 ] -Statement [460] *((const byte**) playfield_lines + (byte~) play_init::$2) ← (byte*) play_init::pli#2 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ( main:13::play_init:24 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ) always clobbers reg byte a -Statement [461] *((const byte*) playfield_lines_idx + (byte) play_init::j#2) ← (byte) play_init::idx#2 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ( main:13::play_init:24 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ) always clobbers reg byte a -Statement [462] (byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (const byte) PLAYFIELD_COLS [ play_init::j#2 play_init::idx#2 play_init::pli#1 ] ( main:13::play_init:24 [ play_init::j#2 play_init::idx#2 play_init::pli#1 ] ) always clobbers reg byte a -Statement [463] (byte) play_init::idx#1 ← (byte) play_init::idx#2 + (const byte) PLAYFIELD_COLS [ play_init::j#2 play_init::pli#1 play_init::idx#1 ] ( main:13::play_init:24 [ play_init::j#2 play_init::pli#1 play_init::idx#1 ] ) always clobbers reg byte a -Statement [466] *((const byte*) playfield_lines_idx+(const byte) PLAYFIELD_LINES) ← (const byte) PLAYFIELD_COLS*(const byte) PLAYFIELD_LINES [ ] ( main:13::play_init:24 [ ] ) always clobbers reg byte a -Statement [467] (byte) current_movedown_slow#1 ← *((const byte*) MOVEDOWN_SLOW_SPEEDS) [ current_movedown_slow#1 ] ( main:13::play_init:24 [ current_movedown_slow#1 ] ) always clobbers reg byte a -Statement [469] (byte~) play_init::$3 ← (byte) play_init::b#2 << (byte) 2 [ current_movedown_slow#1 play_init::b#2 play_init::$3 ] ( main:13::play_init:24 [ current_movedown_slow#1 play_init::b#2 play_init::$3 ] ) always clobbers reg byte a +Statement [460] *((const byte**) playfield_lines + (byte~) play_init::$2) ← (byte*) play_init::pli#2 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ( main:13::play_init:24 [ score_bcd play_init::j#2 play_init::pli#2 play_init::idx#2 ] ) always clobbers reg byte a +Statement [461] *((const byte*) playfield_lines_idx + (byte) play_init::j#2) ← (byte) play_init::idx#2 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ( main:13::play_init:24 [ score_bcd play_init::j#2 play_init::pli#2 play_init::idx#2 ] ) always clobbers reg byte a +Statement [462] (byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (const byte) PLAYFIELD_COLS [ play_init::j#2 play_init::idx#2 play_init::pli#1 ] ( main:13::play_init:24 [ score_bcd play_init::j#2 play_init::idx#2 play_init::pli#1 ] ) always clobbers reg byte a +Statement [463] (byte) play_init::idx#1 ← (byte) play_init::idx#2 + (const byte) PLAYFIELD_COLS [ play_init::j#2 play_init::pli#1 play_init::idx#1 ] ( main:13::play_init:24 [ score_bcd play_init::j#2 play_init::pli#1 play_init::idx#1 ] ) always clobbers reg byte a +Statement [466] *((const byte*) playfield_lines_idx+(const byte) PLAYFIELD_LINES) ← (const byte) PLAYFIELD_COLS*(const byte) PLAYFIELD_LINES [ ] ( main:13::play_init:24 [ score_bcd ] ) always clobbers reg byte a +Statement [467] (byte) current_movedown_slow#1 ← *((const byte*) MOVEDOWN_SLOW_SPEEDS) [ current_movedown_slow#1 ] ( main:13::play_init:24 [ score_bcd current_movedown_slow#1 ] ) always clobbers reg byte a +Statement [469] (byte~) play_init::$3 ← (byte) play_init::b#2 << (byte) 2 [ current_movedown_slow#1 play_init::b#2 play_init::$3 ] ( main:13::play_init:24 [ score_bcd current_movedown_slow#1 play_init::b#2 play_init::$3 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:94 [ play_init::b#2 play_init::b#1 ] -Statement [470] *((const dword*) score_add_bcd + (byte~) play_init::$3) ← *((const dword*) SCORE_BASE_BCD + (byte~) play_init::$3) [ current_movedown_slow#1 play_init::b#2 ] ( main:13::play_init:24 [ current_movedown_slow#1 play_init::b#2 ] ) always clobbers reg byte a -Statement [475] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER [ ] ( main:13::sprites_irq_init:22 [ ] ) always clobbers reg byte a +Statement [470] *((const dword*) score_add_bcd + (byte~) play_init::$3) ← *((const dword*) SCORE_BASE_BCD + (byte~) play_init::$3) [ current_movedown_slow#1 play_init::b#2 ] ( main:13::play_init:24 [ score_bcd current_movedown_slow#1 play_init::b#2 ] ) always clobbers reg byte a +Statement [475] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER [ ] ( main:13::sprites_irq_init:22 [ score_bcd ] ) always clobbers reg byte a Statement asm { ldaCIA1_INTERRUPT } always clobbers reg byte a -Statement [477] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:13::sprites_irq_init:22 [ ] ) always clobbers reg byte a -Statement [478] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO [ ] ( main:13::sprites_irq_init:22 [ ] ) always clobbers reg byte a -Statement [479] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR [ ] ( main:13::sprites_irq_init:22 [ ] ) always clobbers reg byte a -Statement [480] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) & (byte) $7f [ ] ( main:13::sprites_irq_init:22 [ ] ) always clobbers reg byte a -Statement [481] *((const byte*) RASTER) ← (const byte) IRQ_RASTER_FIRST [ ] ( main:13::sprites_irq_init:22 [ ] ) always clobbers reg byte a -Statement [482] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER [ ] ( main:13::sprites_irq_init:22 [ ] ) always clobbers reg byte a -Statement [483] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() [ ] ( main:13::sprites_irq_init:22 [ ] ) always clobbers reg byte a -Statement [486] *((const byte*) SPRITES_ENABLE) ← (byte) $f [ ] ( main:13::sprites_init:20 [ ] ) always clobbers reg byte a -Statement [487] *((const byte*) SPRITES_MC) ← (byte) 0 [ ] ( main:13::sprites_init:20 [ ] ) always clobbers reg byte a -Statement [488] *((const byte*) SPRITES_EXPAND_Y) ← *((const byte*) SPRITES_MC) [ ] ( main:13::sprites_init:20 [ ] ) always clobbers reg byte a -Statement [489] *((const byte*) SPRITES_EXPAND_X) ← *((const byte*) SPRITES_EXPAND_Y) [ ] ( main:13::sprites_init:20 [ ] ) always clobbers reg byte a -Statement [491] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte) 1 [ sprites_init::s#2 sprites_init::xpos#2 sprites_init::s2#0 ] ( main:13::sprites_init:20 [ sprites_init::s#2 sprites_init::xpos#2 sprites_init::s2#0 ] ) always clobbers reg byte a +Statement [477] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:13::sprites_irq_init:22 [ score_bcd ] ) always clobbers reg byte a +Statement [478] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO [ ] ( main:13::sprites_irq_init:22 [ score_bcd ] ) always clobbers reg byte a +Statement [479] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR [ ] ( main:13::sprites_irq_init:22 [ score_bcd ] ) always clobbers reg byte a +Statement [480] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) & (byte) $7f [ ] ( main:13::sprites_irq_init:22 [ score_bcd ] ) always clobbers reg byte a +Statement [481] *((const byte*) RASTER) ← (const byte) IRQ_RASTER_FIRST [ ] ( main:13::sprites_irq_init:22 [ score_bcd ] ) always clobbers reg byte a +Statement [482] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER [ ] ( main:13::sprites_irq_init:22 [ score_bcd ] ) always clobbers reg byte a +Statement [483] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() [ ] ( main:13::sprites_irq_init:22 [ score_bcd ] ) always clobbers reg byte a +Statement [486] *((const byte*) SPRITES_ENABLE) ← (byte) $f [ ] ( main:13::sprites_init:20 [ score_bcd ] ) always clobbers reg byte a +Statement [487] *((const byte*) SPRITES_MC) ← (byte) 0 [ ] ( main:13::sprites_init:20 [ score_bcd ] ) always clobbers reg byte a +Statement [488] *((const byte*) SPRITES_EXPAND_Y) ← *((const byte*) SPRITES_MC) [ ] ( main:13::sprites_init:20 [ score_bcd ] ) always clobbers reg byte a +Statement [489] *((const byte*) SPRITES_EXPAND_X) ← *((const byte*) SPRITES_EXPAND_Y) [ ] ( main:13::sprites_init:20 [ score_bcd ] ) always clobbers reg byte a +Statement [491] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte) 1 [ sprites_init::s#2 sprites_init::xpos#2 sprites_init::s2#0 ] ( main:13::sprites_init:20 [ score_bcd sprites_init::s#2 sprites_init::xpos#2 sprites_init::s2#0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:95 [ sprites_init::s#2 sprites_init::s#1 ] Removing always clobbered register reg byte a as potential for zp[1]:96 [ sprites_init::xpos#2 sprites_init::xpos#1 ] -Statement [492] *((const byte*) SPRITES_XPOS + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:13::sprites_init:20 [ sprites_init::s#2 sprites_init::xpos#2 ] ) always clobbers reg byte a -Statement [493] *((const byte*) SPRITES_COLS + (byte) sprites_init::s#2) ← (const byte) BLACK [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:13::sprites_init:20 [ sprites_init::s#2 sprites_init::xpos#2 ] ) always clobbers reg byte a -Statement [494] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte) $18 [ sprites_init::s#2 sprites_init::xpos#1 ] ( main:13::sprites_init:20 [ sprites_init::s#2 sprites_init::xpos#1 ] ) always clobbers reg byte a -Statement [499] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:13::render_init:18 [ ] ) always clobbers reg byte a -Statement [501] *((const byte*) CIA2_PORT_A) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:13::render_init:18 [ ] ) always clobbers reg byte a -Statement [502] *((const byte*) D011) ← (const byte) VIC_ECM|(const byte) VIC_DEN|(const byte) VIC_RSEL|(byte) 3 [ ] ( main:13::render_init:18 [ ] ) always clobbers reg byte a -Statement [503] *((const byte*) BORDERCOL) ← (const byte) BLACK [ ] ( main:13::render_init:18 [ ] ) always clobbers reg byte a -Statement [504] *((const byte*) BGCOL1) ← (const byte) BLACK [ ] ( main:13::render_init:18 [ ] ) always clobbers reg byte a -Statement [505] *((const byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1) [ ] ( main:13::render_init:18 [ ] ) always clobbers reg byte a -Statement [506] *((const byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2) [ ] ( main:13::render_init:18 [ ] ) always clobbers reg byte a -Statement [507] *((const byte*) BGCOL4) ← (const byte) GREY [ ] ( main:13::render_init:18 [ ] ) always clobbers reg byte a -Statement [512] (byte~) render_init::$5 ← (byte) render_init::i#2 << (byte) 1 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$5 ] ( main:13::render_init:18 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$5 ] ) always clobbers reg byte a +Statement [492] *((const byte*) SPRITES_XPOS + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:13::sprites_init:20 [ score_bcd sprites_init::s#2 sprites_init::xpos#2 ] ) always clobbers reg byte a +Statement [493] *((const byte*) SPRITES_COLS + (byte) sprites_init::s#2) ← (const byte) BLACK [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:13::sprites_init:20 [ score_bcd sprites_init::s#2 sprites_init::xpos#2 ] ) always clobbers reg byte a +Statement [494] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte) $18 [ sprites_init::s#2 sprites_init::xpos#1 ] ( main:13::sprites_init:20 [ score_bcd sprites_init::s#2 sprites_init::xpos#1 ] ) always clobbers reg byte a +Statement [499] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:13::render_init:18 [ score_bcd ] ) always clobbers reg byte a +Statement [501] *((const byte*) CIA2_PORT_A) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:13::render_init:18 [ score_bcd ] ) always clobbers reg byte a +Statement [502] *((const byte*) D011) ← (const byte) VIC_ECM|(const byte) VIC_DEN|(const byte) VIC_RSEL|(byte) 3 [ ] ( main:13::render_init:18 [ score_bcd ] ) always clobbers reg byte a +Statement [503] *((const byte*) BORDERCOL) ← (const byte) BLACK [ ] ( main:13::render_init:18 [ score_bcd ] ) always clobbers reg byte a +Statement [504] *((const byte*) BGCOL1) ← (const byte) BLACK [ ] ( main:13::render_init:18 [ score_bcd ] ) always clobbers reg byte a +Statement [505] *((const byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1) [ ] ( main:13::render_init:18 [ score_bcd ] ) always clobbers reg byte a +Statement [506] *((const byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2) [ ] ( main:13::render_init:18 [ score_bcd ] ) always clobbers reg byte a +Statement [507] *((const byte*) BGCOL4) ← (const byte) GREY [ ] ( main:13::render_init:18 [ score_bcd ] ) always clobbers reg byte a +Statement [512] (byte~) render_init::$5 ← (byte) render_init::i#2 << (byte) 1 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$5 ] ( main:13::render_init:18 [ score_bcd render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$5 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:97 [ render_init::i#2 render_init::i#1 ] -Statement [513] *((const byte**) screen_lines_1 + (byte~) render_init::$5) ← (byte*) render_init::li_1#2 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$5 ] ( main:13::render_init:18 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$5 ] ) always clobbers reg byte a +Statement [513] *((const byte**) screen_lines_1 + (byte~) render_init::$5) ← (byte*) render_init::li_1#2 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$5 ] ( main:13::render_init:18 [ score_bcd render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$5 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:215 [ render_init::$5 ] -Statement [514] *((const byte**) screen_lines_2 + (byte~) render_init::$5) ← (byte*) render_init::li_2#2 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 ] ( main:13::render_init:18 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 ] ) always clobbers reg byte a -Statement [515] (byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte) $28 [ render_init::i#2 render_init::li_2#2 render_init::li_1#1 ] ( main:13::render_init:18 [ render_init::i#2 render_init::li_2#2 render_init::li_1#1 ] ) always clobbers reg byte a -Statement [516] (byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte) $28 [ render_init::i#2 render_init::li_1#1 render_init::li_2#1 ] ( main:13::render_init:18 [ render_init::i#2 render_init::li_1#1 render_init::li_2#1 ] ) always clobbers reg byte a -Statement [523] *((byte*) render_screen_original::screen#5) ← (const byte) render_screen_original::SPACE [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] ( main:13::render_init:18::render_screen_original:508 [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] main:13::render_init:18::render_screen_original:510 [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] ) always clobbers reg byte a reg byte y +Statement [514] *((const byte**) screen_lines_2 + (byte~) render_init::$5) ← (byte*) render_init::li_2#2 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 ] ( main:13::render_init:18 [ score_bcd render_init::i#2 render_init::li_1#2 render_init::li_2#2 ] ) always clobbers reg byte a +Statement [515] (byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte) $28 [ render_init::i#2 render_init::li_2#2 render_init::li_1#1 ] ( main:13::render_init:18 [ score_bcd render_init::i#2 render_init::li_2#2 render_init::li_1#1 ] ) always clobbers reg byte a +Statement [516] (byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte) $28 [ render_init::i#2 render_init::li_1#1 render_init::li_2#1 ] ( main:13::render_init:18 [ score_bcd render_init::i#2 render_init::li_1#1 render_init::li_2#1 ] ) always clobbers reg byte a +Statement [523] *((byte*) render_screen_original::screen#5) ← (const byte) render_screen_original::SPACE [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] ( main:13::render_init:18::render_screen_original:508 [ score_bcd render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] main:13::render_init:18::render_screen_original:510 [ score_bcd render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte a as potential for zp[1]:102 [ render_screen_original::y#6 render_screen_original::y#1 ] Removing always clobbered register reg byte y as potential for zp[1]:102 [ render_screen_original::y#6 render_screen_original::y#1 ] Removing always clobbered register reg byte a as potential for zp[1]:111 [ 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 ] Removing always clobbered register reg byte y as potential for zp[1]:111 [ 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 ] -Statement [525] *((byte*) render_screen_original::cols#4) ← (const byte) BLACK [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] ( main:13::render_init:18::render_screen_original:508 [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] main:13::render_init:18::render_screen_original:510 [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] ) always clobbers reg byte a reg byte y -Statement [530] *((byte*) render_screen_original::screen#6) ← *((byte*) render_screen_original::oscr#2) [ render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] ( main:13::render_init:18::render_screen_original:508 [ render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] main:13::render_init:18::render_screen_original:510 [ render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] ) always clobbers reg byte a reg byte y -Statement [533] *((byte*) render_screen_original::cols#5) ← *((byte*) render_screen_original::ocols#2) [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] ( main:13::render_init:18::render_screen_original:508 [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] main:13::render_init:18::render_screen_original:510 [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] ) always clobbers reg byte a reg byte y -Statement [539] *((byte*) render_screen_original::screen#7) ← (const byte) render_screen_original::SPACE [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] ( main:13::render_init:18::render_screen_original:508 [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] main:13::render_init:18::render_screen_original:510 [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] ) always clobbers reg byte a reg byte y -Statement [541] *((byte*) render_screen_original::cols#6) ← (const byte) BLACK [ render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] ( main:13::render_init:18::render_screen_original:508 [ render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] main:13::render_init:18::render_screen_original:510 [ render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] ) always clobbers reg byte a reg byte y -Statement [548] *((const word*) SID_VOICE3_FREQ) ← (word) $ffff [ ] ( main:13::sid_rnd_init:16 [ ] ) always clobbers reg byte a -Statement [549] *((const byte*) SID_VOICE3_CONTROL) ← (const byte) SID_CONTROL_NOISE [ ] ( main:13::sid_rnd_init:16 [ ] ) always clobbers reg byte a -Statement [559] if(*((const byte*) RASTER)<(byte) sprites_irq::raster_sprite_gfx_modify) goto sprites_irq::@8 [ render_screen_showing irq_sprite_ptr sprites_irq::raster_sprite_gfx_modify ] ( [ render_screen_showing irq_sprite_ptr sprites_irq::raster_sprite_gfx_modify ] ) always clobbers reg byte a -Statement [561] if((byte) render_screen_showing==(byte) 0) goto sprites_irq::@1 [ sprites_irq::ptr#0 ] ( [ sprites_irq::ptr#0 ] ) always clobbers reg byte a +Statement [525] *((byte*) render_screen_original::cols#4) ← (const byte) BLACK [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] ( main:13::render_init:18::render_screen_original:508 [ score_bcd render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] main:13::render_init:18::render_screen_original:510 [ score_bcd render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] ) always clobbers reg byte a reg byte y +Statement [530] *((byte*) render_screen_original::screen#6) ← *((byte*) render_screen_original::oscr#2) [ render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] ( main:13::render_init:18::render_screen_original:508 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] main:13::render_init:18::render_screen_original:510 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] ) always clobbers reg byte a reg byte y +Statement [533] *((byte*) render_screen_original::cols#5) ← *((byte*) render_screen_original::ocols#2) [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] ( main:13::render_init:18::render_screen_original:508 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] main:13::render_init:18::render_screen_original:510 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] ) always clobbers reg byte a reg byte y +Statement [539] *((byte*) render_screen_original::screen#7) ← (const byte) render_screen_original::SPACE [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] ( main:13::render_init:18::render_screen_original:508 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] main:13::render_init:18::render_screen_original:510 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] ) always clobbers reg byte a reg byte y +Statement [541] *((byte*) render_screen_original::cols#6) ← (const byte) BLACK [ render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] ( main:13::render_init:18::render_screen_original:508 [ score_bcd render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] main:13::render_init:18::render_screen_original:510 [ score_bcd render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] ) always clobbers reg byte a reg byte y +Statement [548] *((const word*) SID_VOICE3_FREQ) ← (word) $ffff [ ] ( main:13::sid_rnd_init:16 [ score_bcd ] ) always clobbers reg byte a +Statement [549] *((const byte*) SID_VOICE3_CONTROL) ← (const byte) SID_CONTROL_NOISE [ ] ( main:13::sid_rnd_init:16 [ score_bcd ] ) always clobbers reg byte a +Statement [559] if(*((const byte*) RASTER)<(byte) sprites_irq::raster_sprite_gfx_modify) goto sprites_irq::@8 [ render_screen_showing irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt sprites_irq::raster_sprite_gfx_modify ] ( [ render_screen_showing irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt sprites_irq::raster_sprite_gfx_modify ] ) always clobbers reg byte a +Statement [561] if((byte) render_screen_showing==(byte) 0) goto sprites_irq::@1 [ irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt sprites_irq::ptr#0 ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt sprites_irq::ptr#0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:219 [ sprites_irq::ptr#0 ] -Statement [569] if((byte) irq_cnt==(byte) 9) goto sprites_irq::@3 [ irq_cnt ] ( [ irq_cnt ] ) always clobbers reg byte a -Statement [570] if((byte) irq_cnt==(byte) $a) goto sprites_irq::@4 [ ] ( [ ] ) always clobbers reg byte a -Statement [571] (byte) irq_raster_next ← (byte) irq_raster_next + (byte) $14 [ irq_raster_next ] ( [ irq_raster_next ] ) always clobbers reg byte a reg byte x -Statement [572] (byte) irq_sprite_ypos ← (byte) irq_sprite_ypos + (byte) $15 [ irq_raster_next ] ( [ irq_raster_next ] ) always clobbers reg byte a reg byte x +Statement [569] if((byte) irq_cnt==(byte) 9) goto sprites_irq::@3 [ irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt ] ) always clobbers reg byte a +Statement [570] if((byte) irq_cnt==(byte) $a) goto sprites_irq::@4 [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] ) always clobbers reg byte a +Statement [571] (byte) irq_raster_next ← (byte) irq_raster_next + (byte) $14 [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] ) always clobbers reg byte a reg byte x +Statement [572] (byte) irq_sprite_ypos ← (byte) irq_sprite_ypos + (byte) $15 [ irq_raster_next irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ptr ] ) always clobbers reg byte a reg byte x Statement [573] (byte) irq_sprite_ptr ← (byte) irq_sprite_ptr + (byte) 3 [ irq_raster_next ] ( [ irq_raster_next ] ) always clobbers reg byte a reg byte x Statement [574] *((const byte*) RASTER) ← (byte) irq_raster_next [ ] ( [ ] ) always clobbers reg byte a Statement [575] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER [ ] ( [ ] ) always clobbers reg byte a Statement [576] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y -Statement [577] (byte) irq_cnt ← (byte) 0 [ ] ( [ ] ) always clobbers reg byte a -Statement [578] (byte) irq_raster_next ← (const byte) IRQ_RASTER_FIRST [ irq_raster_next ] ( [ irq_raster_next ] ) always clobbers reg byte a -Statement [579] (byte) irq_sprite_ypos ← (byte) irq_sprite_ypos + (byte) $15 [ irq_raster_next ] ( [ irq_raster_next ] ) always clobbers reg byte a reg byte x +Statement [577] (byte) irq_cnt ← (byte) 0 [ irq_sprite_ypos irq_sprite_ptr ] ( [ irq_sprite_ypos irq_sprite_ptr ] ) always clobbers reg byte a +Statement [578] (byte) irq_raster_next ← (const byte) IRQ_RASTER_FIRST [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] ) always clobbers reg byte a +Statement [579] (byte) irq_sprite_ypos ← (byte) irq_sprite_ypos + (byte) $15 [ irq_raster_next irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ptr ] ) always clobbers reg byte a reg byte x Statement [580] (byte) irq_sprite_ptr ← (byte) irq_sprite_ptr + (byte) 3 [ irq_raster_next ] ( [ irq_raster_next ] ) always clobbers reg byte a reg byte x Statement [581] (byte) irq_raster_next ← (byte) irq_raster_next + (byte) $15 [ irq_raster_next ] ( [ irq_raster_next ] ) always clobbers reg byte a reg byte x Statement [582] (byte) irq_sprite_ypos ← (const byte) SPRITES_FIRST_YPOS [ irq_raster_next ] ( [ irq_raster_next ] ) always clobbers reg byte a Statement [584] (byte) irq_sprite_ptr ← (const byte) sprites_irq::toSpritePtr2_return#0 [ irq_raster_next ] ( [ irq_raster_next ] ) always clobbers reg byte a Statement [1] (byte) render_screen_showing ← (byte) 0 [ ] ( [ ] ) always clobbers reg byte a -Statement [2] (dword) score_bcd ← (dword) 0 [ ] ( [ ] ) always clobbers reg byte a -Statement [7] (byte) irq_raster_next ← (const byte) IRQ_RASTER_FIRST [ ] ( [ ] ) always clobbers reg byte a -Statement [8] (byte) irq_sprite_ypos ← (const byte) SPRITES_FIRST_YPOS+(byte) $15 [ ] ( [ ] ) always clobbers reg byte a -Statement [10] (byte) irq_sprite_ptr ← (const byte) toSpritePtr1_return#0+(byte) 3 [ ] ( [ ] ) always clobbers reg byte a -Statement [11] (byte) irq_cnt ← (byte) 0 [ ] ( [ ] ) always clobbers reg byte a -Statement [33] (byte*) current_piece_gfx#111 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ current_ypos#97 current_ypos#6 current_xpos#118 current_xpos#100 current_piece_gfx#111 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 ] ( main:13 [ current_ypos#97 current_ypos#6 current_xpos#118 current_xpos#100 current_piece_gfx#111 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 ] ) always clobbers reg byte a -Statement [38] (byte*) current_piece#101 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#101 current_movedown_slow#1 game_over#52 ] ( main:13 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#101 current_movedown_slow#1 game_over#52 ] ) always clobbers reg byte a -Statement [39] (byte*) current_piece_gfx#123 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#101 current_piece_gfx#123 current_movedown_slow#1 game_over#52 ] ( main:13 [ current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#101 current_piece_gfx#123 current_movedown_slow#1 game_over#52 ] ) always clobbers reg byte a -Statement [41] if(*((const byte*) RASTER)!=(byte) $ff) goto main::@2 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 ] ( main:13 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 ] ) always clobbers reg byte a -Statement [50] if((byte) game_over#10==(byte) 0) goto main::@4 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#16 main::key_event#0 ] ( main:13 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#16 main::key_event#0 ] ) always clobbers reg byte a +Statement [2] (dword) score_bcd ← (dword) 0 [ score_bcd ] ( [ score_bcd ] ) always clobbers reg byte a +Statement [7] (byte) irq_raster_next ← (const byte) IRQ_RASTER_FIRST [ score_bcd ] ( [ score_bcd ] ) always clobbers reg byte a +Statement [8] (byte) irq_sprite_ypos ← (const byte) SPRITES_FIRST_YPOS+(byte) $15 [ score_bcd ] ( [ score_bcd ] ) always clobbers reg byte a +Statement [10] (byte) irq_sprite_ptr ← (const byte) toSpritePtr1_return#0+(byte) 3 [ score_bcd ] ( [ score_bcd ] ) always clobbers reg byte a +Statement [11] (byte) irq_cnt ← (byte) 0 [ score_bcd ] ( [ score_bcd ] ) always clobbers reg byte a +Statement [33] (byte*) current_piece_gfx#111 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ score_bcd current_ypos#97 current_ypos#6 current_xpos#118 current_xpos#100 current_piece_gfx#111 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 ] ( main:13 [ score_bcd current_ypos#97 current_ypos#6 current_xpos#118 current_xpos#100 current_piece_gfx#111 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 ] ) always clobbers reg byte a +Statement [38] (byte*) current_piece#101 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#101 current_movedown_slow#1 game_over#52 ] ( main:13 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#101 current_movedown_slow#1 game_over#52 ] ) always clobbers reg byte a +Statement [39] (byte*) current_piece_gfx#123 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ score_bcd current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#101 current_piece_gfx#123 current_movedown_slow#1 game_over#52 ] ( main:13 [ score_bcd current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#101 current_piece_gfx#123 current_movedown_slow#1 game_over#52 ] ) always clobbers reg byte a +Statement [41] if(*((const byte*) RASTER)!=(byte) $ff) goto main::@2 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 ] ( main:13 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 ] ) always clobbers reg byte a +Statement [50] if((byte) game_over#10==(byte) 0) goto main::@4 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#16 main::key_event#0 ] ( main:13 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#16 main::key_event#0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:122 [ main::key_event#0 ] -Statement [62] (byte*) current_piece_gfx#112 ← (byte*) current_piece_gfx#18 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 current_ypos#98 render_screen_render#64 current_xpos#119 current_piece_gfx#112 ] ( main:13 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 current_ypos#98 render_screen_render#64 current_xpos#119 current_piece_gfx#112 ] ) always clobbers reg byte a -Statement [72] (byte) render_screen_render#11 ← (byte) render_screen_render#18 ^ (byte) $20 [ render_screen_show#16 render_screen_render#11 ] ( main:13::render_screen_swap:71 [ current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_show#16 render_screen_render#11 ] ) always clobbers reg byte a -Statement [73] (byte) render_screen_show#13 ← (byte) render_screen_show#16 ^ (byte) $20 [ render_screen_show#13 render_screen_render#11 ] ( main:13::render_screen_swap:71 [ current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_show#13 render_screen_render#11 ] ) always clobbers reg byte a -Statement [75] if((byte) render_screen_render#18==(byte) 0) goto render_score::@1 [ render_screen_render#18 lines_bcd#15 level_bcd#17 ] ( main:13::render_score:69 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 ] ) always clobbers reg byte a -Statement [78] (byte*) render_bcd::screen#0 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#0 ] ( main:13::render_score:69 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#0 ] ) always clobbers reg byte a -Statement [81] (byte*) render_bcd::screen#1 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#1 ] ( main:13::render_score:69 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#1 ] ) always clobbers reg byte a -Statement [84] (byte*) render_bcd::screen#2 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#2 ] ( main:13::render_score:69 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#2 ] ) always clobbers reg byte a -Statement [87] (byte) render_bcd::bcd#3 ← > (word) lines_bcd#15 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#3 ] ( main:13::render_score:69 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#3 ] ) always clobbers reg byte a -Statement [88] (byte*) render_bcd::screen#3 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#3 render_bcd::screen#3 ] ( main:13::render_score:69 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#3 render_bcd::screen#3 ] ) always clobbers reg byte a -Statement [90] (byte) render_bcd::bcd#4 ← < (word) lines_bcd#15 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#4 ] ( main:13::render_score:69 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#4 ] ) always clobbers reg byte a -Statement [91] (byte*) render_bcd::screen#4 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#4 render_bcd::screen#4 ] ( main:13::render_score:69 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#4 render_bcd::screen#4 ] ) always clobbers reg byte a -Statement [93] (byte*) render_bcd::screen#5 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::screen#5 ] ( main:13::render_score:69 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::screen#5 ] ) always clobbers reg byte a -Statement [98] (byte*) render_bcd::screen_pos#0 ← (byte*) render_bcd::screen#6 + (word) render_bcd::offset#6 [ render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] ( main:13::render_score:69::render_bcd:80 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:83 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:86 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:89 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:92 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:95 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] ) always clobbers reg byte a -Statement [100] (byte~) render_bcd::$5 ← (byte) render_bcd::bcd#6 >> (byte) 4 [ render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] ( main:13::render_score:69::render_bcd:80 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] main:13::render_score:69::render_bcd:83 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] main:13::render_score:69::render_bcd:86 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] main:13::render_score:69::render_bcd:89 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] main:13::render_score:69::render_bcd:92 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] main:13::render_score:69::render_bcd:95 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] ) always clobbers reg byte a -Statement [102] *((byte*) render_bcd::screen_pos#0) ← (byte~) render_bcd::$6 [ render_bcd::bcd#6 render_bcd::screen_pos#0 ] ( main:13::render_score:69::render_bcd:80 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:83 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:86 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:89 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:92 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:95 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::bcd#6 render_bcd::screen_pos#0 ] ) always clobbers reg byte y -Statement [105] (byte~) render_bcd::$3 ← (byte) render_bcd::bcd#6 & (byte) $f [ render_bcd::screen_pos#3 render_bcd::$3 ] ( main:13::render_score:69::render_bcd:80 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:13::render_score:69::render_bcd:83 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:13::render_score:69::render_bcd:86 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:13::render_score:69::render_bcd:89 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:13::render_score:69::render_bcd:92 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:13::render_score:69::render_bcd:95 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::screen_pos#3 render_bcd::$3 ] ) always clobbers reg byte a -Statement [107] *((byte*) render_bcd::screen_pos#3) ← (byte~) render_bcd::$4 [ ] ( main:13::render_score:69::render_bcd:80 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:13::render_score:69::render_bcd:83 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:13::render_score:69::render_bcd:86 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:13::render_score:69::render_bcd:89 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:13::render_score:69::render_bcd:92 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:13::render_score:69::render_bcd:95 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 ] ) always clobbers reg byte y -Statement [113] (byte~) render_next::$6 ← (byte) next_piece_idx#12 << (byte) 1 [ next_piece_idx#12 render_next::screen_next_area#11 render_next::$6 ] ( main:13::render_next:37 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 next_piece_idx#12 render_next::screen_next_area#11 render_next::$6 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 next_piece_idx#12 render_next::screen_next_area#11 render_next::$6 ] ) always clobbers reg byte a -Statement [115] (byte*) render_next::next_piece_gfx#9 ← (byte*)*((const word*) PIECES + (byte~) render_next::$6) [ render_next::screen_next_area#11 render_next::next_piece_char#0 render_next::next_piece_gfx#9 ] ( main:13::render_next:37 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::screen_next_area#11 render_next::next_piece_char#0 render_next::next_piece_gfx#9 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_next::screen_next_area#11 render_next::next_piece_char#0 render_next::next_piece_gfx#9 ] ) always clobbers reg byte a -Statement [118] (byte) render_next::cell#0 ← *((byte*) render_next::next_piece_gfx#2) [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#2 render_next::screen_next_area#5 render_next::c#2 render_next::cell#0 ] ( main:13::render_next:37 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#2 render_next::screen_next_area#5 render_next::c#2 render_next::cell#0 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#2 render_next::screen_next_area#5 render_next::c#2 render_next::cell#0 ] ) always clobbers reg byte a reg byte y -Statement [121] *((byte*) render_next::screen_next_area#5) ← (byte) 0 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ( main:13::render_next:37 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ) always clobbers reg byte a reg byte y -Statement [125] (byte*) render_next::screen_next_area#4 ← (byte*) render_next::screen_next_area#3 + (byte) $24 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] ( main:13::render_next:37 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] ) always clobbers reg byte a -Statement [129] *((byte*) render_next::screen_next_area#5) ← (byte) render_next::next_piece_char#0 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ( main:13::render_next:37 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ) always clobbers reg byte a reg byte y -Statement [134] (byte) render_moving::i#1 ← (byte) render_moving::i#3 + (byte) 4 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] ( main:13::render_moving:35 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] ) always clobbers reg byte a -Statement [140] (byte~) render_moving::$1 ← (byte) render_screen_render#33 + (byte) render_moving::ypos#2 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] ( main:13::render_moving:35 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] ) always clobbers reg byte a -Statement [141] (byte~) render_moving::$6 ← (byte~) render_moving::$1 << (byte) 1 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] ( main:13::render_moving:35 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] ) always clobbers reg byte a -Statement [142] (byte*) render_moving::screen_line#0 ← *((const byte**) screen_lines_1 + (byte~) render_moving::$6) [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] ( main:13::render_moving:35 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] ) always clobbers reg byte a -Statement [145] (byte) render_moving::current_cell#0 ← *((byte*) current_piece_gfx#64 + (byte) render_moving::i#4) [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] ( main:13::render_moving:35 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] ) always clobbers reg byte a -Statement [148] *((byte*) render_moving::screen_line#0 + (byte) render_moving::xpos#2) ← (byte) current_piece_char#68 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] ( main:13::render_moving:35 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] ) always clobbers reg byte a -Statement [154] (byte~) render_playfield::$0 ← (byte) render_screen_render#22 + (byte) render_playfield::l#2 [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$0 ] ( main:13::render_playfield:30 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$0 ] main:13::render_playfield:58 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$0 ] ) always clobbers reg byte a -Statement [155] (byte~) render_playfield::$3 ← (byte~) render_playfield::$0 << (byte) 1 [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$3 ] ( main:13::render_playfield:30 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$3 ] main:13::render_playfield:58 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$3 ] ) always clobbers reg byte a -Statement [156] (byte*) render_playfield::screen_line#0 ← *((const byte**) screen_lines_1 + (byte~) render_playfield::$3) [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] ( main:13::render_playfield:30 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] main:13::render_playfield:58 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] ) always clobbers reg byte a -Statement [158] *((byte*) render_playfield::screen_line#2) ← *((const byte*) playfield + (byte) render_playfield::i#2) [ render_screen_render#22 render_playfield::l#2 render_playfield::i#2 render_playfield::screen_line#2 render_playfield::c#2 ] ( main:13::render_playfield:30 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#2 render_playfield::screen_line#2 render_playfield::c#2 ] main:13::render_playfield:58 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#2 render_playfield::screen_line#2 render_playfield::c#2 ] ) always clobbers reg byte a reg byte y -Statement [170] if((byte) game_over#15==(byte) 0) goto play_movement::@1 [ current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_orientation#20 current_piece_gfx#20 current_xpos#22 ] ( main:13::play_movement:53 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_orientation#20 current_piece_gfx#20 current_xpos#22 ] ) always clobbers reg byte a -Statement [177] (byte) play_movement::render#2 ← (byte) play_movement::render#1 + (byte~) play_movement::$3 [ current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_movement::render#2 ] ( main:13::play_movement:53 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_movement::render#2 ] ) always clobbers reg byte a -Statement [182] (byte) play_movement::return#0 ← (byte) play_movement::render#2 + (byte~) play_movement::$4 [ current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::return#0 current_orientation#25 current_piece_gfx#21 current_xpos#26 ] ( main:13::play_movement:53 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::return#0 current_orientation#25 current_piece_gfx#21 current_xpos#26 ] ) always clobbers reg byte a -Statement [187] (byte~) play_move_rotate::$5 ← (byte) current_orientation#20 + (byte) $10 [ current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::$5 ] ( main:13::play_movement:53::play_move_rotate:179 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::$5 ] ) always clobbers reg byte a -Statement [193] (byte*) current_piece#98 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#3 play_collision::ypos#3 play_collision::orientation#3 current_piece#98 ] ( main:13::play_movement:53::play_move_rotate:179 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#3 play_collision::ypos#3 play_collision::orientation#3 current_piece#98 ] ) always clobbers reg byte a -Statement [199] (byte*) current_piece_gfx#7 ← (byte*) current_piece#15 + (byte) current_orientation#7 [ current_piece#15 current_ypos#19 current_xpos#26 current_orientation#7 current_piece_gfx#7 ] ( main:13::play_movement:53::play_move_rotate:179 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_xpos#26 current_orientation#7 current_piece_gfx#7 ] ) always clobbers reg byte a -Statement [200] (byte~) play_move_rotate::$7 ← (byte) current_orientation#20 - (byte) $10 [ current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::$7 ] ( main:13::play_movement:53::play_move_rotate:179 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::$7 ] ) always clobbers reg byte a -Statement [203] (byte*) play_collision::piece_gfx#0 ← (byte*) current_piece#17 + (byte) play_collision::orientation#5 [ play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] ( main:13::play_movement:53::play_move_rotate:179::play_collision:194 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:13::play_movement:53::play_move_leftright:174::play_collision:232 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:13::play_movement:53::play_move_leftright:174::play_collision:243 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:13::play_movement:53::play_move_down:167::play_collision:267 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:13::play_spawn_current:26::play_collision:296 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:13::play_spawn_current:28::play_collision:296 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280::play_collision:296 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] ) always clobbers reg byte a -Statement [205] (byte~) play_collision::$14 ← (byte) play_collision::yp#2 << (byte) 1 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] ( main:13::play_movement:53::play_move_rotate:179::play_collision:194 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] main:13::play_movement:53::play_move_leftright:174::play_collision:232 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] main:13::play_movement:53::play_move_leftright:174::play_collision:243 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] main:13::play_movement:53::play_move_down:167::play_collision:267 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] main:13::play_spawn_current:26::play_collision:296 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] main:13::play_spawn_current:28::play_collision:296 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280::play_collision:296 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] ) always clobbers reg byte a -Statement [206] (byte*) play_collision::playfield_line#0 ← *((const byte**) playfield_lines + (byte~) play_collision::$14) [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] ( main:13::play_movement:53::play_move_rotate:179::play_collision:194 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:13::play_movement:53::play_move_leftright:174::play_collision:232 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:13::play_movement:53::play_move_leftright:174::play_collision:243 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:13::play_movement:53::play_move_down:167::play_collision:267 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:13::play_spawn_current:26::play_collision:296 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:13::play_spawn_current:28::play_collision:296 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280::play_collision:296 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] ) always clobbers reg byte a -Statement [210] if(*((byte*) play_collision::piece_gfx#0 + (byte) play_collision::i#2)==(byte) 0) goto play_collision::@3 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] ( main:13::play_movement:53::play_move_rotate:179::play_collision:194 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_movement:53::play_move_leftright:174::play_collision:232 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_movement:53::play_move_leftright:174::play_collision:243 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_movement:53::play_move_down:167::play_collision:267 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_spawn_current:26::play_collision:296 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_spawn_current:28::play_collision:296 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280::play_collision:296 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] ) always clobbers reg byte a -Statement [212] (byte~) play_collision::$5 ← (byte) play_collision::xp#2 & (byte) $80 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] ( main:13::play_movement:53::play_move_rotate:179::play_collision:194 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] main:13::play_movement:53::play_move_leftright:174::play_collision:232 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] main:13::play_movement:53::play_move_leftright:174::play_collision:243 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] main:13::play_movement:53::play_move_down:167::play_collision:267 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] main:13::play_spawn_current:26::play_collision:296 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] main:13::play_spawn_current:28::play_collision:296 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280::play_collision:296 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] ) always clobbers reg byte a -Statement [215] if(*((byte*) play_collision::playfield_line#0 + (byte) play_collision::xp#2)==(byte) 0) goto play_collision::@3 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] ( main:13::play_movement:53::play_move_rotate:179::play_collision:194 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_movement:53::play_move_leftright:174::play_collision:232 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_movement:53::play_move_leftright:174::play_collision:243 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_movement:53::play_move_down:167::play_collision:267 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_spawn_current:26::play_collision:296 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_spawn_current:28::play_collision:296 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280::play_collision:296 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] ) always clobbers reg byte a -Statement [231] (byte*) current_piece#97 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#97 play_collision::orientation#2 play_collision::ypos#2 play_collision::xpos#2 ] ( main:13::play_movement:53::play_move_leftright:174 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#97 play_collision::orientation#2 play_collision::ypos#2 play_collision::xpos#2 ] ) always clobbers reg byte a -Statement [242] (byte*) current_piece#96 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#96 play_collision::orientation#1 play_collision::ypos#1 play_collision::xpos#1 ] ( main:13::play_movement:53::play_move_leftright:174 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#96 play_collision::orientation#1 play_collision::ypos#1 play_collision::xpos#1 ] ) always clobbers reg byte a -Statement [266] (byte*) current_piece#95 ← (byte*) current_piece#10 [ current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece#95 play_collision::orientation#0 play_collision::ypos#0 play_collision::xpos#0 ] ( main:13::play_movement:53::play_move_down:167 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece#95 play_collision::orientation#0 play_collision::ypos#0 play_collision::xpos#0 ] ) always clobbers reg byte a -Statement [281] (byte*) current_piece#92 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#92 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 ] ( main:13::play_movement:53::play_move_down:167 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#92 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 ] ) always clobbers reg byte a -Statement [282] (byte*) current_piece_gfx#116 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#92 current_piece_gfx#116 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 ] ( main:13::play_movement:53::play_move_down:167 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#92 current_piece_gfx#116 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 ] ) always clobbers reg byte a -Statement [289] (byte~) play_spawn_current::$7 ← (byte) play_spawn_current::current_piece_idx#0 << (byte) 1 [ play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] ( main:13::play_spawn_current:26 [ current_movedown_slow#1 play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] main:13::play_spawn_current:28 [ current_movedown_slow#1 play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] ) always clobbers reg byte a -Statement [295] (byte*) current_piece#99 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#99 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] ( main:13::play_spawn_current:26 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#99 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] main:13::play_spawn_current:28 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#99 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#99 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] ) always clobbers reg byte a -Statement [303] if((byte) play_spawn_current::piece_idx#2==(byte) 7) goto play_spawn_current::sid_rnd1 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 ] ( main:13::play_spawn_current:26 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 ] main:13::play_spawn_current:28 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 ] ) always clobbers reg byte a -Statement [306] (byte) play_spawn_current::piece_idx#1 ← (byte) play_spawn_current::sid_rnd1_return#0 & (byte) 7 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#52 play_spawn_current::piece_idx#1 ] ( main:13::play_spawn_current:26 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#52 play_spawn_current::piece_idx#1 ] main:13::play_spawn_current:28 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#52 play_spawn_current::piece_idx#1 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#52 play_spawn_current::piece_idx#1 ] ) always clobbers reg byte a -Statement [308] (byte~) play_update_score::$2 ← < (word) lines_bcd#19 [ current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::$2 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::$2 ] ) always clobbers reg byte a -Statement [310] (byte~) play_update_score::$9 ← (byte) play_update_score::removed#0 << (byte) 2 [ current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::$9 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::$9 ] ) always clobbers reg byte a -Statement [311] (dword) play_update_score::add_bcd#0 ← *((const dword*) score_add_bcd + (byte~) play_update_score::$9) [ current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::add_bcd#0 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::add_bcd#0 ] ) always clobbers reg byte a -Statement [313] (word) lines_bcd#29 ← (word) lines_bcd#19 + (byte) play_update_score::removed#0 [ current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 play_update_score::add_bcd#0 lines_bcd#29 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 play_update_score::add_bcd#0 lines_bcd#29 ] ) always clobbers reg byte a -Statement [314] (dword) score_bcd ← (dword) score_bcd + (dword) play_update_score::add_bcd#0 [ current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 ] ) always clobbers reg byte a -Statement [316] (byte~) play_update_score::$4 ← < (word) lines_bcd#29 [ current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 play_update_score::$4 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 play_update_score::$4 ] ) always clobbers reg byte a -Statement [324] if((byte) level#21>=(byte) $1d+(byte) 1) goto play_increase_level::@1 [ level_bcd#11 level#21 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:320 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#29 level_bcd#11 level#21 ] ) always clobbers reg byte a -Statement [325] (byte) current_movedown_slow#10 ← *((const byte*) MOVEDOWN_SLOW_SPEEDS + (byte) level#21) [ level_bcd#11 level#21 current_movedown_slow#10 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:320 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#29 level_bcd#11 level#21 current_movedown_slow#10 ] ) always clobbers reg byte a reg byte y +Statement [62] (byte*) current_piece_gfx#112 ← (byte*) current_piece_gfx#18 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 current_ypos#98 render_screen_render#64 current_xpos#119 current_piece_gfx#112 ] ( main:13 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 current_ypos#98 render_screen_render#64 current_xpos#119 current_piece_gfx#112 ] ) always clobbers reg byte a +Statement [72] (byte) render_screen_render#11 ← (byte) render_screen_render#18 ^ (byte) $20 [ render_screen_show#16 render_screen_render#11 ] ( main:13::render_screen_swap:71 [ score_bcd current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_show#16 render_screen_render#11 ] ) always clobbers reg byte a +Statement [73] (byte) render_screen_show#13 ← (byte) render_screen_show#16 ^ (byte) $20 [ render_screen_show#13 render_screen_render#11 ] ( main:13::render_screen_swap:71 [ score_bcd current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_show#13 render_screen_render#11 ] ) always clobbers reg byte a +Statement [75] if((byte) render_screen_render#18==(byte) 0) goto render_score::@1 [ render_screen_render#18 lines_bcd#15 level_bcd#17 ] ( main:13::render_score:69 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 ] ) always clobbers reg byte a +Statement [78] (byte*) render_bcd::screen#0 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#0 ] ( main:13::render_score:69 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#0 ] ) always clobbers reg byte a +Statement [81] (byte*) render_bcd::screen#1 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#1 ] ( main:13::render_score:69 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#1 ] ) always clobbers reg byte a +Statement [84] (byte*) render_bcd::screen#2 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#2 ] ( main:13::render_score:69 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#2 ] ) always clobbers reg byte a +Statement [87] (byte) render_bcd::bcd#3 ← > (word) lines_bcd#15 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#3 ] ( main:13::render_score:69 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#3 ] ) always clobbers reg byte a +Statement [88] (byte*) render_bcd::screen#3 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#3 render_bcd::screen#3 ] ( main:13::render_score:69 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#3 render_bcd::screen#3 ] ) always clobbers reg byte a +Statement [90] (byte) render_bcd::bcd#4 ← < (word) lines_bcd#15 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#4 ] ( main:13::render_score:69 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#4 ] ) always clobbers reg byte a +Statement [91] (byte*) render_bcd::screen#4 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#4 render_bcd::screen#4 ] ( main:13::render_score:69 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#4 render_bcd::screen#4 ] ) always clobbers reg byte a +Statement [93] (byte*) render_bcd::screen#5 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::screen#5 ] ( main:13::render_score:69 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::screen#5 ] ) always clobbers reg byte a +Statement [98] (byte*) render_bcd::screen_pos#0 ← (byte*) render_bcd::screen#6 + (word) render_bcd::offset#6 [ render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] ( main:13::render_score:69::render_bcd:80 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:83 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:86 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:89 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:92 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:95 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] ) always clobbers reg byte a +Statement [100] (byte~) render_bcd::$5 ← (byte) render_bcd::bcd#6 >> (byte) 4 [ render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] ( main:13::render_score:69::render_bcd:80 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] main:13::render_score:69::render_bcd:83 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] main:13::render_score:69::render_bcd:86 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] main:13::render_score:69::render_bcd:89 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] main:13::render_score:69::render_bcd:92 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] main:13::render_score:69::render_bcd:95 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] ) always clobbers reg byte a +Statement [102] *((byte*) render_bcd::screen_pos#0) ← (byte~) render_bcd::$6 [ render_bcd::bcd#6 render_bcd::screen_pos#0 ] ( main:13::render_score:69::render_bcd:80 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:83 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:86 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:89 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:92 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:95 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::bcd#6 render_bcd::screen_pos#0 ] ) always clobbers reg byte y +Statement [105] (byte~) render_bcd::$3 ← (byte) render_bcd::bcd#6 & (byte) $f [ render_bcd::screen_pos#3 render_bcd::$3 ] ( main:13::render_score:69::render_bcd:80 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:13::render_score:69::render_bcd:83 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:13::render_score:69::render_bcd:86 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:13::render_score:69::render_bcd:89 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:13::render_score:69::render_bcd:92 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:13::render_score:69::render_bcd:95 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::screen_pos#3 render_bcd::$3 ] ) always clobbers reg byte a +Statement [107] *((byte*) render_bcd::screen_pos#3) ← (byte~) render_bcd::$4 [ ] ( main:13::render_score:69::render_bcd:80 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:13::render_score:69::render_bcd:83 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:13::render_score:69::render_bcd:86 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:13::render_score:69::render_bcd:89 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:13::render_score:69::render_bcd:92 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:13::render_score:69::render_bcd:95 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 ] ) always clobbers reg byte y +Statement [113] (byte~) render_next::$6 ← (byte) next_piece_idx#12 << (byte) 1 [ next_piece_idx#12 render_next::screen_next_area#11 render_next::$6 ] ( main:13::render_next:37 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 next_piece_idx#12 render_next::screen_next_area#11 render_next::$6 ] main:13::render_next:67 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 next_piece_idx#12 render_next::screen_next_area#11 render_next::$6 ] ) always clobbers reg byte a +Statement [115] (byte*) render_next::next_piece_gfx#9 ← (byte*)*((const word*) PIECES + (byte~) render_next::$6) [ render_next::screen_next_area#11 render_next::next_piece_char#0 render_next::next_piece_gfx#9 ] ( main:13::render_next:37 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::screen_next_area#11 render_next::next_piece_char#0 render_next::next_piece_gfx#9 ] main:13::render_next:67 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_next::screen_next_area#11 render_next::next_piece_char#0 render_next::next_piece_gfx#9 ] ) always clobbers reg byte a +Statement [118] (byte) render_next::cell#0 ← *((byte*) render_next::next_piece_gfx#2) [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#2 render_next::screen_next_area#5 render_next::c#2 render_next::cell#0 ] ( main:13::render_next:37 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#2 render_next::screen_next_area#5 render_next::c#2 render_next::cell#0 ] main:13::render_next:67 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#2 render_next::screen_next_area#5 render_next::c#2 render_next::cell#0 ] ) always clobbers reg byte a reg byte y +Statement [121] *((byte*) render_next::screen_next_area#5) ← (byte) 0 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ( main:13::render_next:37 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] main:13::render_next:67 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ) always clobbers reg byte a reg byte y +Statement [125] (byte*) render_next::screen_next_area#4 ← (byte*) render_next::screen_next_area#3 + (byte) $24 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] ( main:13::render_next:37 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] main:13::render_next:67 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] ) always clobbers reg byte a +Statement [129] *((byte*) render_next::screen_next_area#5) ← (byte) render_next::next_piece_char#0 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ( main:13::render_next:37 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] main:13::render_next:67 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ) always clobbers reg byte a reg byte y +Statement [134] (byte) render_moving::i#1 ← (byte) render_moving::i#3 + (byte) 4 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] ( main:13::render_moving:35 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] main:13::render_moving:64 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] ) always clobbers reg byte a +Statement [140] (byte~) render_moving::$1 ← (byte) render_screen_render#33 + (byte) render_moving::ypos#2 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] ( main:13::render_moving:35 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] main:13::render_moving:64 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] ) always clobbers reg byte a +Statement [141] (byte~) render_moving::$6 ← (byte~) render_moving::$1 << (byte) 1 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] ( main:13::render_moving:35 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] main:13::render_moving:64 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] ) always clobbers reg byte a +Statement [142] (byte*) render_moving::screen_line#0 ← *((const byte**) screen_lines_1 + (byte~) render_moving::$6) [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] ( main:13::render_moving:35 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] main:13::render_moving:64 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] ) always clobbers reg byte a +Statement [145] (byte) render_moving::current_cell#0 ← *((byte*) current_piece_gfx#64 + (byte) render_moving::i#4) [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] ( main:13::render_moving:35 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] main:13::render_moving:64 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] ) always clobbers reg byte a +Statement [148] *((byte*) render_moving::screen_line#0 + (byte) render_moving::xpos#2) ← (byte) current_piece_char#68 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] ( main:13::render_moving:35 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] main:13::render_moving:64 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] ) always clobbers reg byte a +Statement [154] (byte~) render_playfield::$0 ← (byte) render_screen_render#22 + (byte) render_playfield::l#2 [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$0 ] ( main:13::render_playfield:30 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$0 ] main:13::render_playfield:58 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$0 ] ) always clobbers reg byte a +Statement [155] (byte~) render_playfield::$3 ← (byte~) render_playfield::$0 << (byte) 1 [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$3 ] ( main:13::render_playfield:30 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$3 ] main:13::render_playfield:58 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$3 ] ) always clobbers reg byte a +Statement [156] (byte*) render_playfield::screen_line#0 ← *((const byte**) screen_lines_1 + (byte~) render_playfield::$3) [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] ( main:13::render_playfield:30 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] main:13::render_playfield:58 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] ) always clobbers reg byte a +Statement [158] *((byte*) render_playfield::screen_line#2) ← *((const byte*) playfield + (byte) render_playfield::i#2) [ render_screen_render#22 render_playfield::l#2 render_playfield::i#2 render_playfield::screen_line#2 render_playfield::c#2 ] ( main:13::render_playfield:30 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#2 render_playfield::screen_line#2 render_playfield::c#2 ] main:13::render_playfield:58 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#2 render_playfield::screen_line#2 render_playfield::c#2 ] ) always clobbers reg byte a reg byte y +Statement [170] if((byte) game_over#15==(byte) 0) goto play_movement::@1 [ score_bcd current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_orientation#20 current_piece_gfx#20 current_xpos#22 ] ( main:13::play_movement:53 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_orientation#20 current_piece_gfx#20 current_xpos#22 ] ) always clobbers reg byte a +Statement [177] (byte) play_movement::render#2 ← (byte) play_movement::render#1 + (byte~) play_movement::$3 [ score_bcd current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_movement::render#2 ] ( main:13::play_movement:53 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_movement::render#2 ] ) always clobbers reg byte a +Statement [182] (byte) play_movement::return#0 ← (byte) play_movement::render#2 + (byte~) play_movement::$4 [ score_bcd current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::return#0 current_orientation#25 current_piece_gfx#21 current_xpos#26 ] ( main:13::play_movement:53 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::return#0 current_orientation#25 current_piece_gfx#21 current_xpos#26 ] ) always clobbers reg byte a +Statement [187] (byte~) play_move_rotate::$5 ← (byte) current_orientation#20 + (byte) $10 [ current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::$5 ] ( main:13::play_movement:53::play_move_rotate:179 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::$5 ] ) always clobbers reg byte a +Statement [193] (byte*) current_piece#98 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#3 play_collision::ypos#3 play_collision::orientation#3 current_piece#98 ] ( main:13::play_movement:53::play_move_rotate:179 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#3 play_collision::ypos#3 play_collision::orientation#3 current_piece#98 ] ) always clobbers reg byte a +Statement [199] (byte*) current_piece_gfx#7 ← (byte*) current_piece#15 + (byte) current_orientation#7 [ current_piece#15 current_ypos#19 current_xpos#26 current_orientation#7 current_piece_gfx#7 ] ( main:13::play_movement:53::play_move_rotate:179 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_xpos#26 current_orientation#7 current_piece_gfx#7 ] ) always clobbers reg byte a +Statement [200] (byte~) play_move_rotate::$7 ← (byte) current_orientation#20 - (byte) $10 [ current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::$7 ] ( main:13::play_movement:53::play_move_rotate:179 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::$7 ] ) always clobbers reg byte a +Statement [203] (byte*) play_collision::piece_gfx#0 ← (byte*) current_piece#17 + (byte) play_collision::orientation#5 [ play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] ( main:13::play_movement:53::play_move_rotate:179::play_collision:194 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:13::play_movement:53::play_move_leftright:174::play_collision:232 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:13::play_movement:53::play_move_leftright:174::play_collision:243 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:13::play_movement:53::play_move_down:167::play_collision:267 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:13::play_spawn_current:26::play_collision:296 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:13::play_spawn_current:28::play_collision:296 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280::play_collision:296 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] ) always clobbers reg byte a +Statement [205] (byte~) play_collision::$14 ← (byte) play_collision::yp#2 << (byte) 1 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] ( main:13::play_movement:53::play_move_rotate:179::play_collision:194 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] main:13::play_movement:53::play_move_leftright:174::play_collision:232 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] main:13::play_movement:53::play_move_leftright:174::play_collision:243 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] main:13::play_movement:53::play_move_down:167::play_collision:267 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] main:13::play_spawn_current:26::play_collision:296 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] main:13::play_spawn_current:28::play_collision:296 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280::play_collision:296 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] ) always clobbers reg byte a +Statement [206] (byte*) play_collision::playfield_line#0 ← *((const byte**) playfield_lines + (byte~) play_collision::$14) [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] ( main:13::play_movement:53::play_move_rotate:179::play_collision:194 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:13::play_movement:53::play_move_leftright:174::play_collision:232 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:13::play_movement:53::play_move_leftright:174::play_collision:243 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:13::play_movement:53::play_move_down:167::play_collision:267 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:13::play_spawn_current:26::play_collision:296 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:13::play_spawn_current:28::play_collision:296 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280::play_collision:296 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] ) always clobbers reg byte a +Statement [210] if(*((byte*) play_collision::piece_gfx#0 + (byte) play_collision::i#2)==(byte) 0) goto play_collision::@3 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] ( main:13::play_movement:53::play_move_rotate:179::play_collision:194 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_movement:53::play_move_leftright:174::play_collision:232 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_movement:53::play_move_leftright:174::play_collision:243 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_movement:53::play_move_down:167::play_collision:267 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_spawn_current:26::play_collision:296 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_spawn_current:28::play_collision:296 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280::play_collision:296 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] ) always clobbers reg byte a +Statement [212] (byte~) play_collision::$5 ← (byte) play_collision::xp#2 & (byte) $80 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] ( main:13::play_movement:53::play_move_rotate:179::play_collision:194 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] main:13::play_movement:53::play_move_leftright:174::play_collision:232 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] main:13::play_movement:53::play_move_leftright:174::play_collision:243 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] main:13::play_movement:53::play_move_down:167::play_collision:267 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] main:13::play_spawn_current:26::play_collision:296 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] main:13::play_spawn_current:28::play_collision:296 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280::play_collision:296 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] ) always clobbers reg byte a +Statement [215] if(*((byte*) play_collision::playfield_line#0 + (byte) play_collision::xp#2)==(byte) 0) goto play_collision::@3 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] ( main:13::play_movement:53::play_move_rotate:179::play_collision:194 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_movement:53::play_move_leftright:174::play_collision:232 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_movement:53::play_move_leftright:174::play_collision:243 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_movement:53::play_move_down:167::play_collision:267 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_spawn_current:26::play_collision:296 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_spawn_current:28::play_collision:296 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280::play_collision:296 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] ) always clobbers reg byte a +Statement [231] (byte*) current_piece#97 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#97 play_collision::orientation#2 play_collision::ypos#2 play_collision::xpos#2 ] ( main:13::play_movement:53::play_move_leftright:174 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#97 play_collision::orientation#2 play_collision::ypos#2 play_collision::xpos#2 ] ) always clobbers reg byte a +Statement [242] (byte*) current_piece#96 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#96 play_collision::orientation#1 play_collision::ypos#1 play_collision::xpos#1 ] ( main:13::play_movement:53::play_move_leftright:174 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#96 play_collision::orientation#1 play_collision::ypos#1 play_collision::xpos#1 ] ) always clobbers reg byte a +Statement [266] (byte*) current_piece#95 ← (byte*) current_piece#10 [ score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece#95 play_collision::orientation#0 play_collision::ypos#0 play_collision::xpos#0 ] ( main:13::play_movement:53::play_move_down:167 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece#95 play_collision::orientation#0 play_collision::ypos#0 play_collision::xpos#0 ] ) always clobbers reg byte a +Statement [281] (byte*) current_piece#92 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#92 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 ] ( main:13::play_movement:53::play_move_down:167 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#92 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 ] ) always clobbers reg byte a +Statement [282] (byte*) current_piece_gfx#116 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ score_bcd current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#92 current_piece_gfx#116 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 ] ( main:13::play_movement:53::play_move_down:167 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#92 current_piece_gfx#116 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 ] ) always clobbers reg byte a +Statement [289] (byte~) play_spawn_current::$7 ← (byte) play_spawn_current::current_piece_idx#0 << (byte) 1 [ play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] ( main:13::play_spawn_current:26 [ score_bcd current_movedown_slow#1 play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] main:13::play_spawn_current:28 [ score_bcd current_movedown_slow#1 play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] ) always clobbers reg byte a +Statement [295] (byte*) current_piece#99 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#99 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] ( main:13::play_spawn_current:26 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#99 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] main:13::play_spawn_current:28 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#99 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#99 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] ) always clobbers reg byte a +Statement [303] if((byte) play_spawn_current::piece_idx#2==(byte) 7) goto play_spawn_current::sid_rnd1 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 ] ( main:13::play_spawn_current:26 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 ] main:13::play_spawn_current:28 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 ] ) always clobbers reg byte a +Statement [306] (byte) play_spawn_current::piece_idx#1 ← (byte) play_spawn_current::sid_rnd1_return#0 & (byte) 7 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#52 play_spawn_current::piece_idx#1 ] ( main:13::play_spawn_current:26 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#52 play_spawn_current::piece_idx#1 ] main:13::play_spawn_current:28 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#52 play_spawn_current::piece_idx#1 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#52 play_spawn_current::piece_idx#1 ] ) always clobbers reg byte a +Statement [308] (byte~) play_update_score::$2 ← < (word) lines_bcd#19 [ score_bcd current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::$2 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::$2 ] ) always clobbers reg byte a +Statement [310] (byte~) play_update_score::$9 ← (byte) play_update_score::removed#0 << (byte) 2 [ score_bcd current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::$9 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::$9 ] ) always clobbers reg byte a +Statement [311] (dword) play_update_score::add_bcd#0 ← *((const dword*) score_add_bcd + (byte~) play_update_score::$9) [ score_bcd current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::add_bcd#0 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::add_bcd#0 ] ) always clobbers reg byte a +Statement [313] (word) lines_bcd#29 ← (word) lines_bcd#19 + (byte) play_update_score::removed#0 [ score_bcd current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 play_update_score::add_bcd#0 lines_bcd#29 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 play_update_score::add_bcd#0 lines_bcd#29 ] ) always clobbers reg byte a +Statement [314] (dword) score_bcd ← (dword) score_bcd + (dword) play_update_score::add_bcd#0 [ score_bcd current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 ] ) always clobbers reg byte a +Statement [316] (byte~) play_update_score::$4 ← < (word) lines_bcd#29 [ score_bcd current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 play_update_score::$4 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 play_update_score::$4 ] ) always clobbers reg byte a +Statement [324] if((byte) level#21>=(byte) $1d+(byte) 1) goto play_increase_level::@1 [ level_bcd#11 level#21 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:320 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd lines_bcd#29 level_bcd#11 level#21 ] ) always clobbers reg byte a +Statement [325] (byte) current_movedown_slow#10 ← *((const byte*) MOVEDOWN_SLOW_SPEEDS + (byte) level#21) [ level_bcd#11 level#21 current_movedown_slow#10 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:320 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd lines_bcd#29 level_bcd#11 level#21 current_movedown_slow#10 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp[1]:123 [ play_movement::key_event#0 ] -Statement [328] (byte~) play_increase_level::$1 ← (byte) level_bcd#21 & (byte) $f [ level#21 current_movedown_slow#65 level_bcd#21 play_increase_level::$1 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:320 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#29 level#21 current_movedown_slow#65 level_bcd#21 play_increase_level::$1 ] ) always clobbers reg byte a -Statement [330] (byte) level_bcd#8 ← (byte) level_bcd#21 + (byte) 6 [ level#21 current_movedown_slow#65 level_bcd#8 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:320 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#29 level#21 current_movedown_slow#65 level_bcd#8 ] ) always clobbers reg byte a reg byte x -Statement [334] (byte~) play_increase_level::$5 ← (byte) play_increase_level::b#2 << (byte) 2 [ level#21 current_movedown_slow#65 level_bcd#62 play_increase_level::b#2 play_increase_level::$5 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:320 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#29 level#21 current_movedown_slow#65 level_bcd#62 play_increase_level::b#2 play_increase_level::$5 ] ) always clobbers reg byte a -Statement [335] *((const dword*) score_add_bcd + (byte~) play_increase_level::$5) ← *((const dword*) score_add_bcd + (byte~) play_increase_level::$5) + *((const dword*) SCORE_BASE_BCD + (byte~) play_increase_level::$5) [ level#21 current_movedown_slow#65 level_bcd#62 play_increase_level::b#2 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:320 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#29 level#21 current_movedown_slow#65 level_bcd#62 play_increase_level::b#2 ] ) always clobbers reg byte a -Statement [353] (byte) play_remove_lines::w#2 ← (byte) play_remove_lines::w#1 + (const byte) PLAYFIELD_COLS [ play_remove_lines::y#8 play_remove_lines::removed#11 play_remove_lines::r#1 play_remove_lines::w#2 ] ( main:13::play_movement:53::play_move_down:167::play_remove_lines:274 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_remove_lines::y#8 play_remove_lines::removed#11 play_remove_lines::r#1 play_remove_lines::w#2 ] ) always clobbers reg byte a -Statement [361] *((const byte*) playfield + (byte) play_remove_lines::w#6) ← (byte) 0 [ play_remove_lines::removed#8 play_remove_lines::w#6 ] ( main:13::play_movement:53::play_move_down:167::play_remove_lines:274 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_remove_lines::removed#8 play_remove_lines::w#6 ] ) always clobbers reg byte a -Statement [365] (byte~) play_lock_current::$4 ← (byte) play_lock_current::yp#2 << (byte) 1 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::$4 ] ( main:13::play_movement:53::play_move_down:167::play_lock_current:272 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::$4 ] ) always clobbers reg byte a -Statement [366] (byte*) play_lock_current::playfield_line#0 ← *((const byte**) playfield_lines + (byte~) play_lock_current::$4) [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::playfield_line#0 ] ( main:13::play_movement:53::play_move_down:167::play_lock_current:272 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::playfield_line#0 ] ) always clobbers reg byte a -Statement [370] if(*((byte*) current_piece_gfx#13 + (byte) play_lock_current::i#2)==(byte) 0) goto play_lock_current::@3 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ( main:13::play_movement:53::play_move_down:167::play_lock_current:272 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ) always clobbers reg byte a -Statement [371] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::xp#2) ← (byte) current_piece_char#10 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ( main:13::play_movement:53::play_move_down:167::play_lock_current:272 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ) always clobbers reg byte a -Statement [382] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte) 3 [ keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] ( main:13::play_movement:53::play_move_down:167::keyboard_event_pressed:252 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:404 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:410 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:416 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:422 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] ) always clobbers reg byte a -Statement [384] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte) 7 [ keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] ( main:13::play_movement:53::play_move_down:167::keyboard_event_pressed:252 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:404 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:410 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:416 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:422 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] ) always clobbers reg byte a -Statement [385] (byte) keyboard_event_pressed::return#11 ← (byte) keyboard_event_pressed::row_bits#0 & *((const byte*) keyboard_matrix_col_bitmask + (byte~) keyboard_event_pressed::$1) [ keyboard_event_pressed::return#11 ] ( main:13::play_movement:53::play_move_down:167::keyboard_event_pressed:252 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::return#11 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:404 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:410 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:416 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:422 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] ) always clobbers reg byte a -Statement [387] if((byte) keyboard_events_size#13==(byte) 0) goto keyboard_event_get::@return [ keyboard_events_size#13 ] ( main:13::keyboard_event_get:47 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 ] ) always clobbers reg byte a -Statement [389] (byte) keyboard_event_get::return#1 ← *((const byte*) keyboard_events + (byte) keyboard_events_size#4) [ keyboard_events_size#4 keyboard_event_get::return#1 ] ( main:13::keyboard_event_get:47 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#4 keyboard_event_get::return#1 ] ) always clobbers reg byte y -Statement [398] if((byte) keyboard_event_scan::row_scan#0!=*((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2)) goto keyboard_event_scan::@9 [ keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_event_scan::row_scan#0 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_event_scan::row_scan#0 ] ) always clobbers reg byte a -Statement [399] (byte) keyboard_event_scan::keycode#1 ← (byte) keyboard_event_scan::keycode#11 + (byte) 8 [ keyboard_event_scan::row#2 keyboard_events_size#30 keyboard_event_scan::keycode#1 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_events_size#30 keyboard_event_scan::keycode#1 ] ) always clobbers reg byte a reg byte x +Statement [328] (byte~) play_increase_level::$1 ← (byte) level_bcd#21 & (byte) $f [ level#21 current_movedown_slow#65 level_bcd#21 play_increase_level::$1 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:320 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd lines_bcd#29 level#21 current_movedown_slow#65 level_bcd#21 play_increase_level::$1 ] ) always clobbers reg byte a +Statement [330] (byte) level_bcd#8 ← (byte) level_bcd#21 + (byte) 6 [ level#21 current_movedown_slow#65 level_bcd#8 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:320 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd lines_bcd#29 level#21 current_movedown_slow#65 level_bcd#8 ] ) always clobbers reg byte a reg byte x +Statement [334] (byte~) play_increase_level::$5 ← (byte) play_increase_level::b#2 << (byte) 2 [ level#21 current_movedown_slow#65 level_bcd#62 play_increase_level::b#2 play_increase_level::$5 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:320 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd lines_bcd#29 level#21 current_movedown_slow#65 level_bcd#62 play_increase_level::b#2 play_increase_level::$5 ] ) always clobbers reg byte a +Statement [335] *((const dword*) score_add_bcd + (byte~) play_increase_level::$5) ← *((const dword*) score_add_bcd + (byte~) play_increase_level::$5) + *((const dword*) SCORE_BASE_BCD + (byte~) play_increase_level::$5) [ level#21 current_movedown_slow#65 level_bcd#62 play_increase_level::b#2 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:320 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd lines_bcd#29 level#21 current_movedown_slow#65 level_bcd#62 play_increase_level::b#2 ] ) always clobbers reg byte a +Statement [353] (byte) play_remove_lines::w#2 ← (byte) play_remove_lines::w#1 + (const byte) PLAYFIELD_COLS [ play_remove_lines::y#8 play_remove_lines::removed#11 play_remove_lines::r#1 play_remove_lines::w#2 ] ( main:13::play_movement:53::play_move_down:167::play_remove_lines:274 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_remove_lines::y#8 play_remove_lines::removed#11 play_remove_lines::r#1 play_remove_lines::w#2 ] ) always clobbers reg byte a +Statement [361] *((const byte*) playfield + (byte) play_remove_lines::w#6) ← (byte) 0 [ play_remove_lines::removed#8 play_remove_lines::w#6 ] ( main:13::play_movement:53::play_move_down:167::play_remove_lines:274 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_remove_lines::removed#8 play_remove_lines::w#6 ] ) always clobbers reg byte a +Statement [365] (byte~) play_lock_current::$4 ← (byte) play_lock_current::yp#2 << (byte) 1 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::$4 ] ( main:13::play_movement:53::play_move_down:167::play_lock_current:272 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::$4 ] ) always clobbers reg byte a +Statement [366] (byte*) play_lock_current::playfield_line#0 ← *((const byte**) playfield_lines + (byte~) play_lock_current::$4) [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::playfield_line#0 ] ( main:13::play_movement:53::play_move_down:167::play_lock_current:272 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::playfield_line#0 ] ) always clobbers reg byte a +Statement [370] if(*((byte*) current_piece_gfx#13 + (byte) play_lock_current::i#2)==(byte) 0) goto play_lock_current::@3 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ( main:13::play_movement:53::play_move_down:167::play_lock_current:272 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ) always clobbers reg byte a +Statement [371] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::xp#2) ← (byte) current_piece_char#10 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ( main:13::play_movement:53::play_move_down:167::play_lock_current:272 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ) always clobbers reg byte a +Statement [382] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte) 3 [ keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] ( main:13::play_movement:53::play_move_down:167::keyboard_event_pressed:252 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:404 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:410 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:416 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:422 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] ) always clobbers reg byte a +Statement [384] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte) 7 [ keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] ( main:13::play_movement:53::play_move_down:167::keyboard_event_pressed:252 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:404 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:410 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:416 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:422 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] ) always clobbers reg byte a +Statement [385] (byte) keyboard_event_pressed::return#11 ← (byte) keyboard_event_pressed::row_bits#0 & *((const byte*) keyboard_matrix_col_bitmask + (byte~) keyboard_event_pressed::$1) [ keyboard_event_pressed::return#11 ] ( main:13::play_movement:53::play_move_down:167::keyboard_event_pressed:252 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::return#11 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:404 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:410 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:416 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:422 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] ) always clobbers reg byte a +Statement [387] if((byte) keyboard_events_size#13==(byte) 0) goto keyboard_event_get::@return [ keyboard_events_size#13 ] ( main:13::keyboard_event_get:47 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 ] ) always clobbers reg byte a +Statement [389] (byte) keyboard_event_get::return#1 ← *((const byte*) keyboard_events + (byte) keyboard_events_size#4) [ keyboard_events_size#4 keyboard_event_get::return#1 ] ( main:13::keyboard_event_get:47 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#4 keyboard_event_get::return#1 ] ) always clobbers reg byte y +Statement [398] if((byte) keyboard_event_scan::row_scan#0!=*((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2)) goto keyboard_event_scan::@9 [ keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_event_scan::row_scan#0 ] ( main:13::keyboard_event_scan:45 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_event_scan::row_scan#0 ] ) always clobbers reg byte a +Statement [399] (byte) keyboard_event_scan::keycode#1 ← (byte) keyboard_event_scan::keycode#11 + (byte) 8 [ keyboard_event_scan::row#2 keyboard_events_size#30 keyboard_event_scan::keycode#1 ] ( main:13::keyboard_event_scan:45 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_events_size#30 keyboard_event_scan::keycode#1 ] ) always clobbers reg byte a reg byte x Removing always clobbered register reg byte x as potential for zp[1]:63 [ current_piece_char#29 current_piece_char#10 current_piece_char#16 current_piece_char#5 ] Removing always clobbered register reg byte x as potential for zp[1]:64 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ] Removing always clobbered register reg byte x as potential for zp[1]:67 [ current_xpos#43 current_xpos#14 current_xpos#19 current_xpos#100 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ] @@ -15977,256 +15977,256 @@ Removing always clobbered register reg byte x as potential for zp[1]:55 [ curren Removing always clobbered register reg byte x as potential for zp[1]:4 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ] Removing always clobbered register reg byte x as potential for zp[1]:60 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#62 level_bcd#21 level_bcd#8 ] Removing always clobbered register reg byte x as potential for zp[1]:85 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] -Statement [402] if((byte) keyboard_event_scan::row#1!=(byte) 8) goto keyboard_event_scan::@7 [ keyboard_events_size#13 keyboard_event_scan::row#1 keyboard_event_scan::keycode#13 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_scan::row#1 keyboard_event_scan::keycode#13 ] ) always clobbers reg byte a -Statement [429] (byte~) keyboard_event_scan::$15 ← (byte) keyboard_event_scan::row_scan#0 ^ *((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$15 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$15 ] ) always clobbers reg byte a -Statement [430] (byte~) keyboard_event_scan::$16 ← (byte~) keyboard_event_scan::$15 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_event_scan::col#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$16 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$16 ] ) always clobbers reg byte a -Statement [432] if((byte) keyboard_events_size#10==(byte) 8) goto keyboard_event_scan::@10 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ) always clobbers reg byte a -Statement [433] (byte) keyboard_event_scan::event_type#0 ← (byte) keyboard_event_scan::row_scan#0 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_event_scan::col#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::event_type#0 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::event_type#0 ] ) always clobbers reg byte a -Statement [435] *((const byte*) keyboard_events + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ) always clobbers reg byte a reg byte y -Statement [441] *((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0 [ keyboard_event_scan::row#2 keyboard_event_scan::keycode#14 keyboard_events_size#29 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#14 keyboard_events_size#29 ] ) always clobbers reg byte a reg byte y -Statement [442] (byte~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#10 | (byte) $40 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$23 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$23 ] ) always clobbers reg byte a -Statement [443] *((const byte*) keyboard_events + (byte) keyboard_events_size#10) ← (byte~) keyboard_event_scan::$23 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ) always clobbers reg byte y -Statement [445] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:13::keyboard_event_scan:45::keyboard_matrix_read:395 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 ] ) always clobbers reg byte a -Statement [446] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:13::keyboard_event_scan:45::keyboard_matrix_read:395 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_matrix_read::return#0 ] ) always clobbers reg byte a -Statement [448] if((byte) render_screen_show#16==(byte) 0) goto render_show::toD0181 [ render_screen_show#16 level#10 ] ( main:13::render_show:43 [ render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a -Statement [452] *((const byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1 + (byte) level#10) [ render_screen_show#16 level#10 ] ( main:13::render_show:43 [ render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a reg byte y -Statement [453] *((const byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2 + (byte) level#10) [ render_screen_show#16 level#10 ] ( main:13::render_show:43 [ render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a reg byte y -Statement [454] (byte) render_screen_showing ← (byte) render_screen_show#16 [ render_screen_show#16 level#10 ] ( main:13::render_show:43 [ render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a -Statement [459] (byte~) play_init::$2 ← (byte) play_init::j#2 << (byte) 1 [ play_init::j#2 play_init::pli#2 play_init::idx#2 play_init::$2 ] ( main:13::play_init:24 [ play_init::j#2 play_init::pli#2 play_init::idx#2 play_init::$2 ] ) always clobbers reg byte a -Statement [460] *((const byte**) playfield_lines + (byte~) play_init::$2) ← (byte*) play_init::pli#2 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ( main:13::play_init:24 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ) always clobbers reg byte a -Statement [461] *((const byte*) playfield_lines_idx + (byte) play_init::j#2) ← (byte) play_init::idx#2 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ( main:13::play_init:24 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ) always clobbers reg byte a -Statement [462] (byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (const byte) PLAYFIELD_COLS [ play_init::j#2 play_init::idx#2 play_init::pli#1 ] ( main:13::play_init:24 [ play_init::j#2 play_init::idx#2 play_init::pli#1 ] ) always clobbers reg byte a -Statement [463] (byte) play_init::idx#1 ← (byte) play_init::idx#2 + (const byte) PLAYFIELD_COLS [ play_init::j#2 play_init::pli#1 play_init::idx#1 ] ( main:13::play_init:24 [ play_init::j#2 play_init::pli#1 play_init::idx#1 ] ) always clobbers reg byte a -Statement [466] *((const byte*) playfield_lines_idx+(const byte) PLAYFIELD_LINES) ← (const byte) PLAYFIELD_COLS*(const byte) PLAYFIELD_LINES [ ] ( main:13::play_init:24 [ ] ) always clobbers reg byte a -Statement [467] (byte) current_movedown_slow#1 ← *((const byte*) MOVEDOWN_SLOW_SPEEDS) [ current_movedown_slow#1 ] ( main:13::play_init:24 [ current_movedown_slow#1 ] ) always clobbers reg byte a -Statement [469] (byte~) play_init::$3 ← (byte) play_init::b#2 << (byte) 2 [ current_movedown_slow#1 play_init::b#2 play_init::$3 ] ( main:13::play_init:24 [ current_movedown_slow#1 play_init::b#2 play_init::$3 ] ) always clobbers reg byte a -Statement [470] *((const dword*) score_add_bcd + (byte~) play_init::$3) ← *((const dword*) SCORE_BASE_BCD + (byte~) play_init::$3) [ current_movedown_slow#1 play_init::b#2 ] ( main:13::play_init:24 [ current_movedown_slow#1 play_init::b#2 ] ) always clobbers reg byte a -Statement [475] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER [ ] ( main:13::sprites_irq_init:22 [ ] ) always clobbers reg byte a +Statement [402] if((byte) keyboard_event_scan::row#1!=(byte) 8) goto keyboard_event_scan::@7 [ keyboard_events_size#13 keyboard_event_scan::row#1 keyboard_event_scan::keycode#13 ] ( main:13::keyboard_event_scan:45 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_scan::row#1 keyboard_event_scan::keycode#13 ] ) always clobbers reg byte a +Statement [429] (byte~) keyboard_event_scan::$15 ← (byte) keyboard_event_scan::row_scan#0 ^ *((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$15 ] ( main:13::keyboard_event_scan:45 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$15 ] ) always clobbers reg byte a +Statement [430] (byte~) keyboard_event_scan::$16 ← (byte~) keyboard_event_scan::$15 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_event_scan::col#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$16 ] ( main:13::keyboard_event_scan:45 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$16 ] ) always clobbers reg byte a +Statement [432] if((byte) keyboard_events_size#10==(byte) 8) goto keyboard_event_scan::@10 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:13::keyboard_event_scan:45 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ) always clobbers reg byte a +Statement [433] (byte) keyboard_event_scan::event_type#0 ← (byte) keyboard_event_scan::row_scan#0 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_event_scan::col#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::event_type#0 ] ( main:13::keyboard_event_scan:45 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::event_type#0 ] ) always clobbers reg byte a +Statement [435] *((const byte*) keyboard_events + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:13::keyboard_event_scan:45 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ) always clobbers reg byte a reg byte y +Statement [441] *((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0 [ keyboard_event_scan::row#2 keyboard_event_scan::keycode#14 keyboard_events_size#29 ] ( main:13::keyboard_event_scan:45 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#14 keyboard_events_size#29 ] ) always clobbers reg byte a reg byte y +Statement [442] (byte~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#10 | (byte) $40 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$23 ] ( main:13::keyboard_event_scan:45 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$23 ] ) always clobbers reg byte a +Statement [443] *((const byte*) keyboard_events + (byte) keyboard_events_size#10) ← (byte~) keyboard_event_scan::$23 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:13::keyboard_event_scan:45 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ) always clobbers reg byte y +Statement [445] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:13::keyboard_event_scan:45::keyboard_matrix_read:395 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 ] ) always clobbers reg byte a +Statement [446] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:13::keyboard_event_scan:45::keyboard_matrix_read:395 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_matrix_read::return#0 ] ) always clobbers reg byte a +Statement [448] if((byte) render_screen_show#16==(byte) 0) goto render_show::toD0181 [ render_screen_show#16 level#10 ] ( main:13::render_show:43 [ score_bcd render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a +Statement [452] *((const byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1 + (byte) level#10) [ render_screen_show#16 level#10 ] ( main:13::render_show:43 [ score_bcd render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a reg byte y +Statement [453] *((const byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2 + (byte) level#10) [ render_screen_show#16 level#10 ] ( main:13::render_show:43 [ score_bcd render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a reg byte y +Statement [454] (byte) render_screen_showing ← (byte) render_screen_show#16 [ render_screen_show#16 level#10 ] ( main:13::render_show:43 [ score_bcd render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a +Statement [459] (byte~) play_init::$2 ← (byte) play_init::j#2 << (byte) 1 [ play_init::j#2 play_init::pli#2 play_init::idx#2 play_init::$2 ] ( main:13::play_init:24 [ score_bcd play_init::j#2 play_init::pli#2 play_init::idx#2 play_init::$2 ] ) always clobbers reg byte a +Statement [460] *((const byte**) playfield_lines + (byte~) play_init::$2) ← (byte*) play_init::pli#2 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ( main:13::play_init:24 [ score_bcd play_init::j#2 play_init::pli#2 play_init::idx#2 ] ) always clobbers reg byte a +Statement [461] *((const byte*) playfield_lines_idx + (byte) play_init::j#2) ← (byte) play_init::idx#2 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ( main:13::play_init:24 [ score_bcd play_init::j#2 play_init::pli#2 play_init::idx#2 ] ) always clobbers reg byte a +Statement [462] (byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (const byte) PLAYFIELD_COLS [ play_init::j#2 play_init::idx#2 play_init::pli#1 ] ( main:13::play_init:24 [ score_bcd play_init::j#2 play_init::idx#2 play_init::pli#1 ] ) always clobbers reg byte a +Statement [463] (byte) play_init::idx#1 ← (byte) play_init::idx#2 + (const byte) PLAYFIELD_COLS [ play_init::j#2 play_init::pli#1 play_init::idx#1 ] ( main:13::play_init:24 [ score_bcd play_init::j#2 play_init::pli#1 play_init::idx#1 ] ) always clobbers reg byte a +Statement [466] *((const byte*) playfield_lines_idx+(const byte) PLAYFIELD_LINES) ← (const byte) PLAYFIELD_COLS*(const byte) PLAYFIELD_LINES [ ] ( main:13::play_init:24 [ score_bcd ] ) always clobbers reg byte a +Statement [467] (byte) current_movedown_slow#1 ← *((const byte*) MOVEDOWN_SLOW_SPEEDS) [ current_movedown_slow#1 ] ( main:13::play_init:24 [ score_bcd current_movedown_slow#1 ] ) always clobbers reg byte a +Statement [469] (byte~) play_init::$3 ← (byte) play_init::b#2 << (byte) 2 [ current_movedown_slow#1 play_init::b#2 play_init::$3 ] ( main:13::play_init:24 [ score_bcd current_movedown_slow#1 play_init::b#2 play_init::$3 ] ) always clobbers reg byte a +Statement [470] *((const dword*) score_add_bcd + (byte~) play_init::$3) ← *((const dword*) SCORE_BASE_BCD + (byte~) play_init::$3) [ current_movedown_slow#1 play_init::b#2 ] ( main:13::play_init:24 [ score_bcd current_movedown_slow#1 play_init::b#2 ] ) always clobbers reg byte a +Statement [475] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER [ ] ( main:13::sprites_irq_init:22 [ score_bcd ] ) always clobbers reg byte a Statement asm { ldaCIA1_INTERRUPT } always clobbers reg byte a -Statement [477] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:13::sprites_irq_init:22 [ ] ) always clobbers reg byte a -Statement [478] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO [ ] ( main:13::sprites_irq_init:22 [ ] ) always clobbers reg byte a -Statement [479] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR [ ] ( main:13::sprites_irq_init:22 [ ] ) always clobbers reg byte a -Statement [480] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) & (byte) $7f [ ] ( main:13::sprites_irq_init:22 [ ] ) always clobbers reg byte a -Statement [481] *((const byte*) RASTER) ← (const byte) IRQ_RASTER_FIRST [ ] ( main:13::sprites_irq_init:22 [ ] ) always clobbers reg byte a -Statement [482] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER [ ] ( main:13::sprites_irq_init:22 [ ] ) always clobbers reg byte a -Statement [483] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() [ ] ( main:13::sprites_irq_init:22 [ ] ) always clobbers reg byte a -Statement [486] *((const byte*) SPRITES_ENABLE) ← (byte) $f [ ] ( main:13::sprites_init:20 [ ] ) always clobbers reg byte a -Statement [487] *((const byte*) SPRITES_MC) ← (byte) 0 [ ] ( main:13::sprites_init:20 [ ] ) always clobbers reg byte a -Statement [488] *((const byte*) SPRITES_EXPAND_Y) ← *((const byte*) SPRITES_MC) [ ] ( main:13::sprites_init:20 [ ] ) always clobbers reg byte a -Statement [489] *((const byte*) SPRITES_EXPAND_X) ← *((const byte*) SPRITES_EXPAND_Y) [ ] ( main:13::sprites_init:20 [ ] ) always clobbers reg byte a -Statement [491] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte) 1 [ sprites_init::s#2 sprites_init::xpos#2 sprites_init::s2#0 ] ( main:13::sprites_init:20 [ sprites_init::s#2 sprites_init::xpos#2 sprites_init::s2#0 ] ) always clobbers reg byte a -Statement [492] *((const byte*) SPRITES_XPOS + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:13::sprites_init:20 [ sprites_init::s#2 sprites_init::xpos#2 ] ) always clobbers reg byte a -Statement [493] *((const byte*) SPRITES_COLS + (byte) sprites_init::s#2) ← (const byte) BLACK [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:13::sprites_init:20 [ sprites_init::s#2 sprites_init::xpos#2 ] ) always clobbers reg byte a -Statement [494] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte) $18 [ sprites_init::s#2 sprites_init::xpos#1 ] ( main:13::sprites_init:20 [ sprites_init::s#2 sprites_init::xpos#1 ] ) always clobbers reg byte a -Statement [499] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:13::render_init:18 [ ] ) always clobbers reg byte a -Statement [501] *((const byte*) CIA2_PORT_A) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:13::render_init:18 [ ] ) always clobbers reg byte a -Statement [502] *((const byte*) D011) ← (const byte) VIC_ECM|(const byte) VIC_DEN|(const byte) VIC_RSEL|(byte) 3 [ ] ( main:13::render_init:18 [ ] ) always clobbers reg byte a -Statement [503] *((const byte*) BORDERCOL) ← (const byte) BLACK [ ] ( main:13::render_init:18 [ ] ) always clobbers reg byte a -Statement [504] *((const byte*) BGCOL1) ← (const byte) BLACK [ ] ( main:13::render_init:18 [ ] ) always clobbers reg byte a -Statement [505] *((const byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1) [ ] ( main:13::render_init:18 [ ] ) always clobbers reg byte a -Statement [506] *((const byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2) [ ] ( main:13::render_init:18 [ ] ) always clobbers reg byte a -Statement [507] *((const byte*) BGCOL4) ← (const byte) GREY [ ] ( main:13::render_init:18 [ ] ) always clobbers reg byte a -Statement [512] (byte~) render_init::$5 ← (byte) render_init::i#2 << (byte) 1 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$5 ] ( main:13::render_init:18 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$5 ] ) always clobbers reg byte a -Statement [513] *((const byte**) screen_lines_1 + (byte~) render_init::$5) ← (byte*) render_init::li_1#2 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$5 ] ( main:13::render_init:18 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$5 ] ) always clobbers reg byte a -Statement [514] *((const byte**) screen_lines_2 + (byte~) render_init::$5) ← (byte*) render_init::li_2#2 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 ] ( main:13::render_init:18 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 ] ) always clobbers reg byte a -Statement [515] (byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte) $28 [ render_init::i#2 render_init::li_2#2 render_init::li_1#1 ] ( main:13::render_init:18 [ render_init::i#2 render_init::li_2#2 render_init::li_1#1 ] ) always clobbers reg byte a -Statement [516] (byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte) $28 [ render_init::i#2 render_init::li_1#1 render_init::li_2#1 ] ( main:13::render_init:18 [ render_init::i#2 render_init::li_1#1 render_init::li_2#1 ] ) always clobbers reg byte a -Statement [523] *((byte*) render_screen_original::screen#5) ← (const byte) render_screen_original::SPACE [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] ( main:13::render_init:18::render_screen_original:508 [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] main:13::render_init:18::render_screen_original:510 [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] ) always clobbers reg byte a reg byte y -Statement [525] *((byte*) render_screen_original::cols#4) ← (const byte) BLACK [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] ( main:13::render_init:18::render_screen_original:508 [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] main:13::render_init:18::render_screen_original:510 [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] ) always clobbers reg byte a reg byte y -Statement [530] *((byte*) render_screen_original::screen#6) ← *((byte*) render_screen_original::oscr#2) [ render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] ( main:13::render_init:18::render_screen_original:508 [ render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] main:13::render_init:18::render_screen_original:510 [ render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] ) always clobbers reg byte a reg byte y -Statement [533] *((byte*) render_screen_original::cols#5) ← *((byte*) render_screen_original::ocols#2) [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] ( main:13::render_init:18::render_screen_original:508 [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] main:13::render_init:18::render_screen_original:510 [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] ) always clobbers reg byte a reg byte y -Statement [539] *((byte*) render_screen_original::screen#7) ← (const byte) render_screen_original::SPACE [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] ( main:13::render_init:18::render_screen_original:508 [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] main:13::render_init:18::render_screen_original:510 [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] ) always clobbers reg byte a reg byte y -Statement [541] *((byte*) render_screen_original::cols#6) ← (const byte) BLACK [ render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] ( main:13::render_init:18::render_screen_original:508 [ render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] main:13::render_init:18::render_screen_original:510 [ render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] ) always clobbers reg byte a reg byte y -Statement [548] *((const word*) SID_VOICE3_FREQ) ← (word) $ffff [ ] ( main:13::sid_rnd_init:16 [ ] ) always clobbers reg byte a -Statement [549] *((const byte*) SID_VOICE3_CONTROL) ← (const byte) SID_CONTROL_NOISE [ ] ( main:13::sid_rnd_init:16 [ ] ) always clobbers reg byte a -Statement [559] if(*((const byte*) RASTER)<(byte) sprites_irq::raster_sprite_gfx_modify) goto sprites_irq::@8 [ render_screen_showing irq_sprite_ptr sprites_irq::raster_sprite_gfx_modify ] ( [ render_screen_showing irq_sprite_ptr sprites_irq::raster_sprite_gfx_modify ] ) always clobbers reg byte a -Statement [561] if((byte) render_screen_showing==(byte) 0) goto sprites_irq::@1 [ sprites_irq::ptr#0 ] ( [ sprites_irq::ptr#0 ] ) always clobbers reg byte a -Statement [569] if((byte) irq_cnt==(byte) 9) goto sprites_irq::@3 [ irq_cnt ] ( [ irq_cnt ] ) always clobbers reg byte a -Statement [570] if((byte) irq_cnt==(byte) $a) goto sprites_irq::@4 [ ] ( [ ] ) always clobbers reg byte a -Statement [571] (byte) irq_raster_next ← (byte) irq_raster_next + (byte) $14 [ irq_raster_next ] ( [ irq_raster_next ] ) always clobbers reg byte a reg byte x -Statement [572] (byte) irq_sprite_ypos ← (byte) irq_sprite_ypos + (byte) $15 [ irq_raster_next ] ( [ irq_raster_next ] ) always clobbers reg byte a reg byte x +Statement [477] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:13::sprites_irq_init:22 [ score_bcd ] ) always clobbers reg byte a +Statement [478] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO [ ] ( main:13::sprites_irq_init:22 [ score_bcd ] ) always clobbers reg byte a +Statement [479] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR [ ] ( main:13::sprites_irq_init:22 [ score_bcd ] ) always clobbers reg byte a +Statement [480] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) & (byte) $7f [ ] ( main:13::sprites_irq_init:22 [ score_bcd ] ) always clobbers reg byte a +Statement [481] *((const byte*) RASTER) ← (const byte) IRQ_RASTER_FIRST [ ] ( main:13::sprites_irq_init:22 [ score_bcd ] ) always clobbers reg byte a +Statement [482] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER [ ] ( main:13::sprites_irq_init:22 [ score_bcd ] ) always clobbers reg byte a +Statement [483] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() [ ] ( main:13::sprites_irq_init:22 [ score_bcd ] ) always clobbers reg byte a +Statement [486] *((const byte*) SPRITES_ENABLE) ← (byte) $f [ ] ( main:13::sprites_init:20 [ score_bcd ] ) always clobbers reg byte a +Statement [487] *((const byte*) SPRITES_MC) ← (byte) 0 [ ] ( main:13::sprites_init:20 [ score_bcd ] ) always clobbers reg byte a +Statement [488] *((const byte*) SPRITES_EXPAND_Y) ← *((const byte*) SPRITES_MC) [ ] ( main:13::sprites_init:20 [ score_bcd ] ) always clobbers reg byte a +Statement [489] *((const byte*) SPRITES_EXPAND_X) ← *((const byte*) SPRITES_EXPAND_Y) [ ] ( main:13::sprites_init:20 [ score_bcd ] ) always clobbers reg byte a +Statement [491] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte) 1 [ sprites_init::s#2 sprites_init::xpos#2 sprites_init::s2#0 ] ( main:13::sprites_init:20 [ score_bcd sprites_init::s#2 sprites_init::xpos#2 sprites_init::s2#0 ] ) always clobbers reg byte a +Statement [492] *((const byte*) SPRITES_XPOS + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:13::sprites_init:20 [ score_bcd sprites_init::s#2 sprites_init::xpos#2 ] ) always clobbers reg byte a +Statement [493] *((const byte*) SPRITES_COLS + (byte) sprites_init::s#2) ← (const byte) BLACK [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:13::sprites_init:20 [ score_bcd sprites_init::s#2 sprites_init::xpos#2 ] ) always clobbers reg byte a +Statement [494] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte) $18 [ sprites_init::s#2 sprites_init::xpos#1 ] ( main:13::sprites_init:20 [ score_bcd sprites_init::s#2 sprites_init::xpos#1 ] ) always clobbers reg byte a +Statement [499] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:13::render_init:18 [ score_bcd ] ) always clobbers reg byte a +Statement [501] *((const byte*) CIA2_PORT_A) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:13::render_init:18 [ score_bcd ] ) always clobbers reg byte a +Statement [502] *((const byte*) D011) ← (const byte) VIC_ECM|(const byte) VIC_DEN|(const byte) VIC_RSEL|(byte) 3 [ ] ( main:13::render_init:18 [ score_bcd ] ) always clobbers reg byte a +Statement [503] *((const byte*) BORDERCOL) ← (const byte) BLACK [ ] ( main:13::render_init:18 [ score_bcd ] ) always clobbers reg byte a +Statement [504] *((const byte*) BGCOL1) ← (const byte) BLACK [ ] ( main:13::render_init:18 [ score_bcd ] ) always clobbers reg byte a +Statement [505] *((const byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1) [ ] ( main:13::render_init:18 [ score_bcd ] ) always clobbers reg byte a +Statement [506] *((const byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2) [ ] ( main:13::render_init:18 [ score_bcd ] ) always clobbers reg byte a +Statement [507] *((const byte*) BGCOL4) ← (const byte) GREY [ ] ( main:13::render_init:18 [ score_bcd ] ) always clobbers reg byte a +Statement [512] (byte~) render_init::$5 ← (byte) render_init::i#2 << (byte) 1 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$5 ] ( main:13::render_init:18 [ score_bcd render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$5 ] ) always clobbers reg byte a +Statement [513] *((const byte**) screen_lines_1 + (byte~) render_init::$5) ← (byte*) render_init::li_1#2 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$5 ] ( main:13::render_init:18 [ score_bcd render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$5 ] ) always clobbers reg byte a +Statement [514] *((const byte**) screen_lines_2 + (byte~) render_init::$5) ← (byte*) render_init::li_2#2 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 ] ( main:13::render_init:18 [ score_bcd render_init::i#2 render_init::li_1#2 render_init::li_2#2 ] ) always clobbers reg byte a +Statement [515] (byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte) $28 [ render_init::i#2 render_init::li_2#2 render_init::li_1#1 ] ( main:13::render_init:18 [ score_bcd render_init::i#2 render_init::li_2#2 render_init::li_1#1 ] ) always clobbers reg byte a +Statement [516] (byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte) $28 [ render_init::i#2 render_init::li_1#1 render_init::li_2#1 ] ( main:13::render_init:18 [ score_bcd render_init::i#2 render_init::li_1#1 render_init::li_2#1 ] ) always clobbers reg byte a +Statement [523] *((byte*) render_screen_original::screen#5) ← (const byte) render_screen_original::SPACE [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] ( main:13::render_init:18::render_screen_original:508 [ score_bcd render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] main:13::render_init:18::render_screen_original:510 [ score_bcd render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] ) always clobbers reg byte a reg byte y +Statement [525] *((byte*) render_screen_original::cols#4) ← (const byte) BLACK [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] ( main:13::render_init:18::render_screen_original:508 [ score_bcd render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] main:13::render_init:18::render_screen_original:510 [ score_bcd render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] ) always clobbers reg byte a reg byte y +Statement [530] *((byte*) render_screen_original::screen#6) ← *((byte*) render_screen_original::oscr#2) [ render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] ( main:13::render_init:18::render_screen_original:508 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] main:13::render_init:18::render_screen_original:510 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] ) always clobbers reg byte a reg byte y +Statement [533] *((byte*) render_screen_original::cols#5) ← *((byte*) render_screen_original::ocols#2) [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] ( main:13::render_init:18::render_screen_original:508 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] main:13::render_init:18::render_screen_original:510 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] ) always clobbers reg byte a reg byte y +Statement [539] *((byte*) render_screen_original::screen#7) ← (const byte) render_screen_original::SPACE [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] ( main:13::render_init:18::render_screen_original:508 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] main:13::render_init:18::render_screen_original:510 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] ) always clobbers reg byte a reg byte y +Statement [541] *((byte*) render_screen_original::cols#6) ← (const byte) BLACK [ render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] ( main:13::render_init:18::render_screen_original:508 [ score_bcd render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] main:13::render_init:18::render_screen_original:510 [ score_bcd render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] ) always clobbers reg byte a reg byte y +Statement [548] *((const word*) SID_VOICE3_FREQ) ← (word) $ffff [ ] ( main:13::sid_rnd_init:16 [ score_bcd ] ) always clobbers reg byte a +Statement [549] *((const byte*) SID_VOICE3_CONTROL) ← (const byte) SID_CONTROL_NOISE [ ] ( main:13::sid_rnd_init:16 [ score_bcd ] ) always clobbers reg byte a +Statement [559] if(*((const byte*) RASTER)<(byte) sprites_irq::raster_sprite_gfx_modify) goto sprites_irq::@8 [ render_screen_showing irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt sprites_irq::raster_sprite_gfx_modify ] ( [ render_screen_showing irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt sprites_irq::raster_sprite_gfx_modify ] ) always clobbers reg byte a +Statement [561] if((byte) render_screen_showing==(byte) 0) goto sprites_irq::@1 [ irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt sprites_irq::ptr#0 ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt sprites_irq::ptr#0 ] ) always clobbers reg byte a +Statement [569] if((byte) irq_cnt==(byte) 9) goto sprites_irq::@3 [ irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt ] ) always clobbers reg byte a +Statement [570] if((byte) irq_cnt==(byte) $a) goto sprites_irq::@4 [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] ) always clobbers reg byte a +Statement [571] (byte) irq_raster_next ← (byte) irq_raster_next + (byte) $14 [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] ) always clobbers reg byte a reg byte x +Statement [572] (byte) irq_sprite_ypos ← (byte) irq_sprite_ypos + (byte) $15 [ irq_raster_next irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ptr ] ) always clobbers reg byte a reg byte x Statement [573] (byte) irq_sprite_ptr ← (byte) irq_sprite_ptr + (byte) 3 [ irq_raster_next ] ( [ irq_raster_next ] ) always clobbers reg byte a reg byte x Statement [574] *((const byte*) RASTER) ← (byte) irq_raster_next [ ] ( [ ] ) always clobbers reg byte a Statement [575] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER [ ] ( [ ] ) always clobbers reg byte a Statement [576] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y -Statement [577] (byte) irq_cnt ← (byte) 0 [ ] ( [ ] ) always clobbers reg byte a -Statement [578] (byte) irq_raster_next ← (const byte) IRQ_RASTER_FIRST [ irq_raster_next ] ( [ irq_raster_next ] ) always clobbers reg byte a -Statement [579] (byte) irq_sprite_ypos ← (byte) irq_sprite_ypos + (byte) $15 [ irq_raster_next ] ( [ irq_raster_next ] ) always clobbers reg byte a reg byte x +Statement [577] (byte) irq_cnt ← (byte) 0 [ irq_sprite_ypos irq_sprite_ptr ] ( [ irq_sprite_ypos irq_sprite_ptr ] ) always clobbers reg byte a +Statement [578] (byte) irq_raster_next ← (const byte) IRQ_RASTER_FIRST [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] ) always clobbers reg byte a +Statement [579] (byte) irq_sprite_ypos ← (byte) irq_sprite_ypos + (byte) $15 [ irq_raster_next irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ptr ] ) always clobbers reg byte a reg byte x Statement [580] (byte) irq_sprite_ptr ← (byte) irq_sprite_ptr + (byte) 3 [ irq_raster_next ] ( [ irq_raster_next ] ) always clobbers reg byte a reg byte x Statement [581] (byte) irq_raster_next ← (byte) irq_raster_next + (byte) $15 [ irq_raster_next ] ( [ irq_raster_next ] ) always clobbers reg byte a reg byte x Statement [582] (byte) irq_sprite_ypos ← (const byte) SPRITES_FIRST_YPOS [ irq_raster_next ] ( [ irq_raster_next ] ) always clobbers reg byte a Statement [584] (byte) irq_sprite_ptr ← (const byte) sprites_irq::toSpritePtr2_return#0 [ irq_raster_next ] ( [ irq_raster_next ] ) always clobbers reg byte a Statement [1] (byte) render_screen_showing ← (byte) 0 [ ] ( [ ] ) always clobbers reg byte a -Statement [2] (dword) score_bcd ← (dword) 0 [ ] ( [ ] ) always clobbers reg byte a -Statement [7] (byte) irq_raster_next ← (const byte) IRQ_RASTER_FIRST [ ] ( [ ] ) always clobbers reg byte a -Statement [8] (byte) irq_sprite_ypos ← (const byte) SPRITES_FIRST_YPOS+(byte) $15 [ ] ( [ ] ) always clobbers reg byte a -Statement [10] (byte) irq_sprite_ptr ← (const byte) toSpritePtr1_return#0+(byte) 3 [ ] ( [ ] ) always clobbers reg byte a -Statement [11] (byte) irq_cnt ← (byte) 0 [ ] ( [ ] ) always clobbers reg byte a -Statement [33] (byte*) current_piece_gfx#111 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ current_ypos#97 current_ypos#6 current_xpos#118 current_xpos#100 current_piece_gfx#111 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 ] ( main:13 [ current_ypos#97 current_ypos#6 current_xpos#118 current_xpos#100 current_piece_gfx#111 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 ] ) always clobbers reg byte a -Statement [38] (byte*) current_piece#101 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#101 current_movedown_slow#1 game_over#52 ] ( main:13 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#101 current_movedown_slow#1 game_over#52 ] ) always clobbers reg byte a -Statement [39] (byte*) current_piece_gfx#123 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#101 current_piece_gfx#123 current_movedown_slow#1 game_over#52 ] ( main:13 [ current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#101 current_piece_gfx#123 current_movedown_slow#1 game_over#52 ] ) always clobbers reg byte a -Statement [41] if(*((const byte*) RASTER)!=(byte) $ff) goto main::@2 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 ] ( main:13 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 ] ) always clobbers reg byte a -Statement [50] if((byte) game_over#10==(byte) 0) goto main::@4 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#16 main::key_event#0 ] ( main:13 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#16 main::key_event#0 ] ) always clobbers reg byte a -Statement [62] (byte*) current_piece_gfx#112 ← (byte*) current_piece_gfx#18 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 current_ypos#98 render_screen_render#64 current_xpos#119 current_piece_gfx#112 ] ( main:13 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 current_ypos#98 render_screen_render#64 current_xpos#119 current_piece_gfx#112 ] ) always clobbers reg byte a -Statement [72] (byte) render_screen_render#11 ← (byte) render_screen_render#18 ^ (byte) $20 [ render_screen_show#16 render_screen_render#11 ] ( main:13::render_screen_swap:71 [ current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_show#16 render_screen_render#11 ] ) always clobbers reg byte a -Statement [73] (byte) render_screen_show#13 ← (byte) render_screen_show#16 ^ (byte) $20 [ render_screen_show#13 render_screen_render#11 ] ( main:13::render_screen_swap:71 [ current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_show#13 render_screen_render#11 ] ) always clobbers reg byte a -Statement [75] if((byte) render_screen_render#18==(byte) 0) goto render_score::@1 [ render_screen_render#18 lines_bcd#15 level_bcd#17 ] ( main:13::render_score:69 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 ] ) always clobbers reg byte a -Statement [78] (byte*) render_bcd::screen#0 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#0 ] ( main:13::render_score:69 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#0 ] ) always clobbers reg byte a -Statement [81] (byte*) render_bcd::screen#1 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#1 ] ( main:13::render_score:69 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#1 ] ) always clobbers reg byte a -Statement [84] (byte*) render_bcd::screen#2 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#2 ] ( main:13::render_score:69 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#2 ] ) always clobbers reg byte a -Statement [87] (byte) render_bcd::bcd#3 ← > (word) lines_bcd#15 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#3 ] ( main:13::render_score:69 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#3 ] ) always clobbers reg byte a -Statement [88] (byte*) render_bcd::screen#3 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#3 render_bcd::screen#3 ] ( main:13::render_score:69 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#3 render_bcd::screen#3 ] ) always clobbers reg byte a -Statement [90] (byte) render_bcd::bcd#4 ← < (word) lines_bcd#15 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#4 ] ( main:13::render_score:69 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#4 ] ) always clobbers reg byte a -Statement [91] (byte*) render_bcd::screen#4 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#4 render_bcd::screen#4 ] ( main:13::render_score:69 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#4 render_bcd::screen#4 ] ) always clobbers reg byte a -Statement [93] (byte*) render_bcd::screen#5 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::screen#5 ] ( main:13::render_score:69 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::screen#5 ] ) always clobbers reg byte a -Statement [98] (byte*) render_bcd::screen_pos#0 ← (byte*) render_bcd::screen#6 + (word) render_bcd::offset#6 [ render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] ( main:13::render_score:69::render_bcd:80 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:83 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:86 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:89 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:92 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:95 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] ) always clobbers reg byte a -Statement [100] (byte~) render_bcd::$5 ← (byte) render_bcd::bcd#6 >> (byte) 4 [ render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] ( main:13::render_score:69::render_bcd:80 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] main:13::render_score:69::render_bcd:83 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] main:13::render_score:69::render_bcd:86 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] main:13::render_score:69::render_bcd:89 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] main:13::render_score:69::render_bcd:92 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] main:13::render_score:69::render_bcd:95 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] ) always clobbers reg byte a -Statement [102] *((byte*) render_bcd::screen_pos#0) ← (byte~) render_bcd::$6 [ render_bcd::bcd#6 render_bcd::screen_pos#0 ] ( main:13::render_score:69::render_bcd:80 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:83 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:86 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:89 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:92 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:95 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::bcd#6 render_bcd::screen_pos#0 ] ) always clobbers reg byte y -Statement [105] (byte~) render_bcd::$3 ← (byte) render_bcd::bcd#6 & (byte) $f [ render_bcd::screen_pos#3 render_bcd::$3 ] ( main:13::render_score:69::render_bcd:80 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:13::render_score:69::render_bcd:83 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:13::render_score:69::render_bcd:86 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:13::render_score:69::render_bcd:89 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:13::render_score:69::render_bcd:92 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:13::render_score:69::render_bcd:95 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::screen_pos#3 render_bcd::$3 ] ) always clobbers reg byte a -Statement [107] *((byte*) render_bcd::screen_pos#3) ← (byte~) render_bcd::$4 [ ] ( main:13::render_score:69::render_bcd:80 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:13::render_score:69::render_bcd:83 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:13::render_score:69::render_bcd:86 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:13::render_score:69::render_bcd:89 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:13::render_score:69::render_bcd:92 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:13::render_score:69::render_bcd:95 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 ] ) always clobbers reg byte y -Statement [113] (byte~) render_next::$6 ← (byte) next_piece_idx#12 << (byte) 1 [ next_piece_idx#12 render_next::screen_next_area#11 render_next::$6 ] ( main:13::render_next:37 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 next_piece_idx#12 render_next::screen_next_area#11 render_next::$6 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 next_piece_idx#12 render_next::screen_next_area#11 render_next::$6 ] ) always clobbers reg byte a -Statement [115] (byte*) render_next::next_piece_gfx#9 ← (byte*)*((const word*) PIECES + (byte~) render_next::$6) [ render_next::screen_next_area#11 render_next::next_piece_char#0 render_next::next_piece_gfx#9 ] ( main:13::render_next:37 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::screen_next_area#11 render_next::next_piece_char#0 render_next::next_piece_gfx#9 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_next::screen_next_area#11 render_next::next_piece_char#0 render_next::next_piece_gfx#9 ] ) always clobbers reg byte a -Statement [118] (byte) render_next::cell#0 ← *((byte*) render_next::next_piece_gfx#2) [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#2 render_next::screen_next_area#5 render_next::c#2 render_next::cell#0 ] ( main:13::render_next:37 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#2 render_next::screen_next_area#5 render_next::c#2 render_next::cell#0 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#2 render_next::screen_next_area#5 render_next::c#2 render_next::cell#0 ] ) always clobbers reg byte a reg byte y -Statement [121] *((byte*) render_next::screen_next_area#5) ← (byte) 0 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ( main:13::render_next:37 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ) always clobbers reg byte a reg byte y -Statement [125] (byte*) render_next::screen_next_area#4 ← (byte*) render_next::screen_next_area#3 + (byte) $24 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] ( main:13::render_next:37 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] ) always clobbers reg byte a -Statement [129] *((byte*) render_next::screen_next_area#5) ← (byte) render_next::next_piece_char#0 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ( main:13::render_next:37 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] main:13::render_next:67 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ) always clobbers reg byte a reg byte y -Statement [134] (byte) render_moving::i#1 ← (byte) render_moving::i#3 + (byte) 4 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] ( main:13::render_moving:35 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] ) always clobbers reg byte a -Statement [140] (byte~) render_moving::$1 ← (byte) render_screen_render#33 + (byte) render_moving::ypos#2 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] ( main:13::render_moving:35 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] ) always clobbers reg byte a -Statement [141] (byte~) render_moving::$6 ← (byte~) render_moving::$1 << (byte) 1 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] ( main:13::render_moving:35 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] ) always clobbers reg byte a -Statement [142] (byte*) render_moving::screen_line#0 ← *((const byte**) screen_lines_1 + (byte~) render_moving::$6) [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] ( main:13::render_moving:35 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] ) always clobbers reg byte a -Statement [145] (byte) render_moving::current_cell#0 ← *((byte*) current_piece_gfx#64 + (byte) render_moving::i#4) [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] ( main:13::render_moving:35 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] ) always clobbers reg byte a -Statement [148] *((byte*) render_moving::screen_line#0 + (byte) render_moving::xpos#2) ← (byte) current_piece_char#68 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] ( main:13::render_moving:35 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] main:13::render_moving:64 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] ) always clobbers reg byte a -Statement [154] (byte~) render_playfield::$0 ← (byte) render_screen_render#22 + (byte) render_playfield::l#2 [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$0 ] ( main:13::render_playfield:30 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$0 ] main:13::render_playfield:58 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$0 ] ) always clobbers reg byte a -Statement [155] (byte~) render_playfield::$3 ← (byte~) render_playfield::$0 << (byte) 1 [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$3 ] ( main:13::render_playfield:30 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$3 ] main:13::render_playfield:58 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$3 ] ) always clobbers reg byte a -Statement [156] (byte*) render_playfield::screen_line#0 ← *((const byte**) screen_lines_1 + (byte~) render_playfield::$3) [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] ( main:13::render_playfield:30 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] main:13::render_playfield:58 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] ) always clobbers reg byte a -Statement [158] *((byte*) render_playfield::screen_line#2) ← *((const byte*) playfield + (byte) render_playfield::i#2) [ render_screen_render#22 render_playfield::l#2 render_playfield::i#2 render_playfield::screen_line#2 render_playfield::c#2 ] ( main:13::render_playfield:30 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#2 render_playfield::screen_line#2 render_playfield::c#2 ] main:13::render_playfield:58 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#2 render_playfield::screen_line#2 render_playfield::c#2 ] ) always clobbers reg byte a reg byte y -Statement [170] if((byte) game_over#15==(byte) 0) goto play_movement::@1 [ current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_orientation#20 current_piece_gfx#20 current_xpos#22 ] ( main:13::play_movement:53 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_orientation#20 current_piece_gfx#20 current_xpos#22 ] ) always clobbers reg byte a -Statement [177] (byte) play_movement::render#2 ← (byte) play_movement::render#1 + (byte~) play_movement::$3 [ current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_movement::render#2 ] ( main:13::play_movement:53 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_movement::render#2 ] ) always clobbers reg byte a -Statement [182] (byte) play_movement::return#0 ← (byte) play_movement::render#2 + (byte~) play_movement::$4 [ current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::return#0 current_orientation#25 current_piece_gfx#21 current_xpos#26 ] ( main:13::play_movement:53 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::return#0 current_orientation#25 current_piece_gfx#21 current_xpos#26 ] ) always clobbers reg byte a -Statement [187] (byte~) play_move_rotate::$5 ← (byte) current_orientation#20 + (byte) $10 [ current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::$5 ] ( main:13::play_movement:53::play_move_rotate:179 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::$5 ] ) always clobbers reg byte a -Statement [193] (byte*) current_piece#98 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#3 play_collision::ypos#3 play_collision::orientation#3 current_piece#98 ] ( main:13::play_movement:53::play_move_rotate:179 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#3 play_collision::ypos#3 play_collision::orientation#3 current_piece#98 ] ) always clobbers reg byte a -Statement [199] (byte*) current_piece_gfx#7 ← (byte*) current_piece#15 + (byte) current_orientation#7 [ current_piece#15 current_ypos#19 current_xpos#26 current_orientation#7 current_piece_gfx#7 ] ( main:13::play_movement:53::play_move_rotate:179 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_xpos#26 current_orientation#7 current_piece_gfx#7 ] ) always clobbers reg byte a -Statement [200] (byte~) play_move_rotate::$7 ← (byte) current_orientation#20 - (byte) $10 [ current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::$7 ] ( main:13::play_movement:53::play_move_rotate:179 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::$7 ] ) always clobbers reg byte a -Statement [203] (byte*) play_collision::piece_gfx#0 ← (byte*) current_piece#17 + (byte) play_collision::orientation#5 [ play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] ( main:13::play_movement:53::play_move_rotate:179::play_collision:194 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:13::play_movement:53::play_move_leftright:174::play_collision:232 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:13::play_movement:53::play_move_leftright:174::play_collision:243 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:13::play_movement:53::play_move_down:167::play_collision:267 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:13::play_spawn_current:26::play_collision:296 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:13::play_spawn_current:28::play_collision:296 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280::play_collision:296 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] ) always clobbers reg byte a -Statement [205] (byte~) play_collision::$14 ← (byte) play_collision::yp#2 << (byte) 1 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] ( main:13::play_movement:53::play_move_rotate:179::play_collision:194 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] main:13::play_movement:53::play_move_leftright:174::play_collision:232 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] main:13::play_movement:53::play_move_leftright:174::play_collision:243 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] main:13::play_movement:53::play_move_down:167::play_collision:267 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] main:13::play_spawn_current:26::play_collision:296 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] main:13::play_spawn_current:28::play_collision:296 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280::play_collision:296 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] ) always clobbers reg byte a -Statement [206] (byte*) play_collision::playfield_line#0 ← *((const byte**) playfield_lines + (byte~) play_collision::$14) [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] ( main:13::play_movement:53::play_move_rotate:179::play_collision:194 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:13::play_movement:53::play_move_leftright:174::play_collision:232 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:13::play_movement:53::play_move_leftright:174::play_collision:243 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:13::play_movement:53::play_move_down:167::play_collision:267 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:13::play_spawn_current:26::play_collision:296 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:13::play_spawn_current:28::play_collision:296 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280::play_collision:296 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] ) always clobbers reg byte a -Statement [210] if(*((byte*) play_collision::piece_gfx#0 + (byte) play_collision::i#2)==(byte) 0) goto play_collision::@3 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] ( main:13::play_movement:53::play_move_rotate:179::play_collision:194 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_movement:53::play_move_leftright:174::play_collision:232 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_movement:53::play_move_leftright:174::play_collision:243 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_movement:53::play_move_down:167::play_collision:267 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_spawn_current:26::play_collision:296 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_spawn_current:28::play_collision:296 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280::play_collision:296 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] ) always clobbers reg byte a -Statement [212] (byte~) play_collision::$5 ← (byte) play_collision::xp#2 & (byte) $80 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] ( main:13::play_movement:53::play_move_rotate:179::play_collision:194 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] main:13::play_movement:53::play_move_leftright:174::play_collision:232 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] main:13::play_movement:53::play_move_leftright:174::play_collision:243 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] main:13::play_movement:53::play_move_down:167::play_collision:267 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] main:13::play_spawn_current:26::play_collision:296 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] main:13::play_spawn_current:28::play_collision:296 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280::play_collision:296 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] ) always clobbers reg byte a -Statement [215] if(*((byte*) play_collision::playfield_line#0 + (byte) play_collision::xp#2)==(byte) 0) goto play_collision::@3 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] ( main:13::play_movement:53::play_move_rotate:179::play_collision:194 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_movement:53::play_move_leftright:174::play_collision:232 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_movement:53::play_move_leftright:174::play_collision:243 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_movement:53::play_move_down:167::play_collision:267 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_spawn_current:26::play_collision:296 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_spawn_current:28::play_collision:296 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280::play_collision:296 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] ) always clobbers reg byte a -Statement [231] (byte*) current_piece#97 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#97 play_collision::orientation#2 play_collision::ypos#2 play_collision::xpos#2 ] ( main:13::play_movement:53::play_move_leftright:174 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#97 play_collision::orientation#2 play_collision::ypos#2 play_collision::xpos#2 ] ) always clobbers reg byte a -Statement [242] (byte*) current_piece#96 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#96 play_collision::orientation#1 play_collision::ypos#1 play_collision::xpos#1 ] ( main:13::play_movement:53::play_move_leftright:174 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#96 play_collision::orientation#1 play_collision::ypos#1 play_collision::xpos#1 ] ) always clobbers reg byte a -Statement [256] if((byte) current_movedown_counter#12<(const byte) current_movedown_fast) goto play_move_down::@2 [ current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 ] ( main:13::play_movement:53::play_move_down:167 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 ] ) always clobbers reg byte a -Statement [259] if((byte) current_movedown_counter#12<(byte) current_movedown_slow#14) goto play_move_down::@3 [ current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#7 ] ( main:13::play_movement:53::play_move_down:167 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#7 ] ) always clobbers reg byte a -Statement [266] (byte*) current_piece#95 ← (byte*) current_piece#10 [ current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece#95 play_collision::orientation#0 play_collision::ypos#0 play_collision::xpos#0 ] ( main:13::play_movement:53::play_move_down:167 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece#95 play_collision::orientation#0 play_collision::ypos#0 play_collision::xpos#0 ] ) always clobbers reg byte a -Statement [281] (byte*) current_piece#92 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#92 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 ] ( main:13::play_movement:53::play_move_down:167 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#92 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 ] ) always clobbers reg byte a -Statement [282] (byte*) current_piece_gfx#116 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#92 current_piece_gfx#116 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 ] ( main:13::play_movement:53::play_move_down:167 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#92 current_piece_gfx#116 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 ] ) always clobbers reg byte a -Statement [289] (byte~) play_spawn_current::$7 ← (byte) play_spawn_current::current_piece_idx#0 << (byte) 1 [ play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] ( main:13::play_spawn_current:26 [ current_movedown_slow#1 play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] main:13::play_spawn_current:28 [ current_movedown_slow#1 play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] ) always clobbers reg byte a -Statement [290] (byte) current_piece_char#5 ← *((const byte*) PIECES_CHARS + (byte) play_spawn_current::current_piece_idx#0) [ play_spawn_current::$7 current_piece_char#5 game_over#65 play_spawn_current::current_piece_idx#0 ] ( main:13::play_spawn_current:26 [ current_movedown_slow#1 play_spawn_current::$7 current_piece_char#5 game_over#65 play_spawn_current::current_piece_idx#0 ] main:13::play_spawn_current:28 [ current_movedown_slow#1 play_spawn_current::$7 current_piece_char#5 game_over#65 play_spawn_current::current_piece_idx#0 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 play_spawn_current::$7 current_piece_char#5 game_over#65 play_spawn_current::current_piece_idx#0 ] ) always clobbers reg byte a -Statement [291] (byte) current_xpos#100 ← *((const byte*) PIECES_START_X + (byte) play_spawn_current::current_piece_idx#0) [ current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_spawn_current::current_piece_idx#0 ] ( main:13::play_spawn_current:26 [ current_movedown_slow#1 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_spawn_current::current_piece_idx#0 ] main:13::play_spawn_current:28 [ current_movedown_slow#1 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_spawn_current::current_piece_idx#0 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_spawn_current::current_piece_idx#0 ] ) always clobbers reg byte a -Statement [292] (byte) current_ypos#6 ← *((const byte*) PIECES_START_Y + (byte) play_spawn_current::current_piece_idx#0) [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 ] ( main:13::play_spawn_current:26 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 ] main:13::play_spawn_current:28 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 ] ) always clobbers reg byte a -Statement [295] (byte*) current_piece#99 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#99 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] ( main:13::play_spawn_current:26 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#99 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] main:13::play_spawn_current:28 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#99 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#99 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] ) always clobbers reg byte a -Statement [303] if((byte) play_spawn_current::piece_idx#2==(byte) 7) goto play_spawn_current::sid_rnd1 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 ] ( main:13::play_spawn_current:26 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 ] main:13::play_spawn_current:28 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 ] ) always clobbers reg byte a -Statement [306] (byte) play_spawn_current::piece_idx#1 ← (byte) play_spawn_current::sid_rnd1_return#0 & (byte) 7 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#52 play_spawn_current::piece_idx#1 ] ( main:13::play_spawn_current:26 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#52 play_spawn_current::piece_idx#1 ] main:13::play_spawn_current:28 [ current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#52 play_spawn_current::piece_idx#1 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#52 play_spawn_current::piece_idx#1 ] ) always clobbers reg byte a -Statement [308] (byte~) play_update_score::$2 ← < (word) lines_bcd#19 [ current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::$2 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::$2 ] ) always clobbers reg byte a -Statement [310] (byte~) play_update_score::$9 ← (byte) play_update_score::removed#0 << (byte) 2 [ current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::$9 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::$9 ] ) always clobbers reg byte a -Statement [311] (dword) play_update_score::add_bcd#0 ← *((const dword*) score_add_bcd + (byte~) play_update_score::$9) [ current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::add_bcd#0 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::add_bcd#0 ] ) always clobbers reg byte a -Statement [313] (word) lines_bcd#29 ← (word) lines_bcd#19 + (byte) play_update_score::removed#0 [ current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 play_update_score::add_bcd#0 lines_bcd#29 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 play_update_score::add_bcd#0 lines_bcd#29 ] ) always clobbers reg byte a -Statement [314] (dword) score_bcd ← (dword) score_bcd + (dword) play_update_score::add_bcd#0 [ current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 ] ) always clobbers reg byte a -Statement [316] (byte~) play_update_score::$4 ← < (word) lines_bcd#29 [ current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 play_update_score::$4 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 play_update_score::$4 ] ) always clobbers reg byte a -Statement [324] if((byte) level#21>=(byte) $1d+(byte) 1) goto play_increase_level::@1 [ level_bcd#11 level#21 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:320 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#29 level_bcd#11 level#21 ] ) always clobbers reg byte a -Statement [325] (byte) current_movedown_slow#10 ← *((const byte*) MOVEDOWN_SLOW_SPEEDS + (byte) level#21) [ level_bcd#11 level#21 current_movedown_slow#10 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:320 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#29 level_bcd#11 level#21 current_movedown_slow#10 ] ) always clobbers reg byte a reg byte y -Statement [328] (byte~) play_increase_level::$1 ← (byte) level_bcd#21 & (byte) $f [ level#21 current_movedown_slow#65 level_bcd#21 play_increase_level::$1 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:320 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#29 level#21 current_movedown_slow#65 level_bcd#21 play_increase_level::$1 ] ) always clobbers reg byte a -Statement [330] (byte) level_bcd#8 ← (byte) level_bcd#21 + (byte) 6 [ level#21 current_movedown_slow#65 level_bcd#8 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:320 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#29 level#21 current_movedown_slow#65 level_bcd#8 ] ) always clobbers reg byte a reg byte x -Statement [334] (byte~) play_increase_level::$5 ← (byte) play_increase_level::b#2 << (byte) 2 [ level#21 current_movedown_slow#65 level_bcd#62 play_increase_level::b#2 play_increase_level::$5 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:320 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#29 level#21 current_movedown_slow#65 level_bcd#62 play_increase_level::b#2 play_increase_level::$5 ] ) always clobbers reg byte a -Statement [335] *((const dword*) score_add_bcd + (byte~) play_increase_level::$5) ← *((const dword*) score_add_bcd + (byte~) play_increase_level::$5) + *((const dword*) SCORE_BASE_BCD + (byte~) play_increase_level::$5) [ level#21 current_movedown_slow#65 level_bcd#62 play_increase_level::b#2 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:320 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#29 level#21 current_movedown_slow#65 level_bcd#62 play_increase_level::b#2 ] ) always clobbers reg byte a -Statement [353] (byte) play_remove_lines::w#2 ← (byte) play_remove_lines::w#1 + (const byte) PLAYFIELD_COLS [ play_remove_lines::y#8 play_remove_lines::removed#11 play_remove_lines::r#1 play_remove_lines::w#2 ] ( main:13::play_movement:53::play_move_down:167::play_remove_lines:274 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_remove_lines::y#8 play_remove_lines::removed#11 play_remove_lines::r#1 play_remove_lines::w#2 ] ) always clobbers reg byte a -Statement [361] *((const byte*) playfield + (byte) play_remove_lines::w#6) ← (byte) 0 [ play_remove_lines::removed#8 play_remove_lines::w#6 ] ( main:13::play_movement:53::play_move_down:167::play_remove_lines:274 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_remove_lines::removed#8 play_remove_lines::w#6 ] ) always clobbers reg byte a -Statement [365] (byte~) play_lock_current::$4 ← (byte) play_lock_current::yp#2 << (byte) 1 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::$4 ] ( main:13::play_movement:53::play_move_down:167::play_lock_current:272 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::$4 ] ) always clobbers reg byte a -Statement [366] (byte*) play_lock_current::playfield_line#0 ← *((const byte**) playfield_lines + (byte~) play_lock_current::$4) [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::playfield_line#0 ] ( main:13::play_movement:53::play_move_down:167::play_lock_current:272 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::playfield_line#0 ] ) always clobbers reg byte a -Statement [370] if(*((byte*) current_piece_gfx#13 + (byte) play_lock_current::i#2)==(byte) 0) goto play_lock_current::@3 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ( main:13::play_movement:53::play_move_down:167::play_lock_current:272 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ) always clobbers reg byte a -Statement [371] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::xp#2) ← (byte) current_piece_char#10 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ( main:13::play_movement:53::play_move_down:167::play_lock_current:272 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ) always clobbers reg byte a -Statement [382] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte) 3 [ keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] ( main:13::play_movement:53::play_move_down:167::keyboard_event_pressed:252 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:404 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:410 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:416 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:422 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] ) always clobbers reg byte a -Statement [384] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte) 7 [ keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] ( main:13::play_movement:53::play_move_down:167::keyboard_event_pressed:252 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:404 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:410 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:416 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:422 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] ) always clobbers reg byte a -Statement [385] (byte) keyboard_event_pressed::return#11 ← (byte) keyboard_event_pressed::row_bits#0 & *((const byte*) keyboard_matrix_col_bitmask + (byte~) keyboard_event_pressed::$1) [ keyboard_event_pressed::return#11 ] ( main:13::play_movement:53::play_move_down:167::keyboard_event_pressed:252 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::return#11 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:404 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:410 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:416 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:422 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] ) always clobbers reg byte a -Statement [387] if((byte) keyboard_events_size#13==(byte) 0) goto keyboard_event_get::@return [ keyboard_events_size#13 ] ( main:13::keyboard_event_get:47 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 ] ) always clobbers reg byte a -Statement [389] (byte) keyboard_event_get::return#1 ← *((const byte*) keyboard_events + (byte) keyboard_events_size#4) [ keyboard_events_size#4 keyboard_event_get::return#1 ] ( main:13::keyboard_event_get:47 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#4 keyboard_event_get::return#1 ] ) always clobbers reg byte y -Statement [398] if((byte) keyboard_event_scan::row_scan#0!=*((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2)) goto keyboard_event_scan::@9 [ keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_event_scan::row_scan#0 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_event_scan::row_scan#0 ] ) always clobbers reg byte a reg byte y -Statement [399] (byte) keyboard_event_scan::keycode#1 ← (byte) keyboard_event_scan::keycode#11 + (byte) 8 [ keyboard_event_scan::row#2 keyboard_events_size#30 keyboard_event_scan::keycode#1 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_events_size#30 keyboard_event_scan::keycode#1 ] ) always clobbers reg byte a reg byte x -Statement [402] if((byte) keyboard_event_scan::row#1!=(byte) 8) goto keyboard_event_scan::@7 [ keyboard_events_size#13 keyboard_event_scan::row#1 keyboard_event_scan::keycode#13 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_scan::row#1 keyboard_event_scan::keycode#13 ] ) always clobbers reg byte a -Statement [429] (byte~) keyboard_event_scan::$15 ← (byte) keyboard_event_scan::row_scan#0 ^ *((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$15 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$15 ] ) always clobbers reg byte a -Statement [430] (byte~) keyboard_event_scan::$16 ← (byte~) keyboard_event_scan::$15 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_event_scan::col#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$16 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$16 ] ) always clobbers reg byte a -Statement [432] if((byte) keyboard_events_size#10==(byte) 8) goto keyboard_event_scan::@10 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ) always clobbers reg byte a -Statement [433] (byte) keyboard_event_scan::event_type#0 ← (byte) keyboard_event_scan::row_scan#0 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_event_scan::col#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::event_type#0 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::event_type#0 ] ) always clobbers reg byte a -Statement [435] *((const byte*) keyboard_events + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ) always clobbers reg byte a reg byte y -Statement [441] *((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0 [ keyboard_event_scan::row#2 keyboard_event_scan::keycode#14 keyboard_events_size#29 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#14 keyboard_events_size#29 ] ) always clobbers reg byte a reg byte y -Statement [442] (byte~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#10 | (byte) $40 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$23 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$23 ] ) always clobbers reg byte a -Statement [443] *((const byte*) keyboard_events + (byte) keyboard_events_size#10) ← (byte~) keyboard_event_scan::$23 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:13::keyboard_event_scan:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ) always clobbers reg byte y -Statement [445] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:13::keyboard_event_scan:45::keyboard_matrix_read:395 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 ] ) always clobbers reg byte a -Statement [446] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:13::keyboard_event_scan:45::keyboard_matrix_read:395 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_matrix_read::return#0 ] ) always clobbers reg byte a -Statement [448] if((byte) render_screen_show#16==(byte) 0) goto render_show::toD0181 [ render_screen_show#16 level#10 ] ( main:13::render_show:43 [ render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a -Statement [452] *((const byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1 + (byte) level#10) [ render_screen_show#16 level#10 ] ( main:13::render_show:43 [ render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a reg byte y -Statement [453] *((const byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2 + (byte) level#10) [ render_screen_show#16 level#10 ] ( main:13::render_show:43 [ render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a reg byte y -Statement [454] (byte) render_screen_showing ← (byte) render_screen_show#16 [ render_screen_show#16 level#10 ] ( main:13::render_show:43 [ render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a -Statement [459] (byte~) play_init::$2 ← (byte) play_init::j#2 << (byte) 1 [ play_init::j#2 play_init::pli#2 play_init::idx#2 play_init::$2 ] ( main:13::play_init:24 [ play_init::j#2 play_init::pli#2 play_init::idx#2 play_init::$2 ] ) always clobbers reg byte a -Statement [460] *((const byte**) playfield_lines + (byte~) play_init::$2) ← (byte*) play_init::pli#2 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ( main:13::play_init:24 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ) always clobbers reg byte a -Statement [461] *((const byte*) playfield_lines_idx + (byte) play_init::j#2) ← (byte) play_init::idx#2 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ( main:13::play_init:24 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ) always clobbers reg byte a -Statement [462] (byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (const byte) PLAYFIELD_COLS [ play_init::j#2 play_init::idx#2 play_init::pli#1 ] ( main:13::play_init:24 [ play_init::j#2 play_init::idx#2 play_init::pli#1 ] ) always clobbers reg byte a -Statement [463] (byte) play_init::idx#1 ← (byte) play_init::idx#2 + (const byte) PLAYFIELD_COLS [ play_init::j#2 play_init::pli#1 play_init::idx#1 ] ( main:13::play_init:24 [ play_init::j#2 play_init::pli#1 play_init::idx#1 ] ) always clobbers reg byte a -Statement [466] *((const byte*) playfield_lines_idx+(const byte) PLAYFIELD_LINES) ← (const byte) PLAYFIELD_COLS*(const byte) PLAYFIELD_LINES [ ] ( main:13::play_init:24 [ ] ) always clobbers reg byte a -Statement [467] (byte) current_movedown_slow#1 ← *((const byte*) MOVEDOWN_SLOW_SPEEDS) [ current_movedown_slow#1 ] ( main:13::play_init:24 [ current_movedown_slow#1 ] ) always clobbers reg byte a -Statement [469] (byte~) play_init::$3 ← (byte) play_init::b#2 << (byte) 2 [ current_movedown_slow#1 play_init::b#2 play_init::$3 ] ( main:13::play_init:24 [ current_movedown_slow#1 play_init::b#2 play_init::$3 ] ) always clobbers reg byte a -Statement [470] *((const dword*) score_add_bcd + (byte~) play_init::$3) ← *((const dword*) SCORE_BASE_BCD + (byte~) play_init::$3) [ current_movedown_slow#1 play_init::b#2 ] ( main:13::play_init:24 [ current_movedown_slow#1 play_init::b#2 ] ) always clobbers reg byte a -Statement [475] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER [ ] ( main:13::sprites_irq_init:22 [ ] ) always clobbers reg byte a +Statement [2] (dword) score_bcd ← (dword) 0 [ score_bcd ] ( [ score_bcd ] ) always clobbers reg byte a +Statement [7] (byte) irq_raster_next ← (const byte) IRQ_RASTER_FIRST [ score_bcd ] ( [ score_bcd ] ) always clobbers reg byte a +Statement [8] (byte) irq_sprite_ypos ← (const byte) SPRITES_FIRST_YPOS+(byte) $15 [ score_bcd ] ( [ score_bcd ] ) always clobbers reg byte a +Statement [10] (byte) irq_sprite_ptr ← (const byte) toSpritePtr1_return#0+(byte) 3 [ score_bcd ] ( [ score_bcd ] ) always clobbers reg byte a +Statement [11] (byte) irq_cnt ← (byte) 0 [ score_bcd ] ( [ score_bcd ] ) always clobbers reg byte a +Statement [33] (byte*) current_piece_gfx#111 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ score_bcd current_ypos#97 current_ypos#6 current_xpos#118 current_xpos#100 current_piece_gfx#111 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 ] ( main:13 [ score_bcd current_ypos#97 current_ypos#6 current_xpos#118 current_xpos#100 current_piece_gfx#111 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 ] ) always clobbers reg byte a +Statement [38] (byte*) current_piece#101 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#101 current_movedown_slow#1 game_over#52 ] ( main:13 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#101 current_movedown_slow#1 game_over#52 ] ) always clobbers reg byte a +Statement [39] (byte*) current_piece_gfx#123 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ score_bcd current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#101 current_piece_gfx#123 current_movedown_slow#1 game_over#52 ] ( main:13 [ score_bcd current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#101 current_piece_gfx#123 current_movedown_slow#1 game_over#52 ] ) always clobbers reg byte a +Statement [41] if(*((const byte*) RASTER)!=(byte) $ff) goto main::@2 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 ] ( main:13 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 ] ) always clobbers reg byte a +Statement [50] if((byte) game_over#10==(byte) 0) goto main::@4 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#16 main::key_event#0 ] ( main:13 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#16 main::key_event#0 ] ) always clobbers reg byte a +Statement [62] (byte*) current_piece_gfx#112 ← (byte*) current_piece_gfx#18 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 current_ypos#98 render_screen_render#64 current_xpos#119 current_piece_gfx#112 ] ( main:13 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 current_ypos#98 render_screen_render#64 current_xpos#119 current_piece_gfx#112 ] ) always clobbers reg byte a +Statement [72] (byte) render_screen_render#11 ← (byte) render_screen_render#18 ^ (byte) $20 [ render_screen_show#16 render_screen_render#11 ] ( main:13::render_screen_swap:71 [ score_bcd current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_show#16 render_screen_render#11 ] ) always clobbers reg byte a +Statement [73] (byte) render_screen_show#13 ← (byte) render_screen_show#16 ^ (byte) $20 [ render_screen_show#13 render_screen_render#11 ] ( main:13::render_screen_swap:71 [ score_bcd current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_show#13 render_screen_render#11 ] ) always clobbers reg byte a +Statement [75] if((byte) render_screen_render#18==(byte) 0) goto render_score::@1 [ render_screen_render#18 lines_bcd#15 level_bcd#17 ] ( main:13::render_score:69 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 ] ) always clobbers reg byte a +Statement [78] (byte*) render_bcd::screen#0 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#0 ] ( main:13::render_score:69 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#0 ] ) always clobbers reg byte a +Statement [81] (byte*) render_bcd::screen#1 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#1 ] ( main:13::render_score:69 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#1 ] ) always clobbers reg byte a +Statement [84] (byte*) render_bcd::screen#2 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#2 ] ( main:13::render_score:69 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#2 ] ) always clobbers reg byte a +Statement [87] (byte) render_bcd::bcd#3 ← > (word) lines_bcd#15 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#3 ] ( main:13::render_score:69 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#3 ] ) always clobbers reg byte a +Statement [88] (byte*) render_bcd::screen#3 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#3 render_bcd::screen#3 ] ( main:13::render_score:69 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#3 render_bcd::screen#3 ] ) always clobbers reg byte a +Statement [90] (byte) render_bcd::bcd#4 ← < (word) lines_bcd#15 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#4 ] ( main:13::render_score:69 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#4 ] ) always clobbers reg byte a +Statement [91] (byte*) render_bcd::screen#4 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#4 render_bcd::screen#4 ] ( main:13::render_score:69 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#4 render_bcd::screen#4 ] ) always clobbers reg byte a +Statement [93] (byte*) render_bcd::screen#5 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::screen#5 ] ( main:13::render_score:69 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::screen#5 ] ) always clobbers reg byte a +Statement [98] (byte*) render_bcd::screen_pos#0 ← (byte*) render_bcd::screen#6 + (word) render_bcd::offset#6 [ render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] ( main:13::render_score:69::render_bcd:80 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:83 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:86 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:89 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:92 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:95 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] ) always clobbers reg byte a +Statement [100] (byte~) render_bcd::$5 ← (byte) render_bcd::bcd#6 >> (byte) 4 [ render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] ( main:13::render_score:69::render_bcd:80 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] main:13::render_score:69::render_bcd:83 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] main:13::render_score:69::render_bcd:86 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] main:13::render_score:69::render_bcd:89 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] main:13::render_score:69::render_bcd:92 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] main:13::render_score:69::render_bcd:95 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] ) always clobbers reg byte a +Statement [102] *((byte*) render_bcd::screen_pos#0) ← (byte~) render_bcd::$6 [ render_bcd::bcd#6 render_bcd::screen_pos#0 ] ( main:13::render_score:69::render_bcd:80 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:83 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:86 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:89 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:92 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:13::render_score:69::render_bcd:95 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::bcd#6 render_bcd::screen_pos#0 ] ) always clobbers reg byte y +Statement [105] (byte~) render_bcd::$3 ← (byte) render_bcd::bcd#6 & (byte) $f [ render_bcd::screen_pos#3 render_bcd::$3 ] ( main:13::render_score:69::render_bcd:80 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:13::render_score:69::render_bcd:83 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:13::render_score:69::render_bcd:86 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:13::render_score:69::render_bcd:89 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:13::render_score:69::render_bcd:92 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:13::render_score:69::render_bcd:95 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::screen_pos#3 render_bcd::$3 ] ) always clobbers reg byte a +Statement [107] *((byte*) render_bcd::screen_pos#3) ← (byte~) render_bcd::$4 [ ] ( main:13::render_score:69::render_bcd:80 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:13::render_score:69::render_bcd:83 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:13::render_score:69::render_bcd:86 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:13::render_score:69::render_bcd:89 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:13::render_score:69::render_bcd:92 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:13::render_score:69::render_bcd:95 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 ] ) always clobbers reg byte y +Statement [113] (byte~) render_next::$6 ← (byte) next_piece_idx#12 << (byte) 1 [ next_piece_idx#12 render_next::screen_next_area#11 render_next::$6 ] ( main:13::render_next:37 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 next_piece_idx#12 render_next::screen_next_area#11 render_next::$6 ] main:13::render_next:67 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 next_piece_idx#12 render_next::screen_next_area#11 render_next::$6 ] ) always clobbers reg byte a +Statement [115] (byte*) render_next::next_piece_gfx#9 ← (byte*)*((const word*) PIECES + (byte~) render_next::$6) [ render_next::screen_next_area#11 render_next::next_piece_char#0 render_next::next_piece_gfx#9 ] ( main:13::render_next:37 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::screen_next_area#11 render_next::next_piece_char#0 render_next::next_piece_gfx#9 ] main:13::render_next:67 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_next::screen_next_area#11 render_next::next_piece_char#0 render_next::next_piece_gfx#9 ] ) always clobbers reg byte a +Statement [118] (byte) render_next::cell#0 ← *((byte*) render_next::next_piece_gfx#2) [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#2 render_next::screen_next_area#5 render_next::c#2 render_next::cell#0 ] ( main:13::render_next:37 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#2 render_next::screen_next_area#5 render_next::c#2 render_next::cell#0 ] main:13::render_next:67 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#2 render_next::screen_next_area#5 render_next::c#2 render_next::cell#0 ] ) always clobbers reg byte a reg byte y +Statement [121] *((byte*) render_next::screen_next_area#5) ← (byte) 0 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ( main:13::render_next:37 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] main:13::render_next:67 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ) always clobbers reg byte a reg byte y +Statement [125] (byte*) render_next::screen_next_area#4 ← (byte*) render_next::screen_next_area#3 + (byte) $24 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] ( main:13::render_next:37 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] main:13::render_next:67 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] ) always clobbers reg byte a +Statement [129] *((byte*) render_next::screen_next_area#5) ← (byte) render_next::next_piece_char#0 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ( main:13::render_next:37 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] main:13::render_next:67 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ) always clobbers reg byte a reg byte y +Statement [134] (byte) render_moving::i#1 ← (byte) render_moving::i#3 + (byte) 4 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] ( main:13::render_moving:35 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] main:13::render_moving:64 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] ) always clobbers reg byte a +Statement [140] (byte~) render_moving::$1 ← (byte) render_screen_render#33 + (byte) render_moving::ypos#2 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] ( main:13::render_moving:35 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] main:13::render_moving:64 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] ) always clobbers reg byte a +Statement [141] (byte~) render_moving::$6 ← (byte~) render_moving::$1 << (byte) 1 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] ( main:13::render_moving:35 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] main:13::render_moving:64 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] ) always clobbers reg byte a +Statement [142] (byte*) render_moving::screen_line#0 ← *((const byte**) screen_lines_1 + (byte~) render_moving::$6) [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] ( main:13::render_moving:35 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] main:13::render_moving:64 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] ) always clobbers reg byte a +Statement [145] (byte) render_moving::current_cell#0 ← *((byte*) current_piece_gfx#64 + (byte) render_moving::i#4) [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] ( main:13::render_moving:35 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] main:13::render_moving:64 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] ) always clobbers reg byte a +Statement [148] *((byte*) render_moving::screen_line#0 + (byte) render_moving::xpos#2) ← (byte) current_piece_char#68 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] ( main:13::render_moving:35 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] main:13::render_moving:64 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] ) always clobbers reg byte a +Statement [154] (byte~) render_playfield::$0 ← (byte) render_screen_render#22 + (byte) render_playfield::l#2 [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$0 ] ( main:13::render_playfield:30 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$0 ] main:13::render_playfield:58 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$0 ] ) always clobbers reg byte a +Statement [155] (byte~) render_playfield::$3 ← (byte~) render_playfield::$0 << (byte) 1 [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$3 ] ( main:13::render_playfield:30 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$3 ] main:13::render_playfield:58 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$3 ] ) always clobbers reg byte a +Statement [156] (byte*) render_playfield::screen_line#0 ← *((const byte**) screen_lines_1 + (byte~) render_playfield::$3) [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] ( main:13::render_playfield:30 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] main:13::render_playfield:58 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] ) always clobbers reg byte a +Statement [158] *((byte*) render_playfield::screen_line#2) ← *((const byte*) playfield + (byte) render_playfield::i#2) [ render_screen_render#22 render_playfield::l#2 render_playfield::i#2 render_playfield::screen_line#2 render_playfield::c#2 ] ( main:13::render_playfield:30 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#2 render_playfield::screen_line#2 render_playfield::c#2 ] main:13::render_playfield:58 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#2 render_playfield::screen_line#2 render_playfield::c#2 ] ) always clobbers reg byte a reg byte y +Statement [170] if((byte) game_over#15==(byte) 0) goto play_movement::@1 [ score_bcd current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_orientation#20 current_piece_gfx#20 current_xpos#22 ] ( main:13::play_movement:53 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_orientation#20 current_piece_gfx#20 current_xpos#22 ] ) always clobbers reg byte a +Statement [177] (byte) play_movement::render#2 ← (byte) play_movement::render#1 + (byte~) play_movement::$3 [ score_bcd current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_movement::render#2 ] ( main:13::play_movement:53 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_movement::render#2 ] ) always clobbers reg byte a +Statement [182] (byte) play_movement::return#0 ← (byte) play_movement::render#2 + (byte~) play_movement::$4 [ score_bcd current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::return#0 current_orientation#25 current_piece_gfx#21 current_xpos#26 ] ( main:13::play_movement:53 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::return#0 current_orientation#25 current_piece_gfx#21 current_xpos#26 ] ) always clobbers reg byte a +Statement [187] (byte~) play_move_rotate::$5 ← (byte) current_orientation#20 + (byte) $10 [ current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::$5 ] ( main:13::play_movement:53::play_move_rotate:179 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::$5 ] ) always clobbers reg byte a +Statement [193] (byte*) current_piece#98 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#3 play_collision::ypos#3 play_collision::orientation#3 current_piece#98 ] ( main:13::play_movement:53::play_move_rotate:179 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#3 play_collision::ypos#3 play_collision::orientation#3 current_piece#98 ] ) always clobbers reg byte a +Statement [199] (byte*) current_piece_gfx#7 ← (byte*) current_piece#15 + (byte) current_orientation#7 [ current_piece#15 current_ypos#19 current_xpos#26 current_orientation#7 current_piece_gfx#7 ] ( main:13::play_movement:53::play_move_rotate:179 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_xpos#26 current_orientation#7 current_piece_gfx#7 ] ) always clobbers reg byte a +Statement [200] (byte~) play_move_rotate::$7 ← (byte) current_orientation#20 - (byte) $10 [ current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::$7 ] ( main:13::play_movement:53::play_move_rotate:179 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::$7 ] ) always clobbers reg byte a +Statement [203] (byte*) play_collision::piece_gfx#0 ← (byte*) current_piece#17 + (byte) play_collision::orientation#5 [ play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] ( main:13::play_movement:53::play_move_rotate:179::play_collision:194 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:13::play_movement:53::play_move_leftright:174::play_collision:232 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:13::play_movement:53::play_move_leftright:174::play_collision:243 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:13::play_movement:53::play_move_down:167::play_collision:267 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:13::play_spawn_current:26::play_collision:296 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:13::play_spawn_current:28::play_collision:296 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280::play_collision:296 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] ) always clobbers reg byte a +Statement [205] (byte~) play_collision::$14 ← (byte) play_collision::yp#2 << (byte) 1 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] ( main:13::play_movement:53::play_move_rotate:179::play_collision:194 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] main:13::play_movement:53::play_move_leftright:174::play_collision:232 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] main:13::play_movement:53::play_move_leftright:174::play_collision:243 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] main:13::play_movement:53::play_move_down:167::play_collision:267 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] main:13::play_spawn_current:26::play_collision:296 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] main:13::play_spawn_current:28::play_collision:296 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280::play_collision:296 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] ) always clobbers reg byte a +Statement [206] (byte*) play_collision::playfield_line#0 ← *((const byte**) playfield_lines + (byte~) play_collision::$14) [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] ( main:13::play_movement:53::play_move_rotate:179::play_collision:194 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:13::play_movement:53::play_move_leftright:174::play_collision:232 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:13::play_movement:53::play_move_leftright:174::play_collision:243 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:13::play_movement:53::play_move_down:167::play_collision:267 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:13::play_spawn_current:26::play_collision:296 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:13::play_spawn_current:28::play_collision:296 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280::play_collision:296 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] ) always clobbers reg byte a +Statement [210] if(*((byte*) play_collision::piece_gfx#0 + (byte) play_collision::i#2)==(byte) 0) goto play_collision::@3 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] ( main:13::play_movement:53::play_move_rotate:179::play_collision:194 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_movement:53::play_move_leftright:174::play_collision:232 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_movement:53::play_move_leftright:174::play_collision:243 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_movement:53::play_move_down:167::play_collision:267 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_spawn_current:26::play_collision:296 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_spawn_current:28::play_collision:296 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280::play_collision:296 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] ) always clobbers reg byte a +Statement [212] (byte~) play_collision::$5 ← (byte) play_collision::xp#2 & (byte) $80 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] ( main:13::play_movement:53::play_move_rotate:179::play_collision:194 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] main:13::play_movement:53::play_move_leftright:174::play_collision:232 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] main:13::play_movement:53::play_move_leftright:174::play_collision:243 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] main:13::play_movement:53::play_move_down:167::play_collision:267 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] main:13::play_spawn_current:26::play_collision:296 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] main:13::play_spawn_current:28::play_collision:296 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280::play_collision:296 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] ) always clobbers reg byte a +Statement [215] if(*((byte*) play_collision::playfield_line#0 + (byte) play_collision::xp#2)==(byte) 0) goto play_collision::@3 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] ( main:13::play_movement:53::play_move_rotate:179::play_collision:194 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_movement:53::play_move_leftright:174::play_collision:232 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_movement:53::play_move_leftright:174::play_collision:243 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_movement:53::play_move_down:167::play_collision:267 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_spawn_current:26::play_collision:296 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_spawn_current:28::play_collision:296 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280::play_collision:296 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] ) always clobbers reg byte a +Statement [231] (byte*) current_piece#97 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#97 play_collision::orientation#2 play_collision::ypos#2 play_collision::xpos#2 ] ( main:13::play_movement:53::play_move_leftright:174 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#97 play_collision::orientation#2 play_collision::ypos#2 play_collision::xpos#2 ] ) always clobbers reg byte a +Statement [242] (byte*) current_piece#96 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#96 play_collision::orientation#1 play_collision::ypos#1 play_collision::xpos#1 ] ( main:13::play_movement:53::play_move_leftright:174 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#96 play_collision::orientation#1 play_collision::ypos#1 play_collision::xpos#1 ] ) always clobbers reg byte a +Statement [256] if((byte) current_movedown_counter#12<(const byte) current_movedown_fast) goto play_move_down::@2 [ score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 ] ( main:13::play_movement:53::play_move_down:167 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 ] ) always clobbers reg byte a +Statement [259] if((byte) current_movedown_counter#12<(byte) current_movedown_slow#14) goto play_move_down::@3 [ score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#7 ] ( main:13::play_movement:53::play_move_down:167 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#7 ] ) always clobbers reg byte a +Statement [266] (byte*) current_piece#95 ← (byte*) current_piece#10 [ score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece#95 play_collision::orientation#0 play_collision::ypos#0 play_collision::xpos#0 ] ( main:13::play_movement:53::play_move_down:167 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece#95 play_collision::orientation#0 play_collision::ypos#0 play_collision::xpos#0 ] ) always clobbers reg byte a +Statement [281] (byte*) current_piece#92 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#92 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 ] ( main:13::play_movement:53::play_move_down:167 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#92 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 ] ) always clobbers reg byte a +Statement [282] (byte*) current_piece_gfx#116 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ score_bcd current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#92 current_piece_gfx#116 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 ] ( main:13::play_movement:53::play_move_down:167 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#92 current_piece_gfx#116 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 ] ) always clobbers reg byte a +Statement [289] (byte~) play_spawn_current::$7 ← (byte) play_spawn_current::current_piece_idx#0 << (byte) 1 [ play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] ( main:13::play_spawn_current:26 [ score_bcd current_movedown_slow#1 play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] main:13::play_spawn_current:28 [ score_bcd current_movedown_slow#1 play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] ) always clobbers reg byte a +Statement [290] (byte) current_piece_char#5 ← *((const byte*) PIECES_CHARS + (byte) play_spawn_current::current_piece_idx#0) [ play_spawn_current::$7 current_piece_char#5 game_over#65 play_spawn_current::current_piece_idx#0 ] ( main:13::play_spawn_current:26 [ score_bcd current_movedown_slow#1 play_spawn_current::$7 current_piece_char#5 game_over#65 play_spawn_current::current_piece_idx#0 ] main:13::play_spawn_current:28 [ score_bcd current_movedown_slow#1 play_spawn_current::$7 current_piece_char#5 game_over#65 play_spawn_current::current_piece_idx#0 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 play_spawn_current::$7 current_piece_char#5 game_over#65 play_spawn_current::current_piece_idx#0 ] ) always clobbers reg byte a +Statement [291] (byte) current_xpos#100 ← *((const byte*) PIECES_START_X + (byte) play_spawn_current::current_piece_idx#0) [ current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_spawn_current::current_piece_idx#0 ] ( main:13::play_spawn_current:26 [ score_bcd current_movedown_slow#1 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_spawn_current::current_piece_idx#0 ] main:13::play_spawn_current:28 [ score_bcd current_movedown_slow#1 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_spawn_current::current_piece_idx#0 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_spawn_current::current_piece_idx#0 ] ) always clobbers reg byte a +Statement [292] (byte) current_ypos#6 ← *((const byte*) PIECES_START_Y + (byte) play_spawn_current::current_piece_idx#0) [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 ] ( main:13::play_spawn_current:26 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 ] main:13::play_spawn_current:28 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 ] ) always clobbers reg byte a +Statement [295] (byte*) current_piece#99 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#99 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] ( main:13::play_spawn_current:26 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#99 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] main:13::play_spawn_current:28 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#99 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#99 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] ) always clobbers reg byte a +Statement [303] if((byte) play_spawn_current::piece_idx#2==(byte) 7) goto play_spawn_current::sid_rnd1 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 ] ( main:13::play_spawn_current:26 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 ] main:13::play_spawn_current:28 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 ] ) always clobbers reg byte a +Statement [306] (byte) play_spawn_current::piece_idx#1 ← (byte) play_spawn_current::sid_rnd1_return#0 & (byte) 7 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#52 play_spawn_current::piece_idx#1 ] ( main:13::play_spawn_current:26 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#52 play_spawn_current::piece_idx#1 ] main:13::play_spawn_current:28 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#52 play_spawn_current::piece_idx#1 ] main:13::play_movement:53::play_move_down:167::play_spawn_current:280 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#52 play_spawn_current::piece_idx#1 ] ) always clobbers reg byte a +Statement [308] (byte~) play_update_score::$2 ← < (word) lines_bcd#19 [ score_bcd current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::$2 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::$2 ] ) always clobbers reg byte a +Statement [310] (byte~) play_update_score::$9 ← (byte) play_update_score::removed#0 << (byte) 2 [ score_bcd current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::$9 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::$9 ] ) always clobbers reg byte a +Statement [311] (dword) play_update_score::add_bcd#0 ← *((const dword*) score_add_bcd + (byte~) play_update_score::$9) [ score_bcd current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::add_bcd#0 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::add_bcd#0 ] ) always clobbers reg byte a +Statement [313] (word) lines_bcd#29 ← (word) lines_bcd#19 + (byte) play_update_score::removed#0 [ score_bcd current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 play_update_score::add_bcd#0 lines_bcd#29 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 play_update_score::add_bcd#0 lines_bcd#29 ] ) always clobbers reg byte a +Statement [314] (dword) score_bcd ← (dword) score_bcd + (dword) play_update_score::add_bcd#0 [ score_bcd current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 ] ) always clobbers reg byte a +Statement [316] (byte~) play_update_score::$4 ← < (word) lines_bcd#29 [ score_bcd current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 play_update_score::$4 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 play_update_score::$4 ] ) always clobbers reg byte a +Statement [324] if((byte) level#21>=(byte) $1d+(byte) 1) goto play_increase_level::@1 [ level_bcd#11 level#21 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:320 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd lines_bcd#29 level_bcd#11 level#21 ] ) always clobbers reg byte a +Statement [325] (byte) current_movedown_slow#10 ← *((const byte*) MOVEDOWN_SLOW_SPEEDS + (byte) level#21) [ level_bcd#11 level#21 current_movedown_slow#10 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:320 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd lines_bcd#29 level_bcd#11 level#21 current_movedown_slow#10 ] ) always clobbers reg byte a reg byte y +Statement [328] (byte~) play_increase_level::$1 ← (byte) level_bcd#21 & (byte) $f [ level#21 current_movedown_slow#65 level_bcd#21 play_increase_level::$1 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:320 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd lines_bcd#29 level#21 current_movedown_slow#65 level_bcd#21 play_increase_level::$1 ] ) always clobbers reg byte a +Statement [330] (byte) level_bcd#8 ← (byte) level_bcd#21 + (byte) 6 [ level#21 current_movedown_slow#65 level_bcd#8 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:320 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd lines_bcd#29 level#21 current_movedown_slow#65 level_bcd#8 ] ) always clobbers reg byte a reg byte x +Statement [334] (byte~) play_increase_level::$5 ← (byte) play_increase_level::b#2 << (byte) 2 [ level#21 current_movedown_slow#65 level_bcd#62 play_increase_level::b#2 play_increase_level::$5 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:320 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd lines_bcd#29 level#21 current_movedown_slow#65 level_bcd#62 play_increase_level::b#2 play_increase_level::$5 ] ) always clobbers reg byte a +Statement [335] *((const dword*) score_add_bcd + (byte~) play_increase_level::$5) ← *((const dword*) score_add_bcd + (byte~) play_increase_level::$5) + *((const dword*) SCORE_BASE_BCD + (byte~) play_increase_level::$5) [ level#21 current_movedown_slow#65 level_bcd#62 play_increase_level::b#2 ] ( main:13::play_movement:53::play_move_down:167::play_update_score:278::play_increase_level:320 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd lines_bcd#29 level#21 current_movedown_slow#65 level_bcd#62 play_increase_level::b#2 ] ) always clobbers reg byte a +Statement [353] (byte) play_remove_lines::w#2 ← (byte) play_remove_lines::w#1 + (const byte) PLAYFIELD_COLS [ play_remove_lines::y#8 play_remove_lines::removed#11 play_remove_lines::r#1 play_remove_lines::w#2 ] ( main:13::play_movement:53::play_move_down:167::play_remove_lines:274 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_remove_lines::y#8 play_remove_lines::removed#11 play_remove_lines::r#1 play_remove_lines::w#2 ] ) always clobbers reg byte a +Statement [361] *((const byte*) playfield + (byte) play_remove_lines::w#6) ← (byte) 0 [ play_remove_lines::removed#8 play_remove_lines::w#6 ] ( main:13::play_movement:53::play_move_down:167::play_remove_lines:274 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_remove_lines::removed#8 play_remove_lines::w#6 ] ) always clobbers reg byte a +Statement [365] (byte~) play_lock_current::$4 ← (byte) play_lock_current::yp#2 << (byte) 1 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::$4 ] ( main:13::play_movement:53::play_move_down:167::play_lock_current:272 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::$4 ] ) always clobbers reg byte a +Statement [366] (byte*) play_lock_current::playfield_line#0 ← *((const byte**) playfield_lines + (byte~) play_lock_current::$4) [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::playfield_line#0 ] ( main:13::play_movement:53::play_move_down:167::play_lock_current:272 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::playfield_line#0 ] ) always clobbers reg byte a +Statement [370] if(*((byte*) current_piece_gfx#13 + (byte) play_lock_current::i#2)==(byte) 0) goto play_lock_current::@3 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ( main:13::play_movement:53::play_move_down:167::play_lock_current:272 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ) always clobbers reg byte a +Statement [371] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::xp#2) ← (byte) current_piece_char#10 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ( main:13::play_movement:53::play_move_down:167::play_lock_current:272 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ) always clobbers reg byte a +Statement [382] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte) 3 [ keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] ( main:13::play_movement:53::play_move_down:167::keyboard_event_pressed:252 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:404 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:410 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:416 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:422 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] ) always clobbers reg byte a +Statement [384] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte) 7 [ keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] ( main:13::play_movement:53::play_move_down:167::keyboard_event_pressed:252 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:404 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:410 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:416 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:422 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] ) always clobbers reg byte a +Statement [385] (byte) keyboard_event_pressed::return#11 ← (byte) keyboard_event_pressed::row_bits#0 & *((const byte*) keyboard_matrix_col_bitmask + (byte~) keyboard_event_pressed::$1) [ keyboard_event_pressed::return#11 ] ( main:13::play_movement:53::play_move_down:167::keyboard_event_pressed:252 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::return#11 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:404 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:410 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:416 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] main:13::keyboard_event_scan:45::keyboard_event_pressed:422 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] ) always clobbers reg byte a +Statement [387] if((byte) keyboard_events_size#13==(byte) 0) goto keyboard_event_get::@return [ keyboard_events_size#13 ] ( main:13::keyboard_event_get:47 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 ] ) always clobbers reg byte a +Statement [389] (byte) keyboard_event_get::return#1 ← *((const byte*) keyboard_events + (byte) keyboard_events_size#4) [ keyboard_events_size#4 keyboard_event_get::return#1 ] ( main:13::keyboard_event_get:47 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#4 keyboard_event_get::return#1 ] ) always clobbers reg byte y +Statement [398] if((byte) keyboard_event_scan::row_scan#0!=*((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2)) goto keyboard_event_scan::@9 [ keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_event_scan::row_scan#0 ] ( main:13::keyboard_event_scan:45 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_event_scan::row_scan#0 ] ) always clobbers reg byte a reg byte y +Statement [399] (byte) keyboard_event_scan::keycode#1 ← (byte) keyboard_event_scan::keycode#11 + (byte) 8 [ keyboard_event_scan::row#2 keyboard_events_size#30 keyboard_event_scan::keycode#1 ] ( main:13::keyboard_event_scan:45 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_events_size#30 keyboard_event_scan::keycode#1 ] ) always clobbers reg byte a reg byte x +Statement [402] if((byte) keyboard_event_scan::row#1!=(byte) 8) goto keyboard_event_scan::@7 [ keyboard_events_size#13 keyboard_event_scan::row#1 keyboard_event_scan::keycode#13 ] ( main:13::keyboard_event_scan:45 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_scan::row#1 keyboard_event_scan::keycode#13 ] ) always clobbers reg byte a +Statement [429] (byte~) keyboard_event_scan::$15 ← (byte) keyboard_event_scan::row_scan#0 ^ *((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$15 ] ( main:13::keyboard_event_scan:45 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$15 ] ) always clobbers reg byte a +Statement [430] (byte~) keyboard_event_scan::$16 ← (byte~) keyboard_event_scan::$15 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_event_scan::col#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$16 ] ( main:13::keyboard_event_scan:45 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$16 ] ) always clobbers reg byte a +Statement [432] if((byte) keyboard_events_size#10==(byte) 8) goto keyboard_event_scan::@10 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:13::keyboard_event_scan:45 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ) always clobbers reg byte a +Statement [433] (byte) keyboard_event_scan::event_type#0 ← (byte) keyboard_event_scan::row_scan#0 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_event_scan::col#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::event_type#0 ] ( main:13::keyboard_event_scan:45 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::event_type#0 ] ) always clobbers reg byte a +Statement [435] *((const byte*) keyboard_events + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:13::keyboard_event_scan:45 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ) always clobbers reg byte a reg byte y +Statement [441] *((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0 [ keyboard_event_scan::row#2 keyboard_event_scan::keycode#14 keyboard_events_size#29 ] ( main:13::keyboard_event_scan:45 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#14 keyboard_events_size#29 ] ) always clobbers reg byte a reg byte y +Statement [442] (byte~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#10 | (byte) $40 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$23 ] ( main:13::keyboard_event_scan:45 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$23 ] ) always clobbers reg byte a +Statement [443] *((const byte*) keyboard_events + (byte) keyboard_events_size#10) ← (byte~) keyboard_event_scan::$23 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:13::keyboard_event_scan:45 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ) always clobbers reg byte y +Statement [445] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:13::keyboard_event_scan:45::keyboard_matrix_read:395 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 ] ) always clobbers reg byte a +Statement [446] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:13::keyboard_event_scan:45::keyboard_matrix_read:395 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_matrix_read::return#0 ] ) always clobbers reg byte a +Statement [448] if((byte) render_screen_show#16==(byte) 0) goto render_show::toD0181 [ render_screen_show#16 level#10 ] ( main:13::render_show:43 [ score_bcd render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a +Statement [452] *((const byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1 + (byte) level#10) [ render_screen_show#16 level#10 ] ( main:13::render_show:43 [ score_bcd render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a reg byte y +Statement [453] *((const byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2 + (byte) level#10) [ render_screen_show#16 level#10 ] ( main:13::render_show:43 [ score_bcd render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a reg byte y +Statement [454] (byte) render_screen_showing ← (byte) render_screen_show#16 [ render_screen_show#16 level#10 ] ( main:13::render_show:43 [ score_bcd render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a +Statement [459] (byte~) play_init::$2 ← (byte) play_init::j#2 << (byte) 1 [ play_init::j#2 play_init::pli#2 play_init::idx#2 play_init::$2 ] ( main:13::play_init:24 [ score_bcd play_init::j#2 play_init::pli#2 play_init::idx#2 play_init::$2 ] ) always clobbers reg byte a +Statement [460] *((const byte**) playfield_lines + (byte~) play_init::$2) ← (byte*) play_init::pli#2 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ( main:13::play_init:24 [ score_bcd play_init::j#2 play_init::pli#2 play_init::idx#2 ] ) always clobbers reg byte a +Statement [461] *((const byte*) playfield_lines_idx + (byte) play_init::j#2) ← (byte) play_init::idx#2 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ( main:13::play_init:24 [ score_bcd play_init::j#2 play_init::pli#2 play_init::idx#2 ] ) always clobbers reg byte a +Statement [462] (byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (const byte) PLAYFIELD_COLS [ play_init::j#2 play_init::idx#2 play_init::pli#1 ] ( main:13::play_init:24 [ score_bcd play_init::j#2 play_init::idx#2 play_init::pli#1 ] ) always clobbers reg byte a +Statement [463] (byte) play_init::idx#1 ← (byte) play_init::idx#2 + (const byte) PLAYFIELD_COLS [ play_init::j#2 play_init::pli#1 play_init::idx#1 ] ( main:13::play_init:24 [ score_bcd play_init::j#2 play_init::pli#1 play_init::idx#1 ] ) always clobbers reg byte a +Statement [466] *((const byte*) playfield_lines_idx+(const byte) PLAYFIELD_LINES) ← (const byte) PLAYFIELD_COLS*(const byte) PLAYFIELD_LINES [ ] ( main:13::play_init:24 [ score_bcd ] ) always clobbers reg byte a +Statement [467] (byte) current_movedown_slow#1 ← *((const byte*) MOVEDOWN_SLOW_SPEEDS) [ current_movedown_slow#1 ] ( main:13::play_init:24 [ score_bcd current_movedown_slow#1 ] ) always clobbers reg byte a +Statement [469] (byte~) play_init::$3 ← (byte) play_init::b#2 << (byte) 2 [ current_movedown_slow#1 play_init::b#2 play_init::$3 ] ( main:13::play_init:24 [ score_bcd current_movedown_slow#1 play_init::b#2 play_init::$3 ] ) always clobbers reg byte a +Statement [470] *((const dword*) score_add_bcd + (byte~) play_init::$3) ← *((const dword*) SCORE_BASE_BCD + (byte~) play_init::$3) [ current_movedown_slow#1 play_init::b#2 ] ( main:13::play_init:24 [ score_bcd current_movedown_slow#1 play_init::b#2 ] ) always clobbers reg byte a +Statement [475] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER [ ] ( main:13::sprites_irq_init:22 [ score_bcd ] ) always clobbers reg byte a Statement asm { ldaCIA1_INTERRUPT } always clobbers reg byte a -Statement [477] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:13::sprites_irq_init:22 [ ] ) always clobbers reg byte a -Statement [478] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO [ ] ( main:13::sprites_irq_init:22 [ ] ) always clobbers reg byte a -Statement [479] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR [ ] ( main:13::sprites_irq_init:22 [ ] ) always clobbers reg byte a -Statement [480] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) & (byte) $7f [ ] ( main:13::sprites_irq_init:22 [ ] ) always clobbers reg byte a -Statement [481] *((const byte*) RASTER) ← (const byte) IRQ_RASTER_FIRST [ ] ( main:13::sprites_irq_init:22 [ ] ) always clobbers reg byte a -Statement [482] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER [ ] ( main:13::sprites_irq_init:22 [ ] ) always clobbers reg byte a -Statement [483] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() [ ] ( main:13::sprites_irq_init:22 [ ] ) always clobbers reg byte a -Statement [486] *((const byte*) SPRITES_ENABLE) ← (byte) $f [ ] ( main:13::sprites_init:20 [ ] ) always clobbers reg byte a -Statement [487] *((const byte*) SPRITES_MC) ← (byte) 0 [ ] ( main:13::sprites_init:20 [ ] ) always clobbers reg byte a -Statement [488] *((const byte*) SPRITES_EXPAND_Y) ← *((const byte*) SPRITES_MC) [ ] ( main:13::sprites_init:20 [ ] ) always clobbers reg byte a -Statement [489] *((const byte*) SPRITES_EXPAND_X) ← *((const byte*) SPRITES_EXPAND_Y) [ ] ( main:13::sprites_init:20 [ ] ) always clobbers reg byte a -Statement [491] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte) 1 [ sprites_init::s#2 sprites_init::xpos#2 sprites_init::s2#0 ] ( main:13::sprites_init:20 [ sprites_init::s#2 sprites_init::xpos#2 sprites_init::s2#0 ] ) always clobbers reg byte a -Statement [492] *((const byte*) SPRITES_XPOS + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:13::sprites_init:20 [ sprites_init::s#2 sprites_init::xpos#2 ] ) always clobbers reg byte a -Statement [493] *((const byte*) SPRITES_COLS + (byte) sprites_init::s#2) ← (const byte) BLACK [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:13::sprites_init:20 [ sprites_init::s#2 sprites_init::xpos#2 ] ) always clobbers reg byte a -Statement [494] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte) $18 [ sprites_init::s#2 sprites_init::xpos#1 ] ( main:13::sprites_init:20 [ sprites_init::s#2 sprites_init::xpos#1 ] ) always clobbers reg byte a -Statement [499] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:13::render_init:18 [ ] ) always clobbers reg byte a -Statement [501] *((const byte*) CIA2_PORT_A) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:13::render_init:18 [ ] ) always clobbers reg byte a -Statement [502] *((const byte*) D011) ← (const byte) VIC_ECM|(const byte) VIC_DEN|(const byte) VIC_RSEL|(byte) 3 [ ] ( main:13::render_init:18 [ ] ) always clobbers reg byte a -Statement [503] *((const byte*) BORDERCOL) ← (const byte) BLACK [ ] ( main:13::render_init:18 [ ] ) always clobbers reg byte a -Statement [504] *((const byte*) BGCOL1) ← (const byte) BLACK [ ] ( main:13::render_init:18 [ ] ) always clobbers reg byte a -Statement [505] *((const byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1) [ ] ( main:13::render_init:18 [ ] ) always clobbers reg byte a -Statement [506] *((const byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2) [ ] ( main:13::render_init:18 [ ] ) always clobbers reg byte a -Statement [507] *((const byte*) BGCOL4) ← (const byte) GREY [ ] ( main:13::render_init:18 [ ] ) always clobbers reg byte a -Statement [512] (byte~) render_init::$5 ← (byte) render_init::i#2 << (byte) 1 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$5 ] ( main:13::render_init:18 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$5 ] ) always clobbers reg byte a -Statement [513] *((const byte**) screen_lines_1 + (byte~) render_init::$5) ← (byte*) render_init::li_1#2 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$5 ] ( main:13::render_init:18 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$5 ] ) always clobbers reg byte a -Statement [514] *((const byte**) screen_lines_2 + (byte~) render_init::$5) ← (byte*) render_init::li_2#2 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 ] ( main:13::render_init:18 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 ] ) always clobbers reg byte a -Statement [515] (byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte) $28 [ render_init::i#2 render_init::li_2#2 render_init::li_1#1 ] ( main:13::render_init:18 [ render_init::i#2 render_init::li_2#2 render_init::li_1#1 ] ) always clobbers reg byte a -Statement [516] (byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte) $28 [ render_init::i#2 render_init::li_1#1 render_init::li_2#1 ] ( main:13::render_init:18 [ render_init::i#2 render_init::li_1#1 render_init::li_2#1 ] ) always clobbers reg byte a -Statement [523] *((byte*) render_screen_original::screen#5) ← (const byte) render_screen_original::SPACE [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] ( main:13::render_init:18::render_screen_original:508 [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] main:13::render_init:18::render_screen_original:510 [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] ) always clobbers reg byte a reg byte y -Statement [525] *((byte*) render_screen_original::cols#4) ← (const byte) BLACK [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] ( main:13::render_init:18::render_screen_original:508 [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] main:13::render_init:18::render_screen_original:510 [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] ) always clobbers reg byte a reg byte y -Statement [530] *((byte*) render_screen_original::screen#6) ← *((byte*) render_screen_original::oscr#2) [ render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] ( main:13::render_init:18::render_screen_original:508 [ render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] main:13::render_init:18::render_screen_original:510 [ render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] ) always clobbers reg byte a reg byte y -Statement [533] *((byte*) render_screen_original::cols#5) ← *((byte*) render_screen_original::ocols#2) [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] ( main:13::render_init:18::render_screen_original:508 [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] main:13::render_init:18::render_screen_original:510 [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] ) always clobbers reg byte a reg byte y -Statement [539] *((byte*) render_screen_original::screen#7) ← (const byte) render_screen_original::SPACE [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] ( main:13::render_init:18::render_screen_original:508 [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] main:13::render_init:18::render_screen_original:510 [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] ) always clobbers reg byte a reg byte y -Statement [541] *((byte*) render_screen_original::cols#6) ← (const byte) BLACK [ render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] ( main:13::render_init:18::render_screen_original:508 [ render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] main:13::render_init:18::render_screen_original:510 [ render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] ) always clobbers reg byte a reg byte y -Statement [548] *((const word*) SID_VOICE3_FREQ) ← (word) $ffff [ ] ( main:13::sid_rnd_init:16 [ ] ) always clobbers reg byte a -Statement [549] *((const byte*) SID_VOICE3_CONTROL) ← (const byte) SID_CONTROL_NOISE [ ] ( main:13::sid_rnd_init:16 [ ] ) always clobbers reg byte a -Statement [559] if(*((const byte*) RASTER)<(byte) sprites_irq::raster_sprite_gfx_modify) goto sprites_irq::@8 [ render_screen_showing irq_sprite_ptr sprites_irq::raster_sprite_gfx_modify ] ( [ render_screen_showing irq_sprite_ptr sprites_irq::raster_sprite_gfx_modify ] ) always clobbers reg byte a -Statement [561] if((byte) render_screen_showing==(byte) 0) goto sprites_irq::@1 [ sprites_irq::ptr#0 ] ( [ sprites_irq::ptr#0 ] ) always clobbers reg byte a -Statement [569] if((byte) irq_cnt==(byte) 9) goto sprites_irq::@3 [ irq_cnt ] ( [ irq_cnt ] ) always clobbers reg byte a -Statement [570] if((byte) irq_cnt==(byte) $a) goto sprites_irq::@4 [ ] ( [ ] ) always clobbers reg byte a -Statement [571] (byte) irq_raster_next ← (byte) irq_raster_next + (byte) $14 [ irq_raster_next ] ( [ irq_raster_next ] ) always clobbers reg byte a reg byte x -Statement [572] (byte) irq_sprite_ypos ← (byte) irq_sprite_ypos + (byte) $15 [ irq_raster_next ] ( [ irq_raster_next ] ) always clobbers reg byte a reg byte x +Statement [477] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:13::sprites_irq_init:22 [ score_bcd ] ) always clobbers reg byte a +Statement [478] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO [ ] ( main:13::sprites_irq_init:22 [ score_bcd ] ) always clobbers reg byte a +Statement [479] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR [ ] ( main:13::sprites_irq_init:22 [ score_bcd ] ) always clobbers reg byte a +Statement [480] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) & (byte) $7f [ ] ( main:13::sprites_irq_init:22 [ score_bcd ] ) always clobbers reg byte a +Statement [481] *((const byte*) RASTER) ← (const byte) IRQ_RASTER_FIRST [ ] ( main:13::sprites_irq_init:22 [ score_bcd ] ) always clobbers reg byte a +Statement [482] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER [ ] ( main:13::sprites_irq_init:22 [ score_bcd ] ) always clobbers reg byte a +Statement [483] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() [ ] ( main:13::sprites_irq_init:22 [ score_bcd ] ) always clobbers reg byte a +Statement [486] *((const byte*) SPRITES_ENABLE) ← (byte) $f [ ] ( main:13::sprites_init:20 [ score_bcd ] ) always clobbers reg byte a +Statement [487] *((const byte*) SPRITES_MC) ← (byte) 0 [ ] ( main:13::sprites_init:20 [ score_bcd ] ) always clobbers reg byte a +Statement [488] *((const byte*) SPRITES_EXPAND_Y) ← *((const byte*) SPRITES_MC) [ ] ( main:13::sprites_init:20 [ score_bcd ] ) always clobbers reg byte a +Statement [489] *((const byte*) SPRITES_EXPAND_X) ← *((const byte*) SPRITES_EXPAND_Y) [ ] ( main:13::sprites_init:20 [ score_bcd ] ) always clobbers reg byte a +Statement [491] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte) 1 [ sprites_init::s#2 sprites_init::xpos#2 sprites_init::s2#0 ] ( main:13::sprites_init:20 [ score_bcd sprites_init::s#2 sprites_init::xpos#2 sprites_init::s2#0 ] ) always clobbers reg byte a +Statement [492] *((const byte*) SPRITES_XPOS + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:13::sprites_init:20 [ score_bcd sprites_init::s#2 sprites_init::xpos#2 ] ) always clobbers reg byte a +Statement [493] *((const byte*) SPRITES_COLS + (byte) sprites_init::s#2) ← (const byte) BLACK [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:13::sprites_init:20 [ score_bcd sprites_init::s#2 sprites_init::xpos#2 ] ) always clobbers reg byte a +Statement [494] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte) $18 [ sprites_init::s#2 sprites_init::xpos#1 ] ( main:13::sprites_init:20 [ score_bcd sprites_init::s#2 sprites_init::xpos#1 ] ) always clobbers reg byte a +Statement [499] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:13::render_init:18 [ score_bcd ] ) always clobbers reg byte a +Statement [501] *((const byte*) CIA2_PORT_A) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:13::render_init:18 [ score_bcd ] ) always clobbers reg byte a +Statement [502] *((const byte*) D011) ← (const byte) VIC_ECM|(const byte) VIC_DEN|(const byte) VIC_RSEL|(byte) 3 [ ] ( main:13::render_init:18 [ score_bcd ] ) always clobbers reg byte a +Statement [503] *((const byte*) BORDERCOL) ← (const byte) BLACK [ ] ( main:13::render_init:18 [ score_bcd ] ) always clobbers reg byte a +Statement [504] *((const byte*) BGCOL1) ← (const byte) BLACK [ ] ( main:13::render_init:18 [ score_bcd ] ) always clobbers reg byte a +Statement [505] *((const byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1) [ ] ( main:13::render_init:18 [ score_bcd ] ) always clobbers reg byte a +Statement [506] *((const byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2) [ ] ( main:13::render_init:18 [ score_bcd ] ) always clobbers reg byte a +Statement [507] *((const byte*) BGCOL4) ← (const byte) GREY [ ] ( main:13::render_init:18 [ score_bcd ] ) always clobbers reg byte a +Statement [512] (byte~) render_init::$5 ← (byte) render_init::i#2 << (byte) 1 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$5 ] ( main:13::render_init:18 [ score_bcd render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$5 ] ) always clobbers reg byte a +Statement [513] *((const byte**) screen_lines_1 + (byte~) render_init::$5) ← (byte*) render_init::li_1#2 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$5 ] ( main:13::render_init:18 [ score_bcd render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$5 ] ) always clobbers reg byte a +Statement [514] *((const byte**) screen_lines_2 + (byte~) render_init::$5) ← (byte*) render_init::li_2#2 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 ] ( main:13::render_init:18 [ score_bcd render_init::i#2 render_init::li_1#2 render_init::li_2#2 ] ) always clobbers reg byte a +Statement [515] (byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte) $28 [ render_init::i#2 render_init::li_2#2 render_init::li_1#1 ] ( main:13::render_init:18 [ score_bcd render_init::i#2 render_init::li_2#2 render_init::li_1#1 ] ) always clobbers reg byte a +Statement [516] (byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte) $28 [ render_init::i#2 render_init::li_1#1 render_init::li_2#1 ] ( main:13::render_init:18 [ score_bcd render_init::i#2 render_init::li_1#1 render_init::li_2#1 ] ) always clobbers reg byte a +Statement [523] *((byte*) render_screen_original::screen#5) ← (const byte) render_screen_original::SPACE [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] ( main:13::render_init:18::render_screen_original:508 [ score_bcd render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] main:13::render_init:18::render_screen_original:510 [ score_bcd render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] ) always clobbers reg byte a reg byte y +Statement [525] *((byte*) render_screen_original::cols#4) ← (const byte) BLACK [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] ( main:13::render_init:18::render_screen_original:508 [ score_bcd render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] main:13::render_init:18::render_screen_original:510 [ score_bcd render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] ) always clobbers reg byte a reg byte y +Statement [530] *((byte*) render_screen_original::screen#6) ← *((byte*) render_screen_original::oscr#2) [ render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] ( main:13::render_init:18::render_screen_original:508 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] main:13::render_init:18::render_screen_original:510 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] ) always clobbers reg byte a reg byte y +Statement [533] *((byte*) render_screen_original::cols#5) ← *((byte*) render_screen_original::ocols#2) [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] ( main:13::render_init:18::render_screen_original:508 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] main:13::render_init:18::render_screen_original:510 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] ) always clobbers reg byte a reg byte y +Statement [539] *((byte*) render_screen_original::screen#7) ← (const byte) render_screen_original::SPACE [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] ( main:13::render_init:18::render_screen_original:508 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] main:13::render_init:18::render_screen_original:510 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] ) always clobbers reg byte a reg byte y +Statement [541] *((byte*) render_screen_original::cols#6) ← (const byte) BLACK [ render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] ( main:13::render_init:18::render_screen_original:508 [ score_bcd render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] main:13::render_init:18::render_screen_original:510 [ score_bcd render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] ) always clobbers reg byte a reg byte y +Statement [548] *((const word*) SID_VOICE3_FREQ) ← (word) $ffff [ ] ( main:13::sid_rnd_init:16 [ score_bcd ] ) always clobbers reg byte a +Statement [549] *((const byte*) SID_VOICE3_CONTROL) ← (const byte) SID_CONTROL_NOISE [ ] ( main:13::sid_rnd_init:16 [ score_bcd ] ) always clobbers reg byte a +Statement [559] if(*((const byte*) RASTER)<(byte) sprites_irq::raster_sprite_gfx_modify) goto sprites_irq::@8 [ render_screen_showing irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt sprites_irq::raster_sprite_gfx_modify ] ( [ render_screen_showing irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt sprites_irq::raster_sprite_gfx_modify ] ) always clobbers reg byte a +Statement [561] if((byte) render_screen_showing==(byte) 0) goto sprites_irq::@1 [ irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt sprites_irq::ptr#0 ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt sprites_irq::ptr#0 ] ) always clobbers reg byte a +Statement [569] if((byte) irq_cnt==(byte) 9) goto sprites_irq::@3 [ irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt ] ) always clobbers reg byte a +Statement [570] if((byte) irq_cnt==(byte) $a) goto sprites_irq::@4 [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] ) always clobbers reg byte a +Statement [571] (byte) irq_raster_next ← (byte) irq_raster_next + (byte) $14 [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] ) always clobbers reg byte a reg byte x +Statement [572] (byte) irq_sprite_ypos ← (byte) irq_sprite_ypos + (byte) $15 [ irq_raster_next irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ptr ] ) always clobbers reg byte a reg byte x Statement [573] (byte) irq_sprite_ptr ← (byte) irq_sprite_ptr + (byte) 3 [ irq_raster_next ] ( [ irq_raster_next ] ) always clobbers reg byte a reg byte x Statement [574] *((const byte*) RASTER) ← (byte) irq_raster_next [ ] ( [ ] ) always clobbers reg byte a Statement [575] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER [ ] ( [ ] ) always clobbers reg byte a Statement [576] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y -Statement [577] (byte) irq_cnt ← (byte) 0 [ ] ( [ ] ) always clobbers reg byte a -Statement [578] (byte) irq_raster_next ← (const byte) IRQ_RASTER_FIRST [ irq_raster_next ] ( [ irq_raster_next ] ) always clobbers reg byte a -Statement [579] (byte) irq_sprite_ypos ← (byte) irq_sprite_ypos + (byte) $15 [ irq_raster_next ] ( [ irq_raster_next ] ) always clobbers reg byte a reg byte x +Statement [577] (byte) irq_cnt ← (byte) 0 [ irq_sprite_ypos irq_sprite_ptr ] ( [ irq_sprite_ypos irq_sprite_ptr ] ) always clobbers reg byte a +Statement [578] (byte) irq_raster_next ← (const byte) IRQ_RASTER_FIRST [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] ) always clobbers reg byte a +Statement [579] (byte) irq_sprite_ypos ← (byte) irq_sprite_ypos + (byte) $15 [ irq_raster_next irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ptr ] ) always clobbers reg byte a reg byte x Statement [580] (byte) irq_sprite_ptr ← (byte) irq_sprite_ptr + (byte) 3 [ irq_raster_next ] ( [ irq_raster_next ] ) always clobbers reg byte a reg byte x Statement [581] (byte) irq_raster_next ← (byte) irq_raster_next + (byte) $15 [ irq_raster_next ] ( [ irq_raster_next ] ) always clobbers reg byte a reg byte x Statement [582] (byte) irq_sprite_ypos ← (const byte) SPRITES_FIRST_YPOS [ irq_raster_next ] ( [ irq_raster_next ] ) always clobbers reg byte a @@ -16430,7 +16430,7 @@ Uplift Scope [keyboard_event_scan] 20,002: zp[1]:207 [ keyboard_event_scan::$15 Uplift Scope [play_collision] 38,006.5: zp[1]:49 [ play_collision::i#2 play_collision::i#3 play_collision::i#10 play_collision::i#12 ] 20,002: zp[1]:159 [ play_collision::$5 ] 13,378.25: zp[1]:50 [ play_collision::xp#2 play_collision::xp#8 play_collision::xp#1 ] 12,223.44: zp[1]:51 [ play_collision::c#2 play_collision::c#1 ] 2,002: zp[1]:155 [ play_collision::$14 ] 1,615.62: zp[1]:158 [ play_collision::i#1 ] 1,326.38: zp[1]:47 [ 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[1]:48 [ play_collision::l#6 play_collision::l#1 ] 785.86: zp[2]:156 [ play_collision::playfield_line#0 ] 476.33: zp[2]:153 [ play_collision::piece_gfx#0 ] 51.62: zp[1]:46 [ 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[1]:45 [ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ] 4: zp[1]:150 [ play_collision::return#14 ] 4: zp[1]:160 [ play_collision::return#13 ] 4: zp[1]:162 [ play_collision::return#1 ] 4: zp[1]:166 [ play_collision::return#0 ] 4: zp[1]:173 [ play_collision::return#10 ] 1.43: zp[1]:52 [ play_collision::return#15 ] Uplift Scope [play_lock_current] 38,006.5: zp[1]:80 [ play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 ] 14,753.5: zp[1]:81 [ play_lock_current::xp#2 play_lock_current::xp#0 play_lock_current::xp#1 ] 14,001.4: zp[1]:82 [ play_lock_current::c#2 play_lock_current::c#1 ] 2,333.67: zp[1]:191 [ play_lock_current::i#1 ] 2,002: zp[1]:188 [ play_lock_current::$4 ] 1,155: zp[1]:79 [ play_lock_current::l#6 play_lock_current::l#1 ] 1,100.2: zp[2]:189 [ play_lock_current::playfield_line#0 ] 754.92: zp[1]:78 [ play_lock_current::yp#2 play_lock_current::yp#0 play_lock_current::yp#1 ] Uplift Scope [play_remove_lines] 19,004.21: zp[1]:74 [ play_remove_lines::r#2 play_remove_lines::r#3 play_remove_lines::r#1 ] 17,938.14: zp[1]:77 [ 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[1]:75 [ play_remove_lines::x#2 play_remove_lines::x#1 ] 8,201: zp[1]:76 [ play_remove_lines::full#4 play_remove_lines::full#2 ] 6,000.6: zp[1]:187 [ play_remove_lines::c#0 ] 2,566.89: zp[1]:73 [ play_remove_lines::removed#11 play_remove_lines::removed#8 play_remove_lines::removed#1 ] 1,634.97: zp[1]:72 [ play_remove_lines::y#8 play_remove_lines::y#1 ] 4: zp[1]:168 [ play_remove_lines::return#0 ] -Uplift Scope [] 58,858.91: zp[1]:88 [ 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[1]:69 [ 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 ] 209.73: zp[2]:65 [ current_piece_gfx#35 current_piece_gfx#13 current_piece_gfx#18 current_piece_gfx#123 current_piece_gfx#20 current_piece_gfx#21 current_piece_gfx#7 current_piece_gfx#116 ] 193.66: zp[1]:63 [ current_piece_char#29 current_piece_char#10 current_piece_char#16 current_piece_char#5 ] 74.29: zp[1]:28 [ current_piece_char#68 current_piece_char#99 current_piece_char#100 ] 61.29: zp[2]:26 [ current_piece_gfx#64 current_piece_gfx#111 current_piece_gfx#112 ] 60: zp[4]:113 [ score_bcd ] 42.02: zp[1]:67 [ 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[2]:43 [ current_piece#17 current_piece#95 current_piece#96 current_piece#97 current_piece#98 current_piece#99 ] 30.62: zp[1]:34 [ render_screen_render#22 render_screen_render#63 ] 29.4: zp[1]:16 [ next_piece_idx#12 next_piece_idx#76 next_piece_idx#77 ] 24: zp[1]:15 [ render_screen_render#15 render_screen_render#65 ] 20.4: zp[1]:23 [ current_ypos#13 current_ypos#97 current_ypos#98 ] 18.41: zp[1]:60 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#62 level_bcd#21 level_bcd#8 ] 17.41: zp[1]:64 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ] 16.93: zp[1]:59 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#21 current_movedown_slow#1 current_movedown_slow#23 current_movedown_slow#65 current_movedown_slow#10 ] 15.34: zp[1]:55 [ current_ypos#38 current_ypos#3 current_ypos#11 current_ypos#19 current_ypos#6 ] 14.83: zp[2]:61 [ current_piece#28 current_piece#10 current_piece#15 current_piece#101 current_piece#92 ] 14.77: zp[1]:70 [ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ] 14.1: zp[1]:25 [ current_xpos#59 current_xpos#118 current_xpos#119 ] 14: zp[1]:118 [ irq_sprite_ypos ] 12.63: zp[1]:58 [ level#33 level#10 level#17 level#19 level#21 ] 12.62: zp[2]:56 [ lines_bcd#26 lines_bcd#19 lines_bcd#15 lines_bcd#17 lines_bcd#29 ] 12.38: zp[1]:4 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ] 10.83: zp[1]:24 [ render_screen_render#33 render_screen_render#64 ] 9.81: zp[1]:2 [ render_screen_show#16 render_screen_show#13 ] 8.06: zp[1]:3 [ render_screen_render#18 render_screen_render#11 ] 6: zp[1]:120 [ irq_cnt ] 1.56: zp[1]:119 [ irq_sprite_ptr ] 1: zp[1]:117 [ irq_raster_next ] 0.6: zp[1]:112 [ render_screen_showing ] +Uplift Scope [] 58,858.91: zp[1]:88 [ 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[1]:69 [ 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 ] 209.73: zp[2]:65 [ current_piece_gfx#35 current_piece_gfx#13 current_piece_gfx#18 current_piece_gfx#123 current_piece_gfx#20 current_piece_gfx#21 current_piece_gfx#7 current_piece_gfx#116 ] 193.66: zp[1]:63 [ current_piece_char#29 current_piece_char#10 current_piece_char#16 current_piece_char#5 ] 74.29: zp[1]:28 [ current_piece_char#68 current_piece_char#99 current_piece_char#100 ] 61.29: zp[2]:26 [ current_piece_gfx#64 current_piece_gfx#111 current_piece_gfx#112 ] 42.02: zp[1]:67 [ 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[2]:43 [ current_piece#17 current_piece#95 current_piece#96 current_piece#97 current_piece#98 current_piece#99 ] 30.62: zp[1]:34 [ render_screen_render#22 render_screen_render#63 ] 29.4: zp[1]:16 [ next_piece_idx#12 next_piece_idx#76 next_piece_idx#77 ] 24: zp[1]:15 [ render_screen_render#15 render_screen_render#65 ] 20.4: zp[1]:23 [ current_ypos#13 current_ypos#97 current_ypos#98 ] 18.41: zp[1]:60 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#62 level_bcd#21 level_bcd#8 ] 17.41: zp[1]:64 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ] 16.93: zp[1]:59 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#21 current_movedown_slow#1 current_movedown_slow#23 current_movedown_slow#65 current_movedown_slow#10 ] 15.34: zp[1]:55 [ current_ypos#38 current_ypos#3 current_ypos#11 current_ypos#19 current_ypos#6 ] 14.83: zp[2]:61 [ current_piece#28 current_piece#10 current_piece#15 current_piece#101 current_piece#92 ] 14.77: zp[1]:70 [ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ] 14.1: zp[1]:25 [ current_xpos#59 current_xpos#118 current_xpos#119 ] 12.63: zp[1]:58 [ level#33 level#10 level#17 level#19 level#21 ] 12.62: zp[2]:56 [ lines_bcd#26 lines_bcd#19 lines_bcd#15 lines_bcd#17 lines_bcd#29 ] 12.38: zp[1]:4 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ] 10.83: zp[1]:24 [ render_screen_render#33 render_screen_render#64 ] 9.81: zp[1]:2 [ render_screen_show#16 render_screen_show#13 ] 8.06: zp[1]:3 [ render_screen_render#18 render_screen_render#11 ] 0.6: zp[1]:112 [ render_screen_showing ] 0.48: zp[1]:118 [ irq_sprite_ypos ] 0.48: zp[1]:120 [ irq_cnt ] 0.45: zp[1]:119 [ irq_sprite_ptr ] 0.44: zp[1]:117 [ irq_raster_next ] 0.04: zp[4]:113 [ score_bcd ] Uplift Scope [render_moving] 2,605.75: zp[1]:31 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ] 1,835.17: zp[1]:33 [ render_moving::c#2 render_moving::c#1 ] 1,490.13: zp[1]:32 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 ] 1,001: zp[1]:137 [ render_moving::current_cell#0 ] 202: zp[1]:133 [ render_moving::$1 ] 202: zp[1]:134 [ render_moving::$6 ] 163.38: zp[1]:30 [ render_moving::l#4 render_moving::l#1 ] 110.2: zp[2]:135 [ render_moving::screen_line#0 ] 96.71: zp[1]:29 [ render_moving::ypos#2 render_moving::ypos#0 render_moving::ypos#1 ] Uplift Scope [render_next] 1,970.3: zp[2]:18 [ 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[1]:22 [ render_next::c#2 render_next::c#1 ] 1,657: zp[2]:20 [ 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[1]:132 [ render_next::cell#0 ] 169.86: zp[1]:17 [ render_next::l#7 render_next::l#1 ] 66.87: zp[1]:131 [ render_next::next_piece_char#0 ] 1: zp[1]:130 [ render_next::$6 ] Uplift Scope [play_increase_level] 4,004: zp[1]:186 [ play_increase_level::$5 ] 2,502.5: zp[1]:71 [ play_increase_level::b#2 play_increase_level::b#1 ] 4: zp[1]:185 [ play_increase_level::$1 ] @@ -16465,7 +16465,7 @@ Uplifting [play_lock_current] best 4464857 combination zp[1]:80 [ play_lock_curr Limited combination testing to 100 combinations of 2916 possible. Uplifting [play_remove_lines] best 4325857 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[1]:75 [ play_remove_lines::x#2 play_remove_lines::x#1 ] zp[1]:76 [ play_remove_lines::full#4 play_remove_lines::full#2 ] zp[1]:187 [ play_remove_lines::c#0 ] zp[1]:73 [ play_remove_lines::removed#11 play_remove_lines::removed#8 play_remove_lines::removed#1 ] zp[1]:72 [ play_remove_lines::y#8 play_remove_lines::y#1 ] zp[1]:168 [ play_remove_lines::return#0 ] Limited combination testing to 100 combinations of 20736 possible. -Uplifting [] best 4325615 combination zp[1]:88 [ 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[1]:69 [ 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[2]:65 [ current_piece_gfx#35 current_piece_gfx#13 current_piece_gfx#18 current_piece_gfx#123 current_piece_gfx#20 current_piece_gfx#21 current_piece_gfx#7 current_piece_gfx#116 ] zp[1]:63 [ current_piece_char#29 current_piece_char#10 current_piece_char#16 current_piece_char#5 ] zp[1]:28 [ current_piece_char#68 current_piece_char#99 current_piece_char#100 ] zp[2]:26 [ current_piece_gfx#64 current_piece_gfx#111 current_piece_gfx#112 ] zp[4]:113 [ score_bcd ] zp[1]:67 [ 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[2]:43 [ current_piece#17 current_piece#95 current_piece#96 current_piece#97 current_piece#98 current_piece#99 ] reg byte x [ render_screen_render#22 render_screen_render#63 ] reg byte x [ next_piece_idx#12 next_piece_idx#76 next_piece_idx#77 ] reg byte a [ render_screen_render#15 render_screen_render#65 ] reg byte x [ current_ypos#13 current_ypos#97 current_ypos#98 ] zp[1]:60 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#62 level_bcd#21 level_bcd#8 ] zp[1]:64 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ] zp[1]:59 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#21 current_movedown_slow#1 current_movedown_slow#23 current_movedown_slow#65 current_movedown_slow#10 ] zp[1]:55 [ current_ypos#38 current_ypos#3 current_ypos#11 current_ypos#19 current_ypos#6 ] zp[2]:61 [ current_piece#28 current_piece#10 current_piece#15 current_piece#101 current_piece#92 ] zp[1]:70 [ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ] zp[1]:25 [ current_xpos#59 current_xpos#118 current_xpos#119 ] zp[1]:118 [ irq_sprite_ypos ] zp[1]:58 [ level#33 level#10 level#17 level#19 level#21 ] zp[2]:56 [ lines_bcd#26 lines_bcd#19 lines_bcd#15 lines_bcd#17 lines_bcd#29 ] zp[1]:4 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ] zp[1]:24 [ render_screen_render#33 render_screen_render#64 ] zp[1]:2 [ render_screen_show#16 render_screen_show#13 ] zp[1]:3 [ render_screen_render#18 render_screen_render#11 ] zp[1]:120 [ irq_cnt ] zp[1]:119 [ irq_sprite_ptr ] zp[1]:117 [ irq_raster_next ] zp[1]:112 [ render_screen_showing ] +Uplifting [] best 4325615 combination zp[1]:88 [ 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[1]:69 [ 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[2]:65 [ current_piece_gfx#35 current_piece_gfx#13 current_piece_gfx#18 current_piece_gfx#123 current_piece_gfx#20 current_piece_gfx#21 current_piece_gfx#7 current_piece_gfx#116 ] zp[1]:63 [ current_piece_char#29 current_piece_char#10 current_piece_char#16 current_piece_char#5 ] zp[1]:28 [ current_piece_char#68 current_piece_char#99 current_piece_char#100 ] zp[2]:26 [ current_piece_gfx#64 current_piece_gfx#111 current_piece_gfx#112 ] zp[1]:67 [ 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[2]:43 [ current_piece#17 current_piece#95 current_piece#96 current_piece#97 current_piece#98 current_piece#99 ] reg byte x [ render_screen_render#22 render_screen_render#63 ] reg byte x [ next_piece_idx#12 next_piece_idx#76 next_piece_idx#77 ] reg byte a [ render_screen_render#15 render_screen_render#65 ] reg byte x [ current_ypos#13 current_ypos#97 current_ypos#98 ] zp[1]:60 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#62 level_bcd#21 level_bcd#8 ] zp[1]:64 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ] zp[1]:59 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#21 current_movedown_slow#1 current_movedown_slow#23 current_movedown_slow#65 current_movedown_slow#10 ] zp[1]:55 [ current_ypos#38 current_ypos#3 current_ypos#11 current_ypos#19 current_ypos#6 ] zp[2]:61 [ current_piece#28 current_piece#10 current_piece#15 current_piece#101 current_piece#92 ] zp[1]:70 [ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ] zp[1]:25 [ current_xpos#59 current_xpos#118 current_xpos#119 ] zp[1]:58 [ level#33 level#10 level#17 level#19 level#21 ] zp[2]:56 [ lines_bcd#26 lines_bcd#19 lines_bcd#15 lines_bcd#17 lines_bcd#29 ] zp[1]:4 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ] zp[1]:24 [ render_screen_render#33 render_screen_render#64 ] zp[1]:2 [ render_screen_show#16 render_screen_show#13 ] zp[1]:3 [ render_screen_render#18 render_screen_render#11 ] zp[1]:112 [ render_screen_showing ] zp[1]:118 [ irq_sprite_ypos ] zp[1]:120 [ irq_cnt ] zp[1]:119 [ irq_sprite_ptr ] zp[1]:117 [ irq_raster_next ] zp[4]:113 [ score_bcd ] Limited combination testing to 100 combinations of 1944 possible. Uplifting [render_moving] best 4310615 combination zp[1]:31 [ 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[1]:32 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 ] reg byte a [ render_moving::current_cell#0 ] zp[1]:133 [ render_moving::$1 ] zp[1]:134 [ render_moving::$6 ] zp[1]:30 [ render_moving::l#4 render_moving::l#1 ] zp[2]:135 [ render_moving::screen_line#0 ] zp[1]:29 [ render_moving::ypos#2 render_moving::ypos#0 render_moving::ypos#1 ] Limited combination testing to 100 combinations of 15552 possible. @@ -16600,8 +16600,6 @@ Attempting to uplift remaining variables inzp[1]:70 [ game_over#65 game_over#27 Uplifting [] best 4101913 combination zp[1]:70 [ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ] Attempting to uplift remaining variables inzp[1]:25 [ current_xpos#59 current_xpos#118 current_xpos#119 ] Uplifting [] best 4101913 combination zp[1]:25 [ current_xpos#59 current_xpos#118 current_xpos#119 ] -Attempting to uplift remaining variables inzp[1]:118 [ irq_sprite_ypos ] -Uplifting [] best 4101913 combination zp[1]:118 [ irq_sprite_ypos ] Attempting to uplift remaining variables inzp[1]:93 [ play_init::idx#2 play_init::idx#1 ] Uplifting [play_init] best 4101913 combination zp[1]:93 [ play_init::idx#2 play_init::idx#1 ] Attempting to uplift remaining variables inzp[1]:58 [ level#33 level#10 level#17 level#19 level#21 ] @@ -16620,8 +16618,6 @@ Attempting to uplift remaining variables inzp[1]:3 [ render_screen_render#18 ren Uplifting [] best 4101913 combination zp[1]:3 [ render_screen_render#18 render_screen_render#11 ] Attempting to uplift remaining variables inzp[1]:218 [ sprites_irq::raster_sprite_gfx_modify ] Uplifting [sprites_irq] best 4101913 combination zp[1]:218 [ sprites_irq::raster_sprite_gfx_modify ] -Attempting to uplift remaining variables inzp[1]:120 [ irq_cnt ] -Uplifting [] best 4101913 combination zp[1]:120 [ irq_cnt ] Attempting to uplift remaining variables inzp[1]:129 [ render_bcd::$4 ] Uplifting [render_bcd] best 4101907 combination reg byte a [ render_bcd::$4 ] Attempting to uplift remaining variables inzp[1]:150 [ play_collision::return#14 ] @@ -16668,8 +16664,6 @@ Attempting to uplift remaining variables inzp[1]:193 [ keyboard_event_pressed::r Uplifting [keyboard_event_pressed] best 4101760 combination zp[1]:193 [ keyboard_event_pressed::row_bits#0 ] Attempting to uplift remaining variables inzp[1]:195 [ keyboard_event_pressed::return#11 ] Uplifting [keyboard_event_pressed] best 4101742 combination reg byte a [ keyboard_event_pressed::return#11 ] -Attempting to uplift remaining variables inzp[1]:119 [ irq_sprite_ptr ] -Uplifting [] best 4101742 combination zp[1]:119 [ irq_sprite_ptr ] Attempting to uplift remaining variables inzp[1]:52 [ play_collision::return#15 ] Uplifting [play_collision] best 4101712 combination reg byte a [ play_collision::return#15 ] Attempting to uplift remaining variables inzp[1]:83 [ keyboard_event_pressed::keycode#5 ] @@ -16678,8 +16672,6 @@ Attempting to uplift remaining variables inzp[1]:170 [ play_update_score::remove Uplifting [play_update_score] best 4101706 combination reg byte x [ play_update_score::removed#0 ] Attempting to uplift remaining variables inzp[1]:11 [ render_bcd::only_low#6 ] Uplifting [render_bcd] best 4101685 combination reg byte y [ render_bcd::only_low#6 ] -Attempting to uplift remaining variables inzp[1]:117 [ irq_raster_next ] -Uplifting [] best 4101685 combination zp[1]:117 [ irq_raster_next ] Attempting to uplift remaining variables inzp[1]:145 [ play_movement::render#2 ] Uplifting [play_movement] best 4101685 combination zp[1]:145 [ play_movement::render#2 ] Attempting to uplift remaining variables inzp[1]:41 [ play_move_rotate::return#2 ] @@ -16690,6 +16682,14 @@ Attempting to uplift remaining variables inzp[1]:68 [ play_move_down::return#3 ] Uplifting [play_move_down] best 4101660 combination reg byte x [ play_move_down::return#3 ] Attempting to uplift remaining variables inzp[1]:112 [ render_screen_showing ] Uplifting [] best 4101660 combination zp[1]:112 [ render_screen_showing ] +Attempting to uplift remaining variables inzp[1]:118 [ irq_sprite_ypos ] +Uplifting [] best 4101660 combination zp[1]:118 [ irq_sprite_ypos ] +Attempting to uplift remaining variables inzp[1]:120 [ irq_cnt ] +Uplifting [] best 4101660 combination zp[1]:120 [ irq_cnt ] +Attempting to uplift remaining variables inzp[1]:119 [ irq_sprite_ptr ] +Uplifting [] best 4101660 combination zp[1]:119 [ irq_sprite_ptr ] +Attempting to uplift remaining variables inzp[1]:117 [ irq_raster_next ] +Uplifting [] best 4101660 combination zp[1]:117 [ irq_raster_next ] Attempting to uplift remaining variables inzp[1]:177 [ play_update_score::lines_before#0 ] Uplifting [play_update_score] best 4101660 combination zp[1]:177 [ play_update_score::lines_before#0 ] Attempting to uplift remaining variables inzp[1]:172 [ play_spawn_current::$7 ] @@ -21164,10 +21164,10 @@ FINAL SYMBOL TABLE (byte) game_over#27 game_over zp[1]:6 6.0 (byte) game_over#52 game_over zp[1]:6 0.34782608695652173 (byte) game_over#65 game_over zp[1]:6 0.42857142857142855 -(byte) irq_cnt loadstore zp[1]:30 6.0 -(byte) irq_raster_next loadstore zp[1]:27 1.0 -(byte) irq_sprite_ptr loadstore zp[1]:29 1.5555555555555558 -(byte) irq_sprite_ypos loadstore zp[1]:28 14.0 +(byte) irq_cnt loadstore zp[1]:30 0.48000000000000004 +(byte) irq_raster_next loadstore zp[1]:27 0.44444444444444453 +(byte) irq_sprite_ptr loadstore zp[1]:29 0.45161290322580644 +(byte) irq_sprite_ypos loadstore zp[1]:28 0.48275862068965525 (byte()) keyboard_event_get() (label) keyboard_event_get::@1 (label) keyboard_event_get::@return @@ -21842,7 +21842,7 @@ FINAL SYMBOL TABLE (const byte) render_show::toD0182_return#0 toD0182_return = >(word)(const byte*) PLAYFIELD_SCREEN_2&(word) $3fff*(byte) 4|>(word)(const byte*) PLAYFIELD_CHARSET/(byte) 4&(byte) $f (byte*) render_show::toD0182_screen (const dword*) score_add_bcd[(number) 5] = { fill( 5, 0) } -(dword) score_bcd loadstore zp[4]:23 60.0 +(dword) score_bcd loadstore zp[4]:23 0.04316546762589928 (const byte**) screen_lines_1[(const byte) PLAYFIELD_LINES] = { fill( PLAYFIELD_LINES, 0) } (const byte**) screen_lines_2[(const byte) PLAYFIELD_LINES] = { fill( PLAYFIELD_LINES, 0) } (void()) sid_rnd_init() diff --git a/src/test/ref/complex/tetris/tetris.sym b/src/test/ref/complex/tetris/tetris.sym index dac2c80da..e9a0a870e 100644 --- a/src/test/ref/complex/tetris/tetris.sym +++ b/src/test/ref/complex/tetris/tetris.sym @@ -177,10 +177,10 @@ (byte) game_over#27 game_over zp[1]:6 6.0 (byte) game_over#52 game_over zp[1]:6 0.34782608695652173 (byte) game_over#65 game_over zp[1]:6 0.42857142857142855 -(byte) irq_cnt loadstore zp[1]:30 6.0 -(byte) irq_raster_next loadstore zp[1]:27 1.0 -(byte) irq_sprite_ptr loadstore zp[1]:29 1.5555555555555558 -(byte) irq_sprite_ypos loadstore zp[1]:28 14.0 +(byte) irq_cnt loadstore zp[1]:30 0.48000000000000004 +(byte) irq_raster_next loadstore zp[1]:27 0.44444444444444453 +(byte) irq_sprite_ptr loadstore zp[1]:29 0.45161290322580644 +(byte) irq_sprite_ypos loadstore zp[1]:28 0.48275862068965525 (byte()) keyboard_event_get() (label) keyboard_event_get::@1 (label) keyboard_event_get::@return @@ -855,7 +855,7 @@ (const byte) render_show::toD0182_return#0 toD0182_return = >(word)(const byte*) PLAYFIELD_SCREEN_2&(word) $3fff*(byte) 4|>(word)(const byte*) PLAYFIELD_CHARSET/(byte) 4&(byte) $f (byte*) render_show::toD0182_screen (const dword*) score_add_bcd[(number) 5] = { fill( 5, 0) } -(dword) score_bcd loadstore zp[4]:23 60.0 +(dword) score_bcd loadstore zp[4]:23 0.04316546762589928 (const byte**) screen_lines_1[(const byte) PLAYFIELD_LINES] = { fill( PLAYFIELD_LINES, 0) } (const byte**) screen_lines_2[(const byte) PLAYFIELD_LINES] = { fill( PLAYFIELD_LINES, 0) } (void()) sid_rnd_init() diff --git a/src/test/ref/declared-memory-var-0.log b/src/test/ref/declared-memory-var-0.log index 04f98670b..b91f47e15 100644 --- a/src/test/ref/declared-memory-var-0.log +++ b/src/test/ref/declared-memory-var-0.log @@ -106,7 +106,7 @@ main::@return: scope:[main] from main::@1 VARIABLE REGISTER WEIGHTS -(byte) idx loadstore 4.714285714285714 = (byte) 0 +(byte) idx loadstore 4.125 = (byte) 0 (void()) main() (byte) main::i (byte) main::i#1 16.5 @@ -187,17 +187,17 @@ main: { idx: .byte 0 REGISTER UPLIFT POTENTIAL REGISTERS -Statement [6] *((const byte*) SCREEN + (byte) main::i#2) ← (byte) idx [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a +Statement [6] *((const byte*) SCREEN + (byte) main::i#2) ← (byte) idx [ main::i#2 idx ] ( main:2 [ main::i#2 idx ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::i#2 main::i#1 ] Statement [7] (byte) idx ← (byte) idx + (byte) main::i#2 [ main::i#2 idx ] ( main:2 [ main::i#2 idx ] ) always clobbers reg byte a -Statement [6] *((const byte*) SCREEN + (byte) main::i#2) ← (byte) idx [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a +Statement [6] *((const byte*) SCREEN + (byte) main::i#2) ← (byte) idx [ main::i#2 idx ] ( main:2 [ main::i#2 idx ] ) always clobbers reg byte a Statement [7] (byte) idx ← (byte) idx + (byte) main::i#2 [ main::i#2 idx ] ( main:2 [ main::i#2 idx ] ) always clobbers reg byte a Potential registers zp[1]:2 [ main::i#2 main::i#1 ] : zp[1]:2 , reg byte x , reg byte y , Potential registers mem[1] [ idx ] : mem[1] , REGISTER UPLIFT SCOPES Uplift Scope [main] 31.17: zp[1]:2 [ main::i#2 main::i#1 ] -Uplift Scope [] 4.71: mem[1] [ idx ] +Uplift Scope [] 4.12: mem[1] [ idx ] Uplifting [main] best 403 combination reg byte x [ main::i#2 main::i#1 ] Uplifting [] best 403 combination mem[1] [ idx ] @@ -295,7 +295,7 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (const byte*) SCREEN = (byte*) 1024 -(byte) idx loadstore mem[1] 4.714285714285714 = (byte) 0 +(byte) idx loadstore mem[1] 4.125 = (byte) 0 (void()) main() (label) main::@1 (label) main::@return diff --git a/src/test/ref/declared-memory-var-0.sym b/src/test/ref/declared-memory-var-0.sym index 156c67393..619e7f6e6 100644 --- a/src/test/ref/declared-memory-var-0.sym +++ b/src/test/ref/declared-memory-var-0.sym @@ -2,7 +2,7 @@ (label) @begin (label) @end (const byte*) SCREEN = (byte*) 1024 -(byte) idx loadstore mem[1] 4.714285714285714 = (byte) 0 +(byte) idx loadstore mem[1] 4.125 = (byte) 0 (void()) main() (label) main::@1 (label) main::@return diff --git a/src/test/ref/declared-memory-var-2.log b/src/test/ref/declared-memory-var-2.log index 5dc2195d6..6ff62a19e 100644 --- a/src/test/ref/declared-memory-var-2.log +++ b/src/test/ref/declared-memory-var-2.log @@ -111,7 +111,7 @@ main::@return: scope:[main] from main::@1 VARIABLE REGISTER WEIGHTS -(byte*) cursor loadstore 4.714285714285714 = (const byte*) SCREEN +(byte*) cursor loadstore 4.125 = (const byte*) SCREEN (void()) main() (byte) main::i (byte) main::i#1 16.5 @@ -200,18 +200,18 @@ main: { cursor: .word SCREEN REGISTER UPLIFT POTENTIAL REGISTERS -Statement [6] *((byte*) cursor) ← (byte) '*' [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a reg byte y +Statement [6] *((byte*) cursor) ← (byte) '*' [ main::i#2 cursor ] ( main:2 [ main::i#2 cursor ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::i#2 main::i#1 ] Removing always clobbered register reg byte y as potential for zp[1]:2 [ main::i#2 main::i#1 ] Statement [7] (byte*) cursor ← (byte*) cursor + (byte) $29 [ main::i#2 cursor ] ( main:2 [ main::i#2 cursor ] ) always clobbers reg byte a -Statement [6] *((byte*) cursor) ← (byte) '*' [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a reg byte y +Statement [6] *((byte*) cursor) ← (byte) '*' [ main::i#2 cursor ] ( main:2 [ main::i#2 cursor ] ) always clobbers reg byte a reg byte y Statement [7] (byte*) cursor ← (byte*) cursor + (byte) $29 [ main::i#2 cursor ] ( main:2 [ main::i#2 cursor ] ) always clobbers reg byte a Potential registers zp[1]:2 [ main::i#2 main::i#1 ] : zp[1]:2 , reg byte x , Potential registers mem[2] [ cursor ] : mem[2] , REGISTER UPLIFT SCOPES Uplift Scope [main] 23.83: zp[1]:2 [ main::i#2 main::i#1 ] -Uplift Scope [] 4.71: mem[2] [ cursor ] +Uplift Scope [] 4.12: mem[2] [ cursor ] Uplifting [main] best 638 combination reg byte x [ main::i#2 main::i#1 ] Uplifting [] best 638 combination mem[2] [ cursor ] @@ -316,7 +316,7 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (const byte*) SCREEN = (byte*) 1024 -(byte*) cursor loadstore mem[2] 4.714285714285714 = (const byte*) SCREEN +(byte*) cursor loadstore mem[2] 4.125 = (const byte*) SCREEN (void()) main() (label) main::@1 (label) main::@return diff --git a/src/test/ref/declared-memory-var-2.sym b/src/test/ref/declared-memory-var-2.sym index fd29583fa..b4cb72393 100644 --- a/src/test/ref/declared-memory-var-2.sym +++ b/src/test/ref/declared-memory-var-2.sym @@ -2,7 +2,7 @@ (label) @begin (label) @end (const byte*) SCREEN = (byte*) 1024 -(byte*) cursor loadstore mem[2] 4.714285714285714 = (const byte*) SCREEN +(byte*) cursor loadstore mem[2] 4.125 = (const byte*) SCREEN (void()) main() (label) main::@1 (label) main::@return diff --git a/src/test/ref/declared-memory-var-7.log b/src/test/ref/declared-memory-var-7.log index 3e9f23adb..75ae8d545 100644 --- a/src/test/ref/declared-memory-var-7.log +++ b/src/test/ref/declared-memory-var-7.log @@ -105,7 +105,7 @@ main::@return: scope:[main] from main::@1 VARIABLE REGISTER WEIGHTS -(byte) idx loadstore 5.0 +(byte) idx loadstore 4.375 (void()) main() (byte) main::i (byte) main::i#1 16.5 @@ -191,18 +191,18 @@ main: { REGISTER UPLIFT POTENTIAL REGISTERS Statement [0] (byte) idx ← (byte) 0 [ idx ] ( [ idx ] ) always clobbers reg byte a -Statement [6] *((const byte*) SCREEN + (byte) main::i#2) ← (byte) idx [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a +Statement [6] *((const byte*) SCREEN + (byte) main::i#2) ← (byte) idx [ idx main::i#2 ] ( main:2 [ idx main::i#2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::i#2 main::i#1 ] Statement [7] (byte) idx ← (byte) idx + (byte) main::i#2 [ idx main::i#2 ] ( main:2 [ idx main::i#2 ] ) always clobbers reg byte a Statement [0] (byte) idx ← (byte) 0 [ idx ] ( [ idx ] ) always clobbers reg byte a -Statement [6] *((const byte*) SCREEN + (byte) main::i#2) ← (byte) idx [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a +Statement [6] *((const byte*) SCREEN + (byte) main::i#2) ← (byte) idx [ idx main::i#2 ] ( main:2 [ idx main::i#2 ] ) always clobbers reg byte a Statement [7] (byte) idx ← (byte) idx + (byte) main::i#2 [ idx main::i#2 ] ( main:2 [ idx main::i#2 ] ) always clobbers reg byte a Potential registers zp[1]:2 [ main::i#2 main::i#1 ] : zp[1]:2 , reg byte x , reg byte y , Potential registers zp[1]:3 [ idx ] : zp[1]:3 , REGISTER UPLIFT SCOPES Uplift Scope [main] 31.17: zp[1]:2 [ main::i#2 main::i#1 ] -Uplift Scope [] 5: zp[1]:3 [ idx ] +Uplift Scope [] 4.38: zp[1]:3 [ idx ] Uplifting [main] best 378 combination reg byte x [ main::i#2 main::i#1 ] Uplifting [] best 378 combination zp[1]:3 [ idx ] @@ -301,7 +301,7 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (const byte*) SCREEN = (byte*) 1024 -(byte) idx loadstore zp[1]:2 5.0 +(byte) idx loadstore zp[1]:2 4.375 (void()) main() (label) main::@1 (label) main::@return diff --git a/src/test/ref/declared-memory-var-7.sym b/src/test/ref/declared-memory-var-7.sym index 44002a8e9..a58071fd8 100644 --- a/src/test/ref/declared-memory-var-7.sym +++ b/src/test/ref/declared-memory-var-7.sym @@ -2,7 +2,7 @@ (label) @begin (label) @end (const byte*) SCREEN = (byte*) 1024 -(byte) idx loadstore zp[1]:2 5.0 +(byte) idx loadstore zp[1]:2 4.375 (void()) main() (label) main::@1 (label) main::@return diff --git a/src/test/ref/declared-memory-var-8.log b/src/test/ref/declared-memory-var-8.log index eff947733..e70fefda0 100644 --- a/src/test/ref/declared-memory-var-8.log +++ b/src/test/ref/declared-memory-var-8.log @@ -105,7 +105,7 @@ main::@return: scope:[main] from main::@1 VARIABLE REGISTER WEIGHTS -(byte) idx loadstore !mem[-1]:4096 5.0 +(byte) idx loadstore !mem[-1]:4096 4.375 (void()) main() (byte) main::i (byte) main::i#1 16.5 @@ -190,18 +190,18 @@ main: { REGISTER UPLIFT POTENTIAL REGISTERS Statement [0] (byte) idx ← (byte) 0 [ idx ] ( [ idx ] ) always clobbers reg byte a -Statement [6] *((const byte*) SCREEN + (byte) main::i#2) ← (byte) idx [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a +Statement [6] *((const byte*) SCREEN + (byte) main::i#2) ← (byte) idx [ idx main::i#2 ] ( main:2 [ idx main::i#2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::i#2 main::i#1 ] Statement [7] (byte) idx ← (byte) idx + (byte) main::i#2 [ idx main::i#2 ] ( main:2 [ idx main::i#2 ] ) always clobbers reg byte a Statement [0] (byte) idx ← (byte) 0 [ idx ] ( [ idx ] ) always clobbers reg byte a -Statement [6] *((const byte*) SCREEN + (byte) main::i#2) ← (byte) idx [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a +Statement [6] *((const byte*) SCREEN + (byte) main::i#2) ← (byte) idx [ idx main::i#2 ] ( main:2 [ idx main::i#2 ] ) always clobbers reg byte a Statement [7] (byte) idx ← (byte) idx + (byte) main::i#2 [ idx main::i#2 ] ( main:2 [ idx main::i#2 ] ) always clobbers reg byte a Potential registers zp[1]:2 [ main::i#2 main::i#1 ] : zp[1]:2 , reg byte x , reg byte y , Potential registers mem[1]:4096 [ idx ] : mem[1]:4096 , REGISTER UPLIFT SCOPES Uplift Scope [main] 31.17: zp[1]:2 [ main::i#2 main::i#1 ] -Uplift Scope [] 5: mem[1]:4096 [ idx ] +Uplift Scope [] 4.38: mem[1]:4096 [ idx ] Uplifting [main] best 409 combination reg byte x [ main::i#2 main::i#1 ] Uplifting [] best 409 combination mem[1]:4096 [ idx ] @@ -299,7 +299,7 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (const byte*) SCREEN = (byte*) 1024 -(byte) idx loadstore !mem[-1]:4096 mem[1]:4096 5.0 +(byte) idx loadstore !mem[-1]:4096 mem[1]:4096 4.375 (void()) main() (label) main::@1 (label) main::@return diff --git a/src/test/ref/declared-memory-var-8.sym b/src/test/ref/declared-memory-var-8.sym index c25e58eaf..3eb5aa02f 100644 --- a/src/test/ref/declared-memory-var-8.sym +++ b/src/test/ref/declared-memory-var-8.sym @@ -2,7 +2,7 @@ (label) @begin (label) @end (const byte*) SCREEN = (byte*) 1024 -(byte) idx loadstore !mem[-1]:4096 mem[1]:4096 5.0 +(byte) idx loadstore !mem[-1]:4096 mem[1]:4096 4.375 (void()) main() (label) main::@1 (label) main::@return diff --git a/src/test/ref/declared-ssa-var-0.log b/src/test/ref/declared-ssa-var-0.log index 5227a61d6..561bb4661 100644 --- a/src/test/ref/declared-ssa-var-0.log +++ b/src/test/ref/declared-ssa-var-0.log @@ -364,7 +364,7 @@ main::@return: scope:[main] from main::@8 VARIABLE REGISTER WEIGHTS -(byte) idx_nssa_g loadstore 3.1333333333333333 +(byte) idx_nssa_g loadstore 2.611111111111111 (byte) idx_ssa_g (byte) idx_ssa_g#2 8.0 (byte) idx_ssa_g#7 16.5 @@ -381,7 +381,7 @@ VARIABLE REGISTER WEIGHTS (byte) main::i3 (byte) main::i3#1 16.5 (byte) main::i3#2 11.0 -(byte) main::idx_nssa_l loadstore 1.6206896551724135 +(byte) main::idx_nssa_l loadstore 1.46875 (byte) main::idx_ssa_l (byte) main::idx_ssa_l#2 8.0 (byte) main::idx_ssa_l#5 16.5 @@ -623,28 +623,28 @@ Statement [0] (byte) idx_nssa_g ← (byte) 0 [ idx_nssa_g ] ( [ idx_nssa_g ] ) Statement [4] (byte) main::idx_nssa_l ← (byte) 0 [ idx_nssa_g main::idx_nssa_l ] ( main:2 [ idx_nssa_g main::idx_nssa_l ] ) always clobbers reg byte a Statement [5] *((const byte*) SCREEN1) ← (byte) 'C' [ idx_nssa_g main::idx_nssa_l ] ( main:2 [ idx_nssa_g main::idx_nssa_l ] ) always clobbers reg byte a Statement [11] *((const byte*) SCREEN1 + (byte) idx_ssa_g#2) ← (byte) '!' [ idx_nssa_g main::idx_nssa_l ] ( main:2 [ idx_nssa_g main::idx_nssa_l ] ) always clobbers reg byte a -Statement [12] *((const byte*) SCREEN2 + (byte) idx_nssa_g) ← (byte) 'C' [ main::idx_nssa_l ] ( main:2 [ main::idx_nssa_l ] ) always clobbers reg byte a reg byte y -Statement [15] *((const byte*) SCREEN2 + (byte) idx_nssa_g) ← (byte) main::i1#2 [ main::idx_nssa_l main::i1#2 ] ( main:2 [ main::idx_nssa_l main::i1#2 ] ) always clobbers reg byte y +Statement [12] *((const byte*) SCREEN2 + (byte) idx_nssa_g) ← (byte) 'C' [ idx_nssa_g main::idx_nssa_l ] ( main:2 [ idx_nssa_g main::idx_nssa_l ] ) always clobbers reg byte a reg byte y +Statement [15] *((const byte*) SCREEN2 + (byte) idx_nssa_g) ← (byte) main::i1#2 [ idx_nssa_g main::idx_nssa_l main::i1#2 ] ( main:2 [ idx_nssa_g main::idx_nssa_l main::i1#2 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp[1]:4 [ main::i1#2 main::i1#1 ] -Statement [19] *((const byte*) SCREEN2 + (byte) idx_nssa_g) ← (byte) '!' [ main::idx_nssa_l ] ( main:2 [ main::idx_nssa_l ] ) always clobbers reg byte a reg byte y +Statement [19] *((const byte*) SCREEN2 + (byte) idx_nssa_g) ← (byte) '!' [ idx_nssa_g main::idx_nssa_l ] ( main:2 [ idx_nssa_g main::idx_nssa_l ] ) always clobbers reg byte a reg byte y Statement [21] *((const byte*) SCREEN3) ← (byte) 'C' [ main::idx_nssa_l ] ( main:2 [ main::idx_nssa_l ] ) always clobbers reg byte a Statement [27] *((const byte*) SCREEN3 + (byte) main::idx_ssa_l#2) ← (byte) '!' [ main::idx_nssa_l ] ( main:2 [ main::idx_nssa_l ] ) always clobbers reg byte a -Statement [28] *((const byte*) SCREEN4 + (byte) main::idx_nssa_l) ← (byte) 'C' [ ] ( main:2 [ ] ) always clobbers reg byte a reg byte y -Statement [31] *((const byte*) SCREEN4 + (byte) main::idx_nssa_l) ← (byte) main::i3#2 [ main::i3#2 ] ( main:2 [ main::i3#2 ] ) always clobbers reg byte y +Statement [28] *((const byte*) SCREEN4 + (byte) main::idx_nssa_l) ← (byte) 'C' [ main::idx_nssa_l ] ( main:2 [ main::idx_nssa_l ] ) always clobbers reg byte a reg byte y +Statement [31] *((const byte*) SCREEN4 + (byte) main::idx_nssa_l) ← (byte) main::i3#2 [ main::idx_nssa_l main::i3#2 ] ( main:2 [ main::idx_nssa_l main::i3#2 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp[1]:7 [ main::i3#2 main::i3#1 ] -Statement [35] *((const byte*) SCREEN4 + (byte) main::idx_nssa_l) ← (byte) '!' [ ] ( main:2 [ ] ) always clobbers reg byte a reg byte y +Statement [35] *((const byte*) SCREEN4 + (byte) main::idx_nssa_l) ← (byte) '!' [ main::idx_nssa_l ] ( main:2 [ main::idx_nssa_l ] ) always clobbers reg byte a reg byte y Statement [0] (byte) idx_nssa_g ← (byte) 0 [ idx_nssa_g ] ( [ idx_nssa_g ] ) always clobbers reg byte a Statement [4] (byte) main::idx_nssa_l ← (byte) 0 [ idx_nssa_g main::idx_nssa_l ] ( main:2 [ idx_nssa_g main::idx_nssa_l ] ) always clobbers reg byte a Statement [5] *((const byte*) SCREEN1) ← (byte) 'C' [ idx_nssa_g main::idx_nssa_l ] ( main:2 [ idx_nssa_g main::idx_nssa_l ] ) always clobbers reg byte a Statement [11] *((const byte*) SCREEN1 + (byte) idx_ssa_g#2) ← (byte) '!' [ idx_nssa_g main::idx_nssa_l ] ( main:2 [ idx_nssa_g main::idx_nssa_l ] ) always clobbers reg byte a -Statement [12] *((const byte*) SCREEN2 + (byte) idx_nssa_g) ← (byte) 'C' [ main::idx_nssa_l ] ( main:2 [ main::idx_nssa_l ] ) always clobbers reg byte a reg byte y -Statement [15] *((const byte*) SCREEN2 + (byte) idx_nssa_g) ← (byte) main::i1#2 [ main::idx_nssa_l main::i1#2 ] ( main:2 [ main::idx_nssa_l main::i1#2 ] ) always clobbers reg byte y -Statement [19] *((const byte*) SCREEN2 + (byte) idx_nssa_g) ← (byte) '!' [ main::idx_nssa_l ] ( main:2 [ main::idx_nssa_l ] ) always clobbers reg byte a reg byte y +Statement [12] *((const byte*) SCREEN2 + (byte) idx_nssa_g) ← (byte) 'C' [ idx_nssa_g main::idx_nssa_l ] ( main:2 [ idx_nssa_g main::idx_nssa_l ] ) always clobbers reg byte a reg byte y +Statement [15] *((const byte*) SCREEN2 + (byte) idx_nssa_g) ← (byte) main::i1#2 [ idx_nssa_g main::idx_nssa_l main::i1#2 ] ( main:2 [ idx_nssa_g main::idx_nssa_l main::i1#2 ] ) always clobbers reg byte y +Statement [19] *((const byte*) SCREEN2 + (byte) idx_nssa_g) ← (byte) '!' [ idx_nssa_g main::idx_nssa_l ] ( main:2 [ idx_nssa_g main::idx_nssa_l ] ) always clobbers reg byte a reg byte y Statement [21] *((const byte*) SCREEN3) ← (byte) 'C' [ main::idx_nssa_l ] ( main:2 [ main::idx_nssa_l ] ) always clobbers reg byte a Statement [27] *((const byte*) SCREEN3 + (byte) main::idx_ssa_l#2) ← (byte) '!' [ main::idx_nssa_l ] ( main:2 [ main::idx_nssa_l ] ) always clobbers reg byte a -Statement [28] *((const byte*) SCREEN4 + (byte) main::idx_nssa_l) ← (byte) 'C' [ ] ( main:2 [ ] ) always clobbers reg byte a reg byte y -Statement [31] *((const byte*) SCREEN4 + (byte) main::idx_nssa_l) ← (byte) main::i3#2 [ main::i3#2 ] ( main:2 [ main::i3#2 ] ) always clobbers reg byte y -Statement [35] *((const byte*) SCREEN4 + (byte) main::idx_nssa_l) ← (byte) '!' [ ] ( main:2 [ ] ) always clobbers reg byte a reg byte y +Statement [28] *((const byte*) SCREEN4 + (byte) main::idx_nssa_l) ← (byte) 'C' [ main::idx_nssa_l ] ( main:2 [ main::idx_nssa_l ] ) always clobbers reg byte a reg byte y +Statement [31] *((const byte*) SCREEN4 + (byte) main::idx_nssa_l) ← (byte) main::i3#2 [ main::idx_nssa_l main::i3#2 ] ( main:2 [ main::idx_nssa_l main::i3#2 ] ) always clobbers reg byte y +Statement [35] *((const byte*) SCREEN4 + (byte) main::idx_nssa_l) ← (byte) '!' [ main::idx_nssa_l ] ( main:2 [ main::idx_nssa_l ] ) always clobbers reg byte a reg byte y Potential registers zp[1]:2 [ main::i#2 main::i#1 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:3 [ idx_ssa_g#7 idx_ssa_g#2 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:4 [ main::i1#2 main::i1#1 ] : zp[1]:4 , reg byte a , reg byte x , @@ -655,8 +655,8 @@ Potential registers zp[1]:8 [ idx_nssa_g ] : zp[1]:8 , Potential registers zp[1]:9 [ main::idx_nssa_l ] : zp[1]:9 , REGISTER UPLIFT SCOPES -Uplift Scope [main] 27.5: zp[1]:2 [ main::i#2 main::i#1 ] 27.5: zp[1]:4 [ main::i1#2 main::i1#1 ] 27.5: zp[1]:5 [ main::i2#2 main::i2#1 ] 27.5: zp[1]:7 [ main::i3#2 main::i3#1 ] 24.5: zp[1]:6 [ main::idx_ssa_l#5 main::idx_ssa_l#2 ] 1.62: zp[1]:9 [ main::idx_nssa_l ] -Uplift Scope [] 24.5: zp[1]:3 [ idx_ssa_g#7 idx_ssa_g#2 ] 3.13: zp[1]:8 [ idx_nssa_g ] +Uplift Scope [main] 27.5: zp[1]:2 [ main::i#2 main::i#1 ] 27.5: zp[1]:4 [ main::i1#2 main::i1#1 ] 27.5: zp[1]:5 [ main::i2#2 main::i2#1 ] 27.5: zp[1]:7 [ main::i3#2 main::i3#1 ] 24.5: zp[1]:6 [ main::idx_ssa_l#5 main::idx_ssa_l#2 ] 1.47: zp[1]:9 [ main::idx_nssa_l ] +Uplift Scope [] 24.5: zp[1]:3 [ idx_ssa_g#7 idx_ssa_g#2 ] 2.61: zp[1]:8 [ idx_nssa_g ] Uplifting [main] best 1523 combination reg byte x [ main::i#2 main::i#1 ] reg byte a [ main::i1#2 main::i1#1 ] reg byte x [ main::i2#2 main::i2#1 ] reg byte a [ main::i3#2 main::i3#1 ] zp[1]:6 [ main::idx_ssa_l#5 main::idx_ssa_l#2 ] zp[1]:9 [ main::idx_nssa_l ] Limited combination testing to 100 combinations of 576 possible. @@ -906,7 +906,7 @@ FINAL SYMBOL TABLE (const byte*) SCREEN2 = (byte*)(number) $400+(number) $28 (const byte*) SCREEN3 = (byte*)(number) $400+(number) $50 (const byte*) SCREEN4 = (byte*)(number) $400+(number) $78 -(byte) idx_nssa_g loadstore zp[1]:2 3.1333333333333333 +(byte) idx_nssa_g loadstore zp[1]:2 2.611111111111111 (byte) idx_ssa_g (byte) idx_ssa_g#2 reg byte y 8.0 (byte) idx_ssa_g#7 reg byte y 16.5 @@ -932,7 +932,7 @@ FINAL SYMBOL TABLE (byte) main::i3 (byte) main::i3#1 reg byte a 16.5 (byte) main::i3#2 reg byte a 11.0 -(byte) main::idx_nssa_l loadstore zp[1]:3 1.6206896551724135 +(byte) main::idx_nssa_l loadstore zp[1]:3 1.46875 (byte) main::idx_ssa_l (byte) main::idx_ssa_l#2 reg byte y 8.0 (byte) main::idx_ssa_l#5 reg byte y 16.5 diff --git a/src/test/ref/declared-ssa-var-0.sym b/src/test/ref/declared-ssa-var-0.sym index 18c8d564c..9e704a576 100644 --- a/src/test/ref/declared-ssa-var-0.sym +++ b/src/test/ref/declared-ssa-var-0.sym @@ -5,7 +5,7 @@ (const byte*) SCREEN2 = (byte*)(number) $400+(number) $28 (const byte*) SCREEN3 = (byte*)(number) $400+(number) $50 (const byte*) SCREEN4 = (byte*)(number) $400+(number) $78 -(byte) idx_nssa_g loadstore zp[1]:2 3.1333333333333333 +(byte) idx_nssa_g loadstore zp[1]:2 2.611111111111111 (byte) idx_ssa_g (byte) idx_ssa_g#2 reg byte y 8.0 (byte) idx_ssa_g#7 reg byte y 16.5 @@ -31,7 +31,7 @@ (byte) main::i3 (byte) main::i3#1 reg byte a 16.5 (byte) main::i3#2 reg byte a 11.0 -(byte) main::idx_nssa_l loadstore zp[1]:3 1.6206896551724135 +(byte) main::idx_nssa_l loadstore zp[1]:3 1.46875 (byte) main::idx_ssa_l (byte) main::idx_ssa_l#2 reg byte y 8.0 (byte) main::idx_ssa_l#5 reg byte y 16.5 diff --git a/src/test/ref/duplicate-loop-problem.asm b/src/test/ref/duplicate-loop-problem.asm index 8c318ada0..41191cc8f 100644 --- a/src/test/ref/duplicate-loop-problem.asm +++ b/src/test/ref/duplicate-loop-problem.asm @@ -5,13 +5,16 @@ .pc = $80d "Program" .label DC00 = $dc00 main: { + ldy #0 __b1: + iny + __b2: ldx DC00 txa and #$1f cpx #0 bne __b1 cmp #$1f - beq __b1 + beq __b2 jmp __b1 } diff --git a/src/test/ref/duplicate-loop-problem.cfg b/src/test/ref/duplicate-loop-problem.cfg index e66f07ff6..22e4f8787 100644 --- a/src/test/ref/duplicate-loop-problem.cfg +++ b/src/test/ref/duplicate-loop-problem.cfg @@ -13,13 +13,14 @@ main: scope:[main] from @1 [4] phi() to:main::@1 main::@1: scope:[main] from main main::@2 main::@3 - [5] (byte) key#1 ← *((const byte*) DC00) - [6] (byte~) main::$1 ← (byte) key#1 & (byte) $1f - [7] if((byte) key#1!=(byte) 0) goto main::@2 - to:main::@3 -main::@3: scope:[main] from main::@1 - [8] if((byte~) main::$1==(byte) $1f) goto main::@1 + [5] (byte) rpc#4 ← phi( main/(byte) 0 main::@2/(byte) rpc#1 main::@3/(byte) rpc#1 ) + [6] (byte) rpc#1 ← ++ (byte) rpc#4 to:main::@2 main::@2: scope:[main] from main::@1 main::@3 - [9] phi() + [7] (byte) key#1 ← *((const byte*) DC00) + [8] (byte~) main::$1 ← (byte) key#1 & (byte) $1f + [9] if((byte) key#1!=(byte) 0) goto main::@1 + to:main::@3 +main::@3: scope:[main] from main::@2 + [10] if((byte~) main::$1==(byte) $1f) goto main::@2 to:main::@1 diff --git a/src/test/ref/duplicate-loop-problem.log b/src/test/ref/duplicate-loop-problem.log index 2014864a7..82ccf0df5 100644 --- a/src/test/ref/duplicate-loop-problem.log +++ b/src/test/ref/duplicate-loop-problem.log @@ -1,15 +1,21 @@ -Culled Empty Block (label) main::@1 Culled Empty Block (label) main::@4 CONTROL FLOW GRAPH SSA @begin: scope:[] from + (byte) rpc#0 ← (byte) 0 (byte) key#0 ← (byte) 0 to:@1 (void()) main() main: scope:[main] from @1 + (byte) rpc#7 ← phi( @1/(byte) rpc#9 ) + to:main::@1 +main::@1: scope:[main] from main main::@3 + (byte) rpc#4 ← phi( main/(byte) rpc#7 main::@3/(byte) rpc#8 ) + (byte) rpc#1 ← ++ (byte) rpc#4 to:main::@2 -main::@2: scope:[main] from main main::@2 main::@3 +main::@2: scope:[main] from main::@1 main::@2 + (byte) rpc#10 ← phi( main::@1/(byte) rpc#1 main::@2/(byte) rpc#10 ) (byte) key#1 ← *((const byte*) DC00) (bool~) main::$0 ← (byte) key#1 == (number) 0 (number~) main::$1 ← (byte) key#1 & (number) $1f @@ -19,19 +25,25 @@ main::@2: scope:[main] from main main::@2 main::@3 to:main::@3 main::@3: scope:[main] from main::@2 (byte) key#6 ← phi( main::@2/(byte) key#1 ) - if(true) goto main::@2 + (byte) rpc#8 ← phi( main::@2/(byte) rpc#10 ) + if(true) goto main::@1 to:main::@return main::@return: scope:[main] from main::@3 (byte) key#4 ← phi( main::@3/(byte) key#6 ) + (byte) rpc#5 ← phi( main::@3/(byte) rpc#8 ) + (byte) rpc#2 ← (byte) rpc#5 (byte) key#2 ← (byte) key#4 return to:@return @1: scope:[] from @begin (byte) key#7 ← phi( @begin/(byte) key#0 ) + (byte) rpc#9 ← phi( @begin/(byte) rpc#0 ) call main to:@2 @2: scope:[] from @1 (byte) key#5 ← phi( @1/(byte) key#2 ) + (byte) rpc#6 ← phi( @1/(byte) rpc#2 ) + (byte) rpc#3 ← (byte) rpc#6 (byte) key#3 ← (byte) key#5 to:@end @end: scope:[] from @2 @@ -56,9 +68,22 @@ SYMBOL TABLE SSA (number~) main::$1 (bool~) main::$2 (bool~) main::$3 +(label) main::@1 (label) main::@2 (label) main::@3 (label) main::@return +(byte) rpc +(byte) rpc#0 +(byte) rpc#1 +(byte) rpc#10 +(byte) rpc#2 +(byte) rpc#3 +(byte) rpc#4 +(byte) rpc#5 +(byte) rpc#6 +(byte) rpc#7 +(byte) rpc#8 +(byte) rpc#9 Adding number conversion cast (unumber) 0 in (bool~) main::$0 ← (byte) key#1 == (number) 0 Adding number conversion cast (unumber) $1f in (number~) main::$1 ← (byte) key#1 & (number) $1f @@ -75,47 +100,55 @@ Finalized unsigned number type (byte) $1f Finalized unsigned number type (byte) $1f Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) main::$1 ← (byte) key#1 & (byte) $1f +Alias (byte) rpc#10 = (byte) rpc#8 (byte) rpc#5 (byte) rpc#2 Alias (byte) key#1 = (byte) key#6 (byte) key#4 (byte) key#2 +Alias (byte) rpc#0 = (byte) rpc#9 Alias (byte) key#0 = (byte) key#7 +Alias (byte) rpc#3 = (byte) rpc#6 Alias (byte) key#3 = (byte) key#5 Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) rpc#7 (byte) rpc#0 +Identical Phi Values (byte) rpc#10 (byte) rpc#1 +Identical Phi Values (byte) rpc#3 (byte) rpc#10 Identical Phi Values (byte) key#3 (byte) key#1 Successful SSA optimization Pass2IdenticalPhiElimination -Rewriting && if()-condition to two if()s [5] (bool~) main::$3 ← (bool~) main::$0 && (bool~) main::$2 +Rewriting && if()-condition to two if()s [10] (bool~) main::$3 ← (bool~) main::$0 && (bool~) main::$2 Successful SSA optimization Pass2ConditionalAndOrRewriting +Constant (const byte) rpc#0 = 0 Constant (const byte) key#0 = 0 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [8] if(true) goto main::@2 +if() condition always true - replacing block destination [13] if(true) goto main::@1 Successful SSA optimization Pass2ConstantIfs Eliminating unused constant (const byte) key#0 Successful SSA optimization PassNEliminateUnusedVars Removing unused block main::@return Successful SSA optimization Pass2EliminateUnusedBlocks -Simple Condition (bool~) main::$0 [4] if((byte) key#1==(byte) 0) goto main::@5 -Simple Condition (bool~) main::$2 [6] if((byte~) main::$1==(byte) $1f) goto main::@2 +Simple Condition (bool~) main::$0 [6] if((byte) key#1==(byte) 0) goto main::@5 +Simple Condition (bool~) main::$2 [8] if((byte~) main::$1==(byte) $1f) goto main::@2 Successful SSA optimization Pass2ConditionalJumpSimplification -Negating conditional jump and destination [4] if((byte) key#1!=(byte) 0) goto main::@3 +Negating conditional jump and destination [6] if((byte) key#1!=(byte) 0) goto main::@3 Successful SSA optimization Pass2ConditionalJumpSequenceImprovement +Inlining constant with var siblings (const byte) rpc#0 +Constant inlined rpc#0 = (byte) 0 +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 -Adding NOP phi() at start of main::@3 CALL GRAPH Calls in [] to main:2 -Created 0 initial phi equivalence classes -Coalesced down to 0 phi equivalence classes +Created 1 initial phi equivalence classes +Coalesced [12] rpc#11 ← rpc#1 +Coalesced down to 1 phi equivalence classes Culled Empty Block (label) @2 -Renumbering block main::@2 to main::@1 -Renumbering block main::@3 to main::@2 +Culled Empty Block (label) main::@3 Renumbering block main::@5 to main::@3 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::@2 FINAL CONTROL FLOW GRAPH @begin: scope:[] from @@ -133,15 +166,16 @@ main: scope:[main] from @1 [4] phi() to:main::@1 main::@1: scope:[main] from main main::@2 main::@3 - [5] (byte) key#1 ← *((const byte*) DC00) - [6] (byte~) main::$1 ← (byte) key#1 & (byte) $1f - [7] if((byte) key#1!=(byte) 0) goto main::@2 - to:main::@3 -main::@3: scope:[main] from main::@1 - [8] if((byte~) main::$1==(byte) $1f) goto main::@1 + [5] (byte) rpc#4 ← phi( main/(byte) 0 main::@2/(byte) rpc#1 main::@3/(byte) rpc#1 ) + [6] (byte) rpc#1 ← ++ (byte) rpc#4 to:main::@2 main::@2: scope:[main] from main::@1 main::@3 - [9] phi() + [7] (byte) key#1 ← *((const byte*) DC00) + [8] (byte~) main::$1 ← (byte) key#1 & (byte) $1f + [9] if((byte) key#1!=(byte) 0) goto main::@1 + to:main::@3 +main::@3: scope:[main] from main::@2 + [10] if((byte~) main::$1==(byte) $1f) goto main::@2 to:main::@1 @@ -150,15 +184,21 @@ VARIABLE REGISTER WEIGHTS (byte) key#1 151.5 (void()) main() (byte~) main::$1 101.0 +(byte) rpc +(byte) rpc#1 42.6 +(byte) rpc#4 213.0 Initial phi equivalence classes +[ rpc#4 rpc#1 ] Added variable key#1 to live range equivalence class [ key#1 ] Added variable main::$1 to live range equivalence class [ main::$1 ] Complete equivalence classes +[ rpc#4 rpc#1 ] [ key#1 ] [ main::$1 ] -Allocated zp[1]:2 [ key#1 ] -Allocated zp[1]:3 [ main::$1 ] +Allocated zp[1]:2 [ rpc#4 rpc#1 ] +Allocated zp[1]:3 [ key#1 ] +Allocated zp[1]:4 [ main::$1 ] INITIAL ASM Target platform is c64basic / MOS6502X @@ -171,7 +211,8 @@ Target platform is c64basic / MOS6502X .pc = $80d "Program" // Global Constants & labels .label DC00 = $dc00 - .label key = 2 + .label rpc = 2 + .label key = 3 // @begin __bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] @@ -190,48 +231,58 @@ __bend_from___b1: __bend: // main main: { - .label __1 = 3 + .label __1 = 4 + // [5] phi from main to main::@1 [phi:main->main::@1] + __b1_from_main: + // [5] phi (byte) rpc#4 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z rpc + jmp __b1 + // [5] phi from main::@2 main::@3 to main::@1 [phi:main::@2/main::@3->main::@1] + __b1_from___b2: + __b1_from___b3: + // [5] phi (byte) rpc#4 = (byte) rpc#1 [phi:main::@2/main::@3->main::@1#0] -- register_copy jmp __b1 // main::@1 __b1: - // [5] (byte) key#1 ← *((const byte*) DC00) -- vbuz1=_deref_pbuc1 - lda DC00 - sta.z key - // [6] (byte~) main::$1 ← (byte) key#1 & (byte) $1f -- vbuz1=vbuz2_band_vbuc1 - lda #$1f - and.z key - sta.z __1 - // [7] if((byte) key#1!=(byte) 0) goto main::@2 -- vbuz1_neq_0_then_la1 - lda.z key - cmp #0 - bne __b2_from___b1 - jmp __b3 - // main::@3 - __b3: - // [8] if((byte~) main::$1==(byte) $1f) goto main::@1 -- vbuz1_eq_vbuc1_then_la1 - lda #$1f - cmp.z __1 - beq __b1 - // [9] phi from main::@1 main::@3 to main::@2 [phi:main::@1/main::@3->main::@2] - __b2_from___b1: - __b2_from___b3: + // [6] (byte) rpc#1 ← ++ (byte) rpc#4 -- vbuz1=_inc_vbuz1 + inc.z rpc jmp __b2 // main::@2 __b2: - jmp __b1 + // [7] (byte) key#1 ← *((const byte*) DC00) -- vbuz1=_deref_pbuc1 + lda DC00 + sta.z key + // [8] (byte~) main::$1 ← (byte) key#1 & (byte) $1f -- vbuz1=vbuz2_band_vbuc1 + lda #$1f + and.z key + sta.z __1 + // [9] if((byte) key#1!=(byte) 0) goto main::@1 -- vbuz1_neq_0_then_la1 + lda.z key + cmp #0 + bne __b1_from___b2 + jmp __b3 + // main::@3 + __b3: + // [10] if((byte~) main::$1==(byte) $1f) goto main::@2 -- vbuz1_eq_vbuc1_then_la1 + lda #$1f + cmp.z __1 + beq __b2 + jmp __b1_from___b3 } // File Data REGISTER UPLIFT POTENTIAL REGISTERS -Potential registers zp[1]:2 [ key#1 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:3 [ main::$1 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:2 [ rpc#4 rpc#1 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:3 [ key#1 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:4 [ main::$1 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [] 151.5: zp[1]:2 [ key#1 ] -Uplift Scope [main] 101: zp[1]:3 [ main::$1 ] +Uplift Scope [] 255.6: zp[1]:2 [ rpc#4 rpc#1 ] 151.5: zp[1]:3 [ key#1 ] +Uplift Scope [main] 101: zp[1]:4 [ main::$1 ] -Uplifting [] best 2502 combination reg byte x [ key#1 ] -Uplifting [main] best 2102 combination reg byte a [ main::$1 ] +Uplifting [] best 2842 combination reg byte y [ rpc#4 rpc#1 ] reg byte x [ key#1 ] +Uplifting [main] best 2442 combination reg byte a [ main::$1 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -261,30 +312,38 @@ __bend_from___b1: __bend: // main main: { + // [5] phi from main to main::@1 [phi:main->main::@1] + __b1_from_main: + // [5] phi (byte) rpc#4 = (byte) 0 [phi:main->main::@1#0] -- vbuyy=vbuc1 + ldy #0 + jmp __b1 + // [5] phi from main::@2 main::@3 to main::@1 [phi:main::@2/main::@3->main::@1] + __b1_from___b2: + __b1_from___b3: + // [5] phi (byte) rpc#4 = (byte) rpc#1 [phi:main::@2/main::@3->main::@1#0] -- register_copy jmp __b1 // main::@1 __b1: - // [5] (byte) key#1 ← *((const byte*) DC00) -- vbuxx=_deref_pbuc1 - ldx DC00 - // [6] (byte~) main::$1 ← (byte) key#1 & (byte) $1f -- vbuaa=vbuxx_band_vbuc1 - txa - and #$1f - // [7] if((byte) key#1!=(byte) 0) goto main::@2 -- vbuxx_neq_0_then_la1 - cpx #0 - bne __b2_from___b1 - jmp __b3 - // main::@3 - __b3: - // [8] if((byte~) main::$1==(byte) $1f) goto main::@1 -- vbuaa_eq_vbuc1_then_la1 - cmp #$1f - beq __b1 - // [9] phi from main::@1 main::@3 to main::@2 [phi:main::@1/main::@3->main::@2] - __b2_from___b1: - __b2_from___b3: + // [6] (byte) rpc#1 ← ++ (byte) rpc#4 -- vbuyy=_inc_vbuyy + iny jmp __b2 // main::@2 __b2: - jmp __b1 + // [7] (byte) key#1 ← *((const byte*) DC00) -- vbuxx=_deref_pbuc1 + ldx DC00 + // [8] (byte~) main::$1 ← (byte) key#1 & (byte) $1f -- vbuaa=vbuxx_band_vbuc1 + txa + and #$1f + // [9] if((byte) key#1!=(byte) 0) goto main::@1 -- vbuxx_neq_0_then_la1 + cpx #0 + bne __b1_from___b2 + jmp __b3 + // main::@3 + __b3: + // [10] if((byte~) main::$1==(byte) $1f) goto main::@2 -- vbuaa_eq_vbuc1_then_la1 + cmp #$1f + beq __b2 + jmp __b1_from___b3 } // File Data @@ -292,28 +351,29 @@ ASSEMBLER OPTIMIZATIONS Removing instruction jmp __b1 Removing instruction jmp __bend Removing instruction jmp __b1 -Removing instruction jmp __b3 Removing instruction jmp __b2 +Removing instruction jmp __b3 Succesful ASM optimization Pass5NextJumpElimination Replacing label __bbegin with __b1 -Replacing label __b2_from___b1 with __b2 +Replacing label __b1_from___b2 with __b1 +Replacing label __b1_from___b3 with __b1 Removing instruction __bbegin: Removing instruction __b1_from___bbegin: Removing instruction main_from___b1: Removing instruction __bend_from___b1: -Removing instruction __b2_from___b1: -Removing instruction __b2_from___b3: +Removing instruction __b1_from___b2: +Removing instruction __b1_from___b3: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction __bend: +Removing instruction __b1_from_main: Removing instruction __b3: 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 __b2 -Succesful ASM optimization Pass5DoubleJumpElimination +Removing instruction jmp __b1 +Succesful ASM optimization Pass5NextJumpElimination Removing instruction __b1: -Removing instruction __b2: Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE @@ -328,13 +388,17 @@ FINAL SYMBOL TABLE (label) main::@1 (label) main::@2 (label) main::@3 +(byte) rpc +(byte) rpc#1 reg byte y 42.6 +(byte) rpc#4 reg byte y 213.0 +reg byte y [ rpc#4 rpc#1 ] reg byte x [ key#1 ] reg byte a [ main::$1 ] FINAL ASSEMBLER -Score: 1730 +Score: 2040 // File Comments // Duplicate Loop Problem from Richard-William Loerakker @@ -354,25 +418,33 @@ Score: 1730 // @end // main main: { + // [5] phi from main to main::@1 [phi:main->main::@1] + // [5] phi (byte) rpc#4 = (byte) 0 [phi:main->main::@1#0] -- vbuyy=vbuc1 + ldy #0 + // [5] phi from main::@2 main::@3 to main::@1 [phi:main::@2/main::@3->main::@1] + // [5] phi (byte) rpc#4 = (byte) rpc#1 [phi:main::@2/main::@3->main::@1#0] -- register_copy // main::@1 __b1: + // rpc++; + // [6] (byte) rpc#1 ← ++ (byte) rpc#4 -- vbuyy=_inc_vbuyy + iny + // main::@2 + __b2: // key = *DC00 - // [5] (byte) key#1 ← *((const byte*) DC00) -- vbuxx=_deref_pbuc1 + // [7] (byte) key#1 ← *((const byte*) DC00) -- vbuxx=_deref_pbuc1 ldx DC00 // key & %00011111 - // [6] (byte~) main::$1 ← (byte) key#1 & (byte) $1f -- vbuaa=vbuxx_band_vbuc1 + // [8] (byte~) main::$1 ← (byte) key#1 & (byte) $1f -- vbuaa=vbuxx_band_vbuc1 txa and #$1f // while(key == 0 && ((key & %00011111) == %00011111)) - // [7] if((byte) key#1!=(byte) 0) goto main::@2 -- vbuxx_neq_0_then_la1 + // [9] if((byte) key#1!=(byte) 0) goto main::@1 -- vbuxx_neq_0_then_la1 cpx #0 bne __b1 // main::@3 - // [8] if((byte~) main::$1==(byte) $1f) goto main::@1 -- vbuaa_eq_vbuc1_then_la1 + // [10] if((byte~) main::$1==(byte) $1f) goto main::@2 -- vbuaa_eq_vbuc1_then_la1 cmp #$1f - beq __b1 - // [9] phi from main::@1 main::@3 to main::@2 [phi:main::@1/main::@3->main::@2] - // main::@2 + beq __b2 jmp __b1 } // File Data diff --git a/src/test/ref/duplicate-loop-problem.sym b/src/test/ref/duplicate-loop-problem.sym index 143b384c2..ae88e76e1 100644 --- a/src/test/ref/duplicate-loop-problem.sym +++ b/src/test/ref/duplicate-loop-problem.sym @@ -9,6 +9,10 @@ (label) main::@1 (label) main::@2 (label) main::@3 +(byte) rpc +(byte) rpc#1 reg byte y 42.6 +(byte) rpc#4 reg byte y 213.0 +reg byte y [ rpc#4 rpc#1 ] reg byte x [ key#1 ] reg byte a [ main::$1 ] diff --git a/src/test/ref/examples/nmisamples/nmisamples.log b/src/test/ref/examples/nmisamples/nmisamples.log index 793a91a28..668dc71f6 100644 --- a/src/test/ref/examples/nmisamples/nmisamples.log +++ b/src/test/ref/examples/nmisamples/nmisamples.log @@ -225,7 +225,7 @@ interrupt(HARDWARE_ALL)(void()) nmi() interrupt(HARDWARE_ALL)(void()) nmi2() (byte~) nmi2::$1 4.0 (byte~) nmi2::$2 4.0 -(byte*) sample loadstore 2.8 +(byte*) sample loadstore 1.9999999999999996 Initial phi equivalence classes Added variable sample to live range equivalence class [ sample ] @@ -449,7 +449,7 @@ Statement [9] *((const word*) CIA2_TIMER_A) ← (byte) $88 [ ] ( main:3 [ ] ) al Statement [10] *((const byte*) CIA2_INTERRUPT) ← (byte) $81 [ ] ( main:3 [ ] ) always clobbers reg byte a Statement [11] *((const byte*) CIA2_TIMER_A_CONTROL) ← (byte) 1 [ ] ( main:3 [ ] ) always clobbers reg byte a Statement asm { ldaCIA2_INTERRUPT } always clobbers reg byte a -Statement [16] (byte~) nmi2::$1 ← *((byte*) sample) >> (byte) 4 [ nmi2::$1 ] ( [ nmi2::$1 ] ) always clobbers reg byte a reg byte y +Statement [16] (byte~) nmi2::$1 ← *((byte*) sample) >> (byte) 4 [ sample nmi2::$1 ] ( [ sample nmi2::$1 ] ) always clobbers reg byte a reg byte y Statement [21] (byte*) sample ← (const byte*) SAMPLE [ ] ( [ ] ) always clobbers reg byte a Statement [22] *((const void()**) KERNEL_NMI) ← &interrupt(HARDWARE_ALL)(void()) nmi() [ ] ( [ ] ) always clobbers reg byte a Statement [24] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y @@ -465,7 +465,7 @@ Potential registers zp[1]:6 [ nmi::$1 ] : zp[1]:6 , reg byte a , reg byte x , re REGISTER UPLIFT SCOPES Uplift Scope [nmi2] 4: zp[1]:4 [ nmi2::$1 ] 4: zp[1]:5 [ nmi2::$2 ] Uplift Scope [nmi] 4: zp[1]:6 [ nmi::$1 ] -Uplift Scope [] 2.8: zp[2]:2 [ sample ] +Uplift Scope [] 2: zp[2]:2 [ sample ] Uplift Scope [main] Uplifting [nmi2] best 534 combination reg byte a [ nmi2::$1 ] reg byte a [ nmi2::$2 ] @@ -711,7 +711,7 @@ interrupt(HARDWARE_ALL)(void()) nmi2() (label) nmi2::@1 (label) nmi2::@2 (label) nmi2::@return -(byte*) sample loadstore zp[2]:2 2.8 +(byte*) sample loadstore zp[2]:2 1.9999999999999996 zp[2]:2 [ sample ] reg byte a [ nmi2::$1 ] diff --git a/src/test/ref/examples/nmisamples/nmisamples.sym b/src/test/ref/examples/nmisamples/nmisamples.sym index 166c81768..b44805c04 100644 --- a/src/test/ref/examples/nmisamples/nmisamples.sym +++ b/src/test/ref/examples/nmisamples/nmisamples.sym @@ -22,7 +22,7 @@ interrupt(HARDWARE_ALL)(void()) nmi2() (label) nmi2::@1 (label) nmi2::@2 (label) nmi2::@return -(byte*) sample loadstore zp[2]:2 2.8 +(byte*) sample loadstore zp[2]:2 1.9999999999999996 zp[2]:2 [ sample ] reg byte a [ nmi2::$1 ] diff --git a/src/test/ref/function-pointer-noarg-call-10.log b/src/test/ref/function-pointer-noarg-call-10.log index d87fab4a4..2c768f052 100644 --- a/src/test/ref/function-pointer-noarg-call-10.log +++ b/src/test/ref/function-pointer-noarg-call-10.log @@ -300,7 +300,7 @@ VARIABLE REGISTER WEIGHTS (byte) do10::i#1 16.5 (byte) do10::i#2 11.0 (void()) hello() -(byte) idx loadstore 5.0 +(byte) idx loadstore 4.375 (void()) main() (void()) print((byte*) print::msg) (byte) print::i @@ -509,14 +509,14 @@ Removing always clobbered register reg byte a as potential for zp[1]:4 [ do10::i Removing always clobbered register reg byte x as potential for zp[1]:4 [ do10::i#2 do10::i#1 ] Removing always clobbered register reg byte y as potential for zp[1]:4 [ do10::i#2 do10::i#1 ] Statement [14] if((byte) do10::i#1!=(byte) $a) goto do10::@1 [ do10::fn#3 do10::i#1 ] ( main:3::do10:6 [ do10::fn#3 do10::i#1 ] main:3::do10:8 [ do10::fn#3 do10::i#1 ] ) always clobbers reg byte a -Statement [21] *((const byte*) SCREEN + (byte) idx) ← *((byte*) print::msg#3 + (byte) print::i#2) [ print::msg#3 print::i#2 ] ( print:17 [ print::msg#3 print::i#2 ] print:27 [ print::msg#3 print::i#2 ] ) always clobbers reg byte a reg byte x +Statement [21] *((const byte*) SCREEN + (byte) idx) ← *((byte*) print::msg#3 + (byte) print::i#2) [ idx print::msg#3 print::i#2 ] ( print:17 [ idx print::msg#3 print::i#2 ] print:27 [ idx print::msg#3 print::i#2 ] ) always clobbers reg byte a reg byte x Removing always clobbered register reg byte a as potential for zp[1]:7 [ print::i#2 print::i#1 ] Removing always clobbered register reg byte x as potential for zp[1]:7 [ print::i#2 print::i#1 ] Statement [24] if((byte) 0!=*((byte*) print::msg#3 + (byte) print::i#1)) goto print::@1 [ idx print::msg#3 print::i#1 ] ( print:17 [ idx print::msg#3 print::i#1 ] print:27 [ idx print::msg#3 print::i#1 ] ) always clobbers reg byte a Statement [1] (byte) idx ← (byte) 0 [ ] ( [ ] ) always clobbers reg byte a Statement [12] call *((void()*) do10::fn#3) [ do10::fn#3 do10::i#2 ] ( main:3::do10:6 [ do10::fn#3 do10::i#2 ] main:3::do10:8 [ do10::fn#3 do10::i#2 ] ) always clobbers reg byte a reg byte x reg byte y Statement [14] if((byte) do10::i#1!=(byte) $a) goto do10::@1 [ do10::fn#3 do10::i#1 ] ( main:3::do10:6 [ do10::fn#3 do10::i#1 ] main:3::do10:8 [ do10::fn#3 do10::i#1 ] ) always clobbers reg byte a -Statement [21] *((const byte*) SCREEN + (byte) idx) ← *((byte*) print::msg#3 + (byte) print::i#2) [ print::msg#3 print::i#2 ] ( print:17 [ print::msg#3 print::i#2 ] print:27 [ print::msg#3 print::i#2 ] ) always clobbers reg byte a reg byte x +Statement [21] *((const byte*) SCREEN + (byte) idx) ← *((byte*) print::msg#3 + (byte) print::i#2) [ idx print::msg#3 print::i#2 ] ( print:17 [ idx print::msg#3 print::i#2 ] print:27 [ idx print::msg#3 print::i#2 ] ) always clobbers reg byte a reg byte x Statement [24] if((byte) 0!=*((byte*) print::msg#3 + (byte) print::i#1)) goto print::@1 [ idx print::msg#3 print::i#1 ] ( print:17 [ idx print::msg#3 print::i#1 ] print:27 [ idx print::msg#3 print::i#1 ] ) always clobbers reg byte a Potential registers zp[2]:2 [ do10::fn#3 ] : zp[2]:2 , Potential registers zp[1]:4 [ do10::i#2 do10::i#1 ] : zp[1]:4 , @@ -527,7 +527,7 @@ Potential registers zp[1]:8 [ idx ] : zp[1]:8 , REGISTER UPLIFT SCOPES Uplift Scope [print] 27.5: zp[1]:7 [ print::i#2 print::i#1 ] 3.67: zp[2]:5 [ print::msg#3 ] Uplift Scope [do10] 27.5: zp[1]:4 [ do10::i#2 do10::i#1 ] 0: zp[2]:2 [ do10::fn#3 ] -Uplift Scope [] 5: zp[1]:8 [ idx ] +Uplift Scope [] 4.38: zp[1]:8 [ idx ] Uplift Scope [hello] Uplift Scope [world] Uplift Scope [main] @@ -775,7 +775,7 @@ FINAL SYMBOL TABLE (void()) hello() (label) hello::@return (const byte*) hello::msg[(byte) 7] = (byte*) "hello " -(byte) idx loadstore zp[1]:7 5.0 +(byte) idx loadstore zp[1]:7 4.375 (void()) main() (label) main::@1 (label) main::@return diff --git a/src/test/ref/function-pointer-noarg-call-10.sym b/src/test/ref/function-pointer-noarg-call-10.sym index 257dcf1f2..2ebc6a55b 100644 --- a/src/test/ref/function-pointer-noarg-call-10.sym +++ b/src/test/ref/function-pointer-noarg-call-10.sym @@ -14,7 +14,7 @@ (void()) hello() (label) hello::@return (const byte*) hello::msg[(byte) 7] = (byte*) "hello " -(byte) idx loadstore zp[1]:7 5.0 +(byte) idx loadstore zp[1]:7 4.375 (void()) main() (label) main::@1 (label) main::@return diff --git a/src/test/ref/function-pointer-noarg-call-7.log b/src/test/ref/function-pointer-noarg-call-7.log index 98411cb48..842d3b693 100644 --- a/src/test/ref/function-pointer-noarg-call-7.log +++ b/src/test/ref/function-pointer-noarg-call-7.log @@ -225,7 +225,7 @@ VARIABLE REGISTER WEIGHTS (byte) hello::i (byte) hello::i#1 151.5 (byte) hello::i#2 101.0 -(byte) idx loadstore 21.78571428571429 +(byte) idx loadstore 20.333333333333336 (void()) main() Initial phi equivalence classes @@ -357,14 +357,14 @@ hello: { REGISTER UPLIFT POTENTIAL REGISTERS Statement [1] (byte) idx ← (byte) 0 [ idx ] ( [ idx ] ) always clobbers reg byte a -Statement [16] *((const byte*) SCREEN + (byte) idx) ← *((const byte*) msg + (byte) hello::i#2) [ hello::i#2 ] ( main:3::do10:6::hello:10 [ do10::i#2 hello::i#2 ] ) always clobbers reg byte a reg byte y +Statement [16] *((const byte*) SCREEN + (byte) idx) ← *((const byte*) msg + (byte) hello::i#2) [ idx hello::i#2 ] ( main:3::do10:6::hello:10 [ do10::i#2 idx hello::i#2 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte a as potential for zp[1]:2 [ do10::i#2 do10::i#1 ] Removing always clobbered register reg byte y as potential for zp[1]:2 [ do10::i#2 do10::i#1 ] Removing always clobbered register reg byte a as potential for zp[1]:3 [ hello::i#2 hello::i#1 ] Removing always clobbered register reg byte y as potential for zp[1]:3 [ hello::i#2 hello::i#1 ] Statement [19] if((byte) 0!=*((const byte*) msg + (byte) hello::i#1)) goto hello::@1 [ idx hello::i#1 ] ( main:3::do10:6::hello:10 [ do10::i#2 idx hello::i#1 ] ) always clobbers reg byte a Statement [1] (byte) idx ← (byte) 0 [ idx ] ( [ idx ] ) always clobbers reg byte a -Statement [16] *((const byte*) SCREEN + (byte) idx) ← *((const byte*) msg + (byte) hello::i#2) [ hello::i#2 ] ( main:3::do10:6::hello:10 [ do10::i#2 hello::i#2 ] ) always clobbers reg byte a reg byte y +Statement [16] *((const byte*) SCREEN + (byte) idx) ← *((const byte*) msg + (byte) hello::i#2) [ idx hello::i#2 ] ( main:3::do10:6::hello:10 [ do10::i#2 idx hello::i#2 ] ) always clobbers reg byte a reg byte y Statement [19] if((byte) 0!=*((const byte*) msg + (byte) hello::i#1)) goto hello::@1 [ idx hello::i#1 ] ( main:3::do10:6::hello:10 [ do10::i#2 idx hello::i#1 ] ) always clobbers reg byte a Potential registers zp[1]:2 [ do10::i#2 do10::i#1 ] : zp[1]:2 , reg byte x , Potential registers zp[1]:3 [ hello::i#2 hello::i#1 ] : zp[1]:3 , reg byte x , @@ -373,7 +373,7 @@ Potential registers zp[1]:4 [ idx ] : zp[1]:4 , REGISTER UPLIFT SCOPES Uplift Scope [hello] 252.5: zp[1]:3 [ hello::i#2 hello::i#1 ] Uplift Scope [do10] 27.5: zp[1]:2 [ do10::i#2 do10::i#1 ] -Uplift Scope [] 21.79: zp[1]:4 [ idx ] +Uplift Scope [] 20.33: zp[1]:4 [ idx ] Uplift Scope [main] Uplifting [hello] best 4295 combination reg byte x [ hello::i#2 hello::i#1 ] @@ -551,7 +551,7 @@ FINAL SYMBOL TABLE (byte) hello::i (byte) hello::i#1 reg byte x 151.5 (byte) hello::i#2 reg byte x 101.0 -(byte) idx loadstore zp[1]:3 21.78571428571429 +(byte) idx loadstore zp[1]:3 20.333333333333336 (void()) main() (label) main::@return (const byte*) msg[] = (byte*) "hello " diff --git a/src/test/ref/function-pointer-noarg-call-7.sym b/src/test/ref/function-pointer-noarg-call-7.sym index 71fe1058a..a93e24058 100644 --- a/src/test/ref/function-pointer-noarg-call-7.sym +++ b/src/test/ref/function-pointer-noarg-call-7.sym @@ -16,7 +16,7 @@ (byte) hello::i (byte) hello::i#1 reg byte x 151.5 (byte) hello::i#2 reg byte x 101.0 -(byte) idx loadstore zp[1]:3 21.78571428571429 +(byte) idx loadstore zp[1]:3 20.333333333333336 (void()) main() (label) main::@return (const byte*) msg[] = (byte*) "hello " diff --git a/src/test/ref/function-pointer-noarg-call-8.log b/src/test/ref/function-pointer-noarg-call-8.log index bc663d63c..f8567cde4 100644 --- a/src/test/ref/function-pointer-noarg-call-8.log +++ b/src/test/ref/function-pointer-noarg-call-8.log @@ -243,7 +243,7 @@ VARIABLE REGISTER WEIGHTS (byte) hello::i (byte) hello::i#1 151.5 (byte) hello::i#2 101.0 -(byte) idx loadstore 17.941176470588236 +(byte) idx loadstore 16.944444444444443 (void()) main() (byte*) msg loadstore 14.857142857142858 @@ -405,7 +405,7 @@ Statement [1] (byte*) msg ← (byte*) 0 [ ] ( [ ] ) always clobbers reg byte a Statement [2] (byte) idx ← (byte) 0 [ idx ] ( [ idx ] ) always clobbers reg byte a Statement [6] (byte*) msg ← (const byte*) msg1 [ msg idx ] ( main:4 [ msg idx ] ) always clobbers reg byte a Statement [8] (byte*) msg ← (const byte*) msg2 [ msg idx ] ( main:4 [ msg idx ] ) always clobbers reg byte a -Statement [19] *((const byte*) SCREEN + (byte) idx) ← *((byte*) msg + (byte) hello::i#2) [ msg hello::i#2 ] ( main:4::do10:7::hello:13 [ do10::i#2 msg hello::i#2 ] main:4::do10:9::hello:13 [ do10::i#2 msg hello::i#2 ] ) always clobbers reg byte a reg byte x +Statement [19] *((const byte*) SCREEN + (byte) idx) ← *((byte*) msg + (byte) hello::i#2) [ msg idx hello::i#2 ] ( main:4::do10:7::hello:13 [ do10::i#2 msg idx hello::i#2 ] main:4::do10:9::hello:13 [ do10::i#2 msg idx hello::i#2 ] ) always clobbers reg byte a reg byte x Removing always clobbered register reg byte a as potential for zp[1]:2 [ do10::i#2 do10::i#1 ] Removing always clobbered register reg byte x as potential for zp[1]:2 [ do10::i#2 do10::i#1 ] Removing always clobbered register reg byte a as potential for zp[1]:3 [ hello::i#2 hello::i#1 ] @@ -415,7 +415,7 @@ Statement [1] (byte*) msg ← (byte*) 0 [ ] ( [ ] ) always clobbers reg byte a Statement [2] (byte) idx ← (byte) 0 [ idx ] ( [ idx ] ) always clobbers reg byte a Statement [6] (byte*) msg ← (const byte*) msg1 [ msg idx ] ( main:4 [ msg idx ] ) always clobbers reg byte a Statement [8] (byte*) msg ← (const byte*) msg2 [ msg idx ] ( main:4 [ msg idx ] ) always clobbers reg byte a -Statement [19] *((const byte*) SCREEN + (byte) idx) ← *((byte*) msg + (byte) hello::i#2) [ msg hello::i#2 ] ( main:4::do10:7::hello:13 [ do10::i#2 msg hello::i#2 ] main:4::do10:9::hello:13 [ do10::i#2 msg hello::i#2 ] ) always clobbers reg byte a reg byte x +Statement [19] *((const byte*) SCREEN + (byte) idx) ← *((byte*) msg + (byte) hello::i#2) [ msg idx hello::i#2 ] ( main:4::do10:7::hello:13 [ do10::i#2 msg idx hello::i#2 ] main:4::do10:9::hello:13 [ do10::i#2 msg idx hello::i#2 ] ) always clobbers reg byte a reg byte x Statement [22] if((byte) 0!=*((byte*) msg + (byte) hello::i#1)) goto hello::@1 [ msg idx hello::i#1 ] ( main:4::do10:7::hello:13 [ do10::i#2 msg idx hello::i#1 ] main:4::do10:9::hello:13 [ do10::i#2 msg idx hello::i#1 ] ) always clobbers reg byte a Potential registers zp[1]:2 [ do10::i#2 do10::i#1 ] : zp[1]:2 , reg byte y , Potential registers zp[1]:3 [ hello::i#2 hello::i#1 ] : zp[1]:3 , reg byte y , @@ -424,7 +424,7 @@ Potential registers zp[1]:6 [ idx ] : zp[1]:6 , REGISTER UPLIFT SCOPES Uplift Scope [hello] 252.5: zp[1]:3 [ hello::i#2 hello::i#1 ] -Uplift Scope [] 17.94: zp[1]:6 [ idx ] 14.86: zp[2]:4 [ msg ] +Uplift Scope [] 16.94: zp[1]:6 [ idx ] 14.86: zp[2]:4 [ msg ] Uplift Scope [do10] 27.5: zp[1]:2 [ do10::i#2 do10::i#1 ] Uplift Scope [main] @@ -632,7 +632,7 @@ FINAL SYMBOL TABLE (byte) hello::i (byte) hello::i#1 reg byte y 151.5 (byte) hello::i#2 reg byte y 101.0 -(byte) idx loadstore zp[1]:5 17.941176470588236 +(byte) idx loadstore zp[1]:5 16.944444444444443 (void()) main() (label) main::@1 (label) main::@return diff --git a/src/test/ref/function-pointer-noarg-call-8.sym b/src/test/ref/function-pointer-noarg-call-8.sym index 3baf1607e..8a11fc974 100644 --- a/src/test/ref/function-pointer-noarg-call-8.sym +++ b/src/test/ref/function-pointer-noarg-call-8.sym @@ -16,7 +16,7 @@ (byte) hello::i (byte) hello::i#1 reg byte y 151.5 (byte) hello::i#2 reg byte y 101.0 -(byte) idx loadstore zp[1]:5 17.941176470588236 +(byte) idx loadstore zp[1]:5 16.944444444444443 (void()) main() (label) main::@1 (label) main::@return diff --git a/src/test/ref/function-pointer-noarg-call-9.log b/src/test/ref/function-pointer-noarg-call-9.log index a68fa1a2a..06599de0d 100644 --- a/src/test/ref/function-pointer-noarg-call-9.log +++ b/src/test/ref/function-pointer-noarg-call-9.log @@ -101,7 +101,7 @@ fn1::@return: scope:[fn1] from fn1 VARIABLE REGISTER WEIGHTS (void()) fn1() -(byte) idx loadstore 2.5 +(byte) idx loadstore 1.25 (void()) main() Initial phi equivalence classes @@ -173,13 +173,13 @@ fn1: { // File Data REGISTER UPLIFT POTENTIAL REGISTERS -Statement [0] (byte) idx ← (byte) 0 [ ] ( [ ] ) always clobbers reg byte a -Statement [6] *((const byte*) SCREEN + (byte) idx) ← (byte) 'a' [ ] ( main:2 [ ] ) always clobbers reg byte a reg byte y +Statement [0] (byte) idx ← (byte) 0 [ idx ] ( [ idx ] ) always clobbers reg byte a +Statement [6] *((const byte*) SCREEN + (byte) idx) ← (byte) 'a' [ idx ] ( main:2 [ idx ] ) always clobbers reg byte a reg byte y Statement [8] *((const byte*) SCREEN + (byte) idx) ← (byte) 'a' [ ] ( main:2 [ ] ) always clobbers reg byte a reg byte y Potential registers zp[1]:2 [ idx ] : zp[1]:2 , REGISTER UPLIFT SCOPES -Uplift Scope [] 2.5: zp[1]:2 [ idx ] +Uplift Scope [] 1.25: zp[1]:2 [ idx ] Uplift Scope [fn1] Uplift Scope [main] @@ -275,7 +275,7 @@ FINAL SYMBOL TABLE (const byte*) SCREEN = (byte*) 1024 (void()) fn1() (label) fn1::@return -(byte) idx loadstore zp[1]:2 2.5 +(byte) idx loadstore zp[1]:2 1.25 (void()) main() (label) main::@return diff --git a/src/test/ref/function-pointer-noarg-call-9.sym b/src/test/ref/function-pointer-noarg-call-9.sym index 26317869e..287f377f3 100644 --- a/src/test/ref/function-pointer-noarg-call-9.sym +++ b/src/test/ref/function-pointer-noarg-call-9.sym @@ -4,7 +4,7 @@ (const byte*) SCREEN = (byte*) 1024 (void()) fn1() (label) fn1::@return -(byte) idx loadstore zp[1]:2 2.5 +(byte) idx loadstore zp[1]:2 1.25 (void()) main() (label) main::@return diff --git a/src/test/ref/init-volatiles.log b/src/test/ref/init-volatiles.log index 4729931bb..72cba8bd6 100644 --- a/src/test/ref/init-volatiles.log +++ b/src/test/ref/init-volatiles.log @@ -98,7 +98,7 @@ main::@return: scope:[main] from main::@2 VARIABLE REGISTER WEIGHTS (void()) main() -(byte) x loadstore 37.0 +(byte) x loadstore 7.400000000000001 Initial phi equivalence classes Added variable x to live range equivalence class [ x ] @@ -161,13 +161,13 @@ main: { // File Data REGISTER UPLIFT POTENTIAL REGISTERS -Statement [0] (byte) x ← (byte) $c [ ] ( [ ] ) always clobbers reg byte a -Statement [6] if((byte) x<(byte) $32) goto main::@1 [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [0] (byte) x ← (byte) $c [ x ] ( [ x ] ) always clobbers reg byte a +Statement [6] if((byte) x<(byte) $32) goto main::@1 [ x ] ( main:2 [ x ] ) always clobbers reg byte a Statement [7] (byte) x ← (byte) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a Potential registers zp[1]:2 [ x ] : zp[1]:2 , REGISTER UPLIFT SCOPES -Uplift Scope [] 37: zp[1]:2 [ x ] +Uplift Scope [] 7.4: zp[1]:2 [ x ] Uplift Scope [main] Uplifting [] best 216 combination zp[1]:2 [ x ] @@ -255,7 +255,7 @@ FINAL SYMBOL TABLE (label) main::@1 (label) main::@2 (label) main::@return -(byte) x loadstore zp[1]:2 37.0 +(byte) x loadstore zp[1]:2 7.400000000000001 zp[1]:2 [ x ] diff --git a/src/test/ref/init-volatiles.sym b/src/test/ref/init-volatiles.sym index bab164ae7..e0f28c97c 100644 --- a/src/test/ref/init-volatiles.sym +++ b/src/test/ref/init-volatiles.sym @@ -5,6 +5,6 @@ (label) main::@1 (label) main::@2 (label) main::@return -(byte) x loadstore zp[1]:2 37.0 +(byte) x loadstore zp[1]:2 7.400000000000001 zp[1]:2 [ x ] diff --git a/src/test/ref/inline-asm-param.asm b/src/test/ref/inline-asm-param.asm index cd880d438..f0416aec1 100644 --- a/src/test/ref/inline-asm-param.asm +++ b/src/test/ref/inline-asm-param.asm @@ -3,12 +3,14 @@ .pc = $80d "Program" .label SCREEN = $400 main: { - ldx #0 + ldy #0 + ldx #'a' __b1: lda #'a' sta SCREEN inx - cpx #4 + iny + cpy #4 bne __b1 rts } diff --git a/src/test/ref/inline-asm-param.cfg b/src/test/ref/inline-asm-param.cfg index 60933c923..1508adf2e 100644 --- a/src/test/ref/inline-asm-param.cfg +++ b/src/test/ref/inline-asm-param.cfg @@ -14,10 +14,12 @@ main: scope:[main] from @1 to:main::@1 main::@1: scope:[main] from main main::@1 [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@1/(byte) main::i#1 ) + [5] (byte) main::a#2 ← phi( main/(byte) 'a' main::@1/(byte) main::a#1 ) asm { lda#'a' staSCREEN } - [7] (byte) main::i#1 ← ++ (byte) main::i#2 - [8] if((byte) main::i#1!=(byte) 4) goto main::@1 + [7] (byte) main::a#1 ← ++ (byte) main::a#2 + [8] (byte) main::i#1 ← ++ (byte) main::i#2 + [9] if((byte) main::i#1!=(byte) 4) goto main::@1 to:main::@return main::@return: scope:[main] from main::@1 - [9] return + [10] return to:@return diff --git a/src/test/ref/inline-asm-param.log b/src/test/ref/inline-asm-param.log index 28fb4b914..23f51cb2a 100644 --- a/src/test/ref/inline-asm-param.log +++ b/src/test/ref/inline-asm-param.log @@ -7,11 +7,14 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 + (byte) main::a#0 ← (byte) 'a' (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) + (byte) main::a#2 ← phi( main/(byte) main::a#0 main::@1/(byte) main::a#1 ) asm { lda#'a' staSCREEN } + (byte) main::a#1 ← ++ (byte) main::a#2 (byte) main::i#1 ← (byte) main::i#2 + rangenext(0,3) (bool~) main::$0 ← (byte) main::i#1 != rangelast(0,3) if((bool~) main::$0) goto main::@1 @@ -36,6 +39,10 @@ SYMBOL TABLE SSA (bool~) main::$0 (label) main::@1 (label) main::@return +(byte) main::a +(byte) main::a#0 +(byte) main::a#1 +(byte) main::a#2 (byte) main::i (byte) main::i#0 (byte) main::i#1 @@ -43,19 +50,22 @@ SYMBOL TABLE SSA Simplifying constant pointer cast (byte*) 1024 Successful SSA optimization PassNCastSimplification -Simple Condition (bool~) main::$0 [5] if((byte) main::i#1!=rangelast(0,3)) goto main::@1 +Simple Condition (bool~) main::$0 [7] if((byte) main::i#1!=rangelast(0,3)) goto main::@1 Successful SSA optimization Pass2ConditionalJumpSimplification +Constant (const byte) main::a#0 = 'a' Constant (const byte) main::i#0 = 0 Successful SSA optimization Pass2ConstantIdentification -Resolved ranged next value [3] main::i#1 ← ++ main::i#2 to ++ -Resolved ranged comparison value [5] if(main::i#1!=rangelast(0,3)) goto main::@1 to (number) 4 +Resolved ranged next value [5] main::i#1 ← ++ main::i#2 to ++ +Resolved ranged comparison value [7] if(main::i#1!=rangelast(0,3)) goto main::@1 to (number) 4 Adding number conversion cast (unumber) 4 in if((byte) main::i#1!=(number) 4) goto main::@1 Successful SSA optimization PassNAddNumberTypeConversions Simplifying constant integer cast 4 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 4 Successful SSA optimization PassNFinalizeNumberTypeConversions +Inlining constant with var siblings (const byte) main::a#0 Inlining constant with var siblings (const byte) main::i#0 +Constant inlined main::a#0 = (byte) 'a' Constant inlined main::i#0 = (byte) 0 Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@3(between main::@1 and main::@1) @@ -67,9 +77,10 @@ Adding NOP phi() at start of main CALL GRAPH Calls in [] to main:2 -Created 1 initial phi equivalence classes -Coalesced [11] main::i#3 ← main::i#1 -Coalesced down to 1 phi equivalence classes +Created 2 initial phi equivalence classes +Coalesced [12] main::a#3 ← main::a#1 +Coalesced [13] main::i#3 ← main::i#1 +Coalesced down to 2 phi equivalence classes Culled Empty Block (label) @2 Culled Empty Block (label) main::@3 Adding NOP phi() at start of @begin @@ -94,26 +105,34 @@ main: scope:[main] from @1 to:main::@1 main::@1: scope:[main] from main main::@1 [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@1/(byte) main::i#1 ) + [5] (byte) main::a#2 ← phi( main/(byte) 'a' main::@1/(byte) main::a#1 ) asm { lda#'a' staSCREEN } - [7] (byte) main::i#1 ← ++ (byte) main::i#2 - [8] if((byte) main::i#1!=(byte) 4) goto main::@1 + [7] (byte) main::a#1 ← ++ (byte) main::a#2 + [8] (byte) main::i#1 ← ++ (byte) main::i#2 + [9] if((byte) main::i#1!=(byte) 4) goto main::@1 to:main::@return main::@return: scope:[main] from main::@1 - [9] return + [10] return to:@return VARIABLE REGISTER WEIGHTS (void()) main() +(byte) main::a +(byte) main::a#1 7.333333333333333 +(byte) main::a#2 11.0 (byte) main::i (byte) main::i#1 16.5 -(byte) main::i#2 11.0 +(byte) main::i#2 7.333333333333333 Initial phi equivalence classes +[ main::a#2 main::a#1 ] [ main::i#2 main::i#1 ] Complete equivalence classes +[ main::a#2 main::a#1 ] [ main::i#2 main::i#1 ] -Allocated zp[1]:2 [ main::i#2 main::i#1 ] +Allocated zp[1]:2 [ main::a#2 main::a#1 ] +Allocated zp[1]:3 [ main::i#2 main::i#1 ] INITIAL ASM Target platform is c64basic / MOS6502X @@ -142,48 +161,57 @@ __bend_from___b1: __bend: // main main: { - .label i = 2 + .label a = 2 + .label i = 3 // [5] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 lda #0 sta.z i + // [5] phi (byte) main::a#2 = (byte) 'a' [phi:main->main::@1#1] -- vbuz1=vbuc1 + lda #'a' + sta.z a jmp __b1 // [5] phi from main::@1 to main::@1 [phi:main::@1->main::@1] __b1_from___b1: // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@1->main::@1#0] -- register_copy + // [5] phi (byte) main::a#2 = (byte) main::a#1 [phi:main::@1->main::@1#1] -- register_copy jmp __b1 // main::@1 __b1: // asm { lda#'a' staSCREEN } lda #'a' sta SCREEN - // [7] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 + // [7] (byte) main::a#1 ← ++ (byte) main::a#2 -- vbuz1=_inc_vbuz1 + inc.z a + // [8] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [8] if((byte) main::i#1!=(byte) 4) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 + // [9] if((byte) main::i#1!=(byte) 4) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 lda #4 cmp.z i bne __b1_from___b1 jmp __breturn // main::@return __breturn: - // [9] return + // [10] return rts } // File Data REGISTER UPLIFT POTENTIAL REGISTERS Statement asm { lda#'a' staSCREEN } always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::i#2 main::i#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::a#2 main::a#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:3 [ main::i#2 main::i#1 ] Statement asm { lda#'a' staSCREEN } always clobbers reg byte a -Potential registers zp[1]:2 [ main::i#2 main::i#1 ] : zp[1]:2 , reg byte x , reg byte y , +Potential registers zp[1]:2 [ main::a#2 main::a#1 ] : zp[1]:2 , reg byte x , reg byte y , +Potential registers zp[1]:3 [ main::i#2 main::i#1 ] : zp[1]:3 , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 27.5: zp[1]:2 [ main::i#2 main::i#1 ] +Uplift Scope [main] 23.83: zp[1]:3 [ main::i#2 main::i#1 ] 18.33: zp[1]:2 [ main::a#2 main::a#1 ] Uplift Scope [] -Uplifting [main] best 253 combination reg byte x [ main::i#2 main::i#1 ] -Uplifting [] best 253 combination +Uplifting [main] best 293 combination reg byte y [ main::i#2 main::i#1 ] reg byte x [ main::a#2 main::a#1 ] +Uplifting [] best 293 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -213,27 +241,32 @@ __bend: main: { // [5] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 - ldx #0 + // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuyy=vbuc1 + ldy #0 + // [5] phi (byte) main::a#2 = (byte) 'a' [phi:main->main::@1#1] -- vbuxx=vbuc1 + ldx #'a' jmp __b1 // [5] phi from main::@1 to main::@1 [phi:main::@1->main::@1] __b1_from___b1: // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@1->main::@1#0] -- register_copy + // [5] phi (byte) main::a#2 = (byte) main::a#1 [phi:main::@1->main::@1#1] -- register_copy jmp __b1 // main::@1 __b1: // asm { lda#'a' staSCREEN } lda #'a' sta SCREEN - // [7] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx + // [7] (byte) main::a#1 ← ++ (byte) main::a#2 -- vbuxx=_inc_vbuxx inx - // [8] if((byte) main::i#1!=(byte) 4) goto main::@1 -- vbuxx_neq_vbuc1_then_la1 - cpx #4 + // [8] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuyy=_inc_vbuyy + iny + // [9] if((byte) main::i#1!=(byte) 4) goto main::@1 -- vbuyy_neq_vbuc1_then_la1 + cpy #4 bne __b1_from___b1 jmp __breturn // main::@return __breturn: - // [9] return + // [10] return rts } // File Data @@ -272,15 +305,19 @@ FINAL SYMBOL TABLE (void()) main() (label) main::@1 (label) main::@return +(byte) main::a +(byte) main::a#1 reg byte x 7.333333333333333 +(byte) main::a#2 reg byte x 11.0 (byte) main::i -(byte) main::i#1 reg byte x 16.5 -(byte) main::i#2 reg byte x 11.0 +(byte) main::i#1 reg byte y 16.5 +(byte) main::i#2 reg byte y 7.333333333333333 -reg byte x [ main::i#2 main::i#1 ] +reg byte x [ main::a#2 main::a#1 ] +reg byte y [ main::i#2 main::i#1 ] FINAL ASSEMBLER -Score: 151 +Score: 191 // File Comments // Upstart @@ -299,25 +336,31 @@ Score: 151 // main main: { // [5] phi from main to main::@1 [phi:main->main::@1] - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 - ldx #0 + // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuyy=vbuc1 + ldy #0 + // [5] phi (byte) main::a#2 = (byte) 'a' [phi:main->main::@1#1] -- vbuxx=vbuc1 + ldx #'a' // [5] phi from main::@1 to main::@1 [phi:main::@1->main::@1] // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@1->main::@1#0] -- register_copy + // [5] phi (byte) main::a#2 = (byte) main::a#1 [phi:main::@1->main::@1#1] -- register_copy // main::@1 __b1: // asm // asm { lda#'a' staSCREEN } lda #'a' sta SCREEN - // for( byte i:0..3) - // [7] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx + // a++; + // [7] (byte) main::a#1 ← ++ (byte) main::a#2 -- vbuxx=_inc_vbuxx inx - // [8] if((byte) main::i#1!=(byte) 4) goto main::@1 -- vbuxx_neq_vbuc1_then_la1 - cpx #4 + // for( byte i:0..3) + // [8] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuyy=_inc_vbuyy + iny + // [9] if((byte) main::i#1!=(byte) 4) goto main::@1 -- vbuyy_neq_vbuc1_then_la1 + cpy #4 bne __b1 // main::@return // } - // [9] return + // [10] return rts } // File Data diff --git a/src/test/ref/inline-asm-param.sym b/src/test/ref/inline-asm-param.sym index 7a2f2552d..8409fdea0 100644 --- a/src/test/ref/inline-asm-param.sym +++ b/src/test/ref/inline-asm-param.sym @@ -5,8 +5,12 @@ (void()) main() (label) main::@1 (label) main::@return +(byte) main::a +(byte) main::a#1 reg byte x 7.333333333333333 +(byte) main::a#2 reg byte x 11.0 (byte) main::i -(byte) main::i#1 reg byte x 16.5 -(byte) main::i#2 reg byte x 11.0 +(byte) main::i#1 reg byte y 16.5 +(byte) main::i#2 reg byte y 7.333333333333333 -reg byte x [ main::i#2 main::i#1 ] +reg byte x [ main::a#2 main::a#1 ] +reg byte y [ main::i#2 main::i#1 ] diff --git a/src/test/ref/interrupt-volatile-reuse-problem1.log b/src/test/ref/interrupt-volatile-reuse-problem1.log index 043565e7c..b5e364d1a 100644 --- a/src/test/ref/interrupt-volatile-reuse-problem1.log +++ b/src/test/ref/interrupt-volatile-reuse-problem1.log @@ -106,8 +106,8 @@ irq::@return: scope:[irq] from irq VARIABLE REGISTER WEIGHTS -(byte) col1 loadstore 80.0 -(byte) col2 loadstore 4.0 +(byte) col1 loadstore 8.0 +(byte) col2 loadstore 2.6666666666666665 interrupt(KERNEL_MIN)(void()) irq() (void()) main() @@ -191,13 +191,13 @@ REGISTER UPLIFT POTENTIAL REGISTERS Statement [0] (byte) col1 ← (byte) 0 [ ] ( [ ] ) always clobbers reg byte a Statement [1] (byte) col2 ← (byte) 8 [ ] ( [ ] ) always clobbers reg byte a Statement [5] *((const void()**) KERNEL_IRQ) ← &interrupt(KERNEL_MIN)(void()) irq() [ ] ( main:3 [ ] ) always clobbers reg byte a -Statement [7] *((const byte*) SCREEN+(byte) $28) ← (byte) col1 [ col2 ] ( [ col2 ] ) always clobbers reg byte a -Statement [9] *((const byte*) SCREEN+(byte) $29) ← (byte) col2 [ ] ( [ ] ) always clobbers reg byte a +Statement [7] *((const byte*) SCREEN+(byte) $28) ← (byte) col1 [ col1 col2 ] ( [ col1 col2 ] ) always clobbers reg byte a +Statement [9] *((const byte*) SCREEN+(byte) $29) ← (byte) col2 [ col2 ] ( [ col2 ] ) always clobbers reg byte a Potential registers zp[1]:2 [ col1 ] : zp[1]:2 , Potential registers zp[1]:3 [ col2 ] : zp[1]:3 , REGISTER UPLIFT SCOPES -Uplift Scope [] 80: zp[1]:2 [ col1 ] 4: zp[1]:3 [ col2 ] +Uplift Scope [] 8: zp[1]:2 [ col1 ] 2.67: zp[1]:3 [ col2 ] Uplift Scope [main] Uplift Scope [irq] @@ -298,8 +298,8 @@ FINAL SYMBOL TABLE (label) @end (const void()**) KERNEL_IRQ = (void()**) 788 (const byte*) SCREEN = (byte*) 1024 -(byte) col1 loadstore zp[1]:2 80.0 -(byte) col2 loadstore zp[1]:3 4.0 +(byte) col1 loadstore zp[1]:2 8.0 +(byte) col2 loadstore zp[1]:3 2.6666666666666665 interrupt(KERNEL_MIN)(void()) irq() (label) irq::@return (void()) main() diff --git a/src/test/ref/interrupt-volatile-reuse-problem1.sym b/src/test/ref/interrupt-volatile-reuse-problem1.sym index ac65f681b..2ce092335 100644 --- a/src/test/ref/interrupt-volatile-reuse-problem1.sym +++ b/src/test/ref/interrupt-volatile-reuse-problem1.sym @@ -3,8 +3,8 @@ (label) @end (const void()**) KERNEL_IRQ = (void()**) 788 (const byte*) SCREEN = (byte*) 1024 -(byte) col1 loadstore zp[1]:2 80.0 -(byte) col2 loadstore zp[1]:3 4.0 +(byte) col1 loadstore zp[1]:2 8.0 +(byte) col2 loadstore zp[1]:3 2.6666666666666665 interrupt(KERNEL_MIN)(void()) irq() (label) irq::@return (void()) main() diff --git a/src/test/ref/interrupt-volatile-reuse-problem2.log b/src/test/ref/interrupt-volatile-reuse-problem2.log index 01d07c86e..98751ffb7 100644 --- a/src/test/ref/interrupt-volatile-reuse-problem2.log +++ b/src/test/ref/interrupt-volatile-reuse-problem2.log @@ -263,7 +263,7 @@ irq::@return: scope:[irq] from irq VARIABLE REGISTER WEIGHTS -(byte) col1 loadstore 4.0 +(byte) col1 loadstore 2.6666666666666665 interrupt(KERNEL_MIN)(void()) irq() (void()) main() (byte~) main::$0 20002.0 @@ -444,13 +444,13 @@ Removing always clobbered register reg byte a as potential for zp[1]:3 [ main::y Removing always clobbered register reg byte a as potential for zp[1]:4 [ main::a#2 main::a#1 ] Statement [17] *((const byte*) IRQ_STATUS) ← (byte) 1 [ col1 ] ( [ col1 ] ) always clobbers reg byte a Statement asm { lda$dc0d } always clobbers reg byte a -Statement [19] *((const byte*) SCREEN+(byte) $28) ← (byte) col1 [ ] ( [ ] ) always clobbers reg byte a +Statement [19] *((const byte*) SCREEN+(byte) $28) ← (byte) col1 [ col1 ] ( [ col1 ] ) always clobbers reg byte a Statement [0] (byte) col1 ← (byte) 0 [ ] ( [ ] ) always clobbers reg byte a Statement [4] *((const void()**) KERNEL_IRQ) ← &interrupt(KERNEL_MIN)(void()) irq() [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [8] (byte~) main::$0 ← (byte) main::a#2 + (byte) main::y#4 [ main::x#6 main::y#4 main::a#2 main::$0 ] ( main:2 [ main::x#6 main::y#4 main::a#2 main::$0 ] ) always clobbers reg byte a Statement [17] *((const byte*) IRQ_STATUS) ← (byte) 1 [ col1 ] ( [ col1 ] ) always clobbers reg byte a Statement asm { lda$dc0d } always clobbers reg byte a -Statement [19] *((const byte*) SCREEN+(byte) $28) ← (byte) col1 [ ] ( [ ] ) always clobbers reg byte a +Statement [19] *((const byte*) SCREEN+(byte) $28) ← (byte) col1 [ col1 ] ( [ col1 ] ) always clobbers reg byte a Potential registers zp[1]:2 [ main::x#6 main::x#1 ] : zp[1]:2 , reg byte x , reg byte y , Potential registers zp[1]:3 [ main::y#4 main::y#1 ] : zp[1]:3 , reg byte x , reg byte y , Potential registers zp[1]:4 [ main::a#2 main::a#1 ] : zp[1]:4 , reg byte x , reg byte y , @@ -459,7 +459,7 @@ Potential registers zp[1]:6 [ main::$0 ] : zp[1]:6 , reg byte a , reg byte x , r REGISTER UPLIFT SCOPES Uplift Scope [main] 25,002.5: zp[1]:4 [ main::a#2 main::a#1 ] 20,002: zp[1]:6 [ main::$0 ] 3,502: zp[1]:3 [ main::y#4 main::y#1 ] 1,194.67: zp[1]:2 [ main::x#6 main::x#1 ] -Uplift Scope [] 4: zp[1]:5 [ col1 ] +Uplift Scope [] 2.67: zp[1]:5 [ col1 ] Uplift Scope [irq] Uplifting [main] best 323337 combination reg byte y [ main::a#2 main::a#1 ] reg byte a [ main::$0 ] zp[1]:3 [ main::y#4 main::y#1 ] reg byte x [ main::x#6 main::x#1 ] @@ -653,7 +653,7 @@ FINAL SYMBOL TABLE (const byte*) IRQ_STATUS = (byte*) 53273 (const void()**) KERNEL_IRQ = (void()**) 788 (const byte*) SCREEN = (byte*) 1024 -(byte) col1 loadstore zp[1]:3 4.0 +(byte) col1 loadstore zp[1]:3 2.6666666666666665 interrupt(KERNEL_MIN)(void()) irq() (label) irq::@return (void()) main() diff --git a/src/test/ref/interrupt-volatile-reuse-problem2.sym b/src/test/ref/interrupt-volatile-reuse-problem2.sym index b4341e1e9..1791400ab 100644 --- a/src/test/ref/interrupt-volatile-reuse-problem2.sym +++ b/src/test/ref/interrupt-volatile-reuse-problem2.sym @@ -4,7 +4,7 @@ (const byte*) IRQ_STATUS = (byte*) 53273 (const void()**) KERNEL_IRQ = (void()**) 788 (const byte*) SCREEN = (byte*) 1024 -(byte) col1 loadstore zp[1]:3 4.0 +(byte) col1 loadstore zp[1]:3 2.6666666666666665 interrupt(KERNEL_MIN)(void()) irq() (label) irq::@return (void()) main() diff --git a/src/test/ref/irq-idx-problem.log b/src/test/ref/irq-idx-problem.log index 148a1ed8b..3c94e80b2 100644 --- a/src/test/ref/irq-idx-problem.log +++ b/src/test/ref/irq-idx-problem.log @@ -280,7 +280,7 @@ table_driven_irq::@2: scope:[table_driven_irq] from table_driven_irq::@1 VARIABLE REGISTER WEIGHTS -(byte) irq_idx loadstore 6.857142857142857 +(byte) irq_idx loadstore 6.0 (void()) main() interrupt(KERNEL_MIN)(void()) table_driven_irq() (byte) table_driven_irq::idx @@ -469,7 +469,7 @@ Statement [9] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER [ ] ( main Statement [10] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER [ ] ( main:3 [ ] ) always clobbers reg byte a Statement [11] *((const void()**) KERNEL_IRQ) ← &interrupt(KERNEL_MIN)(void()) table_driven_irq() [ ] ( main:3 [ ] ) always clobbers reg byte a Statement [15] (byte) table_driven_irq::idx#0 ← *((const byte*) IRQ_CHANGE_IDX + (byte) irq_idx) [ irq_idx table_driven_irq::idx#0 ] ( [ irq_idx table_driven_irq::idx#0 ] ) always clobbers reg byte y -Statement [16] (byte) table_driven_irq::val#0 ← *((const byte*) IRQ_CHANGE_VAL + (byte) irq_idx) [ table_driven_irq::idx#0 table_driven_irq::val#0 ] ( [ table_driven_irq::idx#0 table_driven_irq::val#0 ] ) always clobbers reg byte y +Statement [16] (byte) table_driven_irq::val#0 ← *((const byte*) IRQ_CHANGE_VAL + (byte) irq_idx) [ irq_idx table_driven_irq::idx#0 table_driven_irq::val#0 ] ( [ irq_idx table_driven_irq::idx#0 table_driven_irq::val#0 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp[1]:3 [ table_driven_irq::idx#0 ] Statement [20] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER [ table_driven_irq::val#0 ] ( [ table_driven_irq::val#0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:4 [ table_driven_irq::val#0 ] @@ -484,7 +484,7 @@ Statement [9] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER [ ] ( main Statement [10] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER [ ] ( main:3 [ ] ) always clobbers reg byte a Statement [11] *((const void()**) KERNEL_IRQ) ← &interrupt(KERNEL_MIN)(void()) table_driven_irq() [ ] ( main:3 [ ] ) always clobbers reg byte a Statement [15] (byte) table_driven_irq::idx#0 ← *((const byte*) IRQ_CHANGE_IDX + (byte) irq_idx) [ irq_idx table_driven_irq::idx#0 ] ( [ irq_idx table_driven_irq::idx#0 ] ) always clobbers reg byte y -Statement [16] (byte) table_driven_irq::val#0 ← *((const byte*) IRQ_CHANGE_VAL + (byte) irq_idx) [ table_driven_irq::idx#0 table_driven_irq::val#0 ] ( [ table_driven_irq::idx#0 table_driven_irq::val#0 ] ) always clobbers reg byte y +Statement [16] (byte) table_driven_irq::val#0 ← *((const byte*) IRQ_CHANGE_VAL + (byte) irq_idx) [ irq_idx table_driven_irq::idx#0 table_driven_irq::val#0 ] ( [ irq_idx table_driven_irq::idx#0 table_driven_irq::val#0 ] ) always clobbers reg byte y Statement [20] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER [ table_driven_irq::val#0 ] ( [ table_driven_irq::val#0 ] ) always clobbers reg byte a Statement [23] (byte) irq_idx ← (byte) 0 [ ] ( [ ] ) always clobbers reg byte a Statement [25] *((const byte*) SCREEN+-(const byte) VIC_SIZE+(word) $3f8 + (byte) table_driven_irq::idx#0) ← (byte) table_driven_irq::val#0 [ irq_idx ] ( [ irq_idx ] ) always clobbers reg byte a @@ -495,7 +495,7 @@ Potential registers zp[1]:4 [ table_driven_irq::val#0 ] : zp[1]:4 , reg byte x , REGISTER UPLIFT SCOPES Uplift Scope [table_driven_irq] 11: zp[1]:3 [ table_driven_irq::idx#0 ] 6.17: zp[1]:4 [ table_driven_irq::val#0 ] -Uplift Scope [] 6.86: zp[1]:2 [ irq_idx ] +Uplift Scope [] 6: zp[1]:2 [ irq_idx ] Uplift Scope [main] Uplifting [table_driven_irq] best 762 combination reg byte a [ table_driven_irq::idx#0 ] reg byte x [ table_driven_irq::val#0 ] @@ -708,7 +708,7 @@ FINAL SYMBOL TABLE (const byte*) VIC_BASE = (byte*) 53248 (const byte*) VIC_CONTROL = (byte*) 53265 (const byte) VIC_SIZE = (byte) $30 -(byte) irq_idx loadstore zp[1]:2 6.857142857142857 +(byte) irq_idx loadstore zp[1]:2 6.0 (void()) main() (label) main::@return interrupt(KERNEL_MIN)(void()) table_driven_irq() diff --git a/src/test/ref/irq-idx-problem.sym b/src/test/ref/irq-idx-problem.sym index 2f0159660..25729424a 100644 --- a/src/test/ref/irq-idx-problem.sym +++ b/src/test/ref/irq-idx-problem.sym @@ -16,7 +16,7 @@ (const byte*) VIC_BASE = (byte*) 53248 (const byte*) VIC_CONTROL = (byte*) 53265 (const byte) VIC_SIZE = (byte) $30 -(byte) irq_idx loadstore zp[1]:2 6.857142857142857 +(byte) irq_idx loadstore zp[1]:2 6.0 (void()) main() (label) main::@return interrupt(KERNEL_MIN)(void()) table_driven_irq() diff --git a/src/test/ref/longbranch-interrupt-problem.log b/src/test/ref/longbranch-interrupt-problem.log index 01f362a71..4fd2b8ad7 100644 --- a/src/test/ref/longbranch-interrupt-problem.log +++ b/src/test/ref/longbranch-interrupt-problem.log @@ -163,7 +163,7 @@ irq::@return: scope:[irq] from irq irq::@1 VARIABLE REGISTER WEIGHTS -(byte) col loadstore 17.428571428571427 +(byte) col loadstore 15.25 interrupt(KERNEL_MIN)(void()) irq() (void()) main() @@ -256,11 +256,11 @@ Statement [5] if((byte) col<(byte) $a+(byte) 1) goto main::@1 [ col ] ( main:2 [ Statement [6] (byte) col ← (byte) 0 [ col ] ( main:2 [ col ] ) always clobbers reg byte a Statement asm { lda$dc0d } always clobbers reg byte a Statement [8] *((const byte*) BGCOL) ← (byte) col [ col ] ( [ col ] ) always clobbers reg byte a -Statement [9] if((byte) col==(byte) 0) goto irq::@return [ ] ( [ ] ) always clobbers reg byte a +Statement [9] if((byte) col==(byte) 0) goto irq::@return [ col ] ( [ col ] ) always clobbers reg byte a Potential registers zp[1]:2 [ col ] : zp[1]:2 , REGISTER UPLIFT SCOPES -Uplift Scope [] 17.43: zp[1]:2 [ col ] +Uplift Scope [] 15.25: zp[1]:2 [ col ] Uplift Scope [main] Uplift Scope [irq] @@ -375,7 +375,7 @@ FINAL SYMBOL TABLE (label) @end (const byte*) BGCOL = (byte*) 53280 (const void()**) KERNEL_IRQ = (void()**) 788 -(byte) col loadstore zp[1]:2 17.428571428571427 +(byte) col loadstore zp[1]:2 15.25 interrupt(KERNEL_MIN)(void()) irq() (label) irq::@1 (label) irq::@return diff --git a/src/test/ref/longbranch-interrupt-problem.sym b/src/test/ref/longbranch-interrupt-problem.sym index f230c190c..6fb5323e4 100644 --- a/src/test/ref/longbranch-interrupt-problem.sym +++ b/src/test/ref/longbranch-interrupt-problem.sym @@ -3,7 +3,7 @@ (label) @end (const byte*) BGCOL = (byte*) 53280 (const void()**) KERNEL_IRQ = (void()**) 788 -(byte) col loadstore zp[1]:2 17.428571428571427 +(byte) col loadstore zp[1]:2 15.25 interrupt(KERNEL_MIN)(void()) irq() (label) irq::@1 (label) irq::@return diff --git a/src/test/ref/ma_coalesce_problem.asm b/src/test/ref/ma_coalesce_problem.asm new file mode 100644 index 000000000..7097ff172 --- /dev/null +++ b/src/test/ref/ma_coalesce_problem.asm @@ -0,0 +1,40 @@ +// Demonstrates problem with __ma coalescing +// c1a is erroneously zp-coalesced with c1A +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" + .label SCREEN = $400 +main: { + __b1: + lda c1A + sta c1a + lda #0 + sta i + __b2: + lda i + cmp #$28 + bcc __b3 + lax c1A + axs #-[3] + stx c1A + jmp __b1 + __b3: + ldy c1a + lda SINTABLE,y + ldy i + sta SCREEN,y + lax c1a + axs #-[4] + stx c1a + inc i + jmp __b2 + c1a: .byte 0 + i: .byte 0 +} + .align $100 +SINTABLE: +.for(var i=0;i<$100;i++) + .byte round(127.5+127.5*sin(2*PI*i/256)) + + // Plasma state variables + c1A: .byte 0 diff --git a/src/test/ref/ma_coalesce_problem.cfg b/src/test/ref/ma_coalesce_problem.cfg new file mode 100644 index 000000000..5cf437f09 --- /dev/null +++ b/src/test/ref/ma_coalesce_problem.cfg @@ -0,0 +1,29 @@ +@begin: scope:[] from + [0] phi() + to:@1 +@1: scope:[] from @begin + [1] phi() + [2] call main + to:@end +@end: scope:[] from @1 + [3] phi() + +(void()) main() +main: scope:[main] from @1 + [4] phi() + to:main::@1 +main::@1: scope:[main] from main main::@4 + [5] (byte) main::c1a ← (byte) c1A + [6] (byte) main::i ← (byte) 0 + to:main::@2 +main::@2: scope:[main] from main::@1 main::@3 + [7] if((byte) main::i<(byte) $28) goto main::@3 + to:main::@4 +main::@4: scope:[main] from main::@2 + [8] (byte) c1A ← (byte) c1A + (byte) 3 + to:main::@1 +main::@3: scope:[main] from main::@2 + [9] *((const byte*) SCREEN + (byte) main::i) ← *((const byte*) SINTABLE + (byte) main::c1a) + [10] (byte) main::c1a ← (byte) main::c1a + (byte) 4 + [11] (byte) main::i ← ++ (byte) main::i + to:main::@2 diff --git a/src/test/ref/ma_coalesce_problem.log b/src/test/ref/ma_coalesce_problem.log new file mode 100644 index 000000000..977f91313 --- /dev/null +++ b/src/test/ref/ma_coalesce_problem.log @@ -0,0 +1,456 @@ +Resolved forward reference SINTABLE to (const byte*) SINTABLE +Culled Empty Block (label) main::@11 +Culled Empty Block (label) main::@3 +Culled Empty Block (label) main::@12 +Culled Empty Block (label) main::@7 +Culled Empty Block (label) main::@8 +Culled Empty Block (label) main::@9 +Culled Empty Block (label) main::@10 + +CONTROL FLOW GRAPH SSA +@begin: scope:[] from + to:@1 + +(void()) main() +main: scope:[main] from @1 + to:main::@1 +main::@1: scope:[main] from main main::@6 + if(true) goto main::@2 + to:main::@return +main::@2: scope:[main] from main::@1 + (byte) main::c1a ← (byte) c1A + (byte) main::i ← (byte) 0 + to:main::@4 +main::@4: scope:[main] from main::@2 main::@5 + (bool~) main::$0 ← (byte) main::i < (number) $28 + if((bool~) main::$0) goto main::@5 + to:main::@6 +main::@5: scope:[main] from main::@4 + *((const byte*) SCREEN + (byte) main::i) ← *((const byte*) SINTABLE + (byte) main::c1a) + (byte) main::c1a ← (byte) main::c1a + (number) 4 + (byte) main::i ← ++ (byte) main::i + to:main::@4 +main::@6: scope:[main] from main::@4 + (byte) c1A ← (byte) c1A + (number) 3 + to:main::@1 +main::@return: scope:[main] from main::@1 + 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 +(const byte*) SCREEN = (byte*)(number) $400 +(const byte*) SINTABLE[(number) $100] = kickasm {{ .for(var i=0;i<$100;i++) + .byte round(127.5+127.5*sin(2*PI*i/256)) + }} +(byte) c1A loadstore = (byte) 0 +(void()) main() +(bool~) main::$0 +(label) main::@1 +(label) main::@2 +(label) main::@4 +(label) main::@5 +(label) main::@6 +(label) main::@return +(byte) main::c1a loadstore +(byte) main::i loadstore + +Adding number conversion cast (unumber) $28 in (bool~) main::$0 ← (byte) main::i < (number) $28 +Adding number conversion cast (unumber) 4 in (byte) main::c1a ← (byte) main::c1a + (number) 4 +Adding number conversion cast (unumber) 3 in (byte) c1A ← (byte) c1A + (number) 3 +Successful SSA optimization PassNAddNumberTypeConversions +Simplifying constant pointer cast (byte*) 1024 +Simplifying constant integer cast $28 +Simplifying constant integer cast 4 +Simplifying constant integer cast 3 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (byte) $28 +Finalized unsigned number type (byte) 4 +Finalized unsigned number type (byte) 3 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Simple Condition (bool~) main::$0 [4] if((byte) main::i<(byte) $28) goto main::@5 +Successful SSA optimization Pass2ConditionalJumpSimplification +if() condition always true - replacing block destination [0] if(true) goto main::@2 +Successful SSA optimization Pass2ConstantIfs +Removing unused block main::@return +Successful SSA optimization Pass2EliminateUnusedBlocks +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 +Adding NOP phi() at start of main::@1 +CALL GRAPH +Calls in [] to main:2 + +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes +Culled Empty Block (label) @2 +Culled Empty Block (label) main::@1 +Renumbering block main::@2 to main::@1 +Renumbering block main::@4 to main::@2 +Renumbering block main::@5 to main::@3 +Renumbering block main::@6 to main::@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() + +(void()) main() +main: scope:[main] from @1 + [4] phi() + to:main::@1 +main::@1: scope:[main] from main main::@4 + [5] (byte) main::c1a ← (byte) c1A + [6] (byte) main::i ← (byte) 0 + to:main::@2 +main::@2: scope:[main] from main::@1 main::@3 + [7] if((byte) main::i<(byte) $28) goto main::@3 + to:main::@4 +main::@4: scope:[main] from main::@2 + [8] (byte) c1A ← (byte) c1A + (byte) 3 + to:main::@1 +main::@3: scope:[main] from main::@2 + [9] *((const byte*) SCREEN + (byte) main::i) ← *((const byte*) SINTABLE + (byte) main::c1a) + [10] (byte) main::c1a ← (byte) main::c1a + (byte) 4 + [11] (byte) main::i ← ++ (byte) main::i + to:main::@2 + + +VARIABLE REGISTER WEIGHTS +(byte) c1A loadstore 3.3000000000000003 = (byte) 0 +(void()) main() +(byte) main::c1a loadstore 52.33333333333333 +(byte) main::i loadstore 83.0 + +Initial phi equivalence classes +Added variable main::c1a to live range equivalence class [ main::c1a ] +Added variable main::i to live range equivalence class [ main::i ] +Added variable c1A to live range equivalence class [ c1A ] +Complete equivalence classes +[ main::c1a ] +[ main::i ] +[ c1A ] +Allocated mem[1] [ main::c1a ] +Allocated mem[1] [ main::i ] +Allocated mem[1] [ c1A ] + +INITIAL ASM +Target platform is c64basic / MOS6502X + // File Comments +// Demonstrates problem with __ma coalescing +// c1a is erroneously zp-coalesced with c1A + // 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: { + jmp __b1 + // main::@1 + __b1: + // [5] (byte) main::c1a ← (byte) c1A -- vbum1=vbum2 + lda c1A + sta c1a + // [6] (byte) main::i ← (byte) 0 -- vbum1=vbuc1 + lda #0 + sta i + jmp __b2 + // main::@2 + __b2: + // [7] if((byte) main::i<(byte) $28) goto main::@3 -- vbum1_lt_vbuc1_then_la1 + lda i + cmp #$28 + bcc __b3 + jmp __b4 + // main::@4 + __b4: + // [8] (byte) c1A ← (byte) c1A + (byte) 3 -- vbum1=vbum1_plus_vbuc1 + lax c1A + axs #-[3] + stx c1A + jmp __b1 + // main::@3 + __b3: + // [9] *((const byte*) SCREEN + (byte) main::i) ← *((const byte*) SINTABLE + (byte) main::c1a) -- pbuc1_derefidx_vbum1=pbuc2_derefidx_vbum2 + ldy c1a + lda SINTABLE,y + ldy i + sta SCREEN,y + // [10] (byte) main::c1a ← (byte) main::c1a + (byte) 4 -- vbum1=vbum1_plus_vbuc1 + lax c1a + axs #-[4] + stx c1a + // [11] (byte) main::i ← ++ (byte) main::i -- vbum1=_inc_vbum1 + inc i + jmp __b2 + c1a: .byte 0 + i: .byte 0 +} + // File Data + .align $100 +SINTABLE: +.for(var i=0;i<$100;i++) + .byte round(127.5+127.5*sin(2*PI*i/256)) + + // Plasma state variables + c1A: .byte 0 + +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [5] (byte) main::c1a ← (byte) c1A [ main::c1a c1A ] ( main:2 [ main::c1a c1A ] ) always clobbers reg byte a +Statement [6] (byte) main::i ← (byte) 0 [ main::c1a c1A main::i ] ( main:2 [ main::c1a c1A main::i ] ) always clobbers reg byte a +Statement [7] if((byte) main::i<(byte) $28) goto main::@3 [ main::c1a c1A main::i ] ( main:2 [ main::c1a c1A main::i ] ) always clobbers reg byte a +Statement [8] (byte) c1A ← (byte) c1A + (byte) 3 [ c1A ] ( main:2 [ c1A ] ) always clobbers reg byte a reg byte x +Statement [9] *((const byte*) SCREEN + (byte) main::i) ← *((const byte*) SINTABLE + (byte) main::c1a) [ main::c1a c1A main::i ] ( main:2 [ main::c1a c1A main::i ] ) always clobbers reg byte a reg byte y +Statement [10] (byte) main::c1a ← (byte) main::c1a + (byte) 4 [ main::c1a c1A main::i ] ( main:2 [ main::c1a c1A main::i ] ) always clobbers reg byte a reg byte x +Potential registers mem[1] [ main::c1a ] : mem[1] , +Potential registers mem[1] [ main::i ] : mem[1] , +Potential registers mem[1] [ c1A ] : mem[1] , + +REGISTER UPLIFT SCOPES +Uplift Scope [main] 83: mem[1] [ main::i ] 52.33: mem[1] [ main::c1a ] +Uplift Scope [] 3.3: mem[1] [ c1A ] + +Uplifting [main] best 5142 combination mem[1] [ main::i ] mem[1] [ main::c1a ] +Uplifting [] best 5142 combination mem[1] [ c1A ] +Attempting to uplift remaining variables inmem[1] [ main::i ] +Uplifting [main] best 5142 combination mem[1] [ main::i ] +Attempting to uplift remaining variables inmem[1] [ main::c1a ] +Uplifting [main] best 5142 combination mem[1] [ main::c1a ] +Attempting to uplift remaining variables inmem[1] [ c1A ] +Uplifting [] best 5142 combination mem[1] [ c1A ] + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Demonstrates problem with __ma coalescing +// c1a is erroneously zp-coalesced with c1A + // 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: { + jmp __b1 + // main::@1 + __b1: + // [5] (byte) main::c1a ← (byte) c1A -- vbum1=vbum2 + lda c1A + sta c1a + // [6] (byte) main::i ← (byte) 0 -- vbum1=vbuc1 + lda #0 + sta i + jmp __b2 + // main::@2 + __b2: + // [7] if((byte) main::i<(byte) $28) goto main::@3 -- vbum1_lt_vbuc1_then_la1 + lda i + cmp #$28 + bcc __b3 + jmp __b4 + // main::@4 + __b4: + // [8] (byte) c1A ← (byte) c1A + (byte) 3 -- vbum1=vbum1_plus_vbuc1 + lax c1A + axs #-[3] + stx c1A + jmp __b1 + // main::@3 + __b3: + // [9] *((const byte*) SCREEN + (byte) main::i) ← *((const byte*) SINTABLE + (byte) main::c1a) -- pbuc1_derefidx_vbum1=pbuc2_derefidx_vbum2 + ldy c1a + lda SINTABLE,y + ldy i + sta SCREEN,y + // [10] (byte) main::c1a ← (byte) main::c1a + (byte) 4 -- vbum1=vbum1_plus_vbuc1 + lax c1a + axs #-[4] + stx c1a + // [11] (byte) main::i ← ++ (byte) main::i -- vbum1=_inc_vbum1 + inc i + jmp __b2 + c1a: .byte 0 + i: .byte 0 +} + // File Data + .align $100 +SINTABLE: +.for(var i=0;i<$100;i++) + .byte round(127.5+127.5*sin(2*PI*i/256)) + + // Plasma state variables + c1A: .byte 0 + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b1 +Removing instruction jmp __bend +Removing instruction jmp __b1 +Removing instruction jmp __b2 +Removing instruction jmp __b4 +Succesful ASM optimization Pass5NextJumpElimination +Replacing label __bbegin with __b1 +Removing instruction __bbegin: +Removing instruction __b1_from___bbegin: +Removing instruction main_from___b1: +Removing instruction __bend_from___b1: +Succesful ASM optimization Pass5RedundantLabelElimination +Removing instruction __bend: +Removing instruction __b4: +Succesful ASM optimization Pass5UnusedLabelElimination +Updating BasicUpstart to call main directly +Removing instruction jsr main +Succesful ASM optimization Pass5SkipBegin +Removing instruction __b1: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +(label) @1 +(label) @begin +(label) @end +(const byte*) SCREEN = (byte*) 1024 +(const byte*) SINTABLE[(number) $100] = kickasm {{ .for(var i=0;i<$100;i++) + .byte round(127.5+127.5*sin(2*PI*i/256)) + }} +(byte) c1A loadstore mem[1] 3.3000000000000003 = (byte) 0 +(void()) main() +(label) main::@1 +(label) main::@2 +(label) main::@3 +(label) main::@4 +(byte) main::c1a loadstore mem[1] 52.33333333333333 +(byte) main::i loadstore mem[1] 83.0 + +mem[1] [ main::c1a ] +mem[1] [ main::i ] +mem[1] [ c1A ] + + +FINAL ASSEMBLER +Score: 4770 + + // File Comments +// Demonstrates problem with __ma coalescing +// c1a is erroneously zp-coalesced with c1A + // 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: { + // main::@1 + __b1: + // c1a = c1A + // [5] (byte) main::c1a ← (byte) c1A -- vbum1=vbum2 + lda c1A + sta c1a + // i = 0 + // [6] (byte) main::i ← (byte) 0 -- vbum1=vbuc1 + lda #0 + sta i + // main::@2 + __b2: + // for (char i = 0; i < 40; ++i) + // [7] if((byte) main::i<(byte) $28) goto main::@3 -- vbum1_lt_vbuc1_then_la1 + lda i + cmp #$28 + bcc __b3 + // main::@4 + // c1A += 3 + // [8] (byte) c1A ← (byte) c1A + (byte) 3 -- vbum1=vbum1_plus_vbuc1 + lax c1A + axs #-[3] + stx c1A + jmp __b1 + // main::@3 + __b3: + // SCREEN[i] = SINTABLE[c1a] + // [9] *((const byte*) SCREEN + (byte) main::i) ← *((const byte*) SINTABLE + (byte) main::c1a) -- pbuc1_derefidx_vbum1=pbuc2_derefidx_vbum2 + ldy c1a + lda SINTABLE,y + ldy i + sta SCREEN,y + // c1a += 4 + // [10] (byte) main::c1a ← (byte) main::c1a + (byte) 4 -- vbum1=vbum1_plus_vbuc1 + lax c1a + axs #-[4] + stx c1a + // for (char i = 0; i < 40; ++i) + // [11] (byte) main::i ← ++ (byte) main::i -- vbum1=_inc_vbum1 + inc i + jmp __b2 + c1a: .byte 0 + i: .byte 0 +} + // File Data + .align $100 +SINTABLE: +.for(var i=0;i<$100;i++) + .byte round(127.5+127.5*sin(2*PI*i/256)) + + // Plasma state variables + c1A: .byte 0 + diff --git a/src/test/ref/ma_coalesce_problem.sym b/src/test/ref/ma_coalesce_problem.sym new file mode 100644 index 000000000..5b436c242 --- /dev/null +++ b/src/test/ref/ma_coalesce_problem.sym @@ -0,0 +1,19 @@ +(label) @1 +(label) @begin +(label) @end +(const byte*) SCREEN = (byte*) 1024 +(const byte*) SINTABLE[(number) $100] = kickasm {{ .for(var i=0;i<$100;i++) + .byte round(127.5+127.5*sin(2*PI*i/256)) + }} +(byte) c1A loadstore mem[1] 3.3000000000000003 = (byte) 0 +(void()) main() +(label) main::@1 +(label) main::@2 +(label) main::@3 +(label) main::@4 +(byte) main::c1a loadstore mem[1] 52.33333333333333 +(byte) main::i loadstore mem[1] 83.0 + +mem[1] [ main::c1a ] +mem[1] [ main::i ] +mem[1] [ c1A ] diff --git a/src/test/ref/millfork-benchmarks/linkedlist-kc.log b/src/test/ref/millfork-benchmarks/linkedlist-kc.log index 21b981114..1c20b87c5 100644 --- a/src/test/ref/millfork-benchmarks/linkedlist-kc.log +++ b/src/test/ref/millfork-benchmarks/linkedlist-kc.log @@ -1319,7 +1319,7 @@ VARIABLE REGISTER WEIGHTS (word) free_#13 8.583333333333332 (word) free_#22 20.999999999999996 (void()) init() -(word) last_time loadstore 0.47619047619047616 +(word) last_time loadstore 0.43478260869565216 (void()) main() (word~) main::$5 11.0 (byte) main::c @@ -1972,7 +1972,7 @@ Statement [13] if((word) main::i#2!=(word) $bb8) goto main::@2 [ last_time print Statement [16] (word) sum::return#2 ← (word) sum::s#3 [ last_time print_char_cursor#48 main::c#8 sum::return#2 ] ( main:3 [ last_time print_char_cursor#48 main::c#8 sum::return#2 ] ) always clobbers reg byte a Statement [17] (word~) main::$5 ← (word) sum::return#2 [ last_time print_char_cursor#48 main::c#8 main::$5 ] ( main:3 [ last_time print_char_cursor#48 main::c#8 main::$5 ] ) always clobbers reg byte a Statement [18] (byte) print_char::ch#2 ← (byte)(word~) main::$5 [ last_time print_char_cursor#48 main::c#8 print_char::ch#2 ] ( main:3 [ last_time print_char_cursor#48 main::c#8 print_char::ch#2 ] ) always clobbers reg byte a -Statement [25] (word) Ticks#1 ← (word) last_time [ print_char_cursor#10 Ticks#1 ] ( main:3::end:23 [ print_char_cursor#10 Ticks#1 ] ) always clobbers reg byte a +Statement [25] (word) Ticks#1 ← (word) last_time [ last_time print_char_cursor#10 Ticks#1 ] ( main:3::end:23 [ last_time print_char_cursor#10 Ticks#1 ] ) always clobbers reg byte a Statement [27] (word) last_time ← (word) last_time - (word) Ticks#1 [ last_time print_char_cursor#10 ] ( main:3::end:23 [ last_time print_char_cursor#10 ] ) always clobbers reg byte a Statement [28] (word) Ticks#12 ← (word) last_time [ print_char_cursor#10 Ticks#12 ] ( main:3::end:23 [ print_char_cursor#10 Ticks#12 ] ) always clobbers reg byte a Statement [29] (word) print_word::w#0 ← (word) Ticks#12 [ print_char_cursor#10 print_word::w#0 ] ( main:3::end:23 [ print_char_cursor#10 print_word::w#0 ] ) always clobbers reg byte a @@ -2004,7 +2004,7 @@ Statement [13] if((word) main::i#2!=(word) $bb8) goto main::@2 [ last_time print Statement [16] (word) sum::return#2 ← (word) sum::s#3 [ last_time print_char_cursor#48 main::c#8 sum::return#2 ] ( main:3 [ last_time print_char_cursor#48 main::c#8 sum::return#2 ] ) always clobbers reg byte a Statement [17] (word~) main::$5 ← (word) sum::return#2 [ last_time print_char_cursor#48 main::c#8 main::$5 ] ( main:3 [ last_time print_char_cursor#48 main::c#8 main::$5 ] ) always clobbers reg byte a Statement [18] (byte) print_char::ch#2 ← (byte)(word~) main::$5 [ last_time print_char_cursor#48 main::c#8 print_char::ch#2 ] ( main:3 [ last_time print_char_cursor#48 main::c#8 print_char::ch#2 ] ) always clobbers reg byte a -Statement [25] (word) Ticks#1 ← (word) last_time [ print_char_cursor#10 Ticks#1 ] ( main:3::end:23 [ print_char_cursor#10 Ticks#1 ] ) always clobbers reg byte a +Statement [25] (word) Ticks#1 ← (word) last_time [ last_time print_char_cursor#10 Ticks#1 ] ( main:3::end:23 [ last_time print_char_cursor#10 Ticks#1 ] ) always clobbers reg byte a Statement [27] (word) last_time ← (word) last_time - (word) Ticks#1 [ last_time print_char_cursor#10 ] ( main:3::end:23 [ last_time print_char_cursor#10 ] ) always clobbers reg byte a Statement [28] (word) Ticks#12 ← (word) last_time [ print_char_cursor#10 Ticks#12 ] ( main:3::end:23 [ print_char_cursor#10 Ticks#12 ] ) always clobbers reg byte a Statement [29] (word) print_word::w#0 ← (word) Ticks#12 [ print_char_cursor#10 print_word::w#0 ] ( main:3::end:23 [ print_char_cursor#10 print_word::w#0 ] ) always clobbers reg byte a @@ -2054,7 +2054,7 @@ Potential registers zp[2]:41 [ alloc::return#0 ] : zp[2]:41 , REGISTER UPLIFT SCOPES Uplift Scope [sum] 274: zp[2]:15 [ sum::current#3 sum::current#1 sum::current#2 ] 154.25: zp[2]:17 [ sum::s#3 sum::s#2 ] 22: zp[2]:23 [ sum::return#2 ] Uplift Scope [main] 252.5: zp[2]:3 [ main::i#3 main::i#2 ] 18.19: zp[1]:2 [ main::c#8 main::c#2 ] 11: zp[2]:25 [ main::$5 ] -Uplift Scope [] 38.5: zp[2]:9 [ print_line_cursor#8 print_line_cursor#1 ] 34.67: zp[2]:7 [ root#20 root#11 ] 29.58: zp[2]:5 [ free_#22 free_#13 ] 12.27: zp[2]:13 [ print_char_cursor#26 print_char_cursor#48 print_char_cursor#10 ] 4: zp[2]:29 [ Ticks#12 ] 2: zp[2]:27 [ Ticks#1 ] 0.48: zp[2]:19 [ last_time ] +Uplift Scope [] 38.5: zp[2]:9 [ print_line_cursor#8 print_line_cursor#1 ] 34.67: zp[2]:7 [ root#20 root#11 ] 29.58: zp[2]:5 [ free_#22 free_#13 ] 12.27: zp[2]:13 [ print_char_cursor#26 print_char_cursor#48 print_char_cursor#10 ] 4: zp[2]:29 [ Ticks#12 ] 2: zp[2]:27 [ Ticks#1 ] 0.43: zp[2]:19 [ last_time ] Uplift Scope [print_char] 47: zp[1]:12 [ print_char::ch#3 print_char::ch#2 print_char::ch#0 print_char::ch#1 ] Uplift Scope [prepend] 17.17: zp[2]:21 [ prepend::x#0 ] 1.33: zp[2]:37 [ prepend::new#1 ] Uplift Scope [print_byte] 10: zp[1]:11 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] 4: zp[1]:33 [ print_byte::$0 ] 4: zp[1]:34 [ print_byte::$2 ] @@ -2702,7 +2702,7 @@ FINAL SYMBOL TABLE (const struct node*) heap[(number) $fa0] = { fill( $fa0, 0) } (void()) init() (label) init::@return -(word) last_time loadstore zp[2]:10 0.47619047619047616 +(word) last_time loadstore zp[2]:10 0.43478260869565216 (void()) main() (word~) main::$5 zp[2]:8 11.0 (label) main::@1 diff --git a/src/test/ref/millfork-benchmarks/linkedlist-kc.sym b/src/test/ref/millfork-benchmarks/linkedlist-kc.sym index 665ad2fa7..79363975a 100644 --- a/src/test/ref/millfork-benchmarks/linkedlist-kc.sym +++ b/src/test/ref/millfork-benchmarks/linkedlist-kc.sym @@ -27,7 +27,7 @@ (const struct node*) heap[(number) $fa0] = { fill( $fa0, 0) } (void()) init() (label) init::@return -(word) last_time loadstore zp[2]:10 0.47619047619047616 +(word) last_time loadstore zp[2]:10 0.43478260869565216 (void()) main() (word~) main::$5 zp[2]:8 11.0 (label) main::@1 diff --git a/src/test/ref/millfork-benchmarks/plasma-kc.log b/src/test/ref/millfork-benchmarks/plasma-kc.log index 13ece6532..03b15cc71 100644 --- a/src/test/ref/millfork-benchmarks/plasma-kc.log +++ b/src/test/ref/millfork-benchmarks/plasma-kc.log @@ -1832,7 +1832,7 @@ VARIABLE REGISTER WEIGHTS (byte*) doplasma::scrn#13 6.733333333333333 (byte*) doplasma::scrn#6 186.28571428571428 (void()) end() -(word) last_time loadstore 0.4545454545454546 +(word) last_time loadstore 0.41666666666666663 (signed word()) main() (byte) main::block (byte) main::block#1 0.46153846153846156 @@ -2809,7 +2809,7 @@ Removing always clobbered register reg byte a as potential for zp[1]:5 [ doplasm Removing always clobbered register reg byte a as potential for zp[1]:6 [ doplasma::c1b#3 doplasma::c1b#2 ] Statement [48] (byte) doplasma::c1a#2 ← (byte) doplasma::c1a#3 + (byte) 4 [ doplasma::scrn#13 doplasma::ii#3 doplasma::c1b#3 doplasma::c1a#2 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1b#3 doplasma::c1a#2 ] main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1b#3 doplasma::c1a#2 ] ) always clobbers reg byte a Statement [49] (byte) doplasma::c1b#2 ← (byte) doplasma::c1b#3 + (byte) 9 [ doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#2 doplasma::c1b#2 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#2 doplasma::c1b#2 ] main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#2 doplasma::c1b#2 ] ) always clobbers reg byte a -Statement [51] (word) Ticks#1 ← (word) last_time [ Ticks#1 ] ( main:4::end:18 [ Ticks#1 ] ) always clobbers reg byte a +Statement [51] (word) Ticks#1 ← (word) last_time [ last_time Ticks#1 ] ( main:4::end:18 [ last_time Ticks#1 ] ) always clobbers reg byte a Statement [53] (word) last_time ← (word) last_time - (word) Ticks#1 [ last_time ] ( main:4::end:18 [ last_time ] ) always clobbers reg byte a Statement [54] (word) Ticks#12 ← (word) last_time [ Ticks#12 ] ( main:4::end:18 [ Ticks#12 ] ) always clobbers reg byte a Statement [55] (word) print_word::w#0 ← (word) Ticks#12 [ print_word::w#0 ] ( main:4::end:18 [ print_word::w#0 ] ) always clobbers reg byte a @@ -2823,7 +2823,7 @@ Statement [74] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f [ p Statement [79] *((byte*) print_char_cursor#25) ← (byte) print_char::ch#2 [ print_char_cursor#25 ] ( main:4::end:18::print_word:56::print_byte:66::print_char:73 [ print_word::w#0 print_byte::b#2 print_char_cursor#25 ] main:4::end:18::print_word:56::print_byte:68::print_char:73 [ print_byte::b#2 print_char_cursor#25 ] main:4::end:18::print_word:56::print_byte:66::print_char:76 [ print_word::w#0 print_char_cursor#25 ] main:4::end:18::print_word:56::print_byte:68::print_char:76 [ print_char_cursor#25 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp[1]:16 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] Statement asm { jsr$FFDE staLAST_TIME stxLAST_TIME+1 } always clobbers reg byte a reg byte x reg byte y -Statement [83] (word) rand_seed ← (word) $194a [ ] ( main:4::start:9 [ last_time ] main:4::end:18::start:52 [ Ticks#1 ] ) always clobbers reg byte a +Statement [83] (word) rand_seed ← (word) $194a [ ] ( main:4::start:9 [ last_time ] main:4::end:18::start:52 [ last_time Ticks#1 ] ) always clobbers reg byte a Statement [87] if((word) makechar::c#3<(word) $100) goto makechar::@2 [ rand_seed makechar::c#3 ] ( main:4::makechar:7 [ last_time rand_seed makechar::c#3 ] ) always clobbers reg byte a Statement [89] (byte~) makechar::$1 ← (byte)(word) makechar::c#3 [ rand_seed makechar::c#3 makechar::$1 ] ( main:4::makechar:7 [ last_time rand_seed makechar::c#3 makechar::$1 ] ) always clobbers reg byte a Statement [96] (word~) makechar::$8 ← (word) makechar::c#3 << (byte) 3 [ rand_seed makechar::c#3 makechar::s#1 makechar::i#3 makechar::b#3 makechar::$8 ] ( main:4::makechar:7 [ last_time rand_seed makechar::c#3 makechar::s#1 makechar::i#3 makechar::b#3 makechar::$8 ] ) always clobbers reg byte a @@ -2859,7 +2859,7 @@ Statement [44] (byte) doplasma::c2b#2 ← (byte) doplasma::c2b#3 + (byte) 7 [ do Statement [46] (byte~) doplasma::$1 ← *((const byte*) sinustable + (byte) doplasma::c1a#3) + *((const byte*) sinustable + (byte) doplasma::c1b#3) [ doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#3 doplasma::c1b#3 doplasma::$1 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#3 doplasma::c1b#3 doplasma::$1 ] main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#3 doplasma::c1b#3 doplasma::$1 ] ) always clobbers reg byte a Statement [48] (byte) doplasma::c1a#2 ← (byte) doplasma::c1a#3 + (byte) 4 [ doplasma::scrn#13 doplasma::ii#3 doplasma::c1b#3 doplasma::c1a#2 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1b#3 doplasma::c1a#2 ] main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1b#3 doplasma::c1a#2 ] ) always clobbers reg byte a Statement [49] (byte) doplasma::c1b#2 ← (byte) doplasma::c1b#3 + (byte) 9 [ doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#2 doplasma::c1b#2 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#2 doplasma::c1b#2 ] main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#2 doplasma::c1b#2 ] ) always clobbers reg byte a -Statement [51] (word) Ticks#1 ← (word) last_time [ Ticks#1 ] ( main:4::end:18 [ Ticks#1 ] ) always clobbers reg byte a +Statement [51] (word) Ticks#1 ← (word) last_time [ last_time Ticks#1 ] ( main:4::end:18 [ last_time Ticks#1 ] ) always clobbers reg byte a Statement [53] (word) last_time ← (word) last_time - (word) Ticks#1 [ last_time ] ( main:4::end:18 [ last_time ] ) always clobbers reg byte a Statement [54] (word) Ticks#12 ← (word) last_time [ Ticks#12 ] ( main:4::end:18 [ Ticks#12 ] ) always clobbers reg byte a Statement [55] (word) print_word::w#0 ← (word) Ticks#12 [ print_word::w#0 ] ( main:4::end:18 [ print_word::w#0 ] ) always clobbers reg byte a @@ -2871,7 +2871,7 @@ Statement [71] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4 [ p Statement [74] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f [ print_char_cursor#10 print_byte::$2 ] ( main:4::end:18::print_word:56::print_byte:66 [ print_word::w#0 print_char_cursor#10 print_byte::$2 ] main:4::end:18::print_word:56::print_byte:68 [ print_char_cursor#10 print_byte::$2 ] ) always clobbers reg byte a Statement [79] *((byte*) print_char_cursor#25) ← (byte) print_char::ch#2 [ print_char_cursor#25 ] ( main:4::end:18::print_word:56::print_byte:66::print_char:73 [ print_word::w#0 print_byte::b#2 print_char_cursor#25 ] main:4::end:18::print_word:56::print_byte:68::print_char:73 [ print_byte::b#2 print_char_cursor#25 ] main:4::end:18::print_word:56::print_byte:66::print_char:76 [ print_word::w#0 print_char_cursor#25 ] main:4::end:18::print_word:56::print_byte:68::print_char:76 [ print_char_cursor#25 ] ) always clobbers reg byte y Statement asm { jsr$FFDE staLAST_TIME stxLAST_TIME+1 } always clobbers reg byte a reg byte x reg byte y -Statement [83] (word) rand_seed ← (word) $194a [ ] ( main:4::start:9 [ last_time ] main:4::end:18::start:52 [ Ticks#1 ] ) always clobbers reg byte a +Statement [83] (word) rand_seed ← (word) $194a [ ] ( main:4::start:9 [ last_time ] main:4::end:18::start:52 [ last_time Ticks#1 ] ) always clobbers reg byte a Statement [87] if((word) makechar::c#3<(word) $100) goto makechar::@2 [ rand_seed makechar::c#3 ] ( main:4::makechar:7 [ last_time rand_seed makechar::c#3 ] ) always clobbers reg byte a Statement [89] (byte~) makechar::$1 ← (byte)(word) makechar::c#3 [ rand_seed makechar::c#3 makechar::$1 ] ( main:4::makechar:7 [ last_time rand_seed makechar::c#3 makechar::$1 ] ) always clobbers reg byte a Statement [90] (byte) makechar::s#1 ← *((const byte*) sinustable + (byte~) makechar::$1) [ rand_seed makechar::c#3 makechar::s#1 ] ( main:4::makechar:7 [ last_time rand_seed makechar::c#3 makechar::s#1 ] ) always clobbers reg byte a @@ -2928,7 +2928,7 @@ REGISTER UPLIFT SCOPES Uplift Scope [makechar] 3,785.68: zp[1]:24 [ makechar::b#3 makechar::b#7 makechar::b#2 ] 2,402.4: zp[1]:23 [ makechar::ii#3 makechar::ii#2 ] 2,002: zp[1]:52 [ makechar::$4 ] 2,002: zp[1]:53 [ makechar::$5 ] 225.76: zp[1]:22 [ makechar::i#3 makechar::i#2 ] 202: zp[2]:45 [ makechar::$8 ] 202: zp[2]:47 [ makechar::$9 ] 202: zp[2]:49 [ makechar::$10 ] 53.26: zp[1]:44 [ makechar::s#1 ] 28.09: zp[2]:20 [ makechar::c#3 makechar::c#2 ] 22: zp[1]:43 [ makechar::$1 ] Uplift Scope [doplasma] 3,253.25: zp[1]:13 [ doplasma::j#3 doplasma::j#2 ] 2,002: zp[1]:32 [ doplasma::$6 ] 365: zp[1]:10 [ doplasma::jj#3 doplasma::jj#2 ] 294.02: zp[2]:11 [ doplasma::scrn#6 doplasma::scrn#0 doplasma::scrn#13 ] 269.33: zp[1]:4 [ doplasma::ii#3 doplasma::ii#2 ] 269.33: zp[1]:7 [ doplasma::i#3 doplasma::i#2 ] 202: zp[1]:33 [ doplasma::$3 ] 202: zp[1]:34 [ doplasma::$1 ] 161.6: zp[1]:6 [ doplasma::c1b#3 doplasma::c1b#2 ] 161.6: zp[1]:9 [ doplasma::c2b#3 doplasma::c2b#2 ] 143.08: zp[1]:5 [ doplasma::c1a#3 doplasma::c1a#2 ] 143.08: zp[1]:8 [ doplasma::c2a#3 doplasma::c2a#2 ] Uplift Scope [rand] 2,002: zp[1]:51 [ rand::return#2 ] 334.33: zp[1]:54 [ rand::return#0 ] -Uplift Scope [] 38.5: zp[2]:14 [ print_line_cursor#8 print_line_cursor#1 ] 6.33: zp[2]:18 [ print_char_cursor#25 print_char_cursor#35 print_char_cursor#10 ] 4: zp[2]:37 [ Ticks#12 ] 2: zp[2]:35 [ Ticks#1 ] 0.45: zp[2]:25 [ last_time ] 0.21: zp[2]:27 [ rand_seed ] +Uplift Scope [] 38.5: zp[2]:14 [ print_line_cursor#8 print_line_cursor#1 ] 6.33: zp[2]:18 [ print_char_cursor#25 print_char_cursor#35 print_char_cursor#10 ] 4: zp[2]:37 [ Ticks#12 ] 2: zp[2]:35 [ Ticks#1 ] 0.42: zp[2]:25 [ last_time ] 0.21: zp[2]:27 [ rand_seed ] Uplift Scope [main] 26.71: zp[2]:2 [ main::count#2 main::count#1 ] 4: zp[1]:30 [ main::tmp#1 ] 0.46: zp[1]:29 [ main::block#1 ] 0.44: zp[1]:31 [ main::v#1 ] Uplift Scope [print_byte] 10: zp[1]:16 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] 4: zp[1]:41 [ print_byte::$0 ] 4: zp[1]:42 [ print_byte::$2 ] Uplift Scope [print_char] 14: zp[1]:17 [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] @@ -3918,7 +3918,7 @@ FINAL SYMBOL TABLE (label) end::@1 (label) end::@2 (label) end::@return -(word) last_time loadstore zp[2]:10 0.4545454545454546 +(word) last_time loadstore zp[2]:10 0.41666666666666663 (signed word()) main() (label) main::@1 (label) main::@2 diff --git a/src/test/ref/millfork-benchmarks/plasma-kc.sym b/src/test/ref/millfork-benchmarks/plasma-kc.sym index e4c6cae24..62282f2ff 100644 --- a/src/test/ref/millfork-benchmarks/plasma-kc.sym +++ b/src/test/ref/millfork-benchmarks/plasma-kc.sym @@ -69,7 +69,7 @@ (label) end::@1 (label) end::@2 (label) end::@return -(word) last_time loadstore zp[2]:10 0.4545454545454546 +(word) last_time loadstore zp[2]:10 0.41666666666666663 (signed word()) main() (label) main::@1 (label) main::@2 diff --git a/src/test/ref/millfork-benchmarks/romsum-kc.log b/src/test/ref/millfork-benchmarks/romsum-kc.log index 7b2cdc687..bc4958262 100644 --- a/src/test/ref/millfork-benchmarks/romsum-kc.log +++ b/src/test/ref/millfork-benchmarks/romsum-kc.log @@ -1781,7 +1781,7 @@ VARIABLE REGISTER WEIGHTS (word) Ticks#1 2.0 (word) Ticks#12 4.0 (void()) end() -(word) last_time loadstore 0.5882352941176471 +(word) last_time loadstore 0.5263157894736842 (signed word()) main() (word) main::i (word) main::i#2 11.0 @@ -2745,7 +2745,7 @@ Removing always clobbered register reg byte a as potential for zp[1]:17 [ sum::p Removing always clobbered register reg byte a as potential for zp[1]:20 [ sum::i#3 sum::i#2 ] Statement [72] (word) sum::s#2 ← (word) sum::s#4 + (byte) sum::tmp#1 [ sum::page#3 sum::p#5 sum::s#2 sum::i#3 ] ( main:3::sum:13 [ last_time main::i#3 print_char_cursor#51 print_line_cursor#20 sum::page#3 sum::p#5 sum::s#2 sum::i#3 ] ) always clobbers reg byte a Statement [75] (byte*) sum::p#2 ← (byte*) sum::p#5 + (word) $100 [ sum::page#3 sum::s#2 sum::p#2 ] ( main:3::sum:13 [ last_time main::i#3 print_char_cursor#51 print_line_cursor#20 sum::page#3 sum::s#2 sum::p#2 ] ) always clobbers reg byte a -Statement [77] (word) Ticks#1 ← (word) last_time [ print_char_cursor#51 print_line_cursor#20 Ticks#1 ] ( main:3::end:10 [ print_char_cursor#51 print_line_cursor#20 Ticks#1 ] ) always clobbers reg byte a +Statement [77] (word) Ticks#1 ← (word) last_time [ last_time print_char_cursor#51 print_line_cursor#20 Ticks#1 ] ( main:3::end:10 [ last_time print_char_cursor#51 print_line_cursor#20 Ticks#1 ] ) always clobbers reg byte a Statement [79] (word) last_time ← (word) last_time - (word) Ticks#1 [ last_time print_char_cursor#51 print_line_cursor#20 ] ( main:3::end:10 [ last_time print_char_cursor#51 print_line_cursor#20 ] ) always clobbers reg byte a Statement [80] (word) Ticks#12 ← (word) last_time [ print_char_cursor#51 print_line_cursor#20 Ticks#12 ] ( main:3::end:10 [ print_char_cursor#51 print_line_cursor#20 Ticks#12 ] ) always clobbers reg byte a Statement [81] (word) print_word::w#0 ← (word) Ticks#12 [ print_char_cursor#51 print_line_cursor#20 print_word::w#0 ] ( main:3::end:10 [ print_char_cursor#51 print_line_cursor#20 print_word::w#0 ] ) always clobbers reg byte a @@ -2785,7 +2785,7 @@ Statement [65] (word) utoa_append::value#1 ← (word) utoa_append::value#2 - (wo Statement [71] (byte) sum::tmp#1 ← *((byte*) sum::p#5 + (byte) sum::i#3) [ sum::page#3 sum::p#5 sum::i#3 sum::s#4 sum::tmp#1 ] ( main:3::sum:13 [ last_time main::i#3 print_char_cursor#51 print_line_cursor#20 sum::page#3 sum::p#5 sum::i#3 sum::s#4 sum::tmp#1 ] ) always clobbers reg byte a Statement [72] (word) sum::s#2 ← (word) sum::s#4 + (byte) sum::tmp#1 [ sum::page#3 sum::p#5 sum::s#2 sum::i#3 ] ( main:3::sum:13 [ last_time main::i#3 print_char_cursor#51 print_line_cursor#20 sum::page#3 sum::p#5 sum::s#2 sum::i#3 ] ) always clobbers reg byte a Statement [75] (byte*) sum::p#2 ← (byte*) sum::p#5 + (word) $100 [ sum::page#3 sum::s#2 sum::p#2 ] ( main:3::sum:13 [ last_time main::i#3 print_char_cursor#51 print_line_cursor#20 sum::page#3 sum::s#2 sum::p#2 ] ) always clobbers reg byte a -Statement [77] (word) Ticks#1 ← (word) last_time [ print_char_cursor#51 print_line_cursor#20 Ticks#1 ] ( main:3::end:10 [ print_char_cursor#51 print_line_cursor#20 Ticks#1 ] ) always clobbers reg byte a +Statement [77] (word) Ticks#1 ← (word) last_time [ last_time print_char_cursor#51 print_line_cursor#20 Ticks#1 ] ( main:3::end:10 [ last_time print_char_cursor#51 print_line_cursor#20 Ticks#1 ] ) always clobbers reg byte a Statement [79] (word) last_time ← (word) last_time - (word) Ticks#1 [ last_time print_char_cursor#51 print_line_cursor#20 ] ( main:3::end:10 [ last_time print_char_cursor#51 print_line_cursor#20 ] ) always clobbers reg byte a Statement [80] (word) Ticks#12 ← (word) last_time [ print_char_cursor#51 print_line_cursor#20 Ticks#12 ] ( main:3::end:10 [ print_char_cursor#51 print_line_cursor#20 Ticks#12 ] ) always clobbers reg byte a Statement [81] (word) print_word::w#0 ← (word) Ticks#12 [ print_char_cursor#51 print_line_cursor#20 print_word::w#0 ] ( main:3::end:10 [ print_char_cursor#51 print_line_cursor#20 print_word::w#0 ] ) always clobbers reg byte a @@ -2832,7 +2832,7 @@ REGISTER UPLIFT SCOPES Uplift Scope [sum] 2,502.5: zp[1]:20 [ sum::i#3 sum::i#2 ] 2,002: zp[1]:45 [ sum::tmp#1 ] 1,525.35: zp[2]:21 [ sum::s#4 sum::s#3 sum::s#2 ] 272.86: zp[2]:18 [ sum::p#5 sum::p#2 ] 239.88: zp[1]:17 [ sum::page#3 sum::page#2 ] 22: zp[2]:29 [ sum::return#2 ] Uplift Scope [utoa_append] 2,554: zp[2]:14 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] 2,003: zp[1]:16 [ utoa_append::digit#2 utoa_append::digit#1 ] 350.5: zp[2]:41 [ utoa_append::sub#0 ] 202: zp[2]:43 [ utoa_append::return#0 ] 12.88: zp[2]:39 [ utoa_append::buffer#0 ] Uplift Scope [utoa] 382.64: zp[2]:12 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] 312.5: zp[2]:9 [ utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 ] 230.86: zp[1]:8 [ utoa::digit#2 utoa::digit#1 ] 202: zp[1]:36 [ utoa::$11 ] 151.5: zp[1]:11 [ utoa::started#2 utoa::started#4 ] 60.6: zp[2]:37 [ utoa::digit_value#0 ] 4: zp[1]:33 [ utoa::$4 ] 4: zp[2]:34 [ utoa::buffer#3 ] -Uplift Scope [] 258.93: zp[2]:4 [ print_line_cursor#9 print_line_cursor#20 print_line_cursor#1 ] 198.5: zp[2]:25 [ print_char_cursor#35 print_char_cursor#49 print_char_cursor#46 print_char_cursor#13 print_char_cursor#2 print_char_cursor#51 print_char_cursor#70 print_char_cursor#1 ] 4: zp[2]:48 [ Ticks#12 ] 2: zp[2]:46 [ Ticks#1 ] 0.59: zp[2]:27 [ last_time ] +Uplift Scope [] 258.93: zp[2]:4 [ print_line_cursor#9 print_line_cursor#20 print_line_cursor#1 ] 198.5: zp[2]:25 [ print_char_cursor#35 print_char_cursor#49 print_char_cursor#46 print_char_cursor#13 print_char_cursor#2 print_char_cursor#51 print_char_cursor#70 print_char_cursor#1 ] 4: zp[2]:48 [ Ticks#12 ] 2: zp[2]:46 [ Ticks#1 ] 0.53: zp[2]:27 [ last_time ] Uplift Scope [print_str] 303: zp[2]:6 [ print_str::str#2 print_str::str#0 ] Uplift Scope [print_byte] 10: zp[1]:23 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] 4: zp[1]:52 [ print_byte::$0 ] 4: zp[1]:53 [ print_byte::$2 ] Uplift Scope [main] 14.67: zp[2]:2 [ main::i#3 main::i#2 ] @@ -3685,7 +3685,7 @@ FINAL SYMBOL TABLE (label) end::@1 (label) end::@2 (label) end::@return -(word) last_time loadstore zp[2]:11 0.5882352941176471 +(word) last_time loadstore zp[2]:11 0.5263157894736842 (signed word()) main() (label) main::@1 (label) main::@2 diff --git a/src/test/ref/millfork-benchmarks/romsum-kc.sym b/src/test/ref/millfork-benchmarks/romsum-kc.sym index aa5d2da55..0c8f82952 100644 --- a/src/test/ref/millfork-benchmarks/romsum-kc.sym +++ b/src/test/ref/millfork-benchmarks/romsum-kc.sym @@ -16,7 +16,7 @@ (label) end::@1 (label) end::@2 (label) end::@return -(word) last_time loadstore zp[2]:11 0.5882352941176471 +(word) last_time loadstore zp[2]:11 0.5263157894736842 (signed word()) main() (label) main::@1 (label) main::@2 diff --git a/src/test/ref/millfork-benchmarks/sieve-kc.log b/src/test/ref/millfork-benchmarks/sieve-kc.log index 75df5339a..802db8b30 100644 --- a/src/test/ref/millfork-benchmarks/sieve-kc.log +++ b/src/test/ref/millfork-benchmarks/sieve-kc.log @@ -1045,7 +1045,7 @@ VARIABLE REGISTER WEIGHTS (word) Ticks#1 2.0 (word) Ticks#12 4.0 (void()) end() -(word) last_time loadstore 0.38461538461538464 +(word) last_time loadstore 0.3571428571428571 (signed word()) main() (signed word) main::return (void()) print_byte((byte) print_byte::b) @@ -1607,7 +1607,7 @@ round: { REGISTER UPLIFT POTENTIAL REGISTERS Statement [1] (word) last_time ← (word) 0 [ last_time ] ( [ last_time ] ) always clobbers reg byte a -Statement [30] (word) Ticks#1 ← (word) last_time [ Ticks#1 ] ( main:3::end:28 [ Ticks#1 ] ) always clobbers reg byte a +Statement [30] (word) Ticks#1 ← (word) last_time [ last_time Ticks#1 ] ( main:3::end:28 [ last_time Ticks#1 ] ) always clobbers reg byte a Statement [32] (word) last_time ← (word) last_time - (word) Ticks#1 [ last_time ] ( main:3::end:28 [ last_time ] ) always clobbers reg byte a Statement [33] (word) Ticks#12 ← (word) last_time [ Ticks#12 ] ( main:3::end:28 [ Ticks#12 ] ) always clobbers reg byte a Statement [34] (word) print_word::w#0 ← (word) Ticks#12 [ print_word::w#0 ] ( main:3::end:28 [ print_word::w#0 ] ) always clobbers reg byte a @@ -1632,7 +1632,7 @@ Removing always clobbered register reg byte y as potential for zp[1]:10 [ round: Statement [76] (byte*) round::S#2 ← (byte*) round::S#3 + (byte) round::I#3 [ round::I#3 round::S#2 ] ( main:3::round:8 [ last_time round::I#3 round::S#2 ] main:3::round:10 [ last_time round::I#3 round::S#2 ] main:3::round:12 [ last_time round::I#3 round::S#2 ] main:3::round:14 [ last_time round::I#3 round::S#2 ] main:3::round:16 [ last_time round::I#3 round::S#2 ] main:3::round:18 [ last_time round::I#3 round::S#2 ] main:3::round:20 [ last_time round::I#3 round::S#2 ] main:3::round:22 [ last_time round::I#3 round::S#2 ] main:3::round:24 [ last_time round::I#3 round::S#2 ] main:3::round:26 [ last_time round::I#3 round::S#2 ] ) always clobbers reg byte a Statement [77] *((byte*) round::p#2) ← (byte) 0 [ round::p#2 ] ( main:3::round:8 [ last_time round::p#2 ] main:3::round:10 [ last_time round::p#2 ] main:3::round:12 [ last_time round::p#2 ] main:3::round:14 [ last_time round::p#2 ] main:3::round:16 [ last_time round::p#2 ] main:3::round:18 [ last_time round::p#2 ] main:3::round:20 [ last_time round::p#2 ] main:3::round:22 [ last_time round::p#2 ] main:3::round:24 [ last_time round::p#2 ] main:3::round:26 [ last_time round::p#2 ] ) always clobbers reg byte a reg byte y Statement [1] (word) last_time ← (word) 0 [ last_time ] ( [ last_time ] ) always clobbers reg byte a -Statement [30] (word) Ticks#1 ← (word) last_time [ Ticks#1 ] ( main:3::end:28 [ Ticks#1 ] ) always clobbers reg byte a +Statement [30] (word) Ticks#1 ← (word) last_time [ last_time Ticks#1 ] ( main:3::end:28 [ last_time Ticks#1 ] ) always clobbers reg byte a Statement [32] (word) last_time ← (word) last_time - (word) Ticks#1 [ last_time ] ( main:3::end:28 [ last_time ] ) always clobbers reg byte a Statement [33] (word) Ticks#12 ← (word) last_time [ Ticks#12 ] ( main:3::end:28 [ Ticks#12 ] ) always clobbers reg byte a Statement [34] (word) print_word::w#0 ← (word) Ticks#12 [ print_word::w#0 ] ( main:3::end:28 [ print_word::w#0 ] ) always clobbers reg byte a @@ -1669,7 +1669,7 @@ Potential registers zp[1]:23 [ round::$4 ] : zp[1]:23 , reg byte a , reg byte x REGISTER UPLIFT SCOPES Uplift Scope [round] 362.33: zp[2]:11 [ round::S#3 round::S#2 round::S#1 ] 39.33: zp[1]:10 [ round::I#3 round::I#2 ] 36.67: zp[2]:8 [ round::p#2 round::p#1 ] 22: zp[1]:23 [ round::$4 ] -Uplift Scope [] 38.5: zp[2]:2 [ print_line_cursor#8 print_line_cursor#1 ] 6.33: zp[2]:6 [ print_char_cursor#25 print_char_cursor#35 print_char_cursor#10 ] 4: zp[2]:17 [ Ticks#12 ] 2: zp[2]:15 [ Ticks#1 ] 0.38: zp[2]:13 [ last_time ] +Uplift Scope [] 38.5: zp[2]:2 [ print_line_cursor#8 print_line_cursor#1 ] 6.33: zp[2]:6 [ print_char_cursor#25 print_char_cursor#35 print_char_cursor#10 ] 4: zp[2]:17 [ Ticks#12 ] 2: zp[2]:15 [ Ticks#1 ] 0.36: zp[2]:13 [ last_time ] Uplift Scope [print_byte] 10: zp[1]:4 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] 4: zp[1]:21 [ print_byte::$0 ] 4: zp[1]:22 [ print_byte::$2 ] Uplift Scope [print_char] 14: zp[1]:5 [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] Uplift Scope [print_word] 2: zp[2]:19 [ print_word::w#0 ] @@ -2282,7 +2282,7 @@ FINAL SYMBOL TABLE (label) end::@1 (label) end::@2 (label) end::@return -(word) last_time loadstore zp[2]:6 0.38461538461538464 +(word) last_time loadstore zp[2]:6 0.3571428571428571 (signed word()) main() (label) main::@1 (label) main::@10 diff --git a/src/test/ref/millfork-benchmarks/sieve-kc.sym b/src/test/ref/millfork-benchmarks/sieve-kc.sym index 7bcb7d590..aeba7682a 100644 --- a/src/test/ref/millfork-benchmarks/sieve-kc.sym +++ b/src/test/ref/millfork-benchmarks/sieve-kc.sym @@ -16,7 +16,7 @@ (label) end::@1 (label) end::@2 (label) end::@return -(word) last_time loadstore zp[2]:6 0.38461538461538464 +(word) last_time loadstore zp[2]:6 0.3571428571428571 (signed word()) main() (label) main::@1 (label) main::@10 diff --git a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log index b21559b0f..52cc46d8a 100644 --- a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log +++ b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log @@ -1393,9 +1393,9 @@ interrupt(KERNEL_MIN)(void()) plex_irq() (byte) plex_irq::plexFreeNextYpos1_return (byte) plex_irq::plexFreeNextYpos1_return#0 4.0 (byte) plex_irq::rasterY -(byte) plex_show_idx loadstore 1.2272727272727273 +(byte) plex_show_idx loadstore 0.7941176470588236 (byte) plex_sprite_idx loadstore 0.3870967741935484 -(byte) plex_sprite_msb loadstore 0.6153846153846154 +(byte) plex_sprite_msb loadstore 0.48484848484848486 Initial phi equivalence classes [ loop::sin_idx#6 loop::sin_idx#1 ] @@ -2294,18 +2294,18 @@ Removing always clobbered register reg byte y as potential for zp[1]:24 [ plexSh Statement [101] *((const byte*) PLEX_FREE_YPOS + (byte) plex_free_next) ← (byte~) plexShowSprite::plexFreeAdd1_$0 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] ( plexShowSprite:86 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] ) always clobbers reg byte y Statement [105] *((const byte*) PLEX_SCREEN_PTR#0 + (byte) plex_sprite_idx) ← *((const byte*) PLEX_PTR + *((const byte*) PLEX_SORTED_IDX + (byte) plex_show_idx)) [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] ( plexShowSprite:86 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] ) always clobbers reg byte a reg byte x reg byte y Removing always clobbered register reg byte a as potential for zp[1]:24 [ plexShowSprite::plex_sprite_idx2#0 ] -Statement [106] (byte) plexShowSprite::xpos_idx#0 ← *((const byte*) PLEX_SORTED_IDX + (byte) plex_show_idx) [ plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] ( plexShowSprite:86 [ plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] ) always clobbers reg byte y -Statement [107] (byte~) plexShowSprite::$11 ← (byte) plexShowSprite::xpos_idx#0 << (byte) 1 [ plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 ] ( plexShowSprite:86 [ plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 ] ) always clobbers reg byte a -Statement [108] (byte~) plexShowSprite::$2 ← < *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) [ plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 plexShowSprite::$2 ] ( plexShowSprite:86 [ plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 plexShowSprite::$2 ] ) always clobbers reg byte a +Statement [106] (byte) plexShowSprite::xpos_idx#0 ← *((const byte*) PLEX_SORTED_IDX + (byte) plex_show_idx) [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] ( plexShowSprite:86 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] ) always clobbers reg byte y +Statement [107] (byte~) plexShowSprite::$11 ← (byte) plexShowSprite::xpos_idx#0 << (byte) 1 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 ] ( plexShowSprite:86 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 ] ) always clobbers reg byte a +Statement [108] (byte~) plexShowSprite::$2 ← < *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 plexShowSprite::$2 ] ( plexShowSprite:86 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 plexShowSprite::$2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:30 [ plexShowSprite::$11 ] -Statement [109] *((const byte*) SPRITES_XPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte~) plexShowSprite::$2 [ plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$11 ] ( plexShowSprite:86 [ plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$11 ] ) always clobbers reg byte y +Statement [109] *((const byte*) SPRITES_XPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte~) plexShowSprite::$2 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$11 ] ( plexShowSprite:86 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$11 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp[1]:30 [ plexShowSprite::$11 ] -Statement [110] (byte~) plexShowSprite::$3 ← > *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) [ plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] ( plexShowSprite:86 [ plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] ) always clobbers reg byte a -Statement [112] (byte~) plexShowSprite::$9 ← (byte) $ff ^ (byte) plex_sprite_msb [ plex_sprite_idx plex_free_next plexShowSprite::$9 ] ( plexShowSprite:86 [ plex_sprite_idx plex_free_next plexShowSprite::$9 ] ) always clobbers reg byte a -Statement [113] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) & (byte~) plexShowSprite::$9 [ plex_sprite_idx plex_free_next ] ( plexShowSprite:86 [ plex_sprite_idx plex_free_next ] ) always clobbers reg byte a +Statement [110] (byte~) plexShowSprite::$3 ← > *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] ( plexShowSprite:86 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] ) always clobbers reg byte a +Statement [112] (byte~) plexShowSprite::$9 ← (byte) $ff ^ (byte) plex_sprite_msb [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] ( plexShowSprite:86 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] ) always clobbers reg byte a +Statement [113] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) & (byte~) plexShowSprite::$9 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:86 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ) always clobbers reg byte a Statement [119] if((byte) plex_sprite_msb!=(byte) 0) goto plexShowSprite::@return [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:86 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ) always clobbers reg byte a Statement [120] (byte) plex_sprite_msb ← (byte) 1 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:86 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ) always clobbers reg byte a -Statement [122] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) | (byte) plex_sprite_msb [ plex_sprite_idx plex_free_next ] ( plexShowSprite:86 [ plex_sprite_idx plex_free_next ] ) always clobbers reg byte a +Statement [122] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) | (byte) plex_sprite_msb [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:86 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ) always clobbers reg byte a Statement [1] (byte) plex_show_idx ← (byte) 0 [ ] ( [ ] ) always clobbers reg byte a Statement [2] (byte) plex_sprite_idx ← (byte) 0 [ ] ( [ ] ) always clobbers reg byte a Statement [3] (byte) plex_sprite_msb ← (byte) 1 [ ] ( [ ] ) always clobbers reg byte a @@ -2352,16 +2352,16 @@ Statement [99] *((const byte*) SPRITES_YPOS + (byte) plexShowSprite::plex_sprite Removing always clobbered register reg byte y as potential for zp[1]:25 [ plexShowSprite::plexFreeAdd1_ypos#0 ] Statement [101] *((const byte*) PLEX_FREE_YPOS + (byte) plex_free_next) ← (byte~) plexShowSprite::plexFreeAdd1_$0 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] ( plexShowSprite:86 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] ) always clobbers reg byte y Statement [105] *((const byte*) PLEX_SCREEN_PTR#0 + (byte) plex_sprite_idx) ← *((const byte*) PLEX_PTR + *((const byte*) PLEX_SORTED_IDX + (byte) plex_show_idx)) [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] ( plexShowSprite:86 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] ) always clobbers reg byte a reg byte x reg byte y -Statement [106] (byte) plexShowSprite::xpos_idx#0 ← *((const byte*) PLEX_SORTED_IDX + (byte) plex_show_idx) [ plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] ( plexShowSprite:86 [ plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] ) always clobbers reg byte y -Statement [107] (byte~) plexShowSprite::$11 ← (byte) plexShowSprite::xpos_idx#0 << (byte) 1 [ plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 ] ( plexShowSprite:86 [ plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 ] ) always clobbers reg byte a -Statement [108] (byte~) plexShowSprite::$2 ← < *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) [ plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 plexShowSprite::$2 ] ( plexShowSprite:86 [ plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 plexShowSprite::$2 ] ) always clobbers reg byte a -Statement [109] *((const byte*) SPRITES_XPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte~) plexShowSprite::$2 [ plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$11 ] ( plexShowSprite:86 [ plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$11 ] ) always clobbers reg byte y -Statement [110] (byte~) plexShowSprite::$3 ← > *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) [ plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] ( plexShowSprite:86 [ plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] ) always clobbers reg byte a -Statement [112] (byte~) plexShowSprite::$9 ← (byte) $ff ^ (byte) plex_sprite_msb [ plex_sprite_idx plex_free_next plexShowSprite::$9 ] ( plexShowSprite:86 [ plex_sprite_idx plex_free_next plexShowSprite::$9 ] ) always clobbers reg byte a -Statement [113] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) & (byte~) plexShowSprite::$9 [ plex_sprite_idx plex_free_next ] ( plexShowSprite:86 [ plex_sprite_idx plex_free_next ] ) always clobbers reg byte a +Statement [106] (byte) plexShowSprite::xpos_idx#0 ← *((const byte*) PLEX_SORTED_IDX + (byte) plex_show_idx) [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] ( plexShowSprite:86 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] ) always clobbers reg byte y +Statement [107] (byte~) plexShowSprite::$11 ← (byte) plexShowSprite::xpos_idx#0 << (byte) 1 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 ] ( plexShowSprite:86 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 ] ) always clobbers reg byte a +Statement [108] (byte~) plexShowSprite::$2 ← < *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 plexShowSprite::$2 ] ( plexShowSprite:86 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 plexShowSprite::$2 ] ) always clobbers reg byte a +Statement [109] *((const byte*) SPRITES_XPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte~) plexShowSprite::$2 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$11 ] ( plexShowSprite:86 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$11 ] ) always clobbers reg byte y +Statement [110] (byte~) plexShowSprite::$3 ← > *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] ( plexShowSprite:86 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] ) always clobbers reg byte a +Statement [112] (byte~) plexShowSprite::$9 ← (byte) $ff ^ (byte) plex_sprite_msb [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] ( plexShowSprite:86 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] ) always clobbers reg byte a +Statement [113] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) & (byte~) plexShowSprite::$9 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:86 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ) always clobbers reg byte a Statement [119] if((byte) plex_sprite_msb!=(byte) 0) goto plexShowSprite::@return [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:86 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ) always clobbers reg byte a Statement [120] (byte) plex_sprite_msb ← (byte) 1 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:86 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ) always clobbers reg byte a -Statement [122] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) | (byte) plex_sprite_msb [ plex_sprite_idx plex_free_next ] ( plexShowSprite:86 [ plex_sprite_idx plex_free_next ] ) always clobbers reg byte a +Statement [122] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) | (byte) plex_sprite_msb [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:86 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ) always clobbers reg byte a Statement [1] (byte) plex_show_idx ← (byte) 0 [ ] ( [ ] ) always clobbers reg byte a Statement [2] (byte) plex_sprite_idx ← (byte) 0 [ ] ( [ ] ) always clobbers reg byte a Statement [3] (byte) plex_sprite_msb ← (byte) 1 [ ] ( [ ] ) always clobbers reg byte a @@ -2407,16 +2407,16 @@ Statement [98] (byte) plexShowSprite::plexFreeAdd1_ypos#0 ← *((const byte*) PL Statement [99] *((const byte*) SPRITES_YPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte) plexShowSprite::plexFreeAdd1_ypos#0 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::plexFreeAdd1_ypos#0 ] ( plexShowSprite:86 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::plexFreeAdd1_ypos#0 ] ) always clobbers reg byte y Statement [101] *((const byte*) PLEX_FREE_YPOS + (byte) plex_free_next) ← (byte~) plexShowSprite::plexFreeAdd1_$0 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] ( plexShowSprite:86 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] ) always clobbers reg byte y Statement [105] *((const byte*) PLEX_SCREEN_PTR#0 + (byte) plex_sprite_idx) ← *((const byte*) PLEX_PTR + *((const byte*) PLEX_SORTED_IDX + (byte) plex_show_idx)) [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] ( plexShowSprite:86 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] ) always clobbers reg byte a reg byte x reg byte y -Statement [106] (byte) plexShowSprite::xpos_idx#0 ← *((const byte*) PLEX_SORTED_IDX + (byte) plex_show_idx) [ plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] ( plexShowSprite:86 [ plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] ) always clobbers reg byte y -Statement [107] (byte~) plexShowSprite::$11 ← (byte) plexShowSprite::xpos_idx#0 << (byte) 1 [ plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 ] ( plexShowSprite:86 [ plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 ] ) always clobbers reg byte a -Statement [108] (byte~) plexShowSprite::$2 ← < *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) [ plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 plexShowSprite::$2 ] ( plexShowSprite:86 [ plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 plexShowSprite::$2 ] ) always clobbers reg byte a -Statement [109] *((const byte*) SPRITES_XPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte~) plexShowSprite::$2 [ plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$11 ] ( plexShowSprite:86 [ plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$11 ] ) always clobbers reg byte y -Statement [110] (byte~) plexShowSprite::$3 ← > *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) [ plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] ( plexShowSprite:86 [ plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] ) always clobbers reg byte a -Statement [112] (byte~) plexShowSprite::$9 ← (byte) $ff ^ (byte) plex_sprite_msb [ plex_sprite_idx plex_free_next plexShowSprite::$9 ] ( plexShowSprite:86 [ plex_sprite_idx plex_free_next plexShowSprite::$9 ] ) always clobbers reg byte a -Statement [113] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) & (byte~) plexShowSprite::$9 [ plex_sprite_idx plex_free_next ] ( plexShowSprite:86 [ plex_sprite_idx plex_free_next ] ) always clobbers reg byte a +Statement [106] (byte) plexShowSprite::xpos_idx#0 ← *((const byte*) PLEX_SORTED_IDX + (byte) plex_show_idx) [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] ( plexShowSprite:86 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] ) always clobbers reg byte y +Statement [107] (byte~) plexShowSprite::$11 ← (byte) plexShowSprite::xpos_idx#0 << (byte) 1 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 ] ( plexShowSprite:86 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 ] ) always clobbers reg byte a +Statement [108] (byte~) plexShowSprite::$2 ← < *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 plexShowSprite::$2 ] ( plexShowSprite:86 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 plexShowSprite::$2 ] ) always clobbers reg byte a +Statement [109] *((const byte*) SPRITES_XPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte~) plexShowSprite::$2 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$11 ] ( plexShowSprite:86 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$11 ] ) always clobbers reg byte y +Statement [110] (byte~) plexShowSprite::$3 ← > *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] ( plexShowSprite:86 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] ) always clobbers reg byte a +Statement [112] (byte~) plexShowSprite::$9 ← (byte) $ff ^ (byte) plex_sprite_msb [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] ( plexShowSprite:86 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] ) always clobbers reg byte a +Statement [113] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) & (byte~) plexShowSprite::$9 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:86 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ) always clobbers reg byte a Statement [119] if((byte) plex_sprite_msb!=(byte) 0) goto plexShowSprite::@return [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:86 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ) always clobbers reg byte a Statement [120] (byte) plex_sprite_msb ← (byte) 1 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:86 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ) always clobbers reg byte a -Statement [122] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) | (byte) plex_sprite_msb [ plex_sprite_idx plex_free_next ] ( plexShowSprite:86 [ plex_sprite_idx plex_free_next ] ) always clobbers reg byte a +Statement [122] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) | (byte) plex_sprite_msb [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:86 [ plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ) always clobbers reg byte a Potential registers zp[1]:2 [ loop::sin_idx#6 loop::sin_idx#1 ] : zp[1]:2 , reg byte x , reg byte y , Potential registers zp[1]:3 [ loop::y_idx#2 loop::y_idx#1 loop::y_idx#4 ] : zp[1]:3 , reg byte x , reg byte y , Potential registers zp[1]:4 [ loop::sy#2 loop::sy#1 ] : zp[1]:4 , reg byte x , reg byte y , @@ -2458,7 +2458,7 @@ Uplift Scope [init] 33: zp[1]:11 [ init::ss#2 init::ss#1 ] 25.3: zp[1]:8 [ init: Uplift Scope [plexShowSprite] 4: zp[1]:26 [ plexShowSprite::plexFreeAdd1_$0 ] 4: zp[1]:27 [ plexShowSprite::plexFreeAdd1_$1 ] 4: zp[1]:28 [ plexShowSprite::plexFreeAdd1_$2 ] 4: zp[1]:29 [ plexShowSprite::xpos_idx#0 ] 4: zp[1]:31 [ plexShowSprite::$2 ] 4: zp[1]:32 [ plexShowSprite::$3 ] 4: zp[1]:33 [ plexShowSprite::$9 ] 4: zp[1]:34 [ plexShowSprite::$5 ] 4: zp[1]:35 [ plexShowSprite::$6 ] 3: zp[1]:25 [ plexShowSprite::plexFreeAdd1_ypos#0 ] 2: zp[1]:30 [ plexShowSprite::$11 ] 0.5: zp[1]:24 [ plexShowSprite::plex_sprite_idx2#0 ] Uplift Scope [plexInit] 38.5: zp[1]:12 [ plexInit::i#2 plexInit::i#1 ] Uplift Scope [plex_irq] 11: zp[1]:23 [ plex_irq::$4 ] 4: zp[1]:22 [ plex_irq::plexFreeNextYpos1_return#0 ] -Uplift Scope [] 10.55: zp[1]:17 [ framedone ] 1.23: zp[1]:13 [ plex_show_idx ] 0.68: zp[1]:16 [ plex_free_next ] 0.62: zp[1]:15 [ plex_sprite_msb ] 0.39: zp[1]:14 [ plex_sprite_idx ] +Uplift Scope [] 10.55: zp[1]:17 [ framedone ] 0.79: zp[1]:13 [ plex_show_idx ] 0.68: zp[1]:16 [ plex_free_next ] 0.48: zp[1]:15 [ plex_sprite_msb ] 0.39: zp[1]:14 [ plex_sprite_idx ] Uplift Scope [main] Uplifting [plexSort] best 60379 combination reg byte x [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] reg byte x [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] zp[1]:20 [ plexSort::s#2 ] zp[1]:5 [ plexSort::m#2 plexSort::m#1 ] zp[1]:19 [ plexSort::nxt_y#0 ] zp[1]:18 [ plexSort::nxt_idx#0 ] @@ -2511,10 +2511,10 @@ Attempting to uplift remaining variables inzp[1]:13 [ plex_show_idx ] Uplifting [] best 57312 combination zp[1]:13 [ plex_show_idx ] Attempting to uplift remaining variables inzp[1]:16 [ plex_free_next ] Uplifting [] best 57312 combination zp[1]:16 [ plex_free_next ] -Attempting to uplift remaining variables inzp[1]:15 [ plex_sprite_msb ] -Uplifting [] best 57312 combination zp[1]:15 [ plex_sprite_msb ] Attempting to uplift remaining variables inzp[1]:24 [ plexShowSprite::plex_sprite_idx2#0 ] Uplifting [plexShowSprite] best 57312 combination zp[1]:24 [ plexShowSprite::plex_sprite_idx2#0 ] +Attempting to uplift remaining variables inzp[1]:15 [ plex_sprite_msb ] +Uplifting [] best 57312 combination zp[1]:15 [ plex_sprite_msb ] Attempting to uplift remaining variables inzp[1]:14 [ plex_sprite_idx ] Uplifting [] best 57312 combination zp[1]:14 [ plex_sprite_idx ] Coalescing zero page register [ zp[1]:24 [ plexShowSprite::plex_sprite_idx2#0 ] ] with [ zp[1]:23 [ plex_irq::$4 ] ] @@ -3482,9 +3482,9 @@ interrupt(KERNEL_MIN)(void()) plex_irq() (byte) plex_irq::plexFreeNextYpos1_return (byte) plex_irq::plexFreeNextYpos1_return#0 reg byte x 4.0 (byte) plex_irq::rasterY -(byte) plex_show_idx loadstore zp[1]:6 1.2272727272727273 +(byte) plex_show_idx loadstore zp[1]:6 0.7941176470588236 (byte) plex_sprite_idx loadstore zp[1]:7 0.3870967741935484 -(byte) plex_sprite_msb loadstore zp[1]:8 0.6153846153846154 +(byte) plex_sprite_msb loadstore zp[1]:8 0.48484848484848486 zp[1]:2 [ loop::sin_idx#6 loop::sin_idx#1 ] reg byte x [ loop::y_idx#2 loop::y_idx#1 loop::y_idx#4 ] diff --git a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.sym b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.sym index 78a337162..b52e0e66b 100644 --- a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.sym +++ b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.sym @@ -151,9 +151,9 @@ interrupt(KERNEL_MIN)(void()) plex_irq() (byte) plex_irq::plexFreeNextYpos1_return (byte) plex_irq::plexFreeNextYpos1_return#0 reg byte x 4.0 (byte) plex_irq::rasterY -(byte) plex_show_idx loadstore zp[1]:6 1.2272727272727273 +(byte) plex_show_idx loadstore zp[1]:6 0.7941176470588236 (byte) plex_sprite_idx loadstore zp[1]:7 0.3870967741935484 -(byte) plex_sprite_msb loadstore zp[1]:8 0.6153846153846154 +(byte) plex_sprite_msb loadstore zp[1]:8 0.48484848484848486 zp[1]:2 [ loop::sin_idx#6 loop::sin_idx#1 ] reg byte x [ loop::y_idx#2 loop::y_idx#1 loop::y_idx#4 ] diff --git a/src/test/ref/no-recursion-heavy.asm b/src/test/ref/no-recursion-heavy.asm index 591ddf6a4..0799698d9 100644 --- a/src/test/ref/no-recursion-heavy.asm +++ b/src/test/ref/no-recursion-heavy.asm @@ -2,12 +2,14 @@ :BasicUpstart(main) .pc = $80d "Program" .label ba = 2 + .label be = 6 .label bb = 3 .label bb_1 = 4 .label bc = 5 main: { lda #0 sta.z ba + sta.z be tay tax sta.z bb @@ -252,14 +254,46 @@ fb: { } fc: { cmp #0 + bne __b1 + inc.z be + __b1: cmp #1 + bne __b2 + inc.z be + __b2: cmp #2 + bne __b3 + inc.z be + __b3: cmp #3 + bne __b4 + inc.z be + __b4: cmp #4 + bne __b5 + inc.z be + __b5: cmp #5 + bne __b6 + inc.z be + __b6: cmp #6 + bne __b7 + inc.z be + __b7: cmp #7 + bne __b8 + inc.z be + __b8: cmp #8 + bne __b9 + inc.z be + __b9: cmp #9 + bne __b19 + lda #0 + sta.z be + rts + __b19: rts } diff --git a/src/test/ref/no-recursion-heavy.cfg b/src/test/ref/no-recursion-heavy.cfg index a0caf66f1..b17b99a9f 100644 --- a/src/test/ref/no-recursion-heavy.cfg +++ b/src/test/ref/no-recursion-heavy.cfg @@ -14,6 +14,7 @@ main: scope:[main] from @1 to:main::@1 main::@1: scope:[main] from main main::@3 [5] (byte) ba#17 ← phi( main/(byte) 0 main::@3/(byte) ba#1 ) + [5] (byte) be#2 ← phi( main/(byte) 0 main::@3/(byte) be#13 ) [5] (byte) bd#2 ← phi( main/(byte) 0 main::@3/(byte) bd#13 ) [5] (byte) bc#2 ← phi( main/(byte) 0 main::@3/(byte) bc#13 ) [5] (byte) bb#16 ← phi( main/(byte) 0 main::@3/(byte) bb#13 ) @@ -36,6 +37,7 @@ f0::@10: scope:[f0] from f0 [12] call fa to:f0::@1 f0::@1: scope:[f0] from f0 f0::@10 + [13] (byte) be#142 ← phi( f0/(byte) be#2 f0::@10/(byte) be#24 ) [13] (byte) bd#129 ← phi( f0/(byte) bd#2 f0::@10/(byte) bd#24 ) [13] (byte) bc#63 ← phi( f0/(byte) bc#2 f0::@10/(byte) bc#24 ) [13] (byte) bb#18 ← phi( f0/(byte) bb#16 f0::@10/(byte) bb#3 ) @@ -47,6 +49,7 @@ f0::@11: scope:[f0] from f0::@1 [17] call fa to:f0::@2 f0::@2: scope:[f0] from f0::@1 f0::@11 + [18] (byte) be#143 ← phi( f0::@1/(byte) be#142 f0::@11/(byte) be#24 ) [18] (byte) bd#130 ← phi( f0::@1/(byte) bd#129 f0::@11/(byte) bd#24 ) [18] (byte) bc#64 ← phi( f0::@1/(byte) bc#63 f0::@11/(byte) bc#24 ) [18] (byte) bb#19 ← phi( f0::@1/(byte) bb#18 f0::@11/(byte) bb#4 ) @@ -58,6 +61,7 @@ f0::@12: scope:[f0] from f0::@2 [22] call fa to:f0::@3 f0::@3: scope:[f0] from f0::@12 f0::@2 + [23] (byte) be#144 ← phi( f0::@2/(byte) be#143 f0::@12/(byte) be#24 ) [23] (byte) bd#131 ← phi( f0::@2/(byte) bd#130 f0::@12/(byte) bd#24 ) [23] (byte) bc#65 ← phi( f0::@2/(byte) bc#64 f0::@12/(byte) bc#24 ) [23] (byte) bb#20 ← phi( f0::@2/(byte) bb#19 f0::@12/(byte) bb#5 ) @@ -69,6 +73,7 @@ f0::@13: scope:[f0] from f0::@3 [27] call fa to:f0::@4 f0::@4: scope:[f0] from f0::@13 f0::@3 + [28] (byte) be#100 ← phi( f0::@13/(byte) be#24 f0::@3/(byte) be#144 ) [28] (byte) bd#132 ← phi( f0::@13/(byte) bd#24 f0::@3/(byte) bd#131 ) [28] (byte) bc#66 ← phi( f0::@13/(byte) bc#24 f0::@3/(byte) bc#65 ) [28] (byte) bb#21 ← phi( f0::@13/(byte) bb#6 f0::@3/(byte) bb#20 ) @@ -80,6 +85,7 @@ f0::@14: scope:[f0] from f0::@4 [32] call fa to:f0::@5 f0::@5: scope:[f0] from f0::@14 f0::@4 + [33] (byte) be#101 ← phi( f0::@14/(byte) be#24 f0::@4/(byte) be#100 ) [33] (byte) bd#133 ← phi( f0::@14/(byte) bd#24 f0::@4/(byte) bd#132 ) [33] (byte) bc#100 ← phi( f0::@14/(byte) bc#24 f0::@4/(byte) bc#66 ) [33] (byte) bb#22 ← phi( f0::@14/(byte) bb#66 f0::@4/(byte) bb#21 ) @@ -91,6 +97,7 @@ f0::@15: scope:[f0] from f0::@5 [37] call fa to:f0::@6 f0::@6: scope:[f0] from f0::@15 f0::@5 + [38] (byte) be#102 ← phi( f0::@15/(byte) be#24 f0::@5/(byte) be#101 ) [38] (byte) bd#134 ← phi( f0::@15/(byte) bd#24 f0::@5/(byte) bd#133 ) [38] (byte) bc#101 ← phi( f0::@15/(byte) bc#24 f0::@5/(byte) bc#100 ) [38] (byte) bb#23 ← phi( f0::@15/(byte) bb#67 f0::@5/(byte) bb#22 ) @@ -102,6 +109,7 @@ f0::@16: scope:[f0] from f0::@6 [42] call fa to:f0::@7 f0::@7: scope:[f0] from f0::@16 f0::@6 + [43] (byte) be#103 ← phi( f0::@16/(byte) be#24 f0::@6/(byte) be#102 ) [43] (byte) bd#135 ← phi( f0::@16/(byte) bd#24 f0::@6/(byte) bd#134 ) [43] (byte) bc#102 ← phi( f0::@16/(byte) bc#24 f0::@6/(byte) bc#101 ) [43] (byte) bb#24 ← phi( f0::@16/(byte) bb#68 f0::@6/(byte) bb#23 ) @@ -113,6 +121,7 @@ f0::@17: scope:[f0] from f0::@7 [47] call fa to:f0::@8 f0::@8: scope:[f0] from f0::@17 f0::@7 + [48] (byte) be#104 ← phi( f0::@17/(byte) be#24 f0::@7/(byte) be#103 ) [48] (byte) bd#136 ← phi( f0::@17/(byte) bd#24 f0::@7/(byte) bd#135 ) [48] (byte) bc#103 ← phi( f0::@17/(byte) bc#24 f0::@7/(byte) bc#102 ) [48] (byte) bb#25 ← phi( f0::@17/(byte) bb#10 f0::@7/(byte) bb#24 ) @@ -124,6 +133,7 @@ f0::@18: scope:[f0] from f0::@8 [52] call fa to:f0::@9 f0::@9: scope:[f0] from f0::@18 f0::@8 + [53] (byte) be#105 ← phi( f0::@18/(byte) be#24 f0::@8/(byte) be#104 ) [53] (byte) bd#93 ← phi( f0::@18/(byte) bd#24 f0::@8/(byte) bd#136 ) [53] (byte) bc#71 ← phi( f0::@18/(byte) bc#24 f0::@8/(byte) bc#103 ) [53] (byte) bb#50 ← phi( f0::@18/(byte) bb#11 f0::@8/(byte) bb#25 ) @@ -134,6 +144,7 @@ f0::@19: scope:[f0] from f0::@9 [56] call fa to:f0::@return f0::@return: scope:[f0] from f0::@19 f0::@9 + [57] (byte) be#13 ← phi( f0::@19/(byte) be#24 f0::@9/(byte) be#105 ) [57] (byte) bd#13 ← phi( f0::@19/(byte) bd#24 f0::@9/(byte) bd#93 ) [57] (byte) bc#13 ← phi( f0::@19/(byte) bc#24 f0::@9/(byte) bc#71 ) [57] (byte) bb#13 ← phi( f0::@19/(byte) 0 f0::@9/(byte) bb#50 ) @@ -142,6 +153,7 @@ f0::@return: scope:[f0] from f0::@19 f0::@9 (void()) fa() fa: scope:[fa] from f0::@10 f0::@11 f0::@12 f0::@13 f0::@14 f0::@15 f0::@16 f0::@17 f0::@18 f0::@19 + [59] (byte) be#107 ← phi( f0::@10/(byte) be#2 f0::@11/(byte) be#142 f0::@12/(byte) be#143 f0::@13/(byte) be#144 f0::@14/(byte) be#100 f0::@15/(byte) be#101 f0::@16/(byte) be#102 f0::@17/(byte) be#103 f0::@18/(byte) be#104 f0::@19/(byte) be#105 ) [59] (byte) bd#137 ← phi( f0::@10/(byte) bd#2 f0::@11/(byte) bd#129 f0::@12/(byte) bd#130 f0::@13/(byte) bd#131 f0::@14/(byte) bd#132 f0::@15/(byte) bd#133 f0::@16/(byte) bd#134 f0::@17/(byte) bd#135 f0::@18/(byte) bd#136 f0::@19/(byte) bd#93 ) [59] (byte) bc#39 ← phi( f0::@10/(byte) bc#2 f0::@11/(byte) bc#63 f0::@12/(byte) bc#64 f0::@13/(byte) bc#65 f0::@14/(byte) bc#66 f0::@15/(byte) bc#100 f0::@16/(byte) bc#101 f0::@17/(byte) bc#102 f0::@18/(byte) bc#103 f0::@19/(byte) bc#71 ) [59] (byte) bb#27 ← phi( f0::@10/(byte) bb#100 f0::@11/(byte) bb#101 f0::@12/(byte) bb#102 f0::@13/(byte) bb#103 f0::@14/(byte) bb#104 f0::@15/(byte) bb#105 f0::@16/(byte) bb#106 f0::@17/(byte) bb#107 f0::@18/(byte) bb#108 f0::@19/(byte) 0 ) @@ -153,6 +165,7 @@ fa::@10: scope:[fa] from fa [63] call fb to:fa::@1 fa::@1: scope:[fa] from fa fa::@10 + [64] (byte) be#108 ← phi( fa/(byte) be#107 fa::@10/(byte) be#35 ) [64] (byte) bd#138 ← phi( fa/(byte) bd#137 fa::@10/(byte) bd#35 ) [64] (byte) bc#40 ← phi( fa/(byte) bc#39 fa::@10/(byte) bc#104 ) [65] if((byte) bb#27!=(byte) 1) goto fa::@2 @@ -163,6 +176,7 @@ fa::@11: scope:[fa] from fa::@1 [68] call fb to:fa::@2 fa::@2: scope:[fa] from fa::@1 fa::@11 + [69] (byte) be#109 ← phi( fa::@1/(byte) be#108 fa::@11/(byte) be#35 ) [69] (byte) bd#139 ← phi( fa::@1/(byte) bd#138 fa::@11/(byte) bd#35 ) [69] (byte) bc#41 ← phi( fa::@1/(byte) bc#40 fa::@11/(byte) bc#105 ) [70] if((byte) bb#27!=(byte) 2) goto fa::@3 @@ -173,6 +187,7 @@ fa::@12: scope:[fa] from fa::@2 [73] call fb to:fa::@3 fa::@3: scope:[fa] from fa::@12 fa::@2 + [74] (byte) be#110 ← phi( fa::@2/(byte) be#109 fa::@12/(byte) be#35 ) [74] (byte) bd#140 ← phi( fa::@2/(byte) bd#139 fa::@12/(byte) bd#35 ) [74] (byte) bc#42 ← phi( fa::@2/(byte) bc#41 fa::@12/(byte) bc#106 ) [75] if((byte) bb#27!=(byte) 3) goto fa::@4 @@ -183,6 +198,7 @@ fa::@13: scope:[fa] from fa::@3 [78] call fb to:fa::@4 fa::@4: scope:[fa] from fa::@13 fa::@3 + [79] (byte) be#111 ← phi( fa::@13/(byte) be#35 fa::@3/(byte) be#110 ) [79] (byte) bd#141 ← phi( fa::@13/(byte) bd#35 fa::@3/(byte) bd#140 ) [79] (byte) bc#43 ← phi( fa::@13/(byte) bc#107 fa::@3/(byte) bc#42 ) [80] if((byte) bb#27!=(byte) 4) goto fa::@5 @@ -193,6 +209,7 @@ fa::@14: scope:[fa] from fa::@4 [83] call fb to:fa::@5 fa::@5: scope:[fa] from fa::@14 fa::@4 + [84] (byte) be#112 ← phi( fa::@14/(byte) be#35 fa::@4/(byte) be#111 ) [84] (byte) bd#100 ← phi( fa::@14/(byte) bd#35 fa::@4/(byte) bd#141 ) [84] (byte) bc#44 ← phi( fa::@14/(byte) bc#108 fa::@4/(byte) bc#43 ) [85] if((byte) bb#27!=(byte) 5) goto fa::@6 @@ -203,6 +220,7 @@ fa::@15: scope:[fa] from fa::@5 [88] call fb to:fa::@6 fa::@6: scope:[fa] from fa::@15 fa::@5 + [89] (byte) be#113 ← phi( fa::@15/(byte) be#35 fa::@5/(byte) be#112 ) [89] (byte) bd#101 ← phi( fa::@15/(byte) bd#35 fa::@5/(byte) bd#100 ) [89] (byte) bc#45 ← phi( fa::@15/(byte) bc#109 fa::@5/(byte) bc#44 ) [90] if((byte) bb#27!=(byte) 6) goto fa::@7 @@ -213,6 +231,7 @@ fa::@16: scope:[fa] from fa::@6 [93] call fb to:fa::@7 fa::@7: scope:[fa] from fa::@16 fa::@6 + [94] (byte) be#114 ← phi( fa::@16/(byte) be#35 fa::@6/(byte) be#113 ) [94] (byte) bd#102 ← phi( fa::@16/(byte) bd#35 fa::@6/(byte) bd#101 ) [94] (byte) bc#46 ← phi( fa::@16/(byte) bc#110 fa::@6/(byte) bc#45 ) [95] if((byte) bb#27!=(byte) 7) goto fa::@8 @@ -223,6 +242,7 @@ fa::@17: scope:[fa] from fa::@7 [98] call fb to:fa::@8 fa::@8: scope:[fa] from fa::@17 fa::@7 + [99] (byte) be#115 ← phi( fa::@17/(byte) be#35 fa::@7/(byte) be#114 ) [99] (byte) bd#103 ← phi( fa::@17/(byte) bd#35 fa::@7/(byte) bd#102 ) [99] (byte) bc#47 ← phi( fa::@17/(byte) bc#111 fa::@7/(byte) bc#46 ) [100] if((byte) bb#27!=(byte) 8) goto fa::@9 @@ -233,6 +253,7 @@ fa::@18: scope:[fa] from fa::@8 [103] call fb to:fa::@9 fa::@9: scope:[fa] from fa::@18 fa::@8 + [104] (byte) be#116 ← phi( fa::@18/(byte) be#35 fa::@8/(byte) be#115 ) [104] (byte) bd#104 ← phi( fa::@18/(byte) bd#35 fa::@8/(byte) bd#103 ) [104] (byte) bc#83 ← phi( fa::@18/(byte) bc#112 fa::@8/(byte) bc#47 ) [105] if((byte) bb#27!=(byte) 9) goto fa::@return @@ -242,6 +263,7 @@ fa::@19: scope:[fa] from fa::@9 [107] call fb to:fa::@return fa::@return: scope:[fa] from fa::@19 fa::@9 + [108] (byte) be#24 ← phi( fa::@19/(byte) be#35 fa::@9/(byte) be#116 ) [108] (byte) bd#24 ← phi( fa::@19/(byte) bd#35 fa::@9/(byte) bd#104 ) [108] (byte) bc#24 ← phi( fa::@19/(byte) 0 fa::@9/(byte) bc#83 ) [109] return @@ -249,6 +271,7 @@ fa::@return: scope:[fa] from fa::@19 fa::@9 (void()) fb() fb: scope:[fb] from fa::@10 fa::@11 fa::@12 fa::@13 fa::@14 fa::@15 fa::@16 fa::@17 fa::@18 fa::@19 + [110] (byte) be#118 ← phi( fa::@10/(byte) be#107 fa::@11/(byte) be#108 fa::@12/(byte) be#109 fa::@13/(byte) be#110 fa::@14/(byte) be#111 fa::@15/(byte) be#112 fa::@16/(byte) be#113 fa::@17/(byte) be#114 fa::@18/(byte) be#115 fa::@19/(byte) be#116 ) [110] (byte) bd#106 ← phi( fa::@10/(byte) bd#137 fa::@11/(byte) bd#138 fa::@12/(byte) bd#139 fa::@13/(byte) bd#140 fa::@14/(byte) bd#141 fa::@15/(byte) bd#100 fa::@16/(byte) bd#101 fa::@17/(byte) bd#102 fa::@18/(byte) bd#103 fa::@19/(byte) bd#104 ) [110] (byte) bc#113 ← phi( fa::@10/(byte) bc#172 fa::@11/(byte) bc#173 fa::@12/(byte) bc#174 fa::@13/(byte) bc#175 fa::@14/(byte) bc#176 fa::@15/(byte) bc#177 fa::@16/(byte) bc#178 fa::@17/(byte) bc#179 fa::@18/(byte) bc#180 fa::@19/(byte) 0 ) [111] if((byte) bc#113!=(byte) 0) goto fb::@1 @@ -259,6 +282,7 @@ fb::@10: scope:[fb] from fb [114] call fc to:fb::@1 fb::@1: scope:[fb] from fb fb::@10 + [115] (byte) be#119 ← phi( fb/(byte) be#118 fb::@10/(byte) be#46 ) [115] (byte) bd#107 ← phi( fb/(byte) bd#106 fb::@10/(byte) bd#146 ) [116] if((byte) bc#113!=(byte) 1) goto fb::@2 to:fb::@11 @@ -268,6 +292,7 @@ fb::@11: scope:[fb] from fb::@1 [119] call fc to:fb::@2 fb::@2: scope:[fb] from fb::@1 fb::@11 + [120] (byte) be#120 ← phi( fb::@1/(byte) be#119 fb::@11/(byte) be#46 ) [120] (byte) bd#108 ← phi( fb::@1/(byte) bd#107 fb::@11/(byte) bd#147 ) [121] if((byte) bc#113!=(byte) 2) goto fb::@3 to:fb::@12 @@ -277,6 +302,7 @@ fb::@12: scope:[fb] from fb::@2 [124] call fc to:fb::@3 fb::@3: scope:[fb] from fb::@12 fb::@2 + [125] (byte) be#121 ← phi( fb::@2/(byte) be#120 fb::@12/(byte) be#46 ) [125] (byte) bd#109 ← phi( fb::@2/(byte) bd#108 fb::@12/(byte) bd#148 ) [126] if((byte) bc#113!=(byte) 3) goto fb::@4 to:fb::@13 @@ -286,6 +312,7 @@ fb::@13: scope:[fb] from fb::@3 [129] call fc to:fb::@4 fb::@4: scope:[fb] from fb::@13 fb::@3 + [130] (byte) be#122 ← phi( fb::@13/(byte) be#46 fb::@3/(byte) be#121 ) [130] (byte) bd#110 ← phi( fb::@13/(byte) bd#149 fb::@3/(byte) bd#109 ) [131] if((byte) bc#113!=(byte) 4) goto fb::@5 to:fb::@14 @@ -295,6 +322,7 @@ fb::@14: scope:[fb] from fb::@4 [134] call fc to:fb::@5 fb::@5: scope:[fb] from fb::@14 fb::@4 + [135] (byte) be#123 ← phi( fb::@14/(byte) be#46 fb::@4/(byte) be#122 ) [135] (byte) bd#111 ← phi( fb::@14/(byte) bd#150 fb::@4/(byte) bd#110 ) [136] if((byte) bc#113!=(byte) 5) goto fb::@6 to:fb::@15 @@ -304,6 +332,7 @@ fb::@15: scope:[fb] from fb::@5 [139] call fc to:fb::@6 fb::@6: scope:[fb] from fb::@15 fb::@5 + [140] (byte) be#124 ← phi( fb::@15/(byte) be#46 fb::@5/(byte) be#123 ) [140] (byte) bd#112 ← phi( fb::@15/(byte) bd#151 fb::@5/(byte) bd#111 ) [141] if((byte) bc#113!=(byte) 6) goto fb::@7 to:fb::@16 @@ -313,6 +342,7 @@ fb::@16: scope:[fb] from fb::@6 [144] call fc to:fb::@7 fb::@7: scope:[fb] from fb::@16 fb::@6 + [145] (byte) be#125 ← phi( fb::@16/(byte) be#46 fb::@6/(byte) be#124 ) [145] (byte) bd#113 ← phi( fb::@16/(byte) bd#152 fb::@6/(byte) bd#112 ) [146] if((byte) bc#113!=(byte) 7) goto fb::@8 to:fb::@17 @@ -322,6 +352,7 @@ fb::@17: scope:[fb] from fb::@7 [149] call fc to:fb::@8 fb::@8: scope:[fb] from fb::@17 fb::@7 + [150] (byte) be#126 ← phi( fb::@17/(byte) be#46 fb::@7/(byte) be#125 ) [150] (byte) bd#114 ← phi( fb::@17/(byte) bd#153 fb::@7/(byte) bd#113 ) [151] if((byte) bc#113!=(byte) 8) goto fb::@9 to:fb::@18 @@ -331,6 +362,7 @@ fb::@18: scope:[fb] from fb::@8 [154] call fc to:fb::@9 fb::@9: scope:[fb] from fb::@18 fb::@8 + [155] (byte) be#127 ← phi( fb::@18/(byte) be#46 fb::@8/(byte) be#126 ) [155] (byte) bd#116 ← phi( fb::@18/(byte) bd#154 fb::@8/(byte) bd#114 ) [156] if((byte) bc#113!=(byte) 9) goto fb::@return to:fb::@19 @@ -339,72 +371,84 @@ fb::@19: scope:[fb] from fb::@9 [158] call fc to:fb::@return fb::@return: scope:[fb] from fb::@19 fb::@9 + [159] (byte) be#35 ← phi( fb::@19/(byte) be#46 fb::@9/(byte) be#127 ) [159] (byte) bd#35 ← phi( fb::@19/(byte) 0 fb::@9/(byte) bd#116 ) [160] return to:@return (void()) fc() fc: scope:[fc] from fb::@10 fb::@11 fb::@12 fb::@13 fb::@14 fb::@15 fb::@16 fb::@17 fb::@18 fb::@19 + [161] (byte) be#129 ← phi( fb::@10/(byte) be#118 fb::@11/(byte) be#119 fb::@12/(byte) be#120 fb::@13/(byte) be#121 fb::@14/(byte) be#122 fb::@15/(byte) be#123 fb::@16/(byte) be#124 fb::@17/(byte) be#125 fb::@18/(byte) be#126 fb::@19/(byte) be#127 ) [161] (byte) bd#117 ← phi( fb::@10/(byte) bd#235 fb::@11/(byte) bd#236 fb::@12/(byte) bd#237 fb::@13/(byte) bd#238 fb::@14/(byte) bd#239 fb::@15/(byte) bd#240 fb::@16/(byte) bd#241 fb::@17/(byte) bd#242 fb::@18/(byte) bd#243 fb::@19/(byte) 0 ) [162] if((byte) bd#117!=(byte) 0) goto fc::@1 to:fc::@10 fc::@10: scope:[fc] from fc - [163] phi() + [163] (byte) be#36 ← ++ (byte) be#129 to:fc::@1 fc::@1: scope:[fc] from fc fc::@10 - [164] if((byte) bd#117!=(byte) 1) goto fc::@2 + [164] (byte) be#130 ← phi( fc/(byte) be#129 fc::@10/(byte) be#36 ) + [165] if((byte) bd#117!=(byte) 1) goto fc::@2 to:fc::@11 fc::@11: scope:[fc] from fc::@1 - [165] phi() + [166] (byte) be#37 ← ++ (byte) be#130 to:fc::@2 fc::@2: scope:[fc] from fc::@1 fc::@11 - [166] if((byte) bd#117!=(byte) 2) goto fc::@3 + [167] (byte) be#131 ← phi( fc::@1/(byte) be#130 fc::@11/(byte) be#37 ) + [168] if((byte) bd#117!=(byte) 2) goto fc::@3 to:fc::@12 fc::@12: scope:[fc] from fc::@2 - [167] phi() + [169] (byte) be#38 ← ++ (byte) be#131 to:fc::@3 fc::@3: scope:[fc] from fc::@12 fc::@2 - [168] if((byte) bd#117!=(byte) 3) goto fc::@4 + [170] (byte) be#132 ← phi( fc::@12/(byte) be#38 fc::@2/(byte) be#131 ) + [171] if((byte) bd#117!=(byte) 3) goto fc::@4 to:fc::@13 fc::@13: scope:[fc] from fc::@3 - [169] phi() + [172] (byte) be#39 ← ++ (byte) be#132 to:fc::@4 fc::@4: scope:[fc] from fc::@13 fc::@3 - [170] if((byte) bd#117!=(byte) 4) goto fc::@5 + [173] (byte) be#133 ← phi( fc::@13/(byte) be#39 fc::@3/(byte) be#132 ) + [174] if((byte) bd#117!=(byte) 4) goto fc::@5 to:fc::@14 fc::@14: scope:[fc] from fc::@4 - [171] phi() + [175] (byte) be#40 ← ++ (byte) be#133 to:fc::@5 fc::@5: scope:[fc] from fc::@14 fc::@4 - [172] if((byte) bd#117!=(byte) 5) goto fc::@6 + [176] (byte) be#134 ← phi( fc::@14/(byte) be#40 fc::@4/(byte) be#133 ) + [177] if((byte) bd#117!=(byte) 5) goto fc::@6 to:fc::@15 fc::@15: scope:[fc] from fc::@5 - [173] phi() + [178] (byte) be#41 ← ++ (byte) be#134 to:fc::@6 fc::@6: scope:[fc] from fc::@15 fc::@5 - [174] if((byte) bd#117!=(byte) 6) goto fc::@7 + [179] (byte) be#135 ← phi( fc::@15/(byte) be#41 fc::@5/(byte) be#134 ) + [180] if((byte) bd#117!=(byte) 6) goto fc::@7 to:fc::@16 fc::@16: scope:[fc] from fc::@6 - [175] phi() + [181] (byte) be#42 ← ++ (byte) be#135 to:fc::@7 fc::@7: scope:[fc] from fc::@16 fc::@6 - [176] if((byte) bd#117!=(byte) 7) goto fc::@8 + [182] (byte) be#136 ← phi( fc::@16/(byte) be#42 fc::@6/(byte) be#135 ) + [183] if((byte) bd#117!=(byte) 7) goto fc::@8 to:fc::@17 fc::@17: scope:[fc] from fc::@7 - [177] phi() + [184] (byte) be#43 ← ++ (byte) be#136 to:fc::@8 fc::@8: scope:[fc] from fc::@17 fc::@7 - [178] if((byte) bd#117!=(byte) 8) goto fc::@9 + [185] (byte) be#137 ← phi( fc::@17/(byte) be#43 fc::@7/(byte) be#136 ) + [186] if((byte) bd#117!=(byte) 8) goto fc::@9 to:fc::@18 fc::@18: scope:[fc] from fc::@8 - [179] phi() + [187] (byte) be#44 ← ++ (byte) be#137 to:fc::@9 fc::@9: scope:[fc] from fc::@18 fc::@8 - [180] if((byte) bd#117!=(byte) 9) goto fc::@return - to:fc::@19 + [188] (byte) be#138 ← phi( fc::@18/(byte) be#44 fc::@8/(byte) be#137 ) + [189] if((byte) bd#117!=(byte) 9) goto fc::@19 + to:fc::@return fc::@19: scope:[fc] from fc::@9 - [181] phi() + [190] phi() to:fc::@return fc::@return: scope:[fc] from fc::@19 fc::@9 - [182] return + [191] (byte) be#46 ← phi( fc::@9/(byte) 0 fc::@19/(byte) be#138 ) + [192] return to:@return diff --git a/src/test/ref/no-recursion-heavy.log b/src/test/ref/no-recursion-heavy.log index 0943cb709..78a81f487 100644 --- a/src/test/ref/no-recursion-heavy.log +++ b/src/test/ref/no-recursion-heavy.log @@ -17,17 +17,20 @@ CONTROL FLOW GRAPH SSA (byte) bb#0 ← (byte) 0 (byte) bc#0 ← (byte) 0 (byte) bd#0 ← (byte) 0 + (byte) be#0 ← (byte) 0 to:@5 (void()) main() main: scope:[main] from @5 (byte) ba#29 ← phi( @5/(byte) ba#28 ) + (byte) be#140 ← phi( @5/(byte) be#139 ) (byte) bd#127 ← phi( @5/(byte) bd#126 ) (byte) bc#94 ← phi( @5/(byte) bc#93 ) (byte) bb#61 ← phi( @5/(byte) bb#60 ) to:main::@1 main::@1: scope:[main] from main main::@7 (byte) ba#18 ← phi( main/(byte) ba#29 main::@7/(byte) ba#1 ) + (byte) be#95 ← phi( main/(byte) be#140 main::@7/(byte) be#1 ) (byte) bd#83 ← phi( main/(byte) bd#127 main::@7/(byte) bd#1 ) (byte) bc#61 ← phi( main/(byte) bc#94 main::@7/(byte) bc#1 ) (byte) bb#39 ← phi( main/(byte) bb#61 main::@7/(byte) bb#1 ) @@ -35,6 +38,7 @@ main::@1: scope:[main] from main main::@7 to:main::@return main::@2: scope:[main] from main::@1 (byte) ba#17 ← phi( main::@1/(byte) ba#18 ) + (byte) be#94 ← phi( main::@1/(byte) be#95 ) (byte) bd#82 ← phi( main::@1/(byte) bd#83 ) (byte) bc#60 ← phi( main::@1/(byte) bc#61 ) (byte) bb#38 ← phi( main::@1/(byte) bb#39 ) @@ -42,28 +46,33 @@ main::@2: scope:[main] from main::@1 to:main::@7 main::@7: scope:[main] from main::@2 (byte) ba#4 ← phi( main::@2/(byte) ba#17 ) + (byte) be#48 ← phi( main::@2/(byte) be#13 ) (byte) bd#37 ← phi( main::@2/(byte) bd#13 ) (byte) bc#26 ← phi( main::@2/(byte) bc#13 ) (byte) bb#15 ← phi( main::@2/(byte) bb#13 ) (byte) bb#1 ← (byte) bb#15 (byte) bc#1 ← (byte) bc#26 (byte) bd#1 ← (byte) bd#37 + (byte) be#1 ← (byte) be#48 (byte) ba#1 ← ++ (byte) ba#4 to:main::@1 main::@return: scope:[main] from main::@1 (byte) ba#5 ← phi( main::@1/(byte) ba#18 ) + (byte) be#49 ← phi( main::@1/(byte) be#95 ) (byte) bd#38 ← phi( main::@1/(byte) bd#83 ) (byte) bc#27 ← phi( main::@1/(byte) bc#61 ) (byte) bb#16 ← phi( main::@1/(byte) bb#39 ) (byte) bb#2 ← (byte) bb#16 (byte) bc#2 ← (byte) bc#27 (byte) bd#2 ← (byte) bd#38 + (byte) be#2 ← (byte) be#49 (byte) ba#2 ← (byte) ba#5 return to:@return (void()) f0() f0: scope:[f0] from main::@2 + (byte) be#141 ← phi( main::@2/(byte) be#94 ) (byte) bd#128 ← phi( main::@2/(byte) bd#82 ) (byte) bc#95 ← phi( main::@2/(byte) bc#60 ) (byte) bb#40 ← phi( main::@2/(byte) bb#38 ) @@ -73,6 +82,7 @@ f0: scope:[f0] from main::@2 if((bool~) f0::$1) goto f0::@1 to:f0::@11 f0::@1: scope:[f0] from f0 f0::@21 + (byte) be#142 ← phi( f0/(byte) be#141 f0::@21/(byte) be#3 ) (byte) bd#129 ← phi( f0/(byte) bd#128 f0::@21/(byte) bd#3 ) (byte) bc#96 ← phi( f0/(byte) bc#95 f0::@21/(byte) bc#3 ) (byte) bb#41 ← phi( f0/(byte) bb#40 f0::@21/(byte) bb#62 ) @@ -83,6 +93,7 @@ f0::@1: scope:[f0] from f0 f0::@21 to:f0::@12 f0::@11: scope:[f0] from f0 (byte) ba#30 ← phi( f0/(byte) ba#6 ) + (byte) be#96 ← phi( f0/(byte) be#141 ) (byte) bd#84 ← phi( f0/(byte) bd#128 ) (byte) bc#62 ← phi( f0/(byte) bc#95 ) (byte) bb#17 ← phi( f0/(byte) bb#40 ) @@ -92,12 +103,15 @@ f0::@11: scope:[f0] from f0 f0::@21: scope:[f0] from f0::@11 (byte) bb#62 ← phi( f0::@11/(byte) bb#3 ) (byte) ba#19 ← phi( f0::@11/(byte) ba#30 ) + (byte) be#50 ← phi( f0::@11/(byte) be#24 ) (byte) bd#39 ← phi( f0::@11/(byte) bd#24 ) (byte) bc#28 ← phi( f0::@11/(byte) bc#24 ) (byte) bc#3 ← (byte) bc#28 (byte) bd#3 ← (byte) bd#39 + (byte) be#3 ← (byte) be#50 to:f0::@1 f0::@2: scope:[f0] from f0::@1 f0::@22 + (byte) be#143 ← phi( f0::@1/(byte) be#142 f0::@22/(byte) be#4 ) (byte) bd#130 ← phi( f0::@1/(byte) bd#129 f0::@22/(byte) bd#4 ) (byte) bc#97 ← phi( f0::@1/(byte) bc#96 f0::@22/(byte) bc#4 ) (byte) bb#42 ← phi( f0::@1/(byte) bb#41 f0::@22/(byte) bb#63 ) @@ -108,6 +122,7 @@ f0::@2: scope:[f0] from f0::@1 f0::@22 to:f0::@13 f0::@12: scope:[f0] from f0::@1 (byte) ba#31 ← phi( f0::@1/(byte) ba#7 ) + (byte) be#97 ← phi( f0::@1/(byte) be#142 ) (byte) bd#85 ← phi( f0::@1/(byte) bd#129 ) (byte) bc#63 ← phi( f0::@1/(byte) bc#96 ) (byte) bb#18 ← phi( f0::@1/(byte) bb#41 ) @@ -117,12 +132,15 @@ f0::@12: scope:[f0] from f0::@1 f0::@22: scope:[f0] from f0::@12 (byte) bb#63 ← phi( f0::@12/(byte) bb#4 ) (byte) ba#20 ← phi( f0::@12/(byte) ba#31 ) + (byte) be#51 ← phi( f0::@12/(byte) be#24 ) (byte) bd#40 ← phi( f0::@12/(byte) bd#24 ) (byte) bc#29 ← phi( f0::@12/(byte) bc#24 ) (byte) bc#4 ← (byte) bc#29 (byte) bd#4 ← (byte) bd#40 + (byte) be#4 ← (byte) be#51 to:f0::@2 f0::@3: scope:[f0] from f0::@2 f0::@23 + (byte) be#144 ← phi( f0::@2/(byte) be#143 f0::@23/(byte) be#5 ) (byte) bd#131 ← phi( f0::@2/(byte) bd#130 f0::@23/(byte) bd#5 ) (byte) bc#98 ← phi( f0::@2/(byte) bc#97 f0::@23/(byte) bc#5 ) (byte) bb#43 ← phi( f0::@2/(byte) bb#42 f0::@23/(byte) bb#64 ) @@ -133,6 +151,7 @@ f0::@3: scope:[f0] from f0::@2 f0::@23 to:f0::@14 f0::@13: scope:[f0] from f0::@2 (byte) ba#32 ← phi( f0::@2/(byte) ba#8 ) + (byte) be#98 ← phi( f0::@2/(byte) be#143 ) (byte) bd#86 ← phi( f0::@2/(byte) bd#130 ) (byte) bc#64 ← phi( f0::@2/(byte) bc#97 ) (byte) bb#19 ← phi( f0::@2/(byte) bb#42 ) @@ -142,12 +161,15 @@ f0::@13: scope:[f0] from f0::@2 f0::@23: scope:[f0] from f0::@13 (byte) bb#64 ← phi( f0::@13/(byte) bb#5 ) (byte) ba#21 ← phi( f0::@13/(byte) ba#32 ) + (byte) be#52 ← phi( f0::@13/(byte) be#24 ) (byte) bd#41 ← phi( f0::@13/(byte) bd#24 ) (byte) bc#30 ← phi( f0::@13/(byte) bc#24 ) (byte) bc#5 ← (byte) bc#30 (byte) bd#5 ← (byte) bd#41 + (byte) be#5 ← (byte) be#52 to:f0::@3 f0::@4: scope:[f0] from f0::@24 f0::@3 + (byte) be#145 ← phi( f0::@24/(byte) be#6 f0::@3/(byte) be#144 ) (byte) bd#132 ← phi( f0::@24/(byte) bd#6 f0::@3/(byte) bd#131 ) (byte) bc#99 ← phi( f0::@24/(byte) bc#6 f0::@3/(byte) bc#98 ) (byte) bb#44 ← phi( f0::@24/(byte) bb#65 f0::@3/(byte) bb#43 ) @@ -158,6 +180,7 @@ f0::@4: scope:[f0] from f0::@24 f0::@3 to:f0::@15 f0::@14: scope:[f0] from f0::@3 (byte) ba#33 ← phi( f0::@3/(byte) ba#9 ) + (byte) be#99 ← phi( f0::@3/(byte) be#144 ) (byte) bd#87 ← phi( f0::@3/(byte) bd#131 ) (byte) bc#65 ← phi( f0::@3/(byte) bc#98 ) (byte) bb#20 ← phi( f0::@3/(byte) bb#43 ) @@ -167,12 +190,15 @@ f0::@14: scope:[f0] from f0::@3 f0::@24: scope:[f0] from f0::@14 (byte) bb#65 ← phi( f0::@14/(byte) bb#6 ) (byte) ba#22 ← phi( f0::@14/(byte) ba#33 ) + (byte) be#53 ← phi( f0::@14/(byte) be#24 ) (byte) bd#42 ← phi( f0::@14/(byte) bd#24 ) (byte) bc#31 ← phi( f0::@14/(byte) bc#24 ) (byte) bc#6 ← (byte) bc#31 (byte) bd#6 ← (byte) bd#42 + (byte) be#6 ← (byte) be#53 to:f0::@4 f0::@5: scope:[f0] from f0::@25 f0::@4 + (byte) be#146 ← phi( f0::@25/(byte) be#7 f0::@4/(byte) be#145 ) (byte) bd#133 ← phi( f0::@25/(byte) bd#7 f0::@4/(byte) bd#132 ) (byte) bc#100 ← phi( f0::@25/(byte) bc#7 f0::@4/(byte) bc#99 ) (byte) bb#45 ← phi( f0::@25/(byte) bb#66 f0::@4/(byte) bb#44 ) @@ -183,6 +209,7 @@ f0::@5: scope:[f0] from f0::@25 f0::@4 to:f0::@16 f0::@15: scope:[f0] from f0::@4 (byte) ba#34 ← phi( f0::@4/(byte) ba#10 ) + (byte) be#100 ← phi( f0::@4/(byte) be#145 ) (byte) bd#88 ← phi( f0::@4/(byte) bd#132 ) (byte) bc#66 ← phi( f0::@4/(byte) bc#99 ) (byte) bb#21 ← phi( f0::@4/(byte) bb#44 ) @@ -192,12 +219,15 @@ f0::@15: scope:[f0] from f0::@4 f0::@25: scope:[f0] from f0::@15 (byte) bb#66 ← phi( f0::@15/(byte) bb#7 ) (byte) ba#23 ← phi( f0::@15/(byte) ba#34 ) + (byte) be#54 ← phi( f0::@15/(byte) be#24 ) (byte) bd#43 ← phi( f0::@15/(byte) bd#24 ) (byte) bc#32 ← phi( f0::@15/(byte) bc#24 ) (byte) bc#7 ← (byte) bc#32 (byte) bd#7 ← (byte) bd#43 + (byte) be#7 ← (byte) be#54 to:f0::@5 f0::@6: scope:[f0] from f0::@26 f0::@5 + (byte) be#147 ← phi( f0::@26/(byte) be#8 f0::@5/(byte) be#146 ) (byte) bd#134 ← phi( f0::@26/(byte) bd#8 f0::@5/(byte) bd#133 ) (byte) bc#101 ← phi( f0::@26/(byte) bc#8 f0::@5/(byte) bc#100 ) (byte) bb#46 ← phi( f0::@26/(byte) bb#67 f0::@5/(byte) bb#45 ) @@ -208,6 +238,7 @@ f0::@6: scope:[f0] from f0::@26 f0::@5 to:f0::@17 f0::@16: scope:[f0] from f0::@5 (byte) ba#35 ← phi( f0::@5/(byte) ba#11 ) + (byte) be#101 ← phi( f0::@5/(byte) be#146 ) (byte) bd#89 ← phi( f0::@5/(byte) bd#133 ) (byte) bc#67 ← phi( f0::@5/(byte) bc#100 ) (byte) bb#22 ← phi( f0::@5/(byte) bb#45 ) @@ -217,12 +248,15 @@ f0::@16: scope:[f0] from f0::@5 f0::@26: scope:[f0] from f0::@16 (byte) bb#67 ← phi( f0::@16/(byte) bb#8 ) (byte) ba#24 ← phi( f0::@16/(byte) ba#35 ) + (byte) be#55 ← phi( f0::@16/(byte) be#24 ) (byte) bd#44 ← phi( f0::@16/(byte) bd#24 ) (byte) bc#33 ← phi( f0::@16/(byte) bc#24 ) (byte) bc#8 ← (byte) bc#33 (byte) bd#8 ← (byte) bd#44 + (byte) be#8 ← (byte) be#55 to:f0::@6 f0::@7: scope:[f0] from f0::@27 f0::@6 + (byte) be#148 ← phi( f0::@27/(byte) be#9 f0::@6/(byte) be#147 ) (byte) bd#135 ← phi( f0::@27/(byte) bd#9 f0::@6/(byte) bd#134 ) (byte) bc#102 ← phi( f0::@27/(byte) bc#9 f0::@6/(byte) bc#101 ) (byte) bb#47 ← phi( f0::@27/(byte) bb#68 f0::@6/(byte) bb#46 ) @@ -233,6 +267,7 @@ f0::@7: scope:[f0] from f0::@27 f0::@6 to:f0::@18 f0::@17: scope:[f0] from f0::@6 (byte) ba#36 ← phi( f0::@6/(byte) ba#12 ) + (byte) be#102 ← phi( f0::@6/(byte) be#147 ) (byte) bd#90 ← phi( f0::@6/(byte) bd#134 ) (byte) bc#68 ← phi( f0::@6/(byte) bc#101 ) (byte) bb#23 ← phi( f0::@6/(byte) bb#46 ) @@ -242,12 +277,15 @@ f0::@17: scope:[f0] from f0::@6 f0::@27: scope:[f0] from f0::@17 (byte) bb#68 ← phi( f0::@17/(byte) bb#9 ) (byte) ba#25 ← phi( f0::@17/(byte) ba#36 ) + (byte) be#56 ← phi( f0::@17/(byte) be#24 ) (byte) bd#45 ← phi( f0::@17/(byte) bd#24 ) (byte) bc#34 ← phi( f0::@17/(byte) bc#24 ) (byte) bc#9 ← (byte) bc#34 (byte) bd#9 ← (byte) bd#45 + (byte) be#9 ← (byte) be#56 to:f0::@7 f0::@8: scope:[f0] from f0::@28 f0::@7 + (byte) be#149 ← phi( f0::@28/(byte) be#10 f0::@7/(byte) be#148 ) (byte) bd#136 ← phi( f0::@28/(byte) bd#10 f0::@7/(byte) bd#135 ) (byte) bc#103 ← phi( f0::@28/(byte) bc#10 f0::@7/(byte) bc#102 ) (byte) bb#48 ← phi( f0::@28/(byte) bb#69 f0::@7/(byte) bb#47 ) @@ -258,6 +296,7 @@ f0::@8: scope:[f0] from f0::@28 f0::@7 to:f0::@19 f0::@18: scope:[f0] from f0::@7 (byte) ba#37 ← phi( f0::@7/(byte) ba#13 ) + (byte) be#103 ← phi( f0::@7/(byte) be#148 ) (byte) bd#91 ← phi( f0::@7/(byte) bd#135 ) (byte) bc#69 ← phi( f0::@7/(byte) bc#102 ) (byte) bb#24 ← phi( f0::@7/(byte) bb#47 ) @@ -267,12 +306,15 @@ f0::@18: scope:[f0] from f0::@7 f0::@28: scope:[f0] from f0::@18 (byte) bb#69 ← phi( f0::@18/(byte) bb#10 ) (byte) ba#26 ← phi( f0::@18/(byte) ba#37 ) + (byte) be#57 ← phi( f0::@18/(byte) be#24 ) (byte) bd#46 ← phi( f0::@18/(byte) bd#24 ) (byte) bc#35 ← phi( f0::@18/(byte) bc#24 ) (byte) bc#10 ← (byte) bc#35 (byte) bd#10 ← (byte) bd#46 + (byte) be#10 ← (byte) be#57 to:f0::@8 f0::@9: scope:[f0] from f0::@29 f0::@8 + (byte) be#106 ← phi( f0::@29/(byte) be#11 f0::@8/(byte) be#149 ) (byte) bd#94 ← phi( f0::@29/(byte) bd#11 f0::@8/(byte) bd#136 ) (byte) bc#72 ← phi( f0::@29/(byte) bc#11 f0::@8/(byte) bc#103 ) (byte) bb#50 ← phi( f0::@29/(byte) bb#70 f0::@8/(byte) bb#48 ) @@ -283,6 +325,7 @@ f0::@9: scope:[f0] from f0::@29 f0::@8 to:f0::@20 f0::@19: scope:[f0] from f0::@8 (byte) ba#38 ← phi( f0::@8/(byte) ba#14 ) + (byte) be#104 ← phi( f0::@8/(byte) be#149 ) (byte) bd#92 ← phi( f0::@8/(byte) bd#136 ) (byte) bc#70 ← phi( f0::@8/(byte) bc#103 ) (byte) bb#25 ← phi( f0::@8/(byte) bb#48 ) @@ -292,12 +335,15 @@ f0::@19: scope:[f0] from f0::@8 f0::@29: scope:[f0] from f0::@19 (byte) bb#70 ← phi( f0::@19/(byte) bb#11 ) (byte) ba#27 ← phi( f0::@19/(byte) ba#38 ) + (byte) be#58 ← phi( f0::@19/(byte) be#24 ) (byte) bd#47 ← phi( f0::@19/(byte) bd#24 ) (byte) bc#36 ← phi( f0::@19/(byte) bc#24 ) (byte) bc#11 ← (byte) bc#36 (byte) bd#11 ← (byte) bd#47 + (byte) be#11 ← (byte) be#58 to:f0::@9 f0::@20: scope:[f0] from f0::@9 + (byte) be#105 ← phi( f0::@9/(byte) be#106 ) (byte) bd#93 ← phi( f0::@9/(byte) bd#94 ) (byte) bc#71 ← phi( f0::@9/(byte) bc#72 ) (byte) bb#12 ← (number) 0 @@ -305,23 +351,28 @@ f0::@20: scope:[f0] from f0::@9 to:f0::@30 f0::@30: scope:[f0] from f0::@20 (byte) bb#49 ← phi( f0::@20/(byte) bb#12 ) + (byte) be#59 ← phi( f0::@20/(byte) be#24 ) (byte) bd#48 ← phi( f0::@20/(byte) bd#24 ) (byte) bc#37 ← phi( f0::@20/(byte) bc#24 ) (byte) bc#12 ← (byte) bc#37 (byte) bd#12 ← (byte) bd#48 + (byte) be#12 ← (byte) be#59 to:f0::@return f0::@return: scope:[f0] from f0::@30 f0::@9 + (byte) be#60 ← phi( f0::@30/(byte) be#12 f0::@9/(byte) be#106 ) (byte) bd#49 ← phi( f0::@30/(byte) bd#12 f0::@9/(byte) bd#94 ) (byte) bc#38 ← phi( f0::@30/(byte) bc#12 f0::@9/(byte) bc#72 ) (byte) bb#26 ← phi( f0::@30/(byte) bb#49 f0::@9/(byte) bb#50 ) (byte) bb#13 ← (byte) bb#26 (byte) bc#13 ← (byte) bc#38 (byte) bd#13 ← (byte) bd#49 + (byte) be#13 ← (byte) be#60 return to:@return (void()) fa() fa: scope:[fa] from f0::@11 f0::@12 f0::@13 f0::@14 f0::@15 f0::@16 f0::@17 f0::@18 f0::@19 f0::@20 + (byte) be#150 ← phi( f0::@11/(byte) be#96 f0::@12/(byte) be#97 f0::@13/(byte) be#98 f0::@14/(byte) be#99 f0::@15/(byte) be#100 f0::@16/(byte) be#101 f0::@17/(byte) be#102 f0::@18/(byte) be#103 f0::@19/(byte) be#104 f0::@20/(byte) be#105 ) (byte) bd#137 ← phi( f0::@11/(byte) bd#84 f0::@12/(byte) bd#85 f0::@13/(byte) bd#86 f0::@14/(byte) bd#87 f0::@15/(byte) bd#88 f0::@16/(byte) bd#89 f0::@17/(byte) bd#90 f0::@18/(byte) bd#91 f0::@19/(byte) bd#92 f0::@20/(byte) bd#93 ) (byte) bc#73 ← phi( f0::@11/(byte) bc#62 f0::@12/(byte) bc#63 f0::@13/(byte) bc#64 f0::@14/(byte) bc#65 f0::@15/(byte) bc#66 f0::@16/(byte) bc#67 f0::@17/(byte) bc#68 f0::@18/(byte) bc#69 f0::@19/(byte) bc#70 f0::@20/(byte) bc#71 ) (byte) bb#27 ← phi( f0::@11/(byte) bb#3 f0::@12/(byte) bb#4 f0::@13/(byte) bb#5 f0::@14/(byte) bb#6 f0::@15/(byte) bb#7 f0::@16/(byte) bb#8 f0::@17/(byte) bb#9 f0::@18/(byte) bb#10 f0::@19/(byte) bb#11 f0::@20/(byte) bb#12 ) @@ -330,6 +381,7 @@ fa: scope:[fa] from f0::@11 f0::@12 f0::@13 f0::@14 f0::@15 f0::@16 f0::@17 f0: if((bool~) fa::$1) goto fa::@1 to:fa::@11 fa::@1: scope:[fa] from fa fa::@21 + (byte) be#151 ← phi( fa/(byte) be#150 fa::@21/(byte) be#14 ) (byte) bd#138 ← phi( fa/(byte) bd#137 fa::@21/(byte) bd#14 ) (byte) bc#74 ← phi( fa/(byte) bc#73 fa::@21/(byte) bc#104 ) (byte) bb#28 ← phi( fa/(byte) bb#27 fa::@21/(byte) bb#51 ) @@ -339,6 +391,7 @@ fa::@1: scope:[fa] from fa fa::@21 to:fa::@12 fa::@11: scope:[fa] from fa (byte) bb#71 ← phi( fa/(byte) bb#27 ) + (byte) be#107 ← phi( fa/(byte) be#150 ) (byte) bd#95 ← phi( fa/(byte) bd#137 ) (byte) bc#39 ← phi( fa/(byte) bc#73 ) (byte) bc#14 ← ++ (byte) bc#39 @@ -347,10 +400,13 @@ fa::@11: scope:[fa] from fa fa::@21: scope:[fa] from fa::@11 (byte) bc#104 ← phi( fa::@11/(byte) bc#14 ) (byte) bb#51 ← phi( fa::@11/(byte) bb#71 ) + (byte) be#61 ← phi( fa::@11/(byte) be#35 ) (byte) bd#50 ← phi( fa::@11/(byte) bd#35 ) (byte) bd#14 ← (byte) bd#50 + (byte) be#14 ← (byte) be#61 to:fa::@1 fa::@2: scope:[fa] from fa::@1 fa::@22 + (byte) be#152 ← phi( fa::@1/(byte) be#151 fa::@22/(byte) be#15 ) (byte) bd#139 ← phi( fa::@1/(byte) bd#138 fa::@22/(byte) bd#15 ) (byte) bc#75 ← phi( fa::@1/(byte) bc#74 fa::@22/(byte) bc#105 ) (byte) bb#29 ← phi( fa::@1/(byte) bb#28 fa::@22/(byte) bb#52 ) @@ -360,6 +416,7 @@ fa::@2: scope:[fa] from fa::@1 fa::@22 to:fa::@13 fa::@12: scope:[fa] from fa::@1 (byte) bb#72 ← phi( fa::@1/(byte) bb#28 ) + (byte) be#108 ← phi( fa::@1/(byte) be#151 ) (byte) bd#96 ← phi( fa::@1/(byte) bd#138 ) (byte) bc#40 ← phi( fa::@1/(byte) bc#74 ) (byte) bc#15 ← ++ (byte) bc#40 @@ -368,10 +425,13 @@ fa::@12: scope:[fa] from fa::@1 fa::@22: scope:[fa] from fa::@12 (byte) bc#105 ← phi( fa::@12/(byte) bc#15 ) (byte) bb#52 ← phi( fa::@12/(byte) bb#72 ) + (byte) be#62 ← phi( fa::@12/(byte) be#35 ) (byte) bd#51 ← phi( fa::@12/(byte) bd#35 ) (byte) bd#15 ← (byte) bd#51 + (byte) be#15 ← (byte) be#62 to:fa::@2 fa::@3: scope:[fa] from fa::@2 fa::@23 + (byte) be#153 ← phi( fa::@2/(byte) be#152 fa::@23/(byte) be#16 ) (byte) bd#140 ← phi( fa::@2/(byte) bd#139 fa::@23/(byte) bd#16 ) (byte) bc#76 ← phi( fa::@2/(byte) bc#75 fa::@23/(byte) bc#106 ) (byte) bb#30 ← phi( fa::@2/(byte) bb#29 fa::@23/(byte) bb#53 ) @@ -381,6 +441,7 @@ fa::@3: scope:[fa] from fa::@2 fa::@23 to:fa::@14 fa::@13: scope:[fa] from fa::@2 (byte) bb#73 ← phi( fa::@2/(byte) bb#29 ) + (byte) be#109 ← phi( fa::@2/(byte) be#152 ) (byte) bd#97 ← phi( fa::@2/(byte) bd#139 ) (byte) bc#41 ← phi( fa::@2/(byte) bc#75 ) (byte) bc#16 ← ++ (byte) bc#41 @@ -389,10 +450,13 @@ fa::@13: scope:[fa] from fa::@2 fa::@23: scope:[fa] from fa::@13 (byte) bc#106 ← phi( fa::@13/(byte) bc#16 ) (byte) bb#53 ← phi( fa::@13/(byte) bb#73 ) + (byte) be#63 ← phi( fa::@13/(byte) be#35 ) (byte) bd#52 ← phi( fa::@13/(byte) bd#35 ) (byte) bd#16 ← (byte) bd#52 + (byte) be#16 ← (byte) be#63 to:fa::@3 fa::@4: scope:[fa] from fa::@24 fa::@3 + (byte) be#154 ← phi( fa::@24/(byte) be#17 fa::@3/(byte) be#153 ) (byte) bd#141 ← phi( fa::@24/(byte) bd#17 fa::@3/(byte) bd#140 ) (byte) bc#77 ← phi( fa::@24/(byte) bc#107 fa::@3/(byte) bc#76 ) (byte) bb#31 ← phi( fa::@24/(byte) bb#54 fa::@3/(byte) bb#30 ) @@ -402,6 +466,7 @@ fa::@4: scope:[fa] from fa::@24 fa::@3 to:fa::@15 fa::@14: scope:[fa] from fa::@3 (byte) bb#74 ← phi( fa::@3/(byte) bb#30 ) + (byte) be#110 ← phi( fa::@3/(byte) be#153 ) (byte) bd#98 ← phi( fa::@3/(byte) bd#140 ) (byte) bc#42 ← phi( fa::@3/(byte) bc#76 ) (byte) bc#17 ← ++ (byte) bc#42 @@ -410,10 +475,13 @@ fa::@14: scope:[fa] from fa::@3 fa::@24: scope:[fa] from fa::@14 (byte) bc#107 ← phi( fa::@14/(byte) bc#17 ) (byte) bb#54 ← phi( fa::@14/(byte) bb#74 ) + (byte) be#64 ← phi( fa::@14/(byte) be#35 ) (byte) bd#53 ← phi( fa::@14/(byte) bd#35 ) (byte) bd#17 ← (byte) bd#53 + (byte) be#17 ← (byte) be#64 to:fa::@4 fa::@5: scope:[fa] from fa::@25 fa::@4 + (byte) be#155 ← phi( fa::@25/(byte) be#18 fa::@4/(byte) be#154 ) (byte) bd#142 ← phi( fa::@25/(byte) bd#18 fa::@4/(byte) bd#141 ) (byte) bc#78 ← phi( fa::@25/(byte) bc#108 fa::@4/(byte) bc#77 ) (byte) bb#32 ← phi( fa::@25/(byte) bb#55 fa::@4/(byte) bb#31 ) @@ -423,6 +491,7 @@ fa::@5: scope:[fa] from fa::@25 fa::@4 to:fa::@16 fa::@15: scope:[fa] from fa::@4 (byte) bb#75 ← phi( fa::@4/(byte) bb#31 ) + (byte) be#111 ← phi( fa::@4/(byte) be#154 ) (byte) bd#99 ← phi( fa::@4/(byte) bd#141 ) (byte) bc#43 ← phi( fa::@4/(byte) bc#77 ) (byte) bc#18 ← ++ (byte) bc#43 @@ -431,10 +500,13 @@ fa::@15: scope:[fa] from fa::@4 fa::@25: scope:[fa] from fa::@15 (byte) bc#108 ← phi( fa::@15/(byte) bc#18 ) (byte) bb#55 ← phi( fa::@15/(byte) bb#75 ) + (byte) be#65 ← phi( fa::@15/(byte) be#35 ) (byte) bd#54 ← phi( fa::@15/(byte) bd#35 ) (byte) bd#18 ← (byte) bd#54 + (byte) be#18 ← (byte) be#65 to:fa::@5 fa::@6: scope:[fa] from fa::@26 fa::@5 + (byte) be#156 ← phi( fa::@26/(byte) be#19 fa::@5/(byte) be#155 ) (byte) bd#143 ← phi( fa::@26/(byte) bd#19 fa::@5/(byte) bd#142 ) (byte) bc#79 ← phi( fa::@26/(byte) bc#109 fa::@5/(byte) bc#78 ) (byte) bb#33 ← phi( fa::@26/(byte) bb#56 fa::@5/(byte) bb#32 ) @@ -444,6 +516,7 @@ fa::@6: scope:[fa] from fa::@26 fa::@5 to:fa::@17 fa::@16: scope:[fa] from fa::@5 (byte) bb#76 ← phi( fa::@5/(byte) bb#32 ) + (byte) be#112 ← phi( fa::@5/(byte) be#155 ) (byte) bd#100 ← phi( fa::@5/(byte) bd#142 ) (byte) bc#44 ← phi( fa::@5/(byte) bc#78 ) (byte) bc#19 ← ++ (byte) bc#44 @@ -452,10 +525,13 @@ fa::@16: scope:[fa] from fa::@5 fa::@26: scope:[fa] from fa::@16 (byte) bc#109 ← phi( fa::@16/(byte) bc#19 ) (byte) bb#56 ← phi( fa::@16/(byte) bb#76 ) + (byte) be#66 ← phi( fa::@16/(byte) be#35 ) (byte) bd#55 ← phi( fa::@16/(byte) bd#35 ) (byte) bd#19 ← (byte) bd#55 + (byte) be#19 ← (byte) be#66 to:fa::@6 fa::@7: scope:[fa] from fa::@27 fa::@6 + (byte) be#157 ← phi( fa::@27/(byte) be#20 fa::@6/(byte) be#156 ) (byte) bd#144 ← phi( fa::@27/(byte) bd#20 fa::@6/(byte) bd#143 ) (byte) bc#80 ← phi( fa::@27/(byte) bc#110 fa::@6/(byte) bc#79 ) (byte) bb#34 ← phi( fa::@27/(byte) bb#57 fa::@6/(byte) bb#33 ) @@ -465,6 +541,7 @@ fa::@7: scope:[fa] from fa::@27 fa::@6 to:fa::@18 fa::@17: scope:[fa] from fa::@6 (byte) bb#77 ← phi( fa::@6/(byte) bb#33 ) + (byte) be#113 ← phi( fa::@6/(byte) be#156 ) (byte) bd#101 ← phi( fa::@6/(byte) bd#143 ) (byte) bc#45 ← phi( fa::@6/(byte) bc#79 ) (byte) bc#20 ← ++ (byte) bc#45 @@ -473,10 +550,13 @@ fa::@17: scope:[fa] from fa::@6 fa::@27: scope:[fa] from fa::@17 (byte) bc#110 ← phi( fa::@17/(byte) bc#20 ) (byte) bb#57 ← phi( fa::@17/(byte) bb#77 ) + (byte) be#67 ← phi( fa::@17/(byte) be#35 ) (byte) bd#56 ← phi( fa::@17/(byte) bd#35 ) (byte) bd#20 ← (byte) bd#56 + (byte) be#20 ← (byte) be#67 to:fa::@7 fa::@8: scope:[fa] from fa::@28 fa::@7 + (byte) be#158 ← phi( fa::@28/(byte) be#21 fa::@7/(byte) be#157 ) (byte) bd#145 ← phi( fa::@28/(byte) bd#21 fa::@7/(byte) bd#144 ) (byte) bc#81 ← phi( fa::@28/(byte) bc#111 fa::@7/(byte) bc#80 ) (byte) bb#35 ← phi( fa::@28/(byte) bb#58 fa::@7/(byte) bb#34 ) @@ -486,6 +566,7 @@ fa::@8: scope:[fa] from fa::@28 fa::@7 to:fa::@19 fa::@18: scope:[fa] from fa::@7 (byte) bb#78 ← phi( fa::@7/(byte) bb#34 ) + (byte) be#114 ← phi( fa::@7/(byte) be#157 ) (byte) bd#102 ← phi( fa::@7/(byte) bd#144 ) (byte) bc#46 ← phi( fa::@7/(byte) bc#80 ) (byte) bc#21 ← ++ (byte) bc#46 @@ -494,10 +575,13 @@ fa::@18: scope:[fa] from fa::@7 fa::@28: scope:[fa] from fa::@18 (byte) bc#111 ← phi( fa::@18/(byte) bc#21 ) (byte) bb#58 ← phi( fa::@18/(byte) bb#78 ) + (byte) be#68 ← phi( fa::@18/(byte) be#35 ) (byte) bd#57 ← phi( fa::@18/(byte) bd#35 ) (byte) bd#21 ← (byte) bd#57 + (byte) be#21 ← (byte) be#68 to:fa::@8 fa::@9: scope:[fa] from fa::@29 fa::@8 + (byte) be#117 ← phi( fa::@29/(byte) be#22 fa::@8/(byte) be#158 ) (byte) bd#105 ← phi( fa::@29/(byte) bd#22 fa::@8/(byte) bd#145 ) (byte) bc#83 ← phi( fa::@29/(byte) bc#112 fa::@8/(byte) bc#81 ) (byte) bb#36 ← phi( fa::@29/(byte) bb#59 fa::@8/(byte) bb#35 ) @@ -507,6 +591,7 @@ fa::@9: scope:[fa] from fa::@29 fa::@8 to:fa::@20 fa::@19: scope:[fa] from fa::@8 (byte) bb#79 ← phi( fa::@8/(byte) bb#35 ) + (byte) be#115 ← phi( fa::@8/(byte) be#158 ) (byte) bd#103 ← phi( fa::@8/(byte) bd#145 ) (byte) bc#47 ← phi( fa::@8/(byte) bc#81 ) (byte) bc#22 ← ++ (byte) bc#47 @@ -515,29 +600,37 @@ fa::@19: scope:[fa] from fa::@8 fa::@29: scope:[fa] from fa::@19 (byte) bc#112 ← phi( fa::@19/(byte) bc#22 ) (byte) bb#59 ← phi( fa::@19/(byte) bb#79 ) + (byte) be#69 ← phi( fa::@19/(byte) be#35 ) (byte) bd#58 ← phi( fa::@19/(byte) bd#35 ) (byte) bd#22 ← (byte) bd#58 + (byte) be#22 ← (byte) be#69 to:fa::@9 fa::@20: scope:[fa] from fa::@9 + (byte) be#116 ← phi( fa::@9/(byte) be#117 ) (byte) bd#104 ← phi( fa::@9/(byte) bd#105 ) (byte) bc#23 ← (number) 0 call fb to:fa::@30 fa::@30: scope:[fa] from fa::@20 (byte) bc#82 ← phi( fa::@20/(byte) bc#23 ) + (byte) be#70 ← phi( fa::@20/(byte) be#35 ) (byte) bd#59 ← phi( fa::@20/(byte) bd#35 ) (byte) bd#23 ← (byte) bd#59 + (byte) be#23 ← (byte) be#70 to:fa::@return fa::@return: scope:[fa] from fa::@30 fa::@9 + (byte) be#71 ← phi( fa::@30/(byte) be#23 fa::@9/(byte) be#117 ) (byte) bd#60 ← phi( fa::@30/(byte) bd#23 fa::@9/(byte) bd#105 ) (byte) bc#48 ← phi( fa::@30/(byte) bc#82 fa::@9/(byte) bc#83 ) (byte) bc#24 ← (byte) bc#48 (byte) bd#24 ← (byte) bd#60 + (byte) be#24 ← (byte) be#71 return to:@return (void()) fb() fb: scope:[fb] from fa::@11 fa::@12 fa::@13 fa::@14 fa::@15 fa::@16 fa::@17 fa::@18 fa::@19 fa::@20 + (byte) be#159 ← phi( fa::@11/(byte) be#107 fa::@12/(byte) be#108 fa::@13/(byte) be#109 fa::@14/(byte) be#110 fa::@15/(byte) be#111 fa::@16/(byte) be#112 fa::@17/(byte) be#113 fa::@18/(byte) be#114 fa::@19/(byte) be#115 fa::@20/(byte) be#116 ) (byte) bd#106 ← phi( fa::@11/(byte) bd#95 fa::@12/(byte) bd#96 fa::@13/(byte) bd#97 fa::@14/(byte) bd#98 fa::@15/(byte) bd#99 fa::@16/(byte) bd#100 fa::@17/(byte) bd#101 fa::@18/(byte) bd#102 fa::@19/(byte) bd#103 fa::@20/(byte) bd#104 ) (byte) bc#49 ← phi( fa::@11/(byte) bc#14 fa::@12/(byte) bc#15 fa::@13/(byte) bc#16 fa::@14/(byte) bc#17 fa::@15/(byte) bc#18 fa::@16/(byte) bc#19 fa::@17/(byte) bc#20 fa::@18/(byte) bc#21 fa::@19/(byte) bc#22 fa::@20/(byte) bc#23 ) (bool~) fb::$0 ← (byte) bc#49 == (number) 0 @@ -545,6 +638,7 @@ fb: scope:[fb] from fa::@11 fa::@12 fa::@13 fa::@14 fa::@15 fa::@16 fa::@17 fa: if((bool~) fb::$1) goto fb::@1 to:fb::@11 fb::@1: scope:[fb] from fb fb::@21 + (byte) be#160 ← phi( fb/(byte) be#159 fb::@21/(byte) be#25 ) (byte) bd#107 ← phi( fb/(byte) bd#106 fb::@21/(byte) bd#146 ) (byte) bc#50 ← phi( fb/(byte) bc#49 fb::@21/(byte) bc#84 ) (bool~) fb::$2 ← (byte) bc#50 == (number) 1 @@ -553,6 +647,7 @@ fb::@1: scope:[fb] from fb fb::@21 to:fb::@12 fb::@11: scope:[fb] from fb (byte) bc#113 ← phi( fb/(byte) bc#49 ) + (byte) be#118 ← phi( fb/(byte) be#159 ) (byte) bd#61 ← phi( fb/(byte) bd#106 ) (byte) bd#25 ← ++ (byte) bd#61 call fc @@ -560,8 +655,11 @@ fb::@11: scope:[fb] from fb fb::@21: scope:[fb] from fb::@11 (byte) bd#146 ← phi( fb::@11/(byte) bd#25 ) (byte) bc#84 ← phi( fb::@11/(byte) bc#113 ) + (byte) be#72 ← phi( fb::@11/(byte) be#46 ) + (byte) be#25 ← (byte) be#72 to:fb::@1 fb::@2: scope:[fb] from fb::@1 fb::@22 + (byte) be#161 ← phi( fb::@1/(byte) be#160 fb::@22/(byte) be#26 ) (byte) bd#108 ← phi( fb::@1/(byte) bd#107 fb::@22/(byte) bd#147 ) (byte) bc#51 ← phi( fb::@1/(byte) bc#50 fb::@22/(byte) bc#85 ) (bool~) fb::$4 ← (byte) bc#51 == (number) 2 @@ -570,6 +668,7 @@ fb::@2: scope:[fb] from fb::@1 fb::@22 to:fb::@13 fb::@12: scope:[fb] from fb::@1 (byte) bc#114 ← phi( fb::@1/(byte) bc#50 ) + (byte) be#119 ← phi( fb::@1/(byte) be#160 ) (byte) bd#62 ← phi( fb::@1/(byte) bd#107 ) (byte) bd#26 ← ++ (byte) bd#62 call fc @@ -577,8 +676,11 @@ fb::@12: scope:[fb] from fb::@1 fb::@22: scope:[fb] from fb::@12 (byte) bd#147 ← phi( fb::@12/(byte) bd#26 ) (byte) bc#85 ← phi( fb::@12/(byte) bc#114 ) + (byte) be#73 ← phi( fb::@12/(byte) be#46 ) + (byte) be#26 ← (byte) be#73 to:fb::@2 fb::@3: scope:[fb] from fb::@2 fb::@23 + (byte) be#162 ← phi( fb::@2/(byte) be#161 fb::@23/(byte) be#27 ) (byte) bd#109 ← phi( fb::@2/(byte) bd#108 fb::@23/(byte) bd#148 ) (byte) bc#52 ← phi( fb::@2/(byte) bc#51 fb::@23/(byte) bc#86 ) (bool~) fb::$6 ← (byte) bc#52 == (number) 3 @@ -587,6 +689,7 @@ fb::@3: scope:[fb] from fb::@2 fb::@23 to:fb::@14 fb::@13: scope:[fb] from fb::@2 (byte) bc#115 ← phi( fb::@2/(byte) bc#51 ) + (byte) be#120 ← phi( fb::@2/(byte) be#161 ) (byte) bd#63 ← phi( fb::@2/(byte) bd#108 ) (byte) bd#27 ← ++ (byte) bd#63 call fc @@ -594,8 +697,11 @@ fb::@13: scope:[fb] from fb::@2 fb::@23: scope:[fb] from fb::@13 (byte) bd#148 ← phi( fb::@13/(byte) bd#27 ) (byte) bc#86 ← phi( fb::@13/(byte) bc#115 ) + (byte) be#74 ← phi( fb::@13/(byte) be#46 ) + (byte) be#27 ← (byte) be#74 to:fb::@3 fb::@4: scope:[fb] from fb::@24 fb::@3 + (byte) be#163 ← phi( fb::@24/(byte) be#28 fb::@3/(byte) be#162 ) (byte) bd#110 ← phi( fb::@24/(byte) bd#149 fb::@3/(byte) bd#109 ) (byte) bc#53 ← phi( fb::@24/(byte) bc#87 fb::@3/(byte) bc#52 ) (bool~) fb::$8 ← (byte) bc#53 == (number) 4 @@ -604,6 +710,7 @@ fb::@4: scope:[fb] from fb::@24 fb::@3 to:fb::@15 fb::@14: scope:[fb] from fb::@3 (byte) bc#116 ← phi( fb::@3/(byte) bc#52 ) + (byte) be#121 ← phi( fb::@3/(byte) be#162 ) (byte) bd#64 ← phi( fb::@3/(byte) bd#109 ) (byte) bd#28 ← ++ (byte) bd#64 call fc @@ -611,8 +718,11 @@ fb::@14: scope:[fb] from fb::@3 fb::@24: scope:[fb] from fb::@14 (byte) bd#149 ← phi( fb::@14/(byte) bd#28 ) (byte) bc#87 ← phi( fb::@14/(byte) bc#116 ) + (byte) be#75 ← phi( fb::@14/(byte) be#46 ) + (byte) be#28 ← (byte) be#75 to:fb::@4 fb::@5: scope:[fb] from fb::@25 fb::@4 + (byte) be#164 ← phi( fb::@25/(byte) be#29 fb::@4/(byte) be#163 ) (byte) bd#111 ← phi( fb::@25/(byte) bd#150 fb::@4/(byte) bd#110 ) (byte) bc#54 ← phi( fb::@25/(byte) bc#88 fb::@4/(byte) bc#53 ) (bool~) fb::$10 ← (byte) bc#54 == (number) 5 @@ -621,6 +731,7 @@ fb::@5: scope:[fb] from fb::@25 fb::@4 to:fb::@16 fb::@15: scope:[fb] from fb::@4 (byte) bc#117 ← phi( fb::@4/(byte) bc#53 ) + (byte) be#122 ← phi( fb::@4/(byte) be#163 ) (byte) bd#65 ← phi( fb::@4/(byte) bd#110 ) (byte) bd#29 ← ++ (byte) bd#65 call fc @@ -628,8 +739,11 @@ fb::@15: scope:[fb] from fb::@4 fb::@25: scope:[fb] from fb::@15 (byte) bd#150 ← phi( fb::@15/(byte) bd#29 ) (byte) bc#88 ← phi( fb::@15/(byte) bc#117 ) + (byte) be#76 ← phi( fb::@15/(byte) be#46 ) + (byte) be#29 ← (byte) be#76 to:fb::@5 fb::@6: scope:[fb] from fb::@26 fb::@5 + (byte) be#165 ← phi( fb::@26/(byte) be#30 fb::@5/(byte) be#164 ) (byte) bd#112 ← phi( fb::@26/(byte) bd#151 fb::@5/(byte) bd#111 ) (byte) bc#55 ← phi( fb::@26/(byte) bc#89 fb::@5/(byte) bc#54 ) (bool~) fb::$12 ← (byte) bc#55 == (number) 6 @@ -638,6 +752,7 @@ fb::@6: scope:[fb] from fb::@26 fb::@5 to:fb::@17 fb::@16: scope:[fb] from fb::@5 (byte) bc#118 ← phi( fb::@5/(byte) bc#54 ) + (byte) be#123 ← phi( fb::@5/(byte) be#164 ) (byte) bd#66 ← phi( fb::@5/(byte) bd#111 ) (byte) bd#30 ← ++ (byte) bd#66 call fc @@ -645,8 +760,11 @@ fb::@16: scope:[fb] from fb::@5 fb::@26: scope:[fb] from fb::@16 (byte) bd#151 ← phi( fb::@16/(byte) bd#30 ) (byte) bc#89 ← phi( fb::@16/(byte) bc#118 ) + (byte) be#77 ← phi( fb::@16/(byte) be#46 ) + (byte) be#30 ← (byte) be#77 to:fb::@6 fb::@7: scope:[fb] from fb::@27 fb::@6 + (byte) be#166 ← phi( fb::@27/(byte) be#31 fb::@6/(byte) be#165 ) (byte) bd#113 ← phi( fb::@27/(byte) bd#152 fb::@6/(byte) bd#112 ) (byte) bc#56 ← phi( fb::@27/(byte) bc#90 fb::@6/(byte) bc#55 ) (bool~) fb::$14 ← (byte) bc#56 == (number) 7 @@ -655,6 +773,7 @@ fb::@7: scope:[fb] from fb::@27 fb::@6 to:fb::@18 fb::@17: scope:[fb] from fb::@6 (byte) bc#119 ← phi( fb::@6/(byte) bc#55 ) + (byte) be#124 ← phi( fb::@6/(byte) be#165 ) (byte) bd#67 ← phi( fb::@6/(byte) bd#112 ) (byte) bd#31 ← ++ (byte) bd#67 call fc @@ -662,8 +781,11 @@ fb::@17: scope:[fb] from fb::@6 fb::@27: scope:[fb] from fb::@17 (byte) bd#152 ← phi( fb::@17/(byte) bd#31 ) (byte) bc#90 ← phi( fb::@17/(byte) bc#119 ) + (byte) be#78 ← phi( fb::@17/(byte) be#46 ) + (byte) be#31 ← (byte) be#78 to:fb::@7 fb::@8: scope:[fb] from fb::@28 fb::@7 + (byte) be#167 ← phi( fb::@28/(byte) be#32 fb::@7/(byte) be#166 ) (byte) bd#114 ← phi( fb::@28/(byte) bd#153 fb::@7/(byte) bd#113 ) (byte) bc#57 ← phi( fb::@28/(byte) bc#91 fb::@7/(byte) bc#56 ) (bool~) fb::$16 ← (byte) bc#57 == (number) 8 @@ -672,6 +794,7 @@ fb::@8: scope:[fb] from fb::@28 fb::@7 to:fb::@19 fb::@18: scope:[fb] from fb::@7 (byte) bc#120 ← phi( fb::@7/(byte) bc#56 ) + (byte) be#125 ← phi( fb::@7/(byte) be#166 ) (byte) bd#68 ← phi( fb::@7/(byte) bd#113 ) (byte) bd#32 ← ++ (byte) bd#68 call fc @@ -679,8 +802,11 @@ fb::@18: scope:[fb] from fb::@7 fb::@28: scope:[fb] from fb::@18 (byte) bd#153 ← phi( fb::@18/(byte) bd#32 ) (byte) bc#91 ← phi( fb::@18/(byte) bc#120 ) + (byte) be#79 ← phi( fb::@18/(byte) be#46 ) + (byte) be#32 ← (byte) be#79 to:fb::@8 fb::@9: scope:[fb] from fb::@29 fb::@8 + (byte) be#128 ← phi( fb::@29/(byte) be#33 fb::@8/(byte) be#167 ) (byte) bd#116 ← phi( fb::@29/(byte) bd#154 fb::@8/(byte) bd#114 ) (byte) bc#58 ← phi( fb::@29/(byte) bc#92 fb::@8/(byte) bc#57 ) (bool~) fb::$18 ← (byte) bc#58 == (number) 9 @@ -689,6 +815,7 @@ fb::@9: scope:[fb] from fb::@29 fb::@8 to:fb::@20 fb::@19: scope:[fb] from fb::@8 (byte) bc#121 ← phi( fb::@8/(byte) bc#57 ) + (byte) be#126 ← phi( fb::@8/(byte) be#167 ) (byte) bd#69 ← phi( fb::@8/(byte) bd#114 ) (byte) bd#33 ← ++ (byte) bd#69 call fc @@ -696,28 +823,37 @@ fb::@19: scope:[fb] from fb::@8 fb::@29: scope:[fb] from fb::@19 (byte) bd#154 ← phi( fb::@19/(byte) bd#33 ) (byte) bc#92 ← phi( fb::@19/(byte) bc#121 ) + (byte) be#80 ← phi( fb::@19/(byte) be#46 ) + (byte) be#33 ← (byte) be#80 to:fb::@9 fb::@20: scope:[fb] from fb::@9 + (byte) be#127 ← phi( fb::@9/(byte) be#128 ) (byte) bd#34 ← (number) 0 call fc to:fb::@30 fb::@30: scope:[fb] from fb::@20 (byte) bd#115 ← phi( fb::@20/(byte) bd#34 ) + (byte) be#81 ← phi( fb::@20/(byte) be#46 ) + (byte) be#34 ← (byte) be#81 to:fb::@return fb::@return: scope:[fb] from fb::@30 fb::@9 + (byte) be#82 ← phi( fb::@30/(byte) be#34 fb::@9/(byte) be#128 ) (byte) bd#70 ← phi( fb::@30/(byte) bd#115 fb::@9/(byte) bd#116 ) (byte) bd#35 ← (byte) bd#70 + (byte) be#35 ← (byte) be#82 return to:@return (void()) fc() fc: scope:[fc] from fb::@11 fb::@12 fb::@13 fb::@14 fb::@15 fb::@16 fb::@17 fb::@18 fb::@19 fb::@20 + (byte) be#129 ← phi( fb::@11/(byte) be#118 fb::@12/(byte) be#119 fb::@13/(byte) be#120 fb::@14/(byte) be#121 fb::@15/(byte) be#122 fb::@16/(byte) be#123 fb::@17/(byte) be#124 fb::@18/(byte) be#125 fb::@19/(byte) be#126 fb::@20/(byte) be#127 ) (byte) bd#71 ← phi( fb::@11/(byte) bd#25 fb::@12/(byte) bd#26 fb::@13/(byte) bd#27 fb::@14/(byte) bd#28 fb::@15/(byte) bd#29 fb::@16/(byte) bd#30 fb::@17/(byte) bd#31 fb::@18/(byte) bd#32 fb::@19/(byte) bd#33 fb::@20/(byte) bd#34 ) (bool~) fc::$0 ← (byte) bd#71 == (number) 0 (bool~) fc::$1 ← ! (bool~) fc::$0 if((bool~) fc::$1) goto fc::@1 to:fc::@11 fc::@1: scope:[fc] from fc fc::@11 + (byte) be#130 ← phi( fc/(byte) be#129 fc::@11/(byte) be#36 ) (byte) bd#72 ← phi( fc/(byte) bd#71 fc::@11/(byte) bd#117 ) (bool~) fc::$2 ← (byte) bd#72 == (number) 1 (bool~) fc::$3 ← ! (bool~) fc::$2 @@ -725,8 +861,11 @@ fc::@1: scope:[fc] from fc fc::@11 to:fc::@12 fc::@11: scope:[fc] from fc (byte) bd#117 ← phi( fc/(byte) bd#71 ) + (byte) be#83 ← phi( fc/(byte) be#129 ) + (byte) be#36 ← ++ (byte) be#83 to:fc::@1 fc::@2: scope:[fc] from fc::@1 fc::@12 + (byte) be#131 ← phi( fc::@1/(byte) be#130 fc::@12/(byte) be#37 ) (byte) bd#73 ← phi( fc::@1/(byte) bd#72 fc::@12/(byte) bd#118 ) (bool~) fc::$4 ← (byte) bd#73 == (number) 2 (bool~) fc::$5 ← ! (bool~) fc::$4 @@ -734,8 +873,11 @@ fc::@2: scope:[fc] from fc::@1 fc::@12 to:fc::@13 fc::@12: scope:[fc] from fc::@1 (byte) bd#118 ← phi( fc::@1/(byte) bd#72 ) + (byte) be#84 ← phi( fc::@1/(byte) be#130 ) + (byte) be#37 ← ++ (byte) be#84 to:fc::@2 fc::@3: scope:[fc] from fc::@13 fc::@2 + (byte) be#132 ← phi( fc::@13/(byte) be#38 fc::@2/(byte) be#131 ) (byte) bd#74 ← phi( fc::@13/(byte) bd#119 fc::@2/(byte) bd#73 ) (bool~) fc::$6 ← (byte) bd#74 == (number) 3 (bool~) fc::$7 ← ! (bool~) fc::$6 @@ -743,8 +885,11 @@ fc::@3: scope:[fc] from fc::@13 fc::@2 to:fc::@14 fc::@13: scope:[fc] from fc::@2 (byte) bd#119 ← phi( fc::@2/(byte) bd#73 ) + (byte) be#85 ← phi( fc::@2/(byte) be#131 ) + (byte) be#38 ← ++ (byte) be#85 to:fc::@3 fc::@4: scope:[fc] from fc::@14 fc::@3 + (byte) be#133 ← phi( fc::@14/(byte) be#39 fc::@3/(byte) be#132 ) (byte) bd#75 ← phi( fc::@14/(byte) bd#120 fc::@3/(byte) bd#74 ) (bool~) fc::$8 ← (byte) bd#75 == (number) 4 (bool~) fc::$9 ← ! (bool~) fc::$8 @@ -752,8 +897,11 @@ fc::@4: scope:[fc] from fc::@14 fc::@3 to:fc::@15 fc::@14: scope:[fc] from fc::@3 (byte) bd#120 ← phi( fc::@3/(byte) bd#74 ) + (byte) be#86 ← phi( fc::@3/(byte) be#132 ) + (byte) be#39 ← ++ (byte) be#86 to:fc::@4 fc::@5: scope:[fc] from fc::@15 fc::@4 + (byte) be#134 ← phi( fc::@15/(byte) be#40 fc::@4/(byte) be#133 ) (byte) bd#76 ← phi( fc::@15/(byte) bd#121 fc::@4/(byte) bd#75 ) (bool~) fc::$10 ← (byte) bd#76 == (number) 5 (bool~) fc::$11 ← ! (bool~) fc::$10 @@ -761,8 +909,11 @@ fc::@5: scope:[fc] from fc::@15 fc::@4 to:fc::@16 fc::@15: scope:[fc] from fc::@4 (byte) bd#121 ← phi( fc::@4/(byte) bd#75 ) + (byte) be#87 ← phi( fc::@4/(byte) be#133 ) + (byte) be#40 ← ++ (byte) be#87 to:fc::@5 fc::@6: scope:[fc] from fc::@16 fc::@5 + (byte) be#135 ← phi( fc::@16/(byte) be#41 fc::@5/(byte) be#134 ) (byte) bd#77 ← phi( fc::@16/(byte) bd#122 fc::@5/(byte) bd#76 ) (bool~) fc::$12 ← (byte) bd#77 == (number) 6 (bool~) fc::$13 ← ! (bool~) fc::$12 @@ -770,8 +921,11 @@ fc::@6: scope:[fc] from fc::@16 fc::@5 to:fc::@17 fc::@16: scope:[fc] from fc::@5 (byte) bd#122 ← phi( fc::@5/(byte) bd#76 ) + (byte) be#88 ← phi( fc::@5/(byte) be#134 ) + (byte) be#41 ← ++ (byte) be#88 to:fc::@6 fc::@7: scope:[fc] from fc::@17 fc::@6 + (byte) be#136 ← phi( fc::@17/(byte) be#42 fc::@6/(byte) be#135 ) (byte) bd#78 ← phi( fc::@17/(byte) bd#123 fc::@6/(byte) bd#77 ) (bool~) fc::$14 ← (byte) bd#78 == (number) 7 (bool~) fc::$15 ← ! (bool~) fc::$14 @@ -779,8 +933,11 @@ fc::@7: scope:[fc] from fc::@17 fc::@6 to:fc::@18 fc::@17: scope:[fc] from fc::@6 (byte) bd#123 ← phi( fc::@6/(byte) bd#77 ) + (byte) be#89 ← phi( fc::@6/(byte) be#135 ) + (byte) be#42 ← ++ (byte) be#89 to:fc::@7 fc::@8: scope:[fc] from fc::@18 fc::@7 + (byte) be#137 ← phi( fc::@18/(byte) be#43 fc::@7/(byte) be#136 ) (byte) bd#79 ← phi( fc::@18/(byte) bd#124 fc::@7/(byte) bd#78 ) (bool~) fc::$16 ← (byte) bd#79 == (number) 8 (bool~) fc::$17 ← ! (bool~) fc::$16 @@ -788,8 +945,11 @@ fc::@8: scope:[fc] from fc::@18 fc::@7 to:fc::@19 fc::@18: scope:[fc] from fc::@7 (byte) bd#124 ← phi( fc::@7/(byte) bd#78 ) + (byte) be#90 ← phi( fc::@7/(byte) be#136 ) + (byte) be#43 ← ++ (byte) be#90 to:fc::@8 fc::@9: scope:[fc] from fc::@19 fc::@8 + (byte) be#138 ← phi( fc::@19/(byte) be#44 fc::@8/(byte) be#137 ) (byte) bd#80 ← phi( fc::@19/(byte) bd#125 fc::@8/(byte) bd#79 ) (bool~) fc::$18 ← (byte) bd#80 == (number) 9 (bool~) fc::$19 ← ! (bool~) fc::$18 @@ -797,14 +957,20 @@ fc::@9: scope:[fc] from fc::@19 fc::@8 to:fc::@20 fc::@19: scope:[fc] from fc::@8 (byte) bd#125 ← phi( fc::@8/(byte) bd#79 ) + (byte) be#91 ← phi( fc::@8/(byte) be#137 ) + (byte) be#44 ← ++ (byte) be#91 to:fc::@9 fc::@20: scope:[fc] from fc::@9 + (byte) be#45 ← (number) 0 to:fc::@return fc::@return: scope:[fc] from fc::@20 fc::@9 + (byte) be#92 ← phi( fc::@20/(byte) be#45 fc::@9/(byte) be#138 ) + (byte) be#46 ← (byte) be#92 return to:@return @5: scope:[] from @begin (byte) ba#28 ← phi( @begin/(byte) ba#0 ) + (byte) be#139 ← phi( @begin/(byte) be#0 ) (byte) bd#126 ← phi( @begin/(byte) bd#0 ) (byte) bc#93 ← phi( @begin/(byte) bc#0 ) (byte) bb#60 ← phi( @begin/(byte) bb#0 ) @@ -812,12 +978,14 @@ fc::@return: scope:[fc] from fc::@20 fc::@9 to:@6 @6: scope:[] from @5 (byte) ba#16 ← phi( @5/(byte) ba#2 ) + (byte) be#93 ← phi( @5/(byte) be#2 ) (byte) bd#81 ← phi( @5/(byte) bd#2 ) (byte) bc#59 ← phi( @5/(byte) bc#2 ) (byte) bb#37 ← phi( @5/(byte) bb#2 ) (byte) bb#14 ← (byte) bb#37 (byte) bc#25 ← (byte) bc#59 (byte) bd#36 ← (byte) bd#81 + (byte) be#47 ← (byte) be#93 (byte) ba#3 ← (byte) ba#16 to:@end @end: scope:[] from @6 @@ -1227,6 +1395,175 @@ SYMBOL TABLE SSA (byte) bd#97 (byte) bd#98 (byte) bd#99 +(byte) be +(byte) be#0 +(byte) be#1 +(byte) be#10 +(byte) be#100 +(byte) be#101 +(byte) be#102 +(byte) be#103 +(byte) be#104 +(byte) be#105 +(byte) be#106 +(byte) be#107 +(byte) be#108 +(byte) be#109 +(byte) be#11 +(byte) be#110 +(byte) be#111 +(byte) be#112 +(byte) be#113 +(byte) be#114 +(byte) be#115 +(byte) be#116 +(byte) be#117 +(byte) be#118 +(byte) be#119 +(byte) be#12 +(byte) be#120 +(byte) be#121 +(byte) be#122 +(byte) be#123 +(byte) be#124 +(byte) be#125 +(byte) be#126 +(byte) be#127 +(byte) be#128 +(byte) be#129 +(byte) be#13 +(byte) be#130 +(byte) be#131 +(byte) be#132 +(byte) be#133 +(byte) be#134 +(byte) be#135 +(byte) be#136 +(byte) be#137 +(byte) be#138 +(byte) be#139 +(byte) be#14 +(byte) be#140 +(byte) be#141 +(byte) be#142 +(byte) be#143 +(byte) be#144 +(byte) be#145 +(byte) be#146 +(byte) be#147 +(byte) be#148 +(byte) be#149 +(byte) be#15 +(byte) be#150 +(byte) be#151 +(byte) be#152 +(byte) be#153 +(byte) be#154 +(byte) be#155 +(byte) be#156 +(byte) be#157 +(byte) be#158 +(byte) be#159 +(byte) be#16 +(byte) be#160 +(byte) be#161 +(byte) be#162 +(byte) be#163 +(byte) be#164 +(byte) be#165 +(byte) be#166 +(byte) be#167 +(byte) be#17 +(byte) be#18 +(byte) be#19 +(byte) be#2 +(byte) be#20 +(byte) be#21 +(byte) be#22 +(byte) be#23 +(byte) be#24 +(byte) be#25 +(byte) be#26 +(byte) be#27 +(byte) be#28 +(byte) be#29 +(byte) be#3 +(byte) be#30 +(byte) be#31 +(byte) be#32 +(byte) be#33 +(byte) be#34 +(byte) be#35 +(byte) be#36 +(byte) be#37 +(byte) be#38 +(byte) be#39 +(byte) be#4 +(byte) be#40 +(byte) be#41 +(byte) be#42 +(byte) be#43 +(byte) be#44 +(byte) be#45 +(byte) be#46 +(byte) be#47 +(byte) be#48 +(byte) be#49 +(byte) be#5 +(byte) be#50 +(byte) be#51 +(byte) be#52 +(byte) be#53 +(byte) be#54 +(byte) be#55 +(byte) be#56 +(byte) be#57 +(byte) be#58 +(byte) be#59 +(byte) be#6 +(byte) be#60 +(byte) be#61 +(byte) be#62 +(byte) be#63 +(byte) be#64 +(byte) be#65 +(byte) be#66 +(byte) be#67 +(byte) be#68 +(byte) be#69 +(byte) be#7 +(byte) be#70 +(byte) be#71 +(byte) be#72 +(byte) be#73 +(byte) be#74 +(byte) be#75 +(byte) be#76 +(byte) be#77 +(byte) be#78 +(byte) be#79 +(byte) be#8 +(byte) be#80 +(byte) be#81 +(byte) be#82 +(byte) be#83 +(byte) be#84 +(byte) be#85 +(byte) be#86 +(byte) be#87 +(byte) be#88 +(byte) be#89 +(byte) be#9 +(byte) be#90 +(byte) be#91 +(byte) be#92 +(byte) be#93 +(byte) be#94 +(byte) be#95 +(byte) be#96 +(byte) be#97 +(byte) be#98 +(byte) be#99 (void()) f0() (bool~) f0::$0 (bool~) f0::$1 @@ -1470,10 +1807,12 @@ Adding number conversion cast (unumber) 6 in (bool~) fc::$12 ← (byte) bd#77 == Adding number conversion cast (unumber) 7 in (bool~) fc::$14 ← (byte) bd#78 == (number) 7 Adding number conversion cast (unumber) 8 in (bool~) fc::$16 ← (byte) bd#79 == (number) 8 Adding number conversion cast (unumber) 9 in (bool~) fc::$18 ← (byte) bd#80 == (number) 9 +Adding number conversion cast (unumber) 0 in (byte) be#45 ← (number) 0 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte) bb#12 ← (unumber)(number) 0 Inlining cast (byte) bc#23 ← (unumber)(number) 0 Inlining cast (byte) bd#34 ← (unumber)(number) 0 +Inlining cast (byte) be#45 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant integer cast 0 Simplifying constant integer cast 1 @@ -1518,6 +1857,7 @@ Simplifying constant integer cast 6 Simplifying constant integer cast 7 Simplifying constant integer cast 8 Simplifying constant integer cast 9 +Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 @@ -1562,221 +1902,299 @@ Finalized unsigned number type (byte) 6 Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 9 +Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions -Inversing boolean not [22] (bool~) f0::$1 ← (byte) ba#6 != (byte) 0 from [21] (bool~) f0::$0 ← (byte) ba#6 == (byte) 0 -Inversing boolean not [26] (bool~) f0::$3 ← (byte) ba#7 != (byte) 1 from [25] (bool~) f0::$2 ← (byte) ba#7 == (byte) 1 -Inversing boolean not [36] (bool~) f0::$5 ← (byte) ba#8 != (byte) 2 from [35] (bool~) f0::$4 ← (byte) ba#8 == (byte) 2 -Inversing boolean not [46] (bool~) f0::$7 ← (byte) ba#9 != (byte) 3 from [45] (bool~) f0::$6 ← (byte) ba#9 == (byte) 3 -Inversing boolean not [56] (bool~) f0::$9 ← (byte) ba#10 != (byte) 4 from [55] (bool~) f0::$8 ← (byte) ba#10 == (byte) 4 -Inversing boolean not [66] (bool~) f0::$11 ← (byte) ba#11 != (byte) 5 from [65] (bool~) f0::$10 ← (byte) ba#11 == (byte) 5 -Inversing boolean not [76] (bool~) f0::$13 ← (byte) ba#12 != (byte) 6 from [75] (bool~) f0::$12 ← (byte) ba#12 == (byte) 6 -Inversing boolean not [86] (bool~) f0::$15 ← (byte) ba#13 != (byte) 7 from [85] (bool~) f0::$14 ← (byte) ba#13 == (byte) 7 -Inversing boolean not [96] (bool~) f0::$17 ← (byte) ba#14 != (byte) 8 from [95] (bool~) f0::$16 ← (byte) ba#14 == (byte) 8 -Inversing boolean not [106] (bool~) f0::$19 ← (byte) ba#15 != (byte) 9 from [105] (bool~) f0::$18 ← (byte) ba#15 == (byte) 9 -Inversing boolean not [127] (bool~) fa::$1 ← (byte) bb#27 != (byte) 0 from [126] (bool~) fa::$0 ← (byte) bb#27 == (byte) 0 -Inversing boolean not [131] (bool~) fa::$3 ← (byte) bb#28 != (byte) 1 from [130] (bool~) fa::$2 ← (byte) bb#28 == (byte) 1 -Inversing boolean not [140] (bool~) fa::$5 ← (byte) bb#29 != (byte) 2 from [139] (bool~) fa::$4 ← (byte) bb#29 == (byte) 2 -Inversing boolean not [149] (bool~) fa::$7 ← (byte) bb#30 != (byte) 3 from [148] (bool~) fa::$6 ← (byte) bb#30 == (byte) 3 -Inversing boolean not [158] (bool~) fa::$9 ← (byte) bb#31 != (byte) 4 from [157] (bool~) fa::$8 ← (byte) bb#31 == (byte) 4 -Inversing boolean not [167] (bool~) fa::$11 ← (byte) bb#32 != (byte) 5 from [166] (bool~) fa::$10 ← (byte) bb#32 == (byte) 5 -Inversing boolean not [176] (bool~) fa::$13 ← (byte) bb#33 != (byte) 6 from [175] (bool~) fa::$12 ← (byte) bb#33 == (byte) 6 -Inversing boolean not [185] (bool~) fa::$15 ← (byte) bb#34 != (byte) 7 from [184] (bool~) fa::$14 ← (byte) bb#34 == (byte) 7 -Inversing boolean not [194] (bool~) fa::$17 ← (byte) bb#35 != (byte) 8 from [193] (bool~) fa::$16 ← (byte) bb#35 == (byte) 8 -Inversing boolean not [203] (bool~) fa::$19 ← (byte) bb#36 != (byte) 9 from [202] (bool~) fa::$18 ← (byte) bb#36 == (byte) 9 -Inversing boolean not [221] (bool~) fb::$1 ← (byte) bc#49 != (byte) 0 from [220] (bool~) fb::$0 ← (byte) bc#49 == (byte) 0 -Inversing boolean not [225] (bool~) fb::$3 ← (byte) bc#50 != (byte) 1 from [224] (bool~) fb::$2 ← (byte) bc#50 == (byte) 1 -Inversing boolean not [233] (bool~) fb::$5 ← (byte) bc#51 != (byte) 2 from [232] (bool~) fb::$4 ← (byte) bc#51 == (byte) 2 -Inversing boolean not [241] (bool~) fb::$7 ← (byte) bc#52 != (byte) 3 from [240] (bool~) fb::$6 ← (byte) bc#52 == (byte) 3 -Inversing boolean not [249] (bool~) fb::$9 ← (byte) bc#53 != (byte) 4 from [248] (bool~) fb::$8 ← (byte) bc#53 == (byte) 4 -Inversing boolean not [257] (bool~) fb::$11 ← (byte) bc#54 != (byte) 5 from [256] (bool~) fb::$10 ← (byte) bc#54 == (byte) 5 -Inversing boolean not [265] (bool~) fb::$13 ← (byte) bc#55 != (byte) 6 from [264] (bool~) fb::$12 ← (byte) bc#55 == (byte) 6 -Inversing boolean not [273] (bool~) fb::$15 ← (byte) bc#56 != (byte) 7 from [272] (bool~) fb::$14 ← (byte) bc#56 == (byte) 7 -Inversing boolean not [281] (bool~) fb::$17 ← (byte) bc#57 != (byte) 8 from [280] (bool~) fb::$16 ← (byte) bc#57 == (byte) 8 -Inversing boolean not [289] (bool~) fb::$19 ← (byte) bc#58 != (byte) 9 from [288] (bool~) fb::$18 ← (byte) bc#58 == (byte) 9 -Inversing boolean not [303] (bool~) fc::$1 ← (byte) bd#71 != (byte) 0 from [302] (bool~) fc::$0 ← (byte) bd#71 == (byte) 0 -Inversing boolean not [307] (bool~) fc::$3 ← (byte) bd#72 != (byte) 1 from [306] (bool~) fc::$2 ← (byte) bd#72 == (byte) 1 -Inversing boolean not [312] (bool~) fc::$5 ← (byte) bd#73 != (byte) 2 from [311] (bool~) fc::$4 ← (byte) bd#73 == (byte) 2 -Inversing boolean not [317] (bool~) fc::$7 ← (byte) bd#74 != (byte) 3 from [316] (bool~) fc::$6 ← (byte) bd#74 == (byte) 3 -Inversing boolean not [322] (bool~) fc::$9 ← (byte) bd#75 != (byte) 4 from [321] (bool~) fc::$8 ← (byte) bd#75 == (byte) 4 -Inversing boolean not [327] (bool~) fc::$11 ← (byte) bd#76 != (byte) 5 from [326] (bool~) fc::$10 ← (byte) bd#76 == (byte) 5 -Inversing boolean not [332] (bool~) fc::$13 ← (byte) bd#77 != (byte) 6 from [331] (bool~) fc::$12 ← (byte) bd#77 == (byte) 6 -Inversing boolean not [337] (bool~) fc::$15 ← (byte) bd#78 != (byte) 7 from [336] (bool~) fc::$14 ← (byte) bd#78 == (byte) 7 -Inversing boolean not [342] (bool~) fc::$17 ← (byte) bd#79 != (byte) 8 from [341] (bool~) fc::$16 ← (byte) bd#79 == (byte) 8 -Inversing boolean not [347] (bool~) fc::$19 ← (byte) bd#80 != (byte) 9 from [346] (bool~) fc::$18 ← (byte) bd#80 == (byte) 9 +Inversing boolean not [25] (bool~) f0::$1 ← (byte) ba#6 != (byte) 0 from [24] (bool~) f0::$0 ← (byte) ba#6 == (byte) 0 +Inversing boolean not [29] (bool~) f0::$3 ← (byte) ba#7 != (byte) 1 from [28] (bool~) f0::$2 ← (byte) ba#7 == (byte) 1 +Inversing boolean not [40] (bool~) f0::$5 ← (byte) ba#8 != (byte) 2 from [39] (bool~) f0::$4 ← (byte) ba#8 == (byte) 2 +Inversing boolean not [51] (bool~) f0::$7 ← (byte) ba#9 != (byte) 3 from [50] (bool~) f0::$6 ← (byte) ba#9 == (byte) 3 +Inversing boolean not [62] (bool~) f0::$9 ← (byte) ba#10 != (byte) 4 from [61] (bool~) f0::$8 ← (byte) ba#10 == (byte) 4 +Inversing boolean not [73] (bool~) f0::$11 ← (byte) ba#11 != (byte) 5 from [72] (bool~) f0::$10 ← (byte) ba#11 == (byte) 5 +Inversing boolean not [84] (bool~) f0::$13 ← (byte) ba#12 != (byte) 6 from [83] (bool~) f0::$12 ← (byte) ba#12 == (byte) 6 +Inversing boolean not [95] (bool~) f0::$15 ← (byte) ba#13 != (byte) 7 from [94] (bool~) f0::$14 ← (byte) ba#13 == (byte) 7 +Inversing boolean not [106] (bool~) f0::$17 ← (byte) ba#14 != (byte) 8 from [105] (bool~) f0::$16 ← (byte) ba#14 == (byte) 8 +Inversing boolean not [117] (bool~) f0::$19 ← (byte) ba#15 != (byte) 9 from [116] (bool~) f0::$18 ← (byte) ba#15 == (byte) 9 +Inversing boolean not [141] (bool~) fa::$1 ← (byte) bb#27 != (byte) 0 from [140] (bool~) fa::$0 ← (byte) bb#27 == (byte) 0 +Inversing boolean not [145] (bool~) fa::$3 ← (byte) bb#28 != (byte) 1 from [144] (bool~) fa::$2 ← (byte) bb#28 == (byte) 1 +Inversing boolean not [155] (bool~) fa::$5 ← (byte) bb#29 != (byte) 2 from [154] (bool~) fa::$4 ← (byte) bb#29 == (byte) 2 +Inversing boolean not [165] (bool~) fa::$7 ← (byte) bb#30 != (byte) 3 from [164] (bool~) fa::$6 ← (byte) bb#30 == (byte) 3 +Inversing boolean not [175] (bool~) fa::$9 ← (byte) bb#31 != (byte) 4 from [174] (bool~) fa::$8 ← (byte) bb#31 == (byte) 4 +Inversing boolean not [185] (bool~) fa::$11 ← (byte) bb#32 != (byte) 5 from [184] (bool~) fa::$10 ← (byte) bb#32 == (byte) 5 +Inversing boolean not [195] (bool~) fa::$13 ← (byte) bb#33 != (byte) 6 from [194] (bool~) fa::$12 ← (byte) bb#33 == (byte) 6 +Inversing boolean not [205] (bool~) fa::$15 ← (byte) bb#34 != (byte) 7 from [204] (bool~) fa::$14 ← (byte) bb#34 == (byte) 7 +Inversing boolean not [215] (bool~) fa::$17 ← (byte) bb#35 != (byte) 8 from [214] (bool~) fa::$16 ← (byte) bb#35 == (byte) 8 +Inversing boolean not [225] (bool~) fa::$19 ← (byte) bb#36 != (byte) 9 from [224] (bool~) fa::$18 ← (byte) bb#36 == (byte) 9 +Inversing boolean not [246] (bool~) fb::$1 ← (byte) bc#49 != (byte) 0 from [245] (bool~) fb::$0 ← (byte) bc#49 == (byte) 0 +Inversing boolean not [250] (bool~) fb::$3 ← (byte) bc#50 != (byte) 1 from [249] (bool~) fb::$2 ← (byte) bc#50 == (byte) 1 +Inversing boolean not [259] (bool~) fb::$5 ← (byte) bc#51 != (byte) 2 from [258] (bool~) fb::$4 ← (byte) bc#51 == (byte) 2 +Inversing boolean not [268] (bool~) fb::$7 ← (byte) bc#52 != (byte) 3 from [267] (bool~) fb::$6 ← (byte) bc#52 == (byte) 3 +Inversing boolean not [277] (bool~) fb::$9 ← (byte) bc#53 != (byte) 4 from [276] (bool~) fb::$8 ← (byte) bc#53 == (byte) 4 +Inversing boolean not [286] (bool~) fb::$11 ← (byte) bc#54 != (byte) 5 from [285] (bool~) fb::$10 ← (byte) bc#54 == (byte) 5 +Inversing boolean not [295] (bool~) fb::$13 ← (byte) bc#55 != (byte) 6 from [294] (bool~) fb::$12 ← (byte) bc#55 == (byte) 6 +Inversing boolean not [304] (bool~) fb::$15 ← (byte) bc#56 != (byte) 7 from [303] (bool~) fb::$14 ← (byte) bc#56 == (byte) 7 +Inversing boolean not [313] (bool~) fb::$17 ← (byte) bc#57 != (byte) 8 from [312] (bool~) fb::$16 ← (byte) bc#57 == (byte) 8 +Inversing boolean not [322] (bool~) fb::$19 ← (byte) bc#58 != (byte) 9 from [321] (bool~) fb::$18 ← (byte) bc#58 == (byte) 9 +Inversing boolean not [340] (bool~) fc::$1 ← (byte) bd#71 != (byte) 0 from [339] (bool~) fc::$0 ← (byte) bd#71 == (byte) 0 +Inversing boolean not [344] (bool~) fc::$3 ← (byte) bd#72 != (byte) 1 from [343] (bool~) fc::$2 ← (byte) bd#72 == (byte) 1 +Inversing boolean not [350] (bool~) fc::$5 ← (byte) bd#73 != (byte) 2 from [349] (bool~) fc::$4 ← (byte) bd#73 == (byte) 2 +Inversing boolean not [356] (bool~) fc::$7 ← (byte) bd#74 != (byte) 3 from [355] (bool~) fc::$6 ← (byte) bd#74 == (byte) 3 +Inversing boolean not [362] (bool~) fc::$9 ← (byte) bd#75 != (byte) 4 from [361] (bool~) fc::$8 ← (byte) bd#75 == (byte) 4 +Inversing boolean not [368] (bool~) fc::$11 ← (byte) bd#76 != (byte) 5 from [367] (bool~) fc::$10 ← (byte) bd#76 == (byte) 5 +Inversing boolean not [374] (bool~) fc::$13 ← (byte) bd#77 != (byte) 6 from [373] (bool~) fc::$12 ← (byte) bd#77 == (byte) 6 +Inversing boolean not [380] (bool~) fc::$15 ← (byte) bd#78 != (byte) 7 from [379] (bool~) fc::$14 ← (byte) bd#78 == (byte) 7 +Inversing boolean not [386] (bool~) fc::$17 ← (byte) bd#79 != (byte) 8 from [385] (bool~) fc::$16 ← (byte) bd#79 == (byte) 8 +Inversing boolean not [392] (bool~) fc::$19 ← (byte) bd#80 != (byte) 9 from [391] (bool~) fc::$18 ← (byte) bd#80 == (byte) 9 Successful SSA optimization Pass2UnaryNotSimplification Alias (byte) bb#16 = (byte) bb#38 (byte) bb#39 (byte) bb#2 Alias (byte) bc#2 = (byte) bc#60 (byte) bc#61 (byte) bc#27 Alias (byte) bd#2 = (byte) bd#82 (byte) bd#83 (byte) bd#38 +Alias (byte) be#2 = (byte) be#94 (byte) be#95 (byte) be#49 Alias (byte) ba#17 = (byte) ba#18 (byte) ba#4 (byte) ba#5 (byte) ba#2 Alias (byte) bb#1 = (byte) bb#15 Alias (byte) bc#1 = (byte) bc#26 Alias (byte) bd#1 = (byte) bd#37 +Alias (byte) be#1 = (byte) be#48 Alias (byte) bb#17 = (byte) bb#40 Alias (byte) bc#62 = (byte) bc#95 Alias (byte) bd#128 = (byte) bd#84 +Alias (byte) be#141 = (byte) be#96 Alias (byte) ba#19 = (byte) ba#30 (byte) ba#6 Alias (byte) bb#3 = (byte) bb#62 Alias (byte) bc#28 = (byte) bc#3 Alias (byte) bd#3 = (byte) bd#39 +Alias (byte) be#3 = (byte) be#50 Alias (byte) bb#18 = (byte) bb#41 Alias (byte) bc#63 = (byte) bc#96 Alias (byte) bd#129 = (byte) bd#85 +Alias (byte) be#142 = (byte) be#97 Alias (byte) ba#20 = (byte) ba#31 (byte) ba#7 Alias (byte) bb#4 = (byte) bb#63 Alias (byte) bc#29 = (byte) bc#4 Alias (byte) bd#4 = (byte) bd#40 +Alias (byte) be#4 = (byte) be#51 Alias (byte) bb#19 = (byte) bb#42 Alias (byte) bc#64 = (byte) bc#97 Alias (byte) bd#130 = (byte) bd#86 +Alias (byte) be#143 = (byte) be#98 Alias (byte) ba#21 = (byte) ba#32 (byte) ba#8 Alias (byte) bb#5 = (byte) bb#64 Alias (byte) bc#30 = (byte) bc#5 Alias (byte) bd#41 = (byte) bd#5 +Alias (byte) be#5 = (byte) be#52 Alias (byte) bb#20 = (byte) bb#43 Alias (byte) bc#65 = (byte) bc#98 Alias (byte) bd#131 = (byte) bd#87 +Alias (byte) be#144 = (byte) be#99 Alias (byte) ba#22 = (byte) ba#33 (byte) ba#9 Alias (byte) bb#6 = (byte) bb#65 Alias (byte) bc#31 = (byte) bc#6 Alias (byte) bd#42 = (byte) bd#6 +Alias (byte) be#53 = (byte) be#6 Alias (byte) bb#21 = (byte) bb#44 Alias (byte) bc#66 = (byte) bc#99 Alias (byte) bd#132 = (byte) bd#88 +Alias (byte) be#100 = (byte) be#145 Alias (byte) ba#10 = (byte) ba#34 (byte) ba#23 Alias (byte) bb#66 = (byte) bb#7 Alias (byte) bc#32 = (byte) bc#7 Alias (byte) bd#43 = (byte) bd#7 +Alias (byte) be#54 = (byte) be#7 Alias (byte) bb#22 = (byte) bb#45 Alias (byte) bc#100 = (byte) bc#67 Alias (byte) bd#133 = (byte) bd#89 +Alias (byte) be#101 = (byte) be#146 Alias (byte) ba#11 = (byte) ba#35 (byte) ba#24 Alias (byte) bb#67 = (byte) bb#8 Alias (byte) bc#33 = (byte) bc#8 Alias (byte) bd#44 = (byte) bd#8 +Alias (byte) be#55 = (byte) be#8 Alias (byte) bb#23 = (byte) bb#46 Alias (byte) bc#101 = (byte) bc#68 Alias (byte) bd#134 = (byte) bd#90 +Alias (byte) be#102 = (byte) be#147 Alias (byte) ba#12 = (byte) ba#36 (byte) ba#25 Alias (byte) bb#68 = (byte) bb#9 Alias (byte) bc#34 = (byte) bc#9 Alias (byte) bd#45 = (byte) bd#9 +Alias (byte) be#56 = (byte) be#9 Alias (byte) bb#24 = (byte) bb#47 Alias (byte) bc#102 = (byte) bc#69 Alias (byte) bd#135 = (byte) bd#91 +Alias (byte) be#103 = (byte) be#148 Alias (byte) ba#13 = (byte) ba#37 (byte) ba#26 Alias (byte) bb#10 = (byte) bb#69 Alias (byte) bc#10 = (byte) bc#35 Alias (byte) bd#10 = (byte) bd#46 +Alias (byte) be#10 = (byte) be#57 Alias (byte) bb#25 = (byte) bb#48 Alias (byte) bc#103 = (byte) bc#70 Alias (byte) bd#136 = (byte) bd#92 +Alias (byte) be#104 = (byte) be#149 Alias (byte) ba#14 = (byte) ba#38 (byte) ba#27 Alias (byte) bb#11 = (byte) bb#70 Alias (byte) bc#11 = (byte) bc#36 Alias (byte) bd#11 = (byte) bd#47 +Alias (byte) be#11 = (byte) be#58 Alias (byte) bc#71 = (byte) bc#72 Alias (byte) bd#93 = (byte) bd#94 +Alias (byte) be#105 = (byte) be#106 Alias (byte) bb#12 = (byte) bb#49 Alias (byte) bc#12 = (byte) bc#37 Alias (byte) bd#12 = (byte) bd#48 +Alias (byte) be#12 = (byte) be#59 Alias (byte) bb#13 = (byte) bb#26 Alias (byte) bc#13 = (byte) bc#38 Alias (byte) bd#13 = (byte) bd#49 +Alias (byte) be#13 = (byte) be#60 Alias (byte) bc#39 = (byte) bc#73 Alias (byte) bd#137 = (byte) bd#95 +Alias (byte) be#107 = (byte) be#150 Alias (byte) bb#27 = (byte) bb#71 (byte) bb#51 Alias (byte) bc#104 = (byte) bc#14 Alias (byte) bd#14 = (byte) bd#50 +Alias (byte) be#14 = (byte) be#61 Alias (byte) bc#40 = (byte) bc#74 Alias (byte) bd#138 = (byte) bd#96 +Alias (byte) be#108 = (byte) be#151 Alias (byte) bb#28 = (byte) bb#72 (byte) bb#52 Alias (byte) bc#105 = (byte) bc#15 Alias (byte) bd#15 = (byte) bd#51 +Alias (byte) be#15 = (byte) be#62 Alias (byte) bc#41 = (byte) bc#75 Alias (byte) bd#139 = (byte) bd#97 +Alias (byte) be#109 = (byte) be#152 Alias (byte) bb#29 = (byte) bb#73 (byte) bb#53 Alias (byte) bc#106 = (byte) bc#16 Alias (byte) bd#16 = (byte) bd#52 +Alias (byte) be#16 = (byte) be#63 Alias (byte) bc#42 = (byte) bc#76 Alias (byte) bd#140 = (byte) bd#98 +Alias (byte) be#110 = (byte) be#153 Alias (byte) bb#30 = (byte) bb#74 (byte) bb#54 Alias (byte) bc#107 = (byte) bc#17 Alias (byte) bd#17 = (byte) bd#53 +Alias (byte) be#17 = (byte) be#64 Alias (byte) bc#43 = (byte) bc#77 Alias (byte) bd#141 = (byte) bd#99 +Alias (byte) be#111 = (byte) be#154 Alias (byte) bb#31 = (byte) bb#75 (byte) bb#55 Alias (byte) bc#108 = (byte) bc#18 Alias (byte) bd#18 = (byte) bd#54 +Alias (byte) be#18 = (byte) be#65 Alias (byte) bc#44 = (byte) bc#78 Alias (byte) bd#100 = (byte) bd#142 +Alias (byte) be#112 = (byte) be#155 Alias (byte) bb#32 = (byte) bb#76 (byte) bb#56 Alias (byte) bc#109 = (byte) bc#19 Alias (byte) bd#19 = (byte) bd#55 +Alias (byte) be#19 = (byte) be#66 Alias (byte) bc#45 = (byte) bc#79 Alias (byte) bd#101 = (byte) bd#143 +Alias (byte) be#113 = (byte) be#156 Alias (byte) bb#33 = (byte) bb#77 (byte) bb#57 Alias (byte) bc#110 = (byte) bc#20 Alias (byte) bd#20 = (byte) bd#56 +Alias (byte) be#20 = (byte) be#67 Alias (byte) bc#46 = (byte) bc#80 Alias (byte) bd#102 = (byte) bd#144 +Alias (byte) be#114 = (byte) be#157 Alias (byte) bb#34 = (byte) bb#78 (byte) bb#58 Alias (byte) bc#111 = (byte) bc#21 Alias (byte) bd#21 = (byte) bd#57 +Alias (byte) be#21 = (byte) be#68 Alias (byte) bc#47 = (byte) bc#81 Alias (byte) bd#103 = (byte) bd#145 +Alias (byte) be#115 = (byte) be#158 Alias (byte) bb#35 = (byte) bb#79 (byte) bb#59 Alias (byte) bc#112 = (byte) bc#22 Alias (byte) bd#22 = (byte) bd#58 +Alias (byte) be#22 = (byte) be#69 Alias (byte) bd#104 = (byte) bd#105 +Alias (byte) be#116 = (byte) be#117 Alias (byte) bc#23 = (byte) bc#82 Alias (byte) bd#23 = (byte) bd#59 +Alias (byte) be#23 = (byte) be#70 Alias (byte) bc#24 = (byte) bc#48 Alias (byte) bd#24 = (byte) bd#60 +Alias (byte) be#24 = (byte) be#71 Alias (byte) bd#106 = (byte) bd#61 +Alias (byte) be#118 = (byte) be#159 Alias (byte) bc#113 = (byte) bc#49 (byte) bc#84 Alias (byte) bd#146 = (byte) bd#25 +Alias (byte) be#25 = (byte) be#72 Alias (byte) bd#107 = (byte) bd#62 +Alias (byte) be#119 = (byte) be#160 Alias (byte) bc#114 = (byte) bc#50 (byte) bc#85 Alias (byte) bd#147 = (byte) bd#26 +Alias (byte) be#26 = (byte) be#73 Alias (byte) bd#108 = (byte) bd#63 +Alias (byte) be#120 = (byte) be#161 Alias (byte) bc#115 = (byte) bc#51 (byte) bc#86 Alias (byte) bd#148 = (byte) bd#27 +Alias (byte) be#27 = (byte) be#74 Alias (byte) bd#109 = (byte) bd#64 +Alias (byte) be#121 = (byte) be#162 Alias (byte) bc#116 = (byte) bc#52 (byte) bc#87 Alias (byte) bd#149 = (byte) bd#28 +Alias (byte) be#28 = (byte) be#75 Alias (byte) bd#110 = (byte) bd#65 +Alias (byte) be#122 = (byte) be#163 Alias (byte) bc#117 = (byte) bc#53 (byte) bc#88 Alias (byte) bd#150 = (byte) bd#29 +Alias (byte) be#29 = (byte) be#76 Alias (byte) bd#111 = (byte) bd#66 +Alias (byte) be#123 = (byte) be#164 Alias (byte) bc#118 = (byte) bc#54 (byte) bc#89 Alias (byte) bd#151 = (byte) bd#30 +Alias (byte) be#30 = (byte) be#77 Alias (byte) bd#112 = (byte) bd#67 +Alias (byte) be#124 = (byte) be#165 Alias (byte) bc#119 = (byte) bc#55 (byte) bc#90 Alias (byte) bd#152 = (byte) bd#31 +Alias (byte) be#31 = (byte) be#78 Alias (byte) bd#113 = (byte) bd#68 +Alias (byte) be#125 = (byte) be#166 Alias (byte) bc#120 = (byte) bc#56 (byte) bc#91 Alias (byte) bd#153 = (byte) bd#32 +Alias (byte) be#32 = (byte) be#79 Alias (byte) bd#114 = (byte) bd#69 +Alias (byte) be#126 = (byte) be#167 Alias (byte) bc#121 = (byte) bc#57 (byte) bc#92 Alias (byte) bd#154 = (byte) bd#33 +Alias (byte) be#33 = (byte) be#80 +Alias (byte) be#127 = (byte) be#128 Alias (byte) bd#115 = (byte) bd#34 +Alias (byte) be#34 = (byte) be#81 Alias (byte) bd#35 = (byte) bd#70 +Alias (byte) be#35 = (byte) be#82 +Alias (byte) be#129 = (byte) be#83 Alias (byte) bd#117 = (byte) bd#71 +Alias (byte) be#130 = (byte) be#84 Alias (byte) bd#118 = (byte) bd#72 +Alias (byte) be#131 = (byte) be#85 Alias (byte) bd#119 = (byte) bd#73 +Alias (byte) be#132 = (byte) be#86 Alias (byte) bd#120 = (byte) bd#74 +Alias (byte) be#133 = (byte) be#87 Alias (byte) bd#121 = (byte) bd#75 +Alias (byte) be#134 = (byte) be#88 Alias (byte) bd#122 = (byte) bd#76 +Alias (byte) be#135 = (byte) be#89 Alias (byte) bd#123 = (byte) bd#77 +Alias (byte) be#136 = (byte) be#90 Alias (byte) bd#124 = (byte) bd#78 +Alias (byte) be#137 = (byte) be#91 Alias (byte) bd#125 = (byte) bd#79 +Alias (byte) be#46 = (byte) be#92 Alias (byte) bb#0 = (byte) bb#60 Alias (byte) bc#0 = (byte) bc#93 Alias (byte) bd#0 = (byte) bd#126 +Alias (byte) be#0 = (byte) be#139 Alias (byte) ba#0 = (byte) ba#28 Alias (byte) bb#14 = (byte) bb#37 Alias (byte) bc#25 = (byte) bc#59 Alias (byte) bd#36 = (byte) bd#81 +Alias (byte) be#47 = (byte) be#93 Alias (byte) ba#16 = (byte) ba#3 Successful SSA optimization Pass2AliasElimination Alias (byte) ba#10 = (byte) ba#20 (byte) ba#19 (byte) ba#21 (byte) ba#22 (byte) ba#11 (byte) ba#12 (byte) ba#13 (byte) ba#14 (byte) ba#15 @@ -1787,99 +2205,135 @@ Successful SSA optimization Pass2AliasElimination Identical Phi Values (byte) bb#61 (byte) bb#0 Identical Phi Values (byte) bc#94 (byte) bc#0 Identical Phi Values (byte) bd#127 (byte) bd#0 +Identical Phi Values (byte) be#140 (byte) be#0 Identical Phi Values (byte) ba#29 (byte) ba#0 Identical Phi Values (byte) bb#1 (byte) bb#13 Identical Phi Values (byte) bc#1 (byte) bc#13 Identical Phi Values (byte) bd#1 (byte) bd#13 +Identical Phi Values (byte) be#1 (byte) be#13 Identical Phi Values (byte) ba#10 (byte) ba#17 Identical Phi Values (byte) bb#17 (byte) bb#16 Identical Phi Values (byte) bc#62 (byte) bc#2 Identical Phi Values (byte) bd#128 (byte) bd#2 +Identical Phi Values (byte) be#141 (byte) be#2 Identical Phi Values (byte) bc#28 (byte) bc#24 Identical Phi Values (byte) bd#3 (byte) bd#24 +Identical Phi Values (byte) be#3 (byte) be#24 Identical Phi Values (byte) bc#29 (byte) bc#24 Identical Phi Values (byte) bd#4 (byte) bd#24 +Identical Phi Values (byte) be#4 (byte) be#24 Identical Phi Values (byte) bc#30 (byte) bc#24 Identical Phi Values (byte) bd#41 (byte) bd#24 +Identical Phi Values (byte) be#5 (byte) be#24 Identical Phi Values (byte) bc#31 (byte) bc#24 Identical Phi Values (byte) bd#42 (byte) bd#24 +Identical Phi Values (byte) be#53 (byte) be#24 Identical Phi Values (byte) bc#32 (byte) bc#24 Identical Phi Values (byte) bd#43 (byte) bd#24 +Identical Phi Values (byte) be#54 (byte) be#24 Identical Phi Values (byte) bc#33 (byte) bc#24 Identical Phi Values (byte) bd#44 (byte) bd#24 +Identical Phi Values (byte) be#55 (byte) be#24 Identical Phi Values (byte) bc#34 (byte) bc#24 Identical Phi Values (byte) bd#45 (byte) bd#24 +Identical Phi Values (byte) be#56 (byte) be#24 Identical Phi Values (byte) bc#10 (byte) bc#24 Identical Phi Values (byte) bd#10 (byte) bd#24 +Identical Phi Values (byte) be#10 (byte) be#24 Identical Phi Values (byte) bc#11 (byte) bc#24 Identical Phi Values (byte) bd#11 (byte) bd#24 +Identical Phi Values (byte) be#11 (byte) be#24 Identical Phi Values (byte) bc#12 (byte) bc#24 Identical Phi Values (byte) bd#12 (byte) bd#24 +Identical Phi Values (byte) be#12 (byte) be#24 Identical Phi Values (byte) bd#14 (byte) bd#35 +Identical Phi Values (byte) be#14 (byte) be#35 Identical Phi Values (byte) bd#15 (byte) bd#35 +Identical Phi Values (byte) be#15 (byte) be#35 Identical Phi Values (byte) bd#16 (byte) bd#35 +Identical Phi Values (byte) be#16 (byte) be#35 Identical Phi Values (byte) bd#17 (byte) bd#35 +Identical Phi Values (byte) be#17 (byte) be#35 Identical Phi Values (byte) bd#18 (byte) bd#35 +Identical Phi Values (byte) be#18 (byte) be#35 Identical Phi Values (byte) bd#19 (byte) bd#35 +Identical Phi Values (byte) be#19 (byte) be#35 Identical Phi Values (byte) bd#20 (byte) bd#35 +Identical Phi Values (byte) be#20 (byte) be#35 Identical Phi Values (byte) bd#21 (byte) bd#35 +Identical Phi Values (byte) be#21 (byte) be#35 Identical Phi Values (byte) bd#22 (byte) bd#35 +Identical Phi Values (byte) be#22 (byte) be#35 Identical Phi Values (byte) bd#23 (byte) bd#35 +Identical Phi Values (byte) be#23 (byte) be#35 +Identical Phi Values (byte) be#25 (byte) be#46 +Identical Phi Values (byte) be#26 (byte) be#46 +Identical Phi Values (byte) be#27 (byte) be#46 +Identical Phi Values (byte) be#28 (byte) be#46 +Identical Phi Values (byte) be#29 (byte) be#46 +Identical Phi Values (byte) be#30 (byte) be#46 +Identical Phi Values (byte) be#31 (byte) be#46 +Identical Phi Values (byte) be#32 (byte) be#46 +Identical Phi Values (byte) be#33 (byte) be#46 +Identical Phi Values (byte) be#34 (byte) be#46 Identical Phi Values (byte) bb#14 (byte) bb#16 Identical Phi Values (byte) bc#25 (byte) bc#2 Identical Phi Values (byte) bd#36 (byte) bd#2 +Identical Phi Values (byte) be#47 (byte) be#2 Identical Phi Values (byte) ba#16 (byte) ba#17 Successful SSA optimization Pass2IdenticalPhiElimination -Simple Condition (bool~) f0::$1 [23] if((byte) ba#17!=(byte) 0) goto f0::@1 -Simple Condition (bool~) f0::$3 [27] if((byte) ba#17!=(byte) 1) goto f0::@2 -Simple Condition (bool~) f0::$5 [37] if((byte) ba#17!=(byte) 2) goto f0::@3 -Simple Condition (bool~) f0::$7 [47] if((byte) ba#17!=(byte) 3) goto f0::@4 -Simple Condition (bool~) f0::$9 [57] if((byte) ba#17!=(byte) 4) goto f0::@5 -Simple Condition (bool~) f0::$11 [67] if((byte) ba#17!=(byte) 5) goto f0::@6 -Simple Condition (bool~) f0::$13 [77] if((byte) ba#17!=(byte) 6) goto f0::@7 -Simple Condition (bool~) f0::$15 [87] if((byte) ba#17!=(byte) 7) goto f0::@8 -Simple Condition (bool~) f0::$17 [97] if((byte) ba#17!=(byte) 8) goto f0::@9 -Simple Condition (bool~) f0::$19 [107] if((byte) ba#17!=(byte) 9) goto f0::@return -Simple Condition (bool~) fa::$1 [128] if((byte) bb#27!=(byte) 0) goto fa::@1 -Simple Condition (bool~) fa::$3 [132] if((byte) bb#27!=(byte) 1) goto fa::@2 -Simple Condition (bool~) fa::$5 [141] if((byte) bb#27!=(byte) 2) goto fa::@3 -Simple Condition (bool~) fa::$7 [150] if((byte) bb#27!=(byte) 3) goto fa::@4 -Simple Condition (bool~) fa::$9 [159] if((byte) bb#27!=(byte) 4) goto fa::@5 -Simple Condition (bool~) fa::$11 [168] if((byte) bb#27!=(byte) 5) goto fa::@6 -Simple Condition (bool~) fa::$13 [177] if((byte) bb#27!=(byte) 6) goto fa::@7 -Simple Condition (bool~) fa::$15 [186] if((byte) bb#27!=(byte) 7) goto fa::@8 -Simple Condition (bool~) fa::$17 [195] if((byte) bb#27!=(byte) 8) goto fa::@9 -Simple Condition (bool~) fa::$19 [204] if((byte) bb#27!=(byte) 9) goto fa::@return -Simple Condition (bool~) fb::$1 [222] if((byte) bc#113!=(byte) 0) goto fb::@1 -Simple Condition (bool~) fb::$3 [226] if((byte) bc#113!=(byte) 1) goto fb::@2 -Simple Condition (bool~) fb::$5 [234] if((byte) bc#113!=(byte) 2) goto fb::@3 -Simple Condition (bool~) fb::$7 [242] if((byte) bc#113!=(byte) 3) goto fb::@4 -Simple Condition (bool~) fb::$9 [250] if((byte) bc#113!=(byte) 4) goto fb::@5 -Simple Condition (bool~) fb::$11 [258] if((byte) bc#113!=(byte) 5) goto fb::@6 -Simple Condition (bool~) fb::$13 [266] if((byte) bc#113!=(byte) 6) goto fb::@7 -Simple Condition (bool~) fb::$15 [274] if((byte) bc#113!=(byte) 7) goto fb::@8 -Simple Condition (bool~) fb::$17 [282] if((byte) bc#113!=(byte) 8) goto fb::@9 -Simple Condition (bool~) fb::$19 [290] if((byte) bc#113!=(byte) 9) goto fb::@return -Simple Condition (bool~) fc::$1 [304] if((byte) bd#117!=(byte) 0) goto fc::@1 -Simple Condition (bool~) fc::$3 [308] if((byte) bd#117!=(byte) 1) goto fc::@2 -Simple Condition (bool~) fc::$5 [313] if((byte) bd#117!=(byte) 2) goto fc::@3 -Simple Condition (bool~) fc::$7 [318] if((byte) bd#117!=(byte) 3) goto fc::@4 -Simple Condition (bool~) fc::$9 [323] if((byte) bd#117!=(byte) 4) goto fc::@5 -Simple Condition (bool~) fc::$11 [328] if((byte) bd#117!=(byte) 5) goto fc::@6 -Simple Condition (bool~) fc::$13 [333] if((byte) bd#117!=(byte) 6) goto fc::@7 -Simple Condition (bool~) fc::$15 [338] if((byte) bd#117!=(byte) 7) goto fc::@8 -Simple Condition (bool~) fc::$17 [343] if((byte) bd#117!=(byte) 8) goto fc::@9 -Simple Condition (bool~) fc::$19 [348] if((byte) bd#117!=(byte) 9) goto fc::@return +Simple Condition (bool~) f0::$1 [26] if((byte) ba#17!=(byte) 0) goto f0::@1 +Simple Condition (bool~) f0::$3 [30] if((byte) ba#17!=(byte) 1) goto f0::@2 +Simple Condition (bool~) f0::$5 [41] if((byte) ba#17!=(byte) 2) goto f0::@3 +Simple Condition (bool~) f0::$7 [52] if((byte) ba#17!=(byte) 3) goto f0::@4 +Simple Condition (bool~) f0::$9 [63] if((byte) ba#17!=(byte) 4) goto f0::@5 +Simple Condition (bool~) f0::$11 [74] if((byte) ba#17!=(byte) 5) goto f0::@6 +Simple Condition (bool~) f0::$13 [85] if((byte) ba#17!=(byte) 6) goto f0::@7 +Simple Condition (bool~) f0::$15 [96] if((byte) ba#17!=(byte) 7) goto f0::@8 +Simple Condition (bool~) f0::$17 [107] if((byte) ba#17!=(byte) 8) goto f0::@9 +Simple Condition (bool~) f0::$19 [118] if((byte) ba#17!=(byte) 9) goto f0::@return +Simple Condition (bool~) fa::$1 [142] if((byte) bb#27!=(byte) 0) goto fa::@1 +Simple Condition (bool~) fa::$3 [146] if((byte) bb#27!=(byte) 1) goto fa::@2 +Simple Condition (bool~) fa::$5 [156] if((byte) bb#27!=(byte) 2) goto fa::@3 +Simple Condition (bool~) fa::$7 [166] if((byte) bb#27!=(byte) 3) goto fa::@4 +Simple Condition (bool~) fa::$9 [176] if((byte) bb#27!=(byte) 4) goto fa::@5 +Simple Condition (bool~) fa::$11 [186] if((byte) bb#27!=(byte) 5) goto fa::@6 +Simple Condition (bool~) fa::$13 [196] if((byte) bb#27!=(byte) 6) goto fa::@7 +Simple Condition (bool~) fa::$15 [206] if((byte) bb#27!=(byte) 7) goto fa::@8 +Simple Condition (bool~) fa::$17 [216] if((byte) bb#27!=(byte) 8) goto fa::@9 +Simple Condition (bool~) fa::$19 [226] if((byte) bb#27!=(byte) 9) goto fa::@return +Simple Condition (bool~) fb::$1 [247] if((byte) bc#113!=(byte) 0) goto fb::@1 +Simple Condition (bool~) fb::$3 [251] if((byte) bc#113!=(byte) 1) goto fb::@2 +Simple Condition (bool~) fb::$5 [260] if((byte) bc#113!=(byte) 2) goto fb::@3 +Simple Condition (bool~) fb::$7 [269] if((byte) bc#113!=(byte) 3) goto fb::@4 +Simple Condition (bool~) fb::$9 [278] if((byte) bc#113!=(byte) 4) goto fb::@5 +Simple Condition (bool~) fb::$11 [287] if((byte) bc#113!=(byte) 5) goto fb::@6 +Simple Condition (bool~) fb::$13 [296] if((byte) bc#113!=(byte) 6) goto fb::@7 +Simple Condition (bool~) fb::$15 [305] if((byte) bc#113!=(byte) 7) goto fb::@8 +Simple Condition (bool~) fb::$17 [314] if((byte) bc#113!=(byte) 8) goto fb::@9 +Simple Condition (bool~) fb::$19 [323] if((byte) bc#113!=(byte) 9) goto fb::@return +Simple Condition (bool~) fc::$1 [341] if((byte) bd#117!=(byte) 0) goto fc::@1 +Simple Condition (bool~) fc::$3 [345] if((byte) bd#117!=(byte) 1) goto fc::@2 +Simple Condition (bool~) fc::$5 [351] if((byte) bd#117!=(byte) 2) goto fc::@3 +Simple Condition (bool~) fc::$7 [357] if((byte) bd#117!=(byte) 3) goto fc::@4 +Simple Condition (bool~) fc::$9 [363] if((byte) bd#117!=(byte) 4) goto fc::@5 +Simple Condition (bool~) fc::$11 [369] if((byte) bd#117!=(byte) 5) goto fc::@6 +Simple Condition (bool~) fc::$13 [375] if((byte) bd#117!=(byte) 6) goto fc::@7 +Simple Condition (bool~) fc::$15 [381] if((byte) bd#117!=(byte) 7) goto fc::@8 +Simple Condition (bool~) fc::$17 [387] if((byte) bd#117!=(byte) 8) goto fc::@9 +Simple Condition (bool~) fc::$19 [393] if((byte) bd#117!=(byte) 9) goto fc::@return Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte) ba#0 = 0 Constant (const byte) bb#0 = 0 Constant (const byte) bc#0 = 0 Constant (const byte) bd#0 = 0 +Constant (const byte) be#0 = 0 Constant (const byte) bb#12 = 0 Constant (const byte) bc#23 = 0 Constant (const byte) bd#115 = 0 +Constant (const byte) be#45 = 0 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [6] if(true) goto main::@2 +if() condition always true - replacing block destination [7] if(true) goto main::@2 Successful SSA optimization Pass2ConstantIfs Removing unused block main::@return Successful SSA optimization Pass2EliminateUnusedBlocks @@ -1887,16 +2341,20 @@ Inlining constant with var siblings (const byte) ba#0 Inlining constant with var siblings (const byte) bb#0 Inlining constant with var siblings (const byte) bc#0 Inlining constant with var siblings (const byte) bd#0 +Inlining constant with var siblings (const byte) be#0 Inlining constant with var siblings (const byte) bb#12 Inlining constant with var siblings (const byte) bc#23 Inlining constant with var siblings (const byte) bd#115 +Inlining constant with var siblings (const byte) be#45 Constant inlined bc#0 = (byte) 0 Constant inlined ba#0 = (byte) 0 Constant inlined bd#0 = (byte) 0 Constant inlined bc#23 = (byte) 0 +Constant inlined be#45 = (byte) 0 Constant inlined bb#0 = (byte) 0 Constant inlined bb#12 = (byte) 0 Constant inlined bd#115 = (byte) 0 +Constant inlined be#0 = (byte) 0 Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting f0::@31(between f0 and f0::@1) Added new block during phi lifting f0::@32(between f0::@1 and f0::@2) @@ -1928,211 +2386,320 @@ Added new block during phi lifting fb::@37(between fb::@6 and fb::@7) Added new block during phi lifting fb::@38(between fb::@7 and fb::@8) Added new block during phi lifting fb::@39(between fb::@8 and fb::@9) Added new block during phi lifting fb::@40(between fb::@9 and fb::@return) +Added new block during phi lifting fc::@21(between fc and fc::@1) +Added new block during phi lifting fc::@22(between fc::@1 and fc::@2) +Added new block during phi lifting fc::@23(between fc::@2 and fc::@3) +Added new block during phi lifting fc::@24(between fc::@3 and fc::@4) +Added new block during phi lifting fc::@25(between fc::@4 and fc::@5) +Added new block during phi lifting fc::@26(between fc::@5 and fc::@6) +Added new block during phi lifting fc::@27(between fc::@6 and fc::@7) +Added new block during phi lifting fc::@28(between fc::@7 and fc::@8) +Added new block during phi lifting fc::@29(between fc::@8 and fc::@9) +Added new block during phi lifting fc::@30(between fc::@9 and fc::@return) Adding NOP phi() at start of @begin Adding NOP phi() at start of @5 Adding NOP phi() at start of @6 Adding NOP phi() at start of @end Adding NOP phi() at start of main Adding NOP phi() at start of main::@2 -Adding NOP phi() at start of fb::@20 -Adding NOP phi() at start of fb::@30 -Adding NOP phi() at start of fc::@11 -Adding NOP phi() at start of fc::@12 -Adding NOP phi() at start of fc::@13 -Adding NOP phi() at start of fc::@14 -Adding NOP phi() at start of fc::@15 -Adding NOP phi() at start of fc::@16 -Adding NOP phi() at start of fc::@17 -Adding NOP phi() at start of fc::@18 -Adding NOP phi() at start of fc::@19 Adding NOP phi() at start of fc::@20 CALL GRAPH Calls in [] to main:2 Calls in [main] to f0:8 -Calls in [f0] to fa:19 fa:29 fa:39 fa:49 fa:59 fa:69 fa:79 fa:89 fa:99 fa:107 -Calls in [fa] to fb:147 fb:155 fb:163 fb:171 fb:179 fb:187 fb:195 fb:203 fb:211 fb:217 -Calls in [fb] to fc:245 fc:251 fc:257 fc:263 fc:269 fc:275 fc:281 fc:287 fc:293 fc:298 +Calls in [f0] to fa:21 fa:33 fa:45 fa:57 fa:69 fa:81 fa:93 fa:105 fa:117 fa:127 +Calls in [fa] to fb:179 fb:189 fb:199 fb:209 fb:219 fb:229 fb:239 fb:249 fb:259 fb:267 +Calls in [fb] to fc:307 fc:315 fc:323 fc:331 fc:339 fc:347 fc:355 fc:363 fc:371 fc:377 -Created 70 initial phi equivalence classes +Created 114 initial phi equivalence classes Coalesced [10] bb#80 ← bb#13 Coalesced [11] bc#122 ← bc#13 Coalesced [12] bd#155 ← bd#13 -Coalesced [13] ba#39 ← ba#1 -Not coalescing [16] bb#100 ← bb#3 -Coalesced [17] bc#143 ← bc#2 -Coalesced [18] bd#176 ← bd#2 -Coalesced [20] bb#82 ← bb#3 -Coalesced [21] bc#124 ← bc#24 -Coalesced [22] bd#157 ← bd#24 -Not coalescing [26] bb#101 ← bb#4 -Coalesced [27] bc#144 ← bc#63 -Coalesced [28] bd#177 ← bd#129 -Coalesced [30] bb#84 ← bb#4 -Coalesced [31] bc#126 ← bc#24 -Coalesced [32] bd#159 ← bd#24 -Not coalescing [36] bb#102 ← bb#5 -Coalesced (already) [37] bc#145 ← bc#64 -Coalesced (already) [38] bd#178 ← bd#130 -Coalesced [40] bb#86 ← bb#5 -Coalesced [41] bc#128 ← bc#24 -Coalesced [42] bd#161 ← bd#24 -Not coalescing [46] bb#103 ← bb#6 -Coalesced (already) [47] bc#146 ← bc#65 -Coalesced (already) [48] bd#179 ← bd#131 -Coalesced [50] bb#87 ← bb#6 -Coalesced [51] bc#129 ← bc#24 -Coalesced [52] bd#162 ← bd#24 -Not coalescing [56] bb#104 ← bb#66 -Coalesced (already) [57] bc#147 ← bc#66 -Coalesced (already) [58] bd#180 ← bd#132 -Coalesced [60] bb#89 ← bb#66 -Coalesced [61] bc#131 ← bc#24 -Coalesced [62] bd#164 ← bd#24 -Not coalescing [66] bb#105 ← bb#67 -Coalesced (already) [67] bc#148 ← bc#100 -Coalesced (already) [68] bd#181 ← bd#133 -Coalesced [70] bb#91 ← bb#67 -Coalesced [71] bc#133 ← bc#24 -Coalesced [72] bd#166 ← bd#24 -Not coalescing [76] bb#106 ← bb#68 -Coalesced (already) [77] bc#149 ← bc#101 -Coalesced (already) [78] bd#182 ← bd#134 -Coalesced [80] bb#93 ← bb#68 -Coalesced [81] bc#135 ← bc#24 -Coalesced [82] bd#168 ← bd#24 -Not coalescing [86] bb#107 ← bb#10 -Coalesced (already) [87] bc#150 ← bc#102 -Coalesced (already) [88] bd#183 ← bd#135 -Coalesced [90] bb#95 ← bb#10 -Coalesced [91] bc#137 ← bc#24 -Coalesced [92] bd#170 ← bd#24 -Not coalescing [96] bb#108 ← bb#11 -Coalesced (already) [97] bc#151 ← bc#103 -Coalesced (already) [98] bd#184 ← bd#136 -Coalesced [100] bb#97 ← bb#11 -Coalesced [101] bc#139 ← bc#24 -Coalesced [102] bd#172 ← bd#24 -Coalesced (already) [105] bc#152 ← bc#71 -Coalesced (already) [106] bd#185 ← bd#93 -Coalesced (already) [108] bc#141 ← bc#24 -Coalesced (already) [109] bd#174 ← bd#24 -Coalesced [112] bb#99 ← bb#50 -Coalesced (already) [113] bc#142 ← bc#71 -Coalesced (already) [114] bd#175 ← bd#93 -Coalesced [115] bb#98 ← bb#25 -Coalesced (already) [116] bc#140 ← bc#103 -Coalesced (already) [117] bd#173 ← bd#136 -Coalesced [118] bb#96 ← bb#24 -Coalesced (already) [119] bc#138 ← bc#102 -Coalesced (already) [120] bd#171 ← bd#135 -Coalesced [121] bb#94 ← bb#23 -Coalesced (already) [122] bc#136 ← bc#101 -Coalesced (already) [123] bd#169 ← bd#134 -Coalesced [124] bb#92 ← bb#22 -Coalesced (already) [125] bc#134 ← bc#100 -Coalesced (already) [126] bd#167 ← bd#133 -Coalesced [127] bb#90 ← bb#21 -Coalesced (already) [128] bc#132 ← bc#66 -Coalesced (already) [129] bd#165 ← bd#132 -Coalesced [130] bb#88 ← bb#20 -Coalesced (already) [131] bc#130 ← bc#65 -Coalesced (already) [132] bd#163 ← bd#131 -Coalesced [133] bb#85 ← bb#19 -Coalesced (already) [134] bc#127 ← bc#64 -Coalesced (already) [135] bd#160 ← bd#130 -Coalesced [136] bb#83 ← bb#18 -Coalesced (already) [137] bc#125 ← bc#63 -Coalesced (already) [138] bd#158 ← bd#129 -Coalesced (already) [139] bb#81 ← bb#16 -Coalesced (already) [140] bc#123 ← bc#2 -Coalesced (already) [141] bd#156 ← bd#2 -Not coalescing [145] bc#172 ← bc#104 -Coalesced [146] bd#206 ← bd#137 -Coalesced [148] bc#154 ← bc#104 -Coalesced [149] bd#187 ← bd#35 -Not coalescing [153] bc#173 ← bc#105 -Coalesced [154] bd#207 ← bd#138 -Coalesced [156] bc#156 ← bc#105 -Coalesced [157] bd#189 ← bd#35 -Not coalescing [161] bc#174 ← bc#106 -Coalesced (already) [162] bd#208 ← bd#139 -Coalesced [164] bc#158 ← bc#106 -Coalesced [165] bd#191 ← bd#35 -Not coalescing [169] bc#175 ← bc#107 -Coalesced (already) [170] bd#209 ← bd#140 -Coalesced [172] bc#159 ← bc#107 -Coalesced [173] bd#192 ← bd#35 -Not coalescing [177] bc#176 ← bc#108 -Coalesced (already) [178] bd#210 ← bd#141 -Coalesced [180] bc#161 ← bc#108 -Coalesced [181] bd#194 ← bd#35 -Not coalescing [185] bc#177 ← bc#109 -Coalesced (already) [186] bd#211 ← bd#100 -Coalesced [188] bc#163 ← bc#109 -Coalesced [189] bd#196 ← bd#35 -Not coalescing [193] bc#178 ← bc#110 -Coalesced (already) [194] bd#212 ← bd#101 -Coalesced [196] bc#165 ← bc#110 -Coalesced [197] bd#198 ← bd#35 -Not coalescing [201] bc#179 ← bc#111 -Coalesced (already) [202] bd#213 ← bd#102 -Coalesced [204] bc#167 ← bc#111 -Coalesced [205] bd#200 ← bd#35 -Not coalescing [209] bc#180 ← bc#112 -Coalesced (already) [210] bd#214 ← bd#103 -Coalesced [212] bc#169 ← bc#112 -Coalesced [213] bd#202 ← bd#35 -Coalesced (already) [216] bd#215 ← bd#104 -Coalesced (already) [218] bd#204 ← bd#35 -Coalesced [221] bc#171 ← bc#83 -Coalesced (already) [222] bd#205 ← bd#104 -Coalesced [223] bc#170 ← bc#47 -Coalesced (already) [224] bd#203 ← bd#103 -Coalesced [225] bc#168 ← bc#46 -Coalesced (already) [226] bd#201 ← bd#102 -Coalesced [227] bc#166 ← bc#45 -Coalesced (already) [228] bd#199 ← bd#101 -Coalesced [229] bc#164 ← bc#44 -Coalesced (already) [230] bd#197 ← bd#100 -Coalesced [231] bc#162 ← bc#43 -Coalesced (already) [232] bd#195 ← bd#141 -Coalesced [233] bc#160 ← bc#42 -Coalesced (already) [234] bd#193 ← bd#140 -Coalesced [235] bc#157 ← bc#41 -Coalesced (already) [236] bd#190 ← bd#139 -Coalesced [237] bc#155 ← bc#40 -Coalesced (already) [238] bd#188 ← bd#138 -Coalesced (already) [239] bc#153 ← bc#39 -Coalesced (already) [240] bd#186 ← bd#137 -Not coalescing [244] bd#235 ← bd#146 -Coalesced [246] bd#217 ← bd#146 -Not coalescing [250] bd#236 ← bd#147 -Coalesced [252] bd#219 ← bd#147 -Not coalescing [256] bd#237 ← bd#148 -Coalesced [258] bd#221 ← bd#148 -Not coalescing [262] bd#238 ← bd#149 -Coalesced [264] bd#222 ← bd#149 -Not coalescing [268] bd#239 ← bd#150 -Coalesced [270] bd#224 ← bd#150 -Not coalescing [274] bd#240 ← bd#151 -Coalesced [276] bd#226 ← bd#151 -Not coalescing [280] bd#241 ← bd#152 -Coalesced [282] bd#228 ← bd#152 -Not coalescing [286] bd#242 ← bd#153 -Coalesced [288] bd#230 ← bd#153 -Not coalescing [292] bd#243 ← bd#154 -Coalesced [294] bd#232 ← bd#154 -Coalesced [302] bd#234 ← bd#116 -Coalesced [303] bd#233 ← bd#114 -Coalesced [304] bd#231 ← bd#113 -Coalesced [305] bd#229 ← bd#112 -Coalesced [306] bd#227 ← bd#111 -Coalesced [307] bd#225 ← bd#110 -Coalesced [308] bd#223 ← bd#109 -Coalesced [309] bd#220 ← bd#108 -Coalesced [310] bd#218 ← bd#107 -Coalesced (already) [311] bd#216 ← bd#106 -Coalesced down to 7 phi equivalence classes +Coalesced [13] be#168 ← be#13 +Coalesced [14] ba#39 ← ba#1 +Not coalescing [17] bb#100 ← bb#3 +Coalesced [18] bc#143 ← bc#2 +Coalesced [19] bd#176 ← bd#2 +Coalesced [20] be#189 ← be#2 +Coalesced [22] bb#82 ← bb#3 +Coalesced [23] bc#124 ← bc#24 +Coalesced [24] bd#157 ← bd#24 +Coalesced [25] be#170 ← be#24 +Not coalescing [29] bb#101 ← bb#4 +Coalesced [30] bc#144 ← bc#63 +Coalesced [31] bd#177 ← bd#129 +Coalesced [32] be#190 ← be#142 +Coalesced [34] bb#84 ← bb#4 +Coalesced [35] bc#126 ← bc#24 +Coalesced [36] bd#159 ← bd#24 +Coalesced [37] be#172 ← be#24 +Not coalescing [41] bb#102 ← bb#5 +Coalesced (already) [42] bc#145 ← bc#64 +Coalesced (already) [43] bd#178 ← bd#130 +Coalesced (already) [44] be#191 ← be#143 +Coalesced [46] bb#86 ← bb#5 +Coalesced [47] bc#128 ← bc#24 +Coalesced [48] bd#161 ← bd#24 +Coalesced [49] be#174 ← be#24 +Not coalescing [53] bb#103 ← bb#6 +Coalesced (already) [54] bc#146 ← bc#65 +Coalesced (already) [55] bd#179 ← bd#131 +Coalesced (already) [56] be#192 ← be#144 +Coalesced [58] bb#87 ← bb#6 +Coalesced [59] bc#129 ← bc#24 +Coalesced [60] bd#162 ← bd#24 +Coalesced [61] be#175 ← be#24 +Not coalescing [65] bb#104 ← bb#66 +Coalesced (already) [66] bc#147 ← bc#66 +Coalesced (already) [67] bd#180 ← bd#132 +Coalesced (already) [68] be#193 ← be#100 +Coalesced [70] bb#89 ← bb#66 +Coalesced [71] bc#131 ← bc#24 +Coalesced [72] bd#164 ← bd#24 +Coalesced [73] be#177 ← be#24 +Not coalescing [77] bb#105 ← bb#67 +Coalesced (already) [78] bc#148 ← bc#100 +Coalesced (already) [79] bd#181 ← bd#133 +Coalesced (already) [80] be#194 ← be#101 +Coalesced [82] bb#91 ← bb#67 +Coalesced [83] bc#133 ← bc#24 +Coalesced [84] bd#166 ← bd#24 +Coalesced [85] be#179 ← be#24 +Not coalescing [89] bb#106 ← bb#68 +Coalesced (already) [90] bc#149 ← bc#101 +Coalesced (already) [91] bd#182 ← bd#134 +Coalesced (already) [92] be#195 ← be#102 +Coalesced [94] bb#93 ← bb#68 +Coalesced [95] bc#135 ← bc#24 +Coalesced [96] bd#168 ← bd#24 +Coalesced [97] be#181 ← be#24 +Not coalescing [101] bb#107 ← bb#10 +Coalesced (already) [102] bc#150 ← bc#102 +Coalesced (already) [103] bd#183 ← bd#135 +Coalesced (already) [104] be#196 ← be#103 +Coalesced [106] bb#95 ← bb#10 +Coalesced [107] bc#137 ← bc#24 +Coalesced [108] bd#170 ← bd#24 +Coalesced [109] be#183 ← be#24 +Not coalescing [113] bb#108 ← bb#11 +Coalesced (already) [114] bc#151 ← bc#103 +Coalesced (already) [115] bd#184 ← bd#136 +Coalesced (already) [116] be#197 ← be#104 +Coalesced [118] bb#97 ← bb#11 +Coalesced [119] bc#139 ← bc#24 +Coalesced [120] bd#172 ← bd#24 +Coalesced [121] be#185 ← be#24 +Coalesced (already) [124] bc#152 ← bc#71 +Coalesced (already) [125] bd#185 ← bd#93 +Coalesced (already) [126] be#198 ← be#105 +Coalesced (already) [128] bc#141 ← bc#24 +Coalesced (already) [129] bd#174 ← bd#24 +Coalesced (already) [130] be#187 ← be#24 +Coalesced [133] bb#99 ← bb#50 +Coalesced (already) [134] bc#142 ← bc#71 +Coalesced (already) [135] bd#175 ← bd#93 +Coalesced (already) [136] be#188 ← be#105 +Coalesced [137] bb#98 ← bb#25 +Coalesced (already) [138] bc#140 ← bc#103 +Coalesced (already) [139] bd#173 ← bd#136 +Coalesced (already) [140] be#186 ← be#104 +Coalesced [141] bb#96 ← bb#24 +Coalesced (already) [142] bc#138 ← bc#102 +Coalesced (already) [143] bd#171 ← bd#135 +Coalesced (already) [144] be#184 ← be#103 +Coalesced [145] bb#94 ← bb#23 +Coalesced (already) [146] bc#136 ← bc#101 +Coalesced (already) [147] bd#169 ← bd#134 +Coalesced (already) [148] be#182 ← be#102 +Coalesced [149] bb#92 ← bb#22 +Coalesced (already) [150] bc#134 ← bc#100 +Coalesced (already) [151] bd#167 ← bd#133 +Coalesced (already) [152] be#180 ← be#101 +Coalesced [153] bb#90 ← bb#21 +Coalesced (already) [154] bc#132 ← bc#66 +Coalesced (already) [155] bd#165 ← bd#132 +Coalesced (already) [156] be#178 ← be#100 +Coalesced [157] bb#88 ← bb#20 +Coalesced (already) [158] bc#130 ← bc#65 +Coalesced (already) [159] bd#163 ← bd#131 +Coalesced (already) [160] be#176 ← be#144 +Coalesced [161] bb#85 ← bb#19 +Coalesced (already) [162] bc#127 ← bc#64 +Coalesced (already) [163] bd#160 ← bd#130 +Coalesced (already) [164] be#173 ← be#143 +Coalesced [165] bb#83 ← bb#18 +Coalesced (already) [166] bc#125 ← bc#63 +Coalesced (already) [167] bd#158 ← bd#129 +Coalesced (already) [168] be#171 ← be#142 +Coalesced (already) [169] bb#81 ← bb#16 +Coalesced (already) [170] bc#123 ← bc#2 +Coalesced (already) [171] bd#156 ← bd#2 +Coalesced (already) [172] be#169 ← be#2 +Not coalescing [176] bc#172 ← bc#104 +Coalesced [177] bd#206 ← bd#137 +Coalesced [178] be#219 ← be#107 +Coalesced [180] bc#154 ← bc#104 +Coalesced [181] bd#187 ← bd#35 +Coalesced [182] be#200 ← be#35 +Not coalescing [186] bc#173 ← bc#105 +Coalesced [187] bd#207 ← bd#138 +Coalesced [188] be#220 ← be#108 +Coalesced [190] bc#156 ← bc#105 +Coalesced [191] bd#189 ← bd#35 +Coalesced [192] be#202 ← be#35 +Not coalescing [196] bc#174 ← bc#106 +Coalesced (already) [197] bd#208 ← bd#139 +Coalesced (already) [198] be#221 ← be#109 +Coalesced [200] bc#158 ← bc#106 +Coalesced [201] bd#191 ← bd#35 +Coalesced [202] be#204 ← be#35 +Not coalescing [206] bc#175 ← bc#107 +Coalesced (already) [207] bd#209 ← bd#140 +Coalesced (already) [208] be#222 ← be#110 +Coalesced [210] bc#159 ← bc#107 +Coalesced [211] bd#192 ← bd#35 +Coalesced [212] be#205 ← be#35 +Not coalescing [216] bc#176 ← bc#108 +Coalesced (already) [217] bd#210 ← bd#141 +Coalesced (already) [218] be#223 ← be#111 +Coalesced [220] bc#161 ← bc#108 +Coalesced [221] bd#194 ← bd#35 +Coalesced [222] be#207 ← be#35 +Not coalescing [226] bc#177 ← bc#109 +Coalesced (already) [227] bd#211 ← bd#100 +Coalesced (already) [228] be#224 ← be#112 +Coalesced [230] bc#163 ← bc#109 +Coalesced [231] bd#196 ← bd#35 +Coalesced [232] be#209 ← be#35 +Not coalescing [236] bc#178 ← bc#110 +Coalesced (already) [237] bd#212 ← bd#101 +Coalesced (already) [238] be#225 ← be#113 +Coalesced [240] bc#165 ← bc#110 +Coalesced [241] bd#198 ← bd#35 +Coalesced [242] be#211 ← be#35 +Not coalescing [246] bc#179 ← bc#111 +Coalesced (already) [247] bd#213 ← bd#102 +Coalesced (already) [248] be#226 ← be#114 +Coalesced [250] bc#167 ← bc#111 +Coalesced [251] bd#200 ← bd#35 +Coalesced [252] be#213 ← be#35 +Not coalescing [256] bc#180 ← bc#112 +Coalesced (already) [257] bd#214 ← bd#103 +Coalesced (already) [258] be#227 ← be#115 +Coalesced [260] bc#169 ← bc#112 +Coalesced [261] bd#202 ← bd#35 +Coalesced [262] be#215 ← be#35 +Coalesced (already) [265] bd#215 ← bd#104 +Coalesced (already) [266] be#228 ← be#116 +Coalesced (already) [268] bd#204 ← bd#35 +Coalesced (already) [269] be#217 ← be#35 +Coalesced [272] bc#171 ← bc#83 +Coalesced (already) [273] bd#205 ← bd#104 +Coalesced (already) [274] be#218 ← be#116 +Coalesced [275] bc#170 ← bc#47 +Coalesced (already) [276] bd#203 ← bd#103 +Coalesced (already) [277] be#216 ← be#115 +Coalesced [278] bc#168 ← bc#46 +Coalesced (already) [279] bd#201 ← bd#102 +Coalesced (already) [280] be#214 ← be#114 +Coalesced [281] bc#166 ← bc#45 +Coalesced (already) [282] bd#199 ← bd#101 +Coalesced (already) [283] be#212 ← be#113 +Coalesced [284] bc#164 ← bc#44 +Coalesced (already) [285] bd#197 ← bd#100 +Coalesced (already) [286] be#210 ← be#112 +Coalesced [287] bc#162 ← bc#43 +Coalesced (already) [288] bd#195 ← bd#141 +Coalesced (already) [289] be#208 ← be#111 +Coalesced [290] bc#160 ← bc#42 +Coalesced (already) [291] bd#193 ← bd#140 +Coalesced (already) [292] be#206 ← be#110 +Coalesced [293] bc#157 ← bc#41 +Coalesced (already) [294] bd#190 ← bd#139 +Coalesced (already) [295] be#203 ← be#109 +Coalesced [296] bc#155 ← bc#40 +Coalesced (already) [297] bd#188 ← bd#138 +Coalesced (already) [298] be#201 ← be#108 +Coalesced (already) [299] bc#153 ← bc#39 +Coalesced (already) [300] bd#186 ← bd#137 +Coalesced (already) [301] be#199 ← be#107 +Not coalescing [305] bd#235 ← bd#146 +Coalesced [306] be#249 ← be#118 +Coalesced [308] bd#217 ← bd#146 +Coalesced [309] be#230 ← be#46 +Not coalescing [313] bd#236 ← bd#147 +Coalesced [314] be#250 ← be#119 +Coalesced [316] bd#219 ← bd#147 +Coalesced [317] be#232 ← be#46 +Not coalescing [321] bd#237 ← bd#148 +Coalesced (already) [322] be#251 ← be#120 +Coalesced [324] bd#221 ← bd#148 +Coalesced [325] be#234 ← be#46 +Not coalescing [329] bd#238 ← bd#149 +Coalesced (already) [330] be#252 ← be#121 +Coalesced [332] bd#222 ← bd#149 +Coalesced [333] be#235 ← be#46 +Not coalescing [337] bd#239 ← bd#150 +Coalesced (already) [338] be#253 ← be#122 +Coalesced [340] bd#224 ← bd#150 +Coalesced [341] be#237 ← be#46 +Not coalescing [345] bd#240 ← bd#151 +Coalesced (already) [346] be#254 ← be#123 +Coalesced [348] bd#226 ← bd#151 +Coalesced [349] be#239 ← be#46 +Not coalescing [353] bd#241 ← bd#152 +Coalesced (already) [354] be#255 ← be#124 +Coalesced [356] bd#228 ← bd#152 +Coalesced [357] be#241 ← be#46 +Not coalescing [361] bd#242 ← bd#153 +Coalesced (already) [362] be#256 ← be#125 +Coalesced [364] bd#230 ← bd#153 +Coalesced [365] be#243 ← be#46 +Not coalescing [369] bd#243 ← bd#154 +Coalesced (already) [370] be#257 ← be#126 +Coalesced [372] bd#232 ← bd#154 +Coalesced [373] be#245 ← be#46 +Coalesced (already) [376] be#258 ← be#127 +Coalesced (already) [378] be#247 ← be#46 +Coalesced [381] bd#234 ← bd#116 +Coalesced (already) [382] be#248 ← be#127 +Coalesced [383] bd#233 ← bd#114 +Coalesced (already) [384] be#246 ← be#126 +Coalesced [385] bd#231 ← bd#113 +Coalesced (already) [386] be#244 ← be#125 +Coalesced [387] bd#229 ← bd#112 +Coalesced (already) [388] be#242 ← be#124 +Coalesced [389] bd#227 ← bd#111 +Coalesced (already) [390] be#240 ← be#123 +Coalesced [391] bd#225 ← bd#110 +Coalesced (already) [392] be#238 ← be#122 +Coalesced [393] bd#223 ← bd#109 +Coalesced (already) [394] be#236 ← be#121 +Coalesced [395] bd#220 ← bd#108 +Coalesced (already) [396] be#233 ← be#120 +Coalesced [397] bd#218 ← bd#107 +Coalesced (already) [398] be#231 ← be#119 +Coalesced (already) [399] bd#216 ← bd#106 +Coalesced (already) [400] be#229 ← be#118 +Coalesced [404] be#260 ← be#36 +Coalesced [408] be#262 ← be#37 +Coalesced [412] be#263 ← be#38 +Coalesced [416] be#265 ← be#39 +Coalesced [420] be#267 ← be#40 +Coalesced [424] be#269 ← be#41 +Coalesced [428] be#271 ← be#42 +Coalesced [432] be#273 ← be#43 +Coalesced [436] be#275 ← be#44 +Coalesced [442] be#277 ← be#138 +Coalesced [443] be#276 ← be#137 +Coalesced [444] be#274 ← be#136 +Coalesced [445] be#272 ← be#135 +Coalesced [446] be#270 ← be#134 +Coalesced [447] be#268 ← be#133 +Coalesced [448] be#266 ← be#132 +Coalesced [449] be#264 ← be#131 +Coalesced [450] be#261 ← be#130 +Coalesced (already) [451] be#259 ← be#129 +Coalesced down to 8 phi equivalence classes Culled Empty Block (label) @6 Culled Empty Block (label) f0::@21 Culled Empty Block (label) f0::@22 @@ -2194,6 +2761,16 @@ Culled Empty Block (label) fb::@34 Culled Empty Block (label) fb::@33 Culled Empty Block (label) fb::@32 Culled Empty Block (label) fb::@31 +Culled Empty Block (label) fc::@20 +Culled Empty Block (label) fc::@29 +Culled Empty Block (label) fc::@28 +Culled Empty Block (label) fc::@27 +Culled Empty Block (label) fc::@26 +Culled Empty Block (label) fc::@25 +Culled Empty Block (label) fc::@24 +Culled Empty Block (label) fc::@23 +Culled Empty Block (label) fc::@22 +Culled Empty Block (label) fc::@21 Renumbering block @5 to @1 Renumbering block main::@7 to main::@3 Renumbering block f0::@11 to f0::@10 @@ -2235,7 +2812,7 @@ Renumbering block fc::@16 to fc::@15 Renumbering block fc::@17 to fc::@16 Renumbering block fc::@18 to fc::@17 Renumbering block fc::@19 to fc::@18 -Renumbering block fc::@20 to fc::@19 +Renumbering block fc::@30 to fc::@19 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -2244,15 +2821,6 @@ Adding NOP phi() at start of main::@2 Adding NOP phi() at start of f0::@19 Adding NOP phi() at start of fa::@19 Adding NOP phi() at start of fb::@19 -Adding NOP phi() at start of fc::@10 -Adding NOP phi() at start of fc::@11 -Adding NOP phi() at start of fc::@12 -Adding NOP phi() at start of fc::@13 -Adding NOP phi() at start of fc::@14 -Adding NOP phi() at start of fc::@15 -Adding NOP phi() at start of fc::@16 -Adding NOP phi() at start of fc::@17 -Adding NOP phi() at start of fc::@18 Adding NOP phi() at start of fc::@19 FINAL CONTROL FLOW GRAPH @@ -2272,6 +2840,7 @@ main: scope:[main] from @1 to:main::@1 main::@1: scope:[main] from main main::@3 [5] (byte) ba#17 ← phi( main/(byte) 0 main::@3/(byte) ba#1 ) + [5] (byte) be#2 ← phi( main/(byte) 0 main::@3/(byte) be#13 ) [5] (byte) bd#2 ← phi( main/(byte) 0 main::@3/(byte) bd#13 ) [5] (byte) bc#2 ← phi( main/(byte) 0 main::@3/(byte) bc#13 ) [5] (byte) bb#16 ← phi( main/(byte) 0 main::@3/(byte) bb#13 ) @@ -2294,6 +2863,7 @@ f0::@10: scope:[f0] from f0 [12] call fa to:f0::@1 f0::@1: scope:[f0] from f0 f0::@10 + [13] (byte) be#142 ← phi( f0/(byte) be#2 f0::@10/(byte) be#24 ) [13] (byte) bd#129 ← phi( f0/(byte) bd#2 f0::@10/(byte) bd#24 ) [13] (byte) bc#63 ← phi( f0/(byte) bc#2 f0::@10/(byte) bc#24 ) [13] (byte) bb#18 ← phi( f0/(byte) bb#16 f0::@10/(byte) bb#3 ) @@ -2305,6 +2875,7 @@ f0::@11: scope:[f0] from f0::@1 [17] call fa to:f0::@2 f0::@2: scope:[f0] from f0::@1 f0::@11 + [18] (byte) be#143 ← phi( f0::@1/(byte) be#142 f0::@11/(byte) be#24 ) [18] (byte) bd#130 ← phi( f0::@1/(byte) bd#129 f0::@11/(byte) bd#24 ) [18] (byte) bc#64 ← phi( f0::@1/(byte) bc#63 f0::@11/(byte) bc#24 ) [18] (byte) bb#19 ← phi( f0::@1/(byte) bb#18 f0::@11/(byte) bb#4 ) @@ -2316,6 +2887,7 @@ f0::@12: scope:[f0] from f0::@2 [22] call fa to:f0::@3 f0::@3: scope:[f0] from f0::@12 f0::@2 + [23] (byte) be#144 ← phi( f0::@2/(byte) be#143 f0::@12/(byte) be#24 ) [23] (byte) bd#131 ← phi( f0::@2/(byte) bd#130 f0::@12/(byte) bd#24 ) [23] (byte) bc#65 ← phi( f0::@2/(byte) bc#64 f0::@12/(byte) bc#24 ) [23] (byte) bb#20 ← phi( f0::@2/(byte) bb#19 f0::@12/(byte) bb#5 ) @@ -2327,6 +2899,7 @@ f0::@13: scope:[f0] from f0::@3 [27] call fa to:f0::@4 f0::@4: scope:[f0] from f0::@13 f0::@3 + [28] (byte) be#100 ← phi( f0::@13/(byte) be#24 f0::@3/(byte) be#144 ) [28] (byte) bd#132 ← phi( f0::@13/(byte) bd#24 f0::@3/(byte) bd#131 ) [28] (byte) bc#66 ← phi( f0::@13/(byte) bc#24 f0::@3/(byte) bc#65 ) [28] (byte) bb#21 ← phi( f0::@13/(byte) bb#6 f0::@3/(byte) bb#20 ) @@ -2338,6 +2911,7 @@ f0::@14: scope:[f0] from f0::@4 [32] call fa to:f0::@5 f0::@5: scope:[f0] from f0::@14 f0::@4 + [33] (byte) be#101 ← phi( f0::@14/(byte) be#24 f0::@4/(byte) be#100 ) [33] (byte) bd#133 ← phi( f0::@14/(byte) bd#24 f0::@4/(byte) bd#132 ) [33] (byte) bc#100 ← phi( f0::@14/(byte) bc#24 f0::@4/(byte) bc#66 ) [33] (byte) bb#22 ← phi( f0::@14/(byte) bb#66 f0::@4/(byte) bb#21 ) @@ -2349,6 +2923,7 @@ f0::@15: scope:[f0] from f0::@5 [37] call fa to:f0::@6 f0::@6: scope:[f0] from f0::@15 f0::@5 + [38] (byte) be#102 ← phi( f0::@15/(byte) be#24 f0::@5/(byte) be#101 ) [38] (byte) bd#134 ← phi( f0::@15/(byte) bd#24 f0::@5/(byte) bd#133 ) [38] (byte) bc#101 ← phi( f0::@15/(byte) bc#24 f0::@5/(byte) bc#100 ) [38] (byte) bb#23 ← phi( f0::@15/(byte) bb#67 f0::@5/(byte) bb#22 ) @@ -2360,6 +2935,7 @@ f0::@16: scope:[f0] from f0::@6 [42] call fa to:f0::@7 f0::@7: scope:[f0] from f0::@16 f0::@6 + [43] (byte) be#103 ← phi( f0::@16/(byte) be#24 f0::@6/(byte) be#102 ) [43] (byte) bd#135 ← phi( f0::@16/(byte) bd#24 f0::@6/(byte) bd#134 ) [43] (byte) bc#102 ← phi( f0::@16/(byte) bc#24 f0::@6/(byte) bc#101 ) [43] (byte) bb#24 ← phi( f0::@16/(byte) bb#68 f0::@6/(byte) bb#23 ) @@ -2371,6 +2947,7 @@ f0::@17: scope:[f0] from f0::@7 [47] call fa to:f0::@8 f0::@8: scope:[f0] from f0::@17 f0::@7 + [48] (byte) be#104 ← phi( f0::@17/(byte) be#24 f0::@7/(byte) be#103 ) [48] (byte) bd#136 ← phi( f0::@17/(byte) bd#24 f0::@7/(byte) bd#135 ) [48] (byte) bc#103 ← phi( f0::@17/(byte) bc#24 f0::@7/(byte) bc#102 ) [48] (byte) bb#25 ← phi( f0::@17/(byte) bb#10 f0::@7/(byte) bb#24 ) @@ -2382,6 +2959,7 @@ f0::@18: scope:[f0] from f0::@8 [52] call fa to:f0::@9 f0::@9: scope:[f0] from f0::@18 f0::@8 + [53] (byte) be#105 ← phi( f0::@18/(byte) be#24 f0::@8/(byte) be#104 ) [53] (byte) bd#93 ← phi( f0::@18/(byte) bd#24 f0::@8/(byte) bd#136 ) [53] (byte) bc#71 ← phi( f0::@18/(byte) bc#24 f0::@8/(byte) bc#103 ) [53] (byte) bb#50 ← phi( f0::@18/(byte) bb#11 f0::@8/(byte) bb#25 ) @@ -2392,6 +2970,7 @@ f0::@19: scope:[f0] from f0::@9 [56] call fa to:f0::@return f0::@return: scope:[f0] from f0::@19 f0::@9 + [57] (byte) be#13 ← phi( f0::@19/(byte) be#24 f0::@9/(byte) be#105 ) [57] (byte) bd#13 ← phi( f0::@19/(byte) bd#24 f0::@9/(byte) bd#93 ) [57] (byte) bc#13 ← phi( f0::@19/(byte) bc#24 f0::@9/(byte) bc#71 ) [57] (byte) bb#13 ← phi( f0::@19/(byte) 0 f0::@9/(byte) bb#50 ) @@ -2400,6 +2979,7 @@ f0::@return: scope:[f0] from f0::@19 f0::@9 (void()) fa() fa: scope:[fa] from f0::@10 f0::@11 f0::@12 f0::@13 f0::@14 f0::@15 f0::@16 f0::@17 f0::@18 f0::@19 + [59] (byte) be#107 ← phi( f0::@10/(byte) be#2 f0::@11/(byte) be#142 f0::@12/(byte) be#143 f0::@13/(byte) be#144 f0::@14/(byte) be#100 f0::@15/(byte) be#101 f0::@16/(byte) be#102 f0::@17/(byte) be#103 f0::@18/(byte) be#104 f0::@19/(byte) be#105 ) [59] (byte) bd#137 ← phi( f0::@10/(byte) bd#2 f0::@11/(byte) bd#129 f0::@12/(byte) bd#130 f0::@13/(byte) bd#131 f0::@14/(byte) bd#132 f0::@15/(byte) bd#133 f0::@16/(byte) bd#134 f0::@17/(byte) bd#135 f0::@18/(byte) bd#136 f0::@19/(byte) bd#93 ) [59] (byte) bc#39 ← phi( f0::@10/(byte) bc#2 f0::@11/(byte) bc#63 f0::@12/(byte) bc#64 f0::@13/(byte) bc#65 f0::@14/(byte) bc#66 f0::@15/(byte) bc#100 f0::@16/(byte) bc#101 f0::@17/(byte) bc#102 f0::@18/(byte) bc#103 f0::@19/(byte) bc#71 ) [59] (byte) bb#27 ← phi( f0::@10/(byte) bb#100 f0::@11/(byte) bb#101 f0::@12/(byte) bb#102 f0::@13/(byte) bb#103 f0::@14/(byte) bb#104 f0::@15/(byte) bb#105 f0::@16/(byte) bb#106 f0::@17/(byte) bb#107 f0::@18/(byte) bb#108 f0::@19/(byte) 0 ) @@ -2411,6 +2991,7 @@ fa::@10: scope:[fa] from fa [63] call fb to:fa::@1 fa::@1: scope:[fa] from fa fa::@10 + [64] (byte) be#108 ← phi( fa/(byte) be#107 fa::@10/(byte) be#35 ) [64] (byte) bd#138 ← phi( fa/(byte) bd#137 fa::@10/(byte) bd#35 ) [64] (byte) bc#40 ← phi( fa/(byte) bc#39 fa::@10/(byte) bc#104 ) [65] if((byte) bb#27!=(byte) 1) goto fa::@2 @@ -2421,6 +3002,7 @@ fa::@11: scope:[fa] from fa::@1 [68] call fb to:fa::@2 fa::@2: scope:[fa] from fa::@1 fa::@11 + [69] (byte) be#109 ← phi( fa::@1/(byte) be#108 fa::@11/(byte) be#35 ) [69] (byte) bd#139 ← phi( fa::@1/(byte) bd#138 fa::@11/(byte) bd#35 ) [69] (byte) bc#41 ← phi( fa::@1/(byte) bc#40 fa::@11/(byte) bc#105 ) [70] if((byte) bb#27!=(byte) 2) goto fa::@3 @@ -2431,6 +3013,7 @@ fa::@12: scope:[fa] from fa::@2 [73] call fb to:fa::@3 fa::@3: scope:[fa] from fa::@12 fa::@2 + [74] (byte) be#110 ← phi( fa::@2/(byte) be#109 fa::@12/(byte) be#35 ) [74] (byte) bd#140 ← phi( fa::@2/(byte) bd#139 fa::@12/(byte) bd#35 ) [74] (byte) bc#42 ← phi( fa::@2/(byte) bc#41 fa::@12/(byte) bc#106 ) [75] if((byte) bb#27!=(byte) 3) goto fa::@4 @@ -2441,6 +3024,7 @@ fa::@13: scope:[fa] from fa::@3 [78] call fb to:fa::@4 fa::@4: scope:[fa] from fa::@13 fa::@3 + [79] (byte) be#111 ← phi( fa::@13/(byte) be#35 fa::@3/(byte) be#110 ) [79] (byte) bd#141 ← phi( fa::@13/(byte) bd#35 fa::@3/(byte) bd#140 ) [79] (byte) bc#43 ← phi( fa::@13/(byte) bc#107 fa::@3/(byte) bc#42 ) [80] if((byte) bb#27!=(byte) 4) goto fa::@5 @@ -2451,6 +3035,7 @@ fa::@14: scope:[fa] from fa::@4 [83] call fb to:fa::@5 fa::@5: scope:[fa] from fa::@14 fa::@4 + [84] (byte) be#112 ← phi( fa::@14/(byte) be#35 fa::@4/(byte) be#111 ) [84] (byte) bd#100 ← phi( fa::@14/(byte) bd#35 fa::@4/(byte) bd#141 ) [84] (byte) bc#44 ← phi( fa::@14/(byte) bc#108 fa::@4/(byte) bc#43 ) [85] if((byte) bb#27!=(byte) 5) goto fa::@6 @@ -2461,6 +3046,7 @@ fa::@15: scope:[fa] from fa::@5 [88] call fb to:fa::@6 fa::@6: scope:[fa] from fa::@15 fa::@5 + [89] (byte) be#113 ← phi( fa::@15/(byte) be#35 fa::@5/(byte) be#112 ) [89] (byte) bd#101 ← phi( fa::@15/(byte) bd#35 fa::@5/(byte) bd#100 ) [89] (byte) bc#45 ← phi( fa::@15/(byte) bc#109 fa::@5/(byte) bc#44 ) [90] if((byte) bb#27!=(byte) 6) goto fa::@7 @@ -2471,6 +3057,7 @@ fa::@16: scope:[fa] from fa::@6 [93] call fb to:fa::@7 fa::@7: scope:[fa] from fa::@16 fa::@6 + [94] (byte) be#114 ← phi( fa::@16/(byte) be#35 fa::@6/(byte) be#113 ) [94] (byte) bd#102 ← phi( fa::@16/(byte) bd#35 fa::@6/(byte) bd#101 ) [94] (byte) bc#46 ← phi( fa::@16/(byte) bc#110 fa::@6/(byte) bc#45 ) [95] if((byte) bb#27!=(byte) 7) goto fa::@8 @@ -2481,6 +3068,7 @@ fa::@17: scope:[fa] from fa::@7 [98] call fb to:fa::@8 fa::@8: scope:[fa] from fa::@17 fa::@7 + [99] (byte) be#115 ← phi( fa::@17/(byte) be#35 fa::@7/(byte) be#114 ) [99] (byte) bd#103 ← phi( fa::@17/(byte) bd#35 fa::@7/(byte) bd#102 ) [99] (byte) bc#47 ← phi( fa::@17/(byte) bc#111 fa::@7/(byte) bc#46 ) [100] if((byte) bb#27!=(byte) 8) goto fa::@9 @@ -2491,6 +3079,7 @@ fa::@18: scope:[fa] from fa::@8 [103] call fb to:fa::@9 fa::@9: scope:[fa] from fa::@18 fa::@8 + [104] (byte) be#116 ← phi( fa::@18/(byte) be#35 fa::@8/(byte) be#115 ) [104] (byte) bd#104 ← phi( fa::@18/(byte) bd#35 fa::@8/(byte) bd#103 ) [104] (byte) bc#83 ← phi( fa::@18/(byte) bc#112 fa::@8/(byte) bc#47 ) [105] if((byte) bb#27!=(byte) 9) goto fa::@return @@ -2500,6 +3089,7 @@ fa::@19: scope:[fa] from fa::@9 [107] call fb to:fa::@return fa::@return: scope:[fa] from fa::@19 fa::@9 + [108] (byte) be#24 ← phi( fa::@19/(byte) be#35 fa::@9/(byte) be#116 ) [108] (byte) bd#24 ← phi( fa::@19/(byte) bd#35 fa::@9/(byte) bd#104 ) [108] (byte) bc#24 ← phi( fa::@19/(byte) 0 fa::@9/(byte) bc#83 ) [109] return @@ -2507,6 +3097,7 @@ fa::@return: scope:[fa] from fa::@19 fa::@9 (void()) fb() fb: scope:[fb] from fa::@10 fa::@11 fa::@12 fa::@13 fa::@14 fa::@15 fa::@16 fa::@17 fa::@18 fa::@19 + [110] (byte) be#118 ← phi( fa::@10/(byte) be#107 fa::@11/(byte) be#108 fa::@12/(byte) be#109 fa::@13/(byte) be#110 fa::@14/(byte) be#111 fa::@15/(byte) be#112 fa::@16/(byte) be#113 fa::@17/(byte) be#114 fa::@18/(byte) be#115 fa::@19/(byte) be#116 ) [110] (byte) bd#106 ← phi( fa::@10/(byte) bd#137 fa::@11/(byte) bd#138 fa::@12/(byte) bd#139 fa::@13/(byte) bd#140 fa::@14/(byte) bd#141 fa::@15/(byte) bd#100 fa::@16/(byte) bd#101 fa::@17/(byte) bd#102 fa::@18/(byte) bd#103 fa::@19/(byte) bd#104 ) [110] (byte) bc#113 ← phi( fa::@10/(byte) bc#172 fa::@11/(byte) bc#173 fa::@12/(byte) bc#174 fa::@13/(byte) bc#175 fa::@14/(byte) bc#176 fa::@15/(byte) bc#177 fa::@16/(byte) bc#178 fa::@17/(byte) bc#179 fa::@18/(byte) bc#180 fa::@19/(byte) 0 ) [111] if((byte) bc#113!=(byte) 0) goto fb::@1 @@ -2517,6 +3108,7 @@ fb::@10: scope:[fb] from fb [114] call fc to:fb::@1 fb::@1: scope:[fb] from fb fb::@10 + [115] (byte) be#119 ← phi( fb/(byte) be#118 fb::@10/(byte) be#46 ) [115] (byte) bd#107 ← phi( fb/(byte) bd#106 fb::@10/(byte) bd#146 ) [116] if((byte) bc#113!=(byte) 1) goto fb::@2 to:fb::@11 @@ -2526,6 +3118,7 @@ fb::@11: scope:[fb] from fb::@1 [119] call fc to:fb::@2 fb::@2: scope:[fb] from fb::@1 fb::@11 + [120] (byte) be#120 ← phi( fb::@1/(byte) be#119 fb::@11/(byte) be#46 ) [120] (byte) bd#108 ← phi( fb::@1/(byte) bd#107 fb::@11/(byte) bd#147 ) [121] if((byte) bc#113!=(byte) 2) goto fb::@3 to:fb::@12 @@ -2535,6 +3128,7 @@ fb::@12: scope:[fb] from fb::@2 [124] call fc to:fb::@3 fb::@3: scope:[fb] from fb::@12 fb::@2 + [125] (byte) be#121 ← phi( fb::@2/(byte) be#120 fb::@12/(byte) be#46 ) [125] (byte) bd#109 ← phi( fb::@2/(byte) bd#108 fb::@12/(byte) bd#148 ) [126] if((byte) bc#113!=(byte) 3) goto fb::@4 to:fb::@13 @@ -2544,6 +3138,7 @@ fb::@13: scope:[fb] from fb::@3 [129] call fc to:fb::@4 fb::@4: scope:[fb] from fb::@13 fb::@3 + [130] (byte) be#122 ← phi( fb::@13/(byte) be#46 fb::@3/(byte) be#121 ) [130] (byte) bd#110 ← phi( fb::@13/(byte) bd#149 fb::@3/(byte) bd#109 ) [131] if((byte) bc#113!=(byte) 4) goto fb::@5 to:fb::@14 @@ -2553,6 +3148,7 @@ fb::@14: scope:[fb] from fb::@4 [134] call fc to:fb::@5 fb::@5: scope:[fb] from fb::@14 fb::@4 + [135] (byte) be#123 ← phi( fb::@14/(byte) be#46 fb::@4/(byte) be#122 ) [135] (byte) bd#111 ← phi( fb::@14/(byte) bd#150 fb::@4/(byte) bd#110 ) [136] if((byte) bc#113!=(byte) 5) goto fb::@6 to:fb::@15 @@ -2562,6 +3158,7 @@ fb::@15: scope:[fb] from fb::@5 [139] call fc to:fb::@6 fb::@6: scope:[fb] from fb::@15 fb::@5 + [140] (byte) be#124 ← phi( fb::@15/(byte) be#46 fb::@5/(byte) be#123 ) [140] (byte) bd#112 ← phi( fb::@15/(byte) bd#151 fb::@5/(byte) bd#111 ) [141] if((byte) bc#113!=(byte) 6) goto fb::@7 to:fb::@16 @@ -2571,6 +3168,7 @@ fb::@16: scope:[fb] from fb::@6 [144] call fc to:fb::@7 fb::@7: scope:[fb] from fb::@16 fb::@6 + [145] (byte) be#125 ← phi( fb::@16/(byte) be#46 fb::@6/(byte) be#124 ) [145] (byte) bd#113 ← phi( fb::@16/(byte) bd#152 fb::@6/(byte) bd#112 ) [146] if((byte) bc#113!=(byte) 7) goto fb::@8 to:fb::@17 @@ -2580,6 +3178,7 @@ fb::@17: scope:[fb] from fb::@7 [149] call fc to:fb::@8 fb::@8: scope:[fb] from fb::@17 fb::@7 + [150] (byte) be#126 ← phi( fb::@17/(byte) be#46 fb::@7/(byte) be#125 ) [150] (byte) bd#114 ← phi( fb::@17/(byte) bd#153 fb::@7/(byte) bd#113 ) [151] if((byte) bc#113!=(byte) 8) goto fb::@9 to:fb::@18 @@ -2589,6 +3188,7 @@ fb::@18: scope:[fb] from fb::@8 [154] call fc to:fb::@9 fb::@9: scope:[fb] from fb::@18 fb::@8 + [155] (byte) be#127 ← phi( fb::@18/(byte) be#46 fb::@8/(byte) be#126 ) [155] (byte) bd#116 ← phi( fb::@18/(byte) bd#154 fb::@8/(byte) bd#114 ) [156] if((byte) bc#113!=(byte) 9) goto fb::@return to:fb::@19 @@ -2597,74 +3197,86 @@ fb::@19: scope:[fb] from fb::@9 [158] call fc to:fb::@return fb::@return: scope:[fb] from fb::@19 fb::@9 + [159] (byte) be#35 ← phi( fb::@19/(byte) be#46 fb::@9/(byte) be#127 ) [159] (byte) bd#35 ← phi( fb::@19/(byte) 0 fb::@9/(byte) bd#116 ) [160] return to:@return (void()) fc() fc: scope:[fc] from fb::@10 fb::@11 fb::@12 fb::@13 fb::@14 fb::@15 fb::@16 fb::@17 fb::@18 fb::@19 + [161] (byte) be#129 ← phi( fb::@10/(byte) be#118 fb::@11/(byte) be#119 fb::@12/(byte) be#120 fb::@13/(byte) be#121 fb::@14/(byte) be#122 fb::@15/(byte) be#123 fb::@16/(byte) be#124 fb::@17/(byte) be#125 fb::@18/(byte) be#126 fb::@19/(byte) be#127 ) [161] (byte) bd#117 ← phi( fb::@10/(byte) bd#235 fb::@11/(byte) bd#236 fb::@12/(byte) bd#237 fb::@13/(byte) bd#238 fb::@14/(byte) bd#239 fb::@15/(byte) bd#240 fb::@16/(byte) bd#241 fb::@17/(byte) bd#242 fb::@18/(byte) bd#243 fb::@19/(byte) 0 ) [162] if((byte) bd#117!=(byte) 0) goto fc::@1 to:fc::@10 fc::@10: scope:[fc] from fc - [163] phi() + [163] (byte) be#36 ← ++ (byte) be#129 to:fc::@1 fc::@1: scope:[fc] from fc fc::@10 - [164] if((byte) bd#117!=(byte) 1) goto fc::@2 + [164] (byte) be#130 ← phi( fc/(byte) be#129 fc::@10/(byte) be#36 ) + [165] if((byte) bd#117!=(byte) 1) goto fc::@2 to:fc::@11 fc::@11: scope:[fc] from fc::@1 - [165] phi() + [166] (byte) be#37 ← ++ (byte) be#130 to:fc::@2 fc::@2: scope:[fc] from fc::@1 fc::@11 - [166] if((byte) bd#117!=(byte) 2) goto fc::@3 + [167] (byte) be#131 ← phi( fc::@1/(byte) be#130 fc::@11/(byte) be#37 ) + [168] if((byte) bd#117!=(byte) 2) goto fc::@3 to:fc::@12 fc::@12: scope:[fc] from fc::@2 - [167] phi() + [169] (byte) be#38 ← ++ (byte) be#131 to:fc::@3 fc::@3: scope:[fc] from fc::@12 fc::@2 - [168] if((byte) bd#117!=(byte) 3) goto fc::@4 + [170] (byte) be#132 ← phi( fc::@12/(byte) be#38 fc::@2/(byte) be#131 ) + [171] if((byte) bd#117!=(byte) 3) goto fc::@4 to:fc::@13 fc::@13: scope:[fc] from fc::@3 - [169] phi() + [172] (byte) be#39 ← ++ (byte) be#132 to:fc::@4 fc::@4: scope:[fc] from fc::@13 fc::@3 - [170] if((byte) bd#117!=(byte) 4) goto fc::@5 + [173] (byte) be#133 ← phi( fc::@13/(byte) be#39 fc::@3/(byte) be#132 ) + [174] if((byte) bd#117!=(byte) 4) goto fc::@5 to:fc::@14 fc::@14: scope:[fc] from fc::@4 - [171] phi() + [175] (byte) be#40 ← ++ (byte) be#133 to:fc::@5 fc::@5: scope:[fc] from fc::@14 fc::@4 - [172] if((byte) bd#117!=(byte) 5) goto fc::@6 + [176] (byte) be#134 ← phi( fc::@14/(byte) be#40 fc::@4/(byte) be#133 ) + [177] if((byte) bd#117!=(byte) 5) goto fc::@6 to:fc::@15 fc::@15: scope:[fc] from fc::@5 - [173] phi() + [178] (byte) be#41 ← ++ (byte) be#134 to:fc::@6 fc::@6: scope:[fc] from fc::@15 fc::@5 - [174] if((byte) bd#117!=(byte) 6) goto fc::@7 + [179] (byte) be#135 ← phi( fc::@15/(byte) be#41 fc::@5/(byte) be#134 ) + [180] if((byte) bd#117!=(byte) 6) goto fc::@7 to:fc::@16 fc::@16: scope:[fc] from fc::@6 - [175] phi() + [181] (byte) be#42 ← ++ (byte) be#135 to:fc::@7 fc::@7: scope:[fc] from fc::@16 fc::@6 - [176] if((byte) bd#117!=(byte) 7) goto fc::@8 + [182] (byte) be#136 ← phi( fc::@16/(byte) be#42 fc::@6/(byte) be#135 ) + [183] if((byte) bd#117!=(byte) 7) goto fc::@8 to:fc::@17 fc::@17: scope:[fc] from fc::@7 - [177] phi() + [184] (byte) be#43 ← ++ (byte) be#136 to:fc::@8 fc::@8: scope:[fc] from fc::@17 fc::@7 - [178] if((byte) bd#117!=(byte) 8) goto fc::@9 + [185] (byte) be#137 ← phi( fc::@17/(byte) be#43 fc::@7/(byte) be#136 ) + [186] if((byte) bd#117!=(byte) 8) goto fc::@9 to:fc::@18 fc::@18: scope:[fc] from fc::@8 - [179] phi() + [187] (byte) be#44 ← ++ (byte) be#137 to:fc::@9 fc::@9: scope:[fc] from fc::@18 fc::@8 - [180] if((byte) bd#117!=(byte) 9) goto fc::@return - to:fc::@19 + [188] (byte) be#138 ← phi( fc::@18/(byte) be#44 fc::@8/(byte) be#137 ) + [189] if((byte) bd#117!=(byte) 9) goto fc::@19 + to:fc::@return fc::@19: scope:[fc] from fc::@9 - [181] phi() + [190] phi() to:fc::@return fc::@return: scope:[fc] from fc::@19 fc::@9 - [182] return + [191] (byte) be#46 ← phi( fc::@9/(byte) 0 fc::@19/(byte) be#138 ) + [192] return to:@return @@ -2761,7 +3373,7 @@ VARIABLE REGISTER WEIGHTS (byte) bd#113 4.0 (byte) bd#114 4.0 (byte) bd#116 3.0 -(byte) bd#117 1.9999999999999991 +(byte) bd#117 1.3571428571428568 (byte) bd#129 2.0 (byte) bd#13 3.75 (byte) bd#130 2.0 @@ -2798,6 +3410,60 @@ VARIABLE REGISTER WEIGHTS (byte) bd#243 4.0 (byte) bd#35 1.8333333333333335 (byte) bd#93 2.6666666666666665 +(byte) be +(byte) be#100 2.0 +(byte) be#101 2.0 +(byte) be#102 2.0 +(byte) be#103 2.0 +(byte) be#104 2.0 +(byte) be#105 2.6666666666666665 +(byte) be#107 6.0 +(byte) be#108 2.0 +(byte) be#109 2.0 +(byte) be#110 2.0 +(byte) be#111 2.0 +(byte) be#112 2.0 +(byte) be#113 2.0 +(byte) be#114 2.0 +(byte) be#115 2.0 +(byte) be#116 2.6666666666666665 +(byte) be#118 6.0 +(byte) be#119 2.0 +(byte) be#120 2.0 +(byte) be#121 2.0 +(byte) be#122 2.0 +(byte) be#123 2.0 +(byte) be#124 2.0 +(byte) be#125 2.0 +(byte) be#126 2.0 +(byte) be#127 2.6666666666666665 +(byte) be#129 12.0 +(byte) be#13 3.75 +(byte) be#130 4.0 +(byte) be#131 4.0 +(byte) be#132 4.0 +(byte) be#133 4.0 +(byte) be#134 4.0 +(byte) be#135 4.0 +(byte) be#136 4.0 +(byte) be#137 4.0 +(byte) be#138 2.0 +(byte) be#142 2.0 +(byte) be#143 2.0 +(byte) be#144 2.0 +(byte) be#2 3.0 +(byte) be#24 2.0 +(byte) be#35 2.0 +(byte) be#36 4.0 +(byte) be#37 4.0 +(byte) be#38 4.0 +(byte) be#39 4.0 +(byte) be#40 4.0 +(byte) be#41 4.0 +(byte) be#42 4.0 +(byte) be#43 4.0 +(byte) be#44 4.0 +(byte) be#46 1.8333333333333335 (void()) f0() (void()) fa() (void()) fb() @@ -2812,6 +3478,7 @@ Initial phi equivalence classes [ bc#113 bc#172 bc#173 bc#174 bc#175 bc#176 bc#177 bc#178 bc#179 bc#180 ] [ bd#116 bd#154 bd#114 bd#153 bd#113 bd#152 bd#112 bd#151 bd#111 bd#150 bd#110 bd#149 bd#109 bd#108 bd#107 bd#106 bd#104 bd#103 bd#102 bd#101 bd#100 bd#141 bd#140 bd#139 bd#138 bd#137 bd#93 bd#136 bd#135 bd#134 bd#133 bd#132 bd#131 bd#130 bd#129 bd#2 bd#13 bd#24 bd#35 bd#146 bd#147 bd#148 ] [ bd#117 bd#235 bd#236 bd#237 bd#238 bd#239 bd#240 bd#241 bd#242 bd#243 ] +[ be#138 be#44 be#137 be#43 be#136 be#42 be#135 be#41 be#134 be#40 be#133 be#39 be#132 be#38 be#131 be#130 be#129 be#127 be#126 be#125 be#124 be#123 be#122 be#121 be#120 be#119 be#118 be#116 be#115 be#114 be#113 be#112 be#111 be#110 be#109 be#108 be#107 be#105 be#104 be#103 be#102 be#101 be#100 be#144 be#143 be#142 be#2 be#13 be#24 be#35 be#46 be#36 be#37 ] Complete equivalence classes [ ba#17 ba#1 ] [ bb#50 bb#11 bb#25 bb#10 bb#24 bb#68 bb#23 bb#67 bb#22 bb#66 bb#21 bb#6 bb#20 bb#19 bb#18 bb#16 bb#13 bb#3 bb#4 bb#5 ] @@ -2820,6 +3487,7 @@ Complete equivalence classes [ bc#113 bc#172 bc#173 bc#174 bc#175 bc#176 bc#177 bc#178 bc#179 bc#180 ] [ bd#116 bd#154 bd#114 bd#153 bd#113 bd#152 bd#112 bd#151 bd#111 bd#150 bd#110 bd#149 bd#109 bd#108 bd#107 bd#106 bd#104 bd#103 bd#102 bd#101 bd#100 bd#141 bd#140 bd#139 bd#138 bd#137 bd#93 bd#136 bd#135 bd#134 bd#133 bd#132 bd#131 bd#130 bd#129 bd#2 bd#13 bd#24 bd#35 bd#146 bd#147 bd#148 ] [ bd#117 bd#235 bd#236 bd#237 bd#238 bd#239 bd#240 bd#241 bd#242 bd#243 ] +[ be#138 be#44 be#137 be#43 be#136 be#42 be#135 be#41 be#134 be#40 be#133 be#39 be#132 be#38 be#131 be#130 be#129 be#127 be#126 be#125 be#124 be#123 be#122 be#121 be#120 be#119 be#118 be#116 be#115 be#114 be#113 be#112 be#111 be#110 be#109 be#108 be#107 be#105 be#104 be#103 be#102 be#101 be#100 be#144 be#143 be#142 be#2 be#13 be#24 be#35 be#46 be#36 be#37 ] Allocated zp[1]:2 [ ba#17 ba#1 ] Allocated zp[1]:3 [ bb#50 bb#11 bb#25 bb#10 bb#24 bb#68 bb#23 bb#67 bb#22 bb#66 bb#21 bb#6 bb#20 bb#19 bb#18 bb#16 bb#13 bb#3 bb#4 bb#5 ] Allocated zp[1]:4 [ bb#27 bb#100 bb#101 bb#102 bb#103 bb#104 bb#105 bb#106 bb#107 bb#108 ] @@ -2827,6 +3495,7 @@ Allocated zp[1]:5 [ bc#83 bc#112 bc#47 bc#111 bc#46 bc#110 bc#45 bc#109 bc#44 bc Allocated zp[1]:6 [ bc#113 bc#172 bc#173 bc#174 bc#175 bc#176 bc#177 bc#178 bc#179 bc#180 ] Allocated zp[1]:7 [ bd#116 bd#154 bd#114 bd#153 bd#113 bd#152 bd#112 bd#151 bd#111 bd#150 bd#110 bd#149 bd#109 bd#108 bd#107 bd#106 bd#104 bd#103 bd#102 bd#101 bd#100 bd#141 bd#140 bd#139 bd#138 bd#137 bd#93 bd#136 bd#135 bd#134 bd#133 bd#132 bd#131 bd#130 bd#129 bd#2 bd#13 bd#24 bd#35 bd#146 bd#147 bd#148 ] Allocated zp[1]:8 [ bd#117 bd#235 bd#236 bd#237 bd#238 bd#239 bd#240 bd#241 bd#242 bd#243 ] +Allocated zp[1]:9 [ be#138 be#44 be#137 be#43 be#136 be#42 be#135 be#41 be#134 be#40 be#133 be#39 be#132 be#38 be#131 be#130 be#129 be#127 be#126 be#125 be#124 be#123 be#122 be#121 be#120 be#119 be#118 be#116 be#115 be#114 be#113 be#112 be#111 be#110 be#109 be#108 be#107 be#105 be#104 be#103 be#102 be#101 be#100 be#144 be#143 be#142 be#2 be#13 be#24 be#35 be#46 be#36 be#37 ] INITIAL ASM Target platform is c64basic / MOS6502X @@ -2839,6 +3508,7 @@ Target platform is c64basic / MOS6502X .label ba = 2 .label bc = 5 .label bd = 7 + .label be = 9 .label bb = 3 .label bb_1 = 4 .label bd_1 = 8 @@ -2866,13 +3536,16 @@ main: { // [5] phi (byte) ba#17 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 lda #0 sta.z ba - // [5] phi (byte) bd#2 = (byte) 0 [phi:main->main::@1#1] -- vbuz1=vbuc1 + // [5] phi (byte) be#2 = (byte) 0 [phi:main->main::@1#1] -- vbuz1=vbuc1 + lda #0 + sta.z be + // [5] phi (byte) bd#2 = (byte) 0 [phi:main->main::@1#2] -- vbuz1=vbuc1 lda #0 sta.z bd - // [5] phi (byte) bc#2 = (byte) 0 [phi:main->main::@1#2] -- vbuz1=vbuc1 + // [5] phi (byte) bc#2 = (byte) 0 [phi:main->main::@1#3] -- vbuz1=vbuc1 lda #0 sta.z bc - // [5] phi (byte) bb#16 = (byte) 0 [phi:main->main::@1#3] -- vbuz1=vbuc1 + // [5] phi (byte) bb#16 = (byte) 0 [phi:main->main::@1#4] -- vbuz1=vbuc1 lda #0 sta.z bb jmp __b1 @@ -2893,9 +3566,10 @@ main: { // [5] phi from main::@3 to main::@1 [phi:main::@3->main::@1] __b1_from___b3: // [5] phi (byte) ba#17 = (byte) ba#1 [phi:main::@3->main::@1#0] -- register_copy - // [5] phi (byte) bd#2 = (byte) bd#13 [phi:main::@3->main::@1#1] -- register_copy - // [5] phi (byte) bc#2 = (byte) bc#13 [phi:main::@3->main::@1#2] -- register_copy - // [5] phi (byte) bb#16 = (byte) bb#13 [phi:main::@3->main::@1#3] -- register_copy + // [5] phi (byte) be#2 = (byte) be#13 [phi:main::@3->main::@1#1] -- register_copy + // [5] phi (byte) bd#2 = (byte) bd#13 [phi:main::@3->main::@1#2] -- register_copy + // [5] phi (byte) bc#2 = (byte) bc#13 [phi:main::@3->main::@1#3] -- register_copy + // [5] phi (byte) bb#16 = (byte) bb#13 [phi:main::@3->main::@1#4] -- register_copy jmp __b1 } // f0 @@ -2915,16 +3589,18 @@ f0: { // [12] call fa // [59] phi from f0::@10 to fa [phi:f0::@10->fa] fa_from___b10: - // [59] phi (byte) bd#137 = (byte) bd#2 [phi:f0::@10->fa#0] -- register_copy - // [59] phi (byte) bc#39 = (byte) bc#2 [phi:f0::@10->fa#1] -- register_copy - // [59] phi (byte) bb#27 = (byte) bb#100 [phi:f0::@10->fa#2] -- register_copy + // [59] phi (byte) be#107 = (byte) be#2 [phi:f0::@10->fa#0] -- register_copy + // [59] phi (byte) bd#137 = (byte) bd#2 [phi:f0::@10->fa#1] -- register_copy + // [59] phi (byte) bc#39 = (byte) bc#2 [phi:f0::@10->fa#2] -- register_copy + // [59] phi (byte) bb#27 = (byte) bb#100 [phi:f0::@10->fa#3] -- register_copy jsr fa // [13] phi from f0 f0::@10 to f0::@1 [phi:f0/f0::@10->f0::@1] __b1_from_f0: __b1_from___b10: - // [13] phi (byte) bd#129 = (byte) bd#2 [phi:f0/f0::@10->f0::@1#0] -- register_copy - // [13] phi (byte) bc#63 = (byte) bc#2 [phi:f0/f0::@10->f0::@1#1] -- register_copy - // [13] phi (byte) bb#18 = (byte) bb#16 [phi:f0/f0::@10->f0::@1#2] -- register_copy + // [13] phi (byte) be#142 = (byte) be#2 [phi:f0/f0::@10->f0::@1#0] -- register_copy + // [13] phi (byte) bd#129 = (byte) bd#2 [phi:f0/f0::@10->f0::@1#1] -- register_copy + // [13] phi (byte) bc#63 = (byte) bc#2 [phi:f0/f0::@10->f0::@1#2] -- register_copy + // [13] phi (byte) bb#18 = (byte) bb#16 [phi:f0/f0::@10->f0::@1#3] -- register_copy jmp __b1 // f0::@1 __b1: @@ -2943,16 +3619,18 @@ f0: { // [17] call fa // [59] phi from f0::@11 to fa [phi:f0::@11->fa] fa_from___b11: - // [59] phi (byte) bd#137 = (byte) bd#129 [phi:f0::@11->fa#0] -- register_copy - // [59] phi (byte) bc#39 = (byte) bc#63 [phi:f0::@11->fa#1] -- register_copy - // [59] phi (byte) bb#27 = (byte) bb#101 [phi:f0::@11->fa#2] -- register_copy + // [59] phi (byte) be#107 = (byte) be#142 [phi:f0::@11->fa#0] -- register_copy + // [59] phi (byte) bd#137 = (byte) bd#129 [phi:f0::@11->fa#1] -- register_copy + // [59] phi (byte) bc#39 = (byte) bc#63 [phi:f0::@11->fa#2] -- register_copy + // [59] phi (byte) bb#27 = (byte) bb#101 [phi:f0::@11->fa#3] -- register_copy jsr fa // [18] phi from f0::@1 f0::@11 to f0::@2 [phi:f0::@1/f0::@11->f0::@2] __b2_from___b1: __b2_from___b11: - // [18] phi (byte) bd#130 = (byte) bd#129 [phi:f0::@1/f0::@11->f0::@2#0] -- register_copy - // [18] phi (byte) bc#64 = (byte) bc#63 [phi:f0::@1/f0::@11->f0::@2#1] -- register_copy - // [18] phi (byte) bb#19 = (byte) bb#18 [phi:f0::@1/f0::@11->f0::@2#2] -- register_copy + // [18] phi (byte) be#143 = (byte) be#142 [phi:f0::@1/f0::@11->f0::@2#0] -- register_copy + // [18] phi (byte) bd#130 = (byte) bd#129 [phi:f0::@1/f0::@11->f0::@2#1] -- register_copy + // [18] phi (byte) bc#64 = (byte) bc#63 [phi:f0::@1/f0::@11->f0::@2#2] -- register_copy + // [18] phi (byte) bb#19 = (byte) bb#18 [phi:f0::@1/f0::@11->f0::@2#3] -- register_copy jmp __b2 // f0::@2 __b2: @@ -2971,16 +3649,18 @@ f0: { // [22] call fa // [59] phi from f0::@12 to fa [phi:f0::@12->fa] fa_from___b12: - // [59] phi (byte) bd#137 = (byte) bd#130 [phi:f0::@12->fa#0] -- register_copy - // [59] phi (byte) bc#39 = (byte) bc#64 [phi:f0::@12->fa#1] -- register_copy - // [59] phi (byte) bb#27 = (byte) bb#102 [phi:f0::@12->fa#2] -- register_copy + // [59] phi (byte) be#107 = (byte) be#143 [phi:f0::@12->fa#0] -- register_copy + // [59] phi (byte) bd#137 = (byte) bd#130 [phi:f0::@12->fa#1] -- register_copy + // [59] phi (byte) bc#39 = (byte) bc#64 [phi:f0::@12->fa#2] -- register_copy + // [59] phi (byte) bb#27 = (byte) bb#102 [phi:f0::@12->fa#3] -- register_copy jsr fa // [23] phi from f0::@12 f0::@2 to f0::@3 [phi:f0::@12/f0::@2->f0::@3] __b3_from___b12: __b3_from___b2: - // [23] phi (byte) bd#131 = (byte) bd#24 [phi:f0::@12/f0::@2->f0::@3#0] -- register_copy - // [23] phi (byte) bc#65 = (byte) bc#24 [phi:f0::@12/f0::@2->f0::@3#1] -- register_copy - // [23] phi (byte) bb#20 = (byte) bb#5 [phi:f0::@12/f0::@2->f0::@3#2] -- register_copy + // [23] phi (byte) be#144 = (byte) be#24 [phi:f0::@12/f0::@2->f0::@3#0] -- register_copy + // [23] phi (byte) bd#131 = (byte) bd#24 [phi:f0::@12/f0::@2->f0::@3#1] -- register_copy + // [23] phi (byte) bc#65 = (byte) bc#24 [phi:f0::@12/f0::@2->f0::@3#2] -- register_copy + // [23] phi (byte) bb#20 = (byte) bb#5 [phi:f0::@12/f0::@2->f0::@3#3] -- register_copy jmp __b3 // f0::@3 __b3: @@ -2999,16 +3679,18 @@ f0: { // [27] call fa // [59] phi from f0::@13 to fa [phi:f0::@13->fa] fa_from___b13: - // [59] phi (byte) bd#137 = (byte) bd#131 [phi:f0::@13->fa#0] -- register_copy - // [59] phi (byte) bc#39 = (byte) bc#65 [phi:f0::@13->fa#1] -- register_copy - // [59] phi (byte) bb#27 = (byte) bb#103 [phi:f0::@13->fa#2] -- register_copy + // [59] phi (byte) be#107 = (byte) be#144 [phi:f0::@13->fa#0] -- register_copy + // [59] phi (byte) bd#137 = (byte) bd#131 [phi:f0::@13->fa#1] -- register_copy + // [59] phi (byte) bc#39 = (byte) bc#65 [phi:f0::@13->fa#2] -- register_copy + // [59] phi (byte) bb#27 = (byte) bb#103 [phi:f0::@13->fa#3] -- register_copy jsr fa // [28] phi from f0::@13 f0::@3 to f0::@4 [phi:f0::@13/f0::@3->f0::@4] __b4_from___b13: __b4_from___b3: - // [28] phi (byte) bd#132 = (byte) bd#24 [phi:f0::@13/f0::@3->f0::@4#0] -- register_copy - // [28] phi (byte) bc#66 = (byte) bc#24 [phi:f0::@13/f0::@3->f0::@4#1] -- register_copy - // [28] phi (byte) bb#21 = (byte) bb#6 [phi:f0::@13/f0::@3->f0::@4#2] -- register_copy + // [28] phi (byte) be#100 = (byte) be#24 [phi:f0::@13/f0::@3->f0::@4#0] -- register_copy + // [28] phi (byte) bd#132 = (byte) bd#24 [phi:f0::@13/f0::@3->f0::@4#1] -- register_copy + // [28] phi (byte) bc#66 = (byte) bc#24 [phi:f0::@13/f0::@3->f0::@4#2] -- register_copy + // [28] phi (byte) bb#21 = (byte) bb#6 [phi:f0::@13/f0::@3->f0::@4#3] -- register_copy jmp __b4 // f0::@4 __b4: @@ -3027,16 +3709,18 @@ f0: { // [32] call fa // [59] phi from f0::@14 to fa [phi:f0::@14->fa] fa_from___b14: - // [59] phi (byte) bd#137 = (byte) bd#132 [phi:f0::@14->fa#0] -- register_copy - // [59] phi (byte) bc#39 = (byte) bc#66 [phi:f0::@14->fa#1] -- register_copy - // [59] phi (byte) bb#27 = (byte) bb#104 [phi:f0::@14->fa#2] -- register_copy + // [59] phi (byte) be#107 = (byte) be#100 [phi:f0::@14->fa#0] -- register_copy + // [59] phi (byte) bd#137 = (byte) bd#132 [phi:f0::@14->fa#1] -- register_copy + // [59] phi (byte) bc#39 = (byte) bc#66 [phi:f0::@14->fa#2] -- register_copy + // [59] phi (byte) bb#27 = (byte) bb#104 [phi:f0::@14->fa#3] -- register_copy jsr fa // [33] phi from f0::@14 f0::@4 to f0::@5 [phi:f0::@14/f0::@4->f0::@5] __b5_from___b14: __b5_from___b4: - // [33] phi (byte) bd#133 = (byte) bd#24 [phi:f0::@14/f0::@4->f0::@5#0] -- register_copy - // [33] phi (byte) bc#100 = (byte) bc#24 [phi:f0::@14/f0::@4->f0::@5#1] -- register_copy - // [33] phi (byte) bb#22 = (byte) bb#66 [phi:f0::@14/f0::@4->f0::@5#2] -- register_copy + // [33] phi (byte) be#101 = (byte) be#24 [phi:f0::@14/f0::@4->f0::@5#0] -- register_copy + // [33] phi (byte) bd#133 = (byte) bd#24 [phi:f0::@14/f0::@4->f0::@5#1] -- register_copy + // [33] phi (byte) bc#100 = (byte) bc#24 [phi:f0::@14/f0::@4->f0::@5#2] -- register_copy + // [33] phi (byte) bb#22 = (byte) bb#66 [phi:f0::@14/f0::@4->f0::@5#3] -- register_copy jmp __b5 // f0::@5 __b5: @@ -3055,16 +3739,18 @@ f0: { // [37] call fa // [59] phi from f0::@15 to fa [phi:f0::@15->fa] fa_from___b15: - // [59] phi (byte) bd#137 = (byte) bd#133 [phi:f0::@15->fa#0] -- register_copy - // [59] phi (byte) bc#39 = (byte) bc#100 [phi:f0::@15->fa#1] -- register_copy - // [59] phi (byte) bb#27 = (byte) bb#105 [phi:f0::@15->fa#2] -- register_copy + // [59] phi (byte) be#107 = (byte) be#101 [phi:f0::@15->fa#0] -- register_copy + // [59] phi (byte) bd#137 = (byte) bd#133 [phi:f0::@15->fa#1] -- register_copy + // [59] phi (byte) bc#39 = (byte) bc#100 [phi:f0::@15->fa#2] -- register_copy + // [59] phi (byte) bb#27 = (byte) bb#105 [phi:f0::@15->fa#3] -- register_copy jsr fa // [38] phi from f0::@15 f0::@5 to f0::@6 [phi:f0::@15/f0::@5->f0::@6] __b6_from___b15: __b6_from___b5: - // [38] phi (byte) bd#134 = (byte) bd#24 [phi:f0::@15/f0::@5->f0::@6#0] -- register_copy - // [38] phi (byte) bc#101 = (byte) bc#24 [phi:f0::@15/f0::@5->f0::@6#1] -- register_copy - // [38] phi (byte) bb#23 = (byte) bb#67 [phi:f0::@15/f0::@5->f0::@6#2] -- register_copy + // [38] phi (byte) be#102 = (byte) be#24 [phi:f0::@15/f0::@5->f0::@6#0] -- register_copy + // [38] phi (byte) bd#134 = (byte) bd#24 [phi:f0::@15/f0::@5->f0::@6#1] -- register_copy + // [38] phi (byte) bc#101 = (byte) bc#24 [phi:f0::@15/f0::@5->f0::@6#2] -- register_copy + // [38] phi (byte) bb#23 = (byte) bb#67 [phi:f0::@15/f0::@5->f0::@6#3] -- register_copy jmp __b6 // f0::@6 __b6: @@ -3083,16 +3769,18 @@ f0: { // [42] call fa // [59] phi from f0::@16 to fa [phi:f0::@16->fa] fa_from___b16: - // [59] phi (byte) bd#137 = (byte) bd#134 [phi:f0::@16->fa#0] -- register_copy - // [59] phi (byte) bc#39 = (byte) bc#101 [phi:f0::@16->fa#1] -- register_copy - // [59] phi (byte) bb#27 = (byte) bb#106 [phi:f0::@16->fa#2] -- register_copy + // [59] phi (byte) be#107 = (byte) be#102 [phi:f0::@16->fa#0] -- register_copy + // [59] phi (byte) bd#137 = (byte) bd#134 [phi:f0::@16->fa#1] -- register_copy + // [59] phi (byte) bc#39 = (byte) bc#101 [phi:f0::@16->fa#2] -- register_copy + // [59] phi (byte) bb#27 = (byte) bb#106 [phi:f0::@16->fa#3] -- register_copy jsr fa // [43] phi from f0::@16 f0::@6 to f0::@7 [phi:f0::@16/f0::@6->f0::@7] __b7_from___b16: __b7_from___b6: - // [43] phi (byte) bd#135 = (byte) bd#24 [phi:f0::@16/f0::@6->f0::@7#0] -- register_copy - // [43] phi (byte) bc#102 = (byte) bc#24 [phi:f0::@16/f0::@6->f0::@7#1] -- register_copy - // [43] phi (byte) bb#24 = (byte) bb#68 [phi:f0::@16/f0::@6->f0::@7#2] -- register_copy + // [43] phi (byte) be#103 = (byte) be#24 [phi:f0::@16/f0::@6->f0::@7#0] -- register_copy + // [43] phi (byte) bd#135 = (byte) bd#24 [phi:f0::@16/f0::@6->f0::@7#1] -- register_copy + // [43] phi (byte) bc#102 = (byte) bc#24 [phi:f0::@16/f0::@6->f0::@7#2] -- register_copy + // [43] phi (byte) bb#24 = (byte) bb#68 [phi:f0::@16/f0::@6->f0::@7#3] -- register_copy jmp __b7 // f0::@7 __b7: @@ -3111,16 +3799,18 @@ f0: { // [47] call fa // [59] phi from f0::@17 to fa [phi:f0::@17->fa] fa_from___b17: - // [59] phi (byte) bd#137 = (byte) bd#135 [phi:f0::@17->fa#0] -- register_copy - // [59] phi (byte) bc#39 = (byte) bc#102 [phi:f0::@17->fa#1] -- register_copy - // [59] phi (byte) bb#27 = (byte) bb#107 [phi:f0::@17->fa#2] -- register_copy + // [59] phi (byte) be#107 = (byte) be#103 [phi:f0::@17->fa#0] -- register_copy + // [59] phi (byte) bd#137 = (byte) bd#135 [phi:f0::@17->fa#1] -- register_copy + // [59] phi (byte) bc#39 = (byte) bc#102 [phi:f0::@17->fa#2] -- register_copy + // [59] phi (byte) bb#27 = (byte) bb#107 [phi:f0::@17->fa#3] -- register_copy jsr fa // [48] phi from f0::@17 f0::@7 to f0::@8 [phi:f0::@17/f0::@7->f0::@8] __b8_from___b17: __b8_from___b7: - // [48] phi (byte) bd#136 = (byte) bd#24 [phi:f0::@17/f0::@7->f0::@8#0] -- register_copy - // [48] phi (byte) bc#103 = (byte) bc#24 [phi:f0::@17/f0::@7->f0::@8#1] -- register_copy - // [48] phi (byte) bb#25 = (byte) bb#10 [phi:f0::@17/f0::@7->f0::@8#2] -- register_copy + // [48] phi (byte) be#104 = (byte) be#24 [phi:f0::@17/f0::@7->f0::@8#0] -- register_copy + // [48] phi (byte) bd#136 = (byte) bd#24 [phi:f0::@17/f0::@7->f0::@8#1] -- register_copy + // [48] phi (byte) bc#103 = (byte) bc#24 [phi:f0::@17/f0::@7->f0::@8#2] -- register_copy + // [48] phi (byte) bb#25 = (byte) bb#10 [phi:f0::@17/f0::@7->f0::@8#3] -- register_copy jmp __b8 // f0::@8 __b8: @@ -3139,16 +3829,18 @@ f0: { // [52] call fa // [59] phi from f0::@18 to fa [phi:f0::@18->fa] fa_from___b18: - // [59] phi (byte) bd#137 = (byte) bd#136 [phi:f0::@18->fa#0] -- register_copy - // [59] phi (byte) bc#39 = (byte) bc#103 [phi:f0::@18->fa#1] -- register_copy - // [59] phi (byte) bb#27 = (byte) bb#108 [phi:f0::@18->fa#2] -- register_copy + // [59] phi (byte) be#107 = (byte) be#104 [phi:f0::@18->fa#0] -- register_copy + // [59] phi (byte) bd#137 = (byte) bd#136 [phi:f0::@18->fa#1] -- register_copy + // [59] phi (byte) bc#39 = (byte) bc#103 [phi:f0::@18->fa#2] -- register_copy + // [59] phi (byte) bb#27 = (byte) bb#108 [phi:f0::@18->fa#3] -- register_copy jsr fa // [53] phi from f0::@18 f0::@8 to f0::@9 [phi:f0::@18/f0::@8->f0::@9] __b9_from___b18: __b9_from___b8: - // [53] phi (byte) bd#93 = (byte) bd#24 [phi:f0::@18/f0::@8->f0::@9#0] -- register_copy - // [53] phi (byte) bc#71 = (byte) bc#24 [phi:f0::@18/f0::@8->f0::@9#1] -- register_copy - // [53] phi (byte) bb#50 = (byte) bb#11 [phi:f0::@18/f0::@8->f0::@9#2] -- register_copy + // [53] phi (byte) be#105 = (byte) be#24 [phi:f0::@18/f0::@8->f0::@9#0] -- register_copy + // [53] phi (byte) bd#93 = (byte) bd#24 [phi:f0::@18/f0::@8->f0::@9#1] -- register_copy + // [53] phi (byte) bc#71 = (byte) bc#24 [phi:f0::@18/f0::@8->f0::@9#2] -- register_copy + // [53] phi (byte) bb#50 = (byte) bb#11 [phi:f0::@18/f0::@8->f0::@9#3] -- register_copy jmp __b9 // f0::@9 __b9: @@ -3164,25 +3856,28 @@ f0: { // [56] call fa // [59] phi from f0::@19 to fa [phi:f0::@19->fa] fa_from___b19: - // [59] phi (byte) bd#137 = (byte) bd#93 [phi:f0::@19->fa#0] -- register_copy - // [59] phi (byte) bc#39 = (byte) bc#71 [phi:f0::@19->fa#1] -- register_copy - // [59] phi (byte) bb#27 = (byte) 0 [phi:f0::@19->fa#2] -- vbuz1=vbuc1 + // [59] phi (byte) be#107 = (byte) be#105 [phi:f0::@19->fa#0] -- register_copy + // [59] phi (byte) bd#137 = (byte) bd#93 [phi:f0::@19->fa#1] -- register_copy + // [59] phi (byte) bc#39 = (byte) bc#71 [phi:f0::@19->fa#2] -- register_copy + // [59] phi (byte) bb#27 = (byte) 0 [phi:f0::@19->fa#3] -- vbuz1=vbuc1 lda #0 sta.z bb_1 jsr fa // [57] phi from f0::@19 to f0::@return [phi:f0::@19->f0::@return] __breturn_from___b19: - // [57] phi (byte) bd#13 = (byte) bd#24 [phi:f0::@19->f0::@return#0] -- register_copy - // [57] phi (byte) bc#13 = (byte) bc#24 [phi:f0::@19->f0::@return#1] -- register_copy - // [57] phi (byte) bb#13 = (byte) 0 [phi:f0::@19->f0::@return#2] -- vbuz1=vbuc1 + // [57] phi (byte) be#13 = (byte) be#24 [phi:f0::@19->f0::@return#0] -- register_copy + // [57] phi (byte) bd#13 = (byte) bd#24 [phi:f0::@19->f0::@return#1] -- register_copy + // [57] phi (byte) bc#13 = (byte) bc#24 [phi:f0::@19->f0::@return#2] -- register_copy + // [57] phi (byte) bb#13 = (byte) 0 [phi:f0::@19->f0::@return#3] -- vbuz1=vbuc1 lda #0 sta.z bb jmp __breturn // [57] phi from f0::@9 to f0::@return [phi:f0::@9->f0::@return] __breturn_from___b9: - // [57] phi (byte) bd#13 = (byte) bd#93 [phi:f0::@9->f0::@return#0] -- register_copy - // [57] phi (byte) bc#13 = (byte) bc#71 [phi:f0::@9->f0::@return#1] -- register_copy - // [57] phi (byte) bb#13 = (byte) bb#50 [phi:f0::@9->f0::@return#2] -- register_copy + // [57] phi (byte) be#13 = (byte) be#105 [phi:f0::@9->f0::@return#0] -- register_copy + // [57] phi (byte) bd#13 = (byte) bd#93 [phi:f0::@9->f0::@return#1] -- register_copy + // [57] phi (byte) bc#13 = (byte) bc#71 [phi:f0::@9->f0::@return#2] -- register_copy + // [57] phi (byte) bb#13 = (byte) bb#50 [phi:f0::@9->f0::@return#3] -- register_copy jmp __breturn // f0::@return __breturn: @@ -3206,14 +3901,16 @@ fa: { // [63] call fb // [110] phi from fa::@10 to fb [phi:fa::@10->fb] fb_from___b10: - // [110] phi (byte) bd#106 = (byte) bd#137 [phi:fa::@10->fb#0] -- register_copy - // [110] phi (byte) bc#113 = (byte) bc#172 [phi:fa::@10->fb#1] -- register_copy + // [110] phi (byte) be#118 = (byte) be#107 [phi:fa::@10->fb#0] -- register_copy + // [110] phi (byte) bd#106 = (byte) bd#137 [phi:fa::@10->fb#1] -- register_copy + // [110] phi (byte) bc#113 = (byte) bc#172 [phi:fa::@10->fb#2] -- register_copy jsr fb // [64] phi from fa fa::@10 to fa::@1 [phi:fa/fa::@10->fa::@1] __b1_from_fa: __b1_from___b10: - // [64] phi (byte) bd#138 = (byte) bd#137 [phi:fa/fa::@10->fa::@1#0] -- register_copy - // [64] phi (byte) bc#40 = (byte) bc#39 [phi:fa/fa::@10->fa::@1#1] -- register_copy + // [64] phi (byte) be#108 = (byte) be#107 [phi:fa/fa::@10->fa::@1#0] -- register_copy + // [64] phi (byte) bd#138 = (byte) bd#137 [phi:fa/fa::@10->fa::@1#1] -- register_copy + // [64] phi (byte) bc#40 = (byte) bc#39 [phi:fa/fa::@10->fa::@1#2] -- register_copy jmp __b1 // fa::@1 __b1: @@ -3232,14 +3929,16 @@ fa: { // [68] call fb // [110] phi from fa::@11 to fb [phi:fa::@11->fb] fb_from___b11: - // [110] phi (byte) bd#106 = (byte) bd#138 [phi:fa::@11->fb#0] -- register_copy - // [110] phi (byte) bc#113 = (byte) bc#173 [phi:fa::@11->fb#1] -- register_copy + // [110] phi (byte) be#118 = (byte) be#108 [phi:fa::@11->fb#0] -- register_copy + // [110] phi (byte) bd#106 = (byte) bd#138 [phi:fa::@11->fb#1] -- register_copy + // [110] phi (byte) bc#113 = (byte) bc#173 [phi:fa::@11->fb#2] -- register_copy jsr fb // [69] phi from fa::@1 fa::@11 to fa::@2 [phi:fa::@1/fa::@11->fa::@2] __b2_from___b1: __b2_from___b11: - // [69] phi (byte) bd#139 = (byte) bd#138 [phi:fa::@1/fa::@11->fa::@2#0] -- register_copy - // [69] phi (byte) bc#41 = (byte) bc#40 [phi:fa::@1/fa::@11->fa::@2#1] -- register_copy + // [69] phi (byte) be#109 = (byte) be#108 [phi:fa::@1/fa::@11->fa::@2#0] -- register_copy + // [69] phi (byte) bd#139 = (byte) bd#138 [phi:fa::@1/fa::@11->fa::@2#1] -- register_copy + // [69] phi (byte) bc#41 = (byte) bc#40 [phi:fa::@1/fa::@11->fa::@2#2] -- register_copy jmp __b2 // fa::@2 __b2: @@ -3258,14 +3957,16 @@ fa: { // [73] call fb // [110] phi from fa::@12 to fb [phi:fa::@12->fb] fb_from___b12: - // [110] phi (byte) bd#106 = (byte) bd#139 [phi:fa::@12->fb#0] -- register_copy - // [110] phi (byte) bc#113 = (byte) bc#174 [phi:fa::@12->fb#1] -- register_copy + // [110] phi (byte) be#118 = (byte) be#109 [phi:fa::@12->fb#0] -- register_copy + // [110] phi (byte) bd#106 = (byte) bd#139 [phi:fa::@12->fb#1] -- register_copy + // [110] phi (byte) bc#113 = (byte) bc#174 [phi:fa::@12->fb#2] -- register_copy jsr fb // [74] phi from fa::@12 fa::@2 to fa::@3 [phi:fa::@12/fa::@2->fa::@3] __b3_from___b12: __b3_from___b2: - // [74] phi (byte) bd#140 = (byte) bd#35 [phi:fa::@12/fa::@2->fa::@3#0] -- register_copy - // [74] phi (byte) bc#42 = (byte) bc#106 [phi:fa::@12/fa::@2->fa::@3#1] -- register_copy + // [74] phi (byte) be#110 = (byte) be#35 [phi:fa::@12/fa::@2->fa::@3#0] -- register_copy + // [74] phi (byte) bd#140 = (byte) bd#35 [phi:fa::@12/fa::@2->fa::@3#1] -- register_copy + // [74] phi (byte) bc#42 = (byte) bc#106 [phi:fa::@12/fa::@2->fa::@3#2] -- register_copy jmp __b3 // fa::@3 __b3: @@ -3284,14 +3985,16 @@ fa: { // [78] call fb // [110] phi from fa::@13 to fb [phi:fa::@13->fb] fb_from___b13: - // [110] phi (byte) bd#106 = (byte) bd#140 [phi:fa::@13->fb#0] -- register_copy - // [110] phi (byte) bc#113 = (byte) bc#175 [phi:fa::@13->fb#1] -- register_copy + // [110] phi (byte) be#118 = (byte) be#110 [phi:fa::@13->fb#0] -- register_copy + // [110] phi (byte) bd#106 = (byte) bd#140 [phi:fa::@13->fb#1] -- register_copy + // [110] phi (byte) bc#113 = (byte) bc#175 [phi:fa::@13->fb#2] -- register_copy jsr fb // [79] phi from fa::@13 fa::@3 to fa::@4 [phi:fa::@13/fa::@3->fa::@4] __b4_from___b13: __b4_from___b3: - // [79] phi (byte) bd#141 = (byte) bd#35 [phi:fa::@13/fa::@3->fa::@4#0] -- register_copy - // [79] phi (byte) bc#43 = (byte) bc#107 [phi:fa::@13/fa::@3->fa::@4#1] -- register_copy + // [79] phi (byte) be#111 = (byte) be#35 [phi:fa::@13/fa::@3->fa::@4#0] -- register_copy + // [79] phi (byte) bd#141 = (byte) bd#35 [phi:fa::@13/fa::@3->fa::@4#1] -- register_copy + // [79] phi (byte) bc#43 = (byte) bc#107 [phi:fa::@13/fa::@3->fa::@4#2] -- register_copy jmp __b4 // fa::@4 __b4: @@ -3310,14 +4013,16 @@ fa: { // [83] call fb // [110] phi from fa::@14 to fb [phi:fa::@14->fb] fb_from___b14: - // [110] phi (byte) bd#106 = (byte) bd#141 [phi:fa::@14->fb#0] -- register_copy - // [110] phi (byte) bc#113 = (byte) bc#176 [phi:fa::@14->fb#1] -- register_copy + // [110] phi (byte) be#118 = (byte) be#111 [phi:fa::@14->fb#0] -- register_copy + // [110] phi (byte) bd#106 = (byte) bd#141 [phi:fa::@14->fb#1] -- register_copy + // [110] phi (byte) bc#113 = (byte) bc#176 [phi:fa::@14->fb#2] -- register_copy jsr fb // [84] phi from fa::@14 fa::@4 to fa::@5 [phi:fa::@14/fa::@4->fa::@5] __b5_from___b14: __b5_from___b4: - // [84] phi (byte) bd#100 = (byte) bd#35 [phi:fa::@14/fa::@4->fa::@5#0] -- register_copy - // [84] phi (byte) bc#44 = (byte) bc#108 [phi:fa::@14/fa::@4->fa::@5#1] -- register_copy + // [84] phi (byte) be#112 = (byte) be#35 [phi:fa::@14/fa::@4->fa::@5#0] -- register_copy + // [84] phi (byte) bd#100 = (byte) bd#35 [phi:fa::@14/fa::@4->fa::@5#1] -- register_copy + // [84] phi (byte) bc#44 = (byte) bc#108 [phi:fa::@14/fa::@4->fa::@5#2] -- register_copy jmp __b5 // fa::@5 __b5: @@ -3336,14 +4041,16 @@ fa: { // [88] call fb // [110] phi from fa::@15 to fb [phi:fa::@15->fb] fb_from___b15: - // [110] phi (byte) bd#106 = (byte) bd#100 [phi:fa::@15->fb#0] -- register_copy - // [110] phi (byte) bc#113 = (byte) bc#177 [phi:fa::@15->fb#1] -- register_copy + // [110] phi (byte) be#118 = (byte) be#112 [phi:fa::@15->fb#0] -- register_copy + // [110] phi (byte) bd#106 = (byte) bd#100 [phi:fa::@15->fb#1] -- register_copy + // [110] phi (byte) bc#113 = (byte) bc#177 [phi:fa::@15->fb#2] -- register_copy jsr fb // [89] phi from fa::@15 fa::@5 to fa::@6 [phi:fa::@15/fa::@5->fa::@6] __b6_from___b15: __b6_from___b5: - // [89] phi (byte) bd#101 = (byte) bd#35 [phi:fa::@15/fa::@5->fa::@6#0] -- register_copy - // [89] phi (byte) bc#45 = (byte) bc#109 [phi:fa::@15/fa::@5->fa::@6#1] -- register_copy + // [89] phi (byte) be#113 = (byte) be#35 [phi:fa::@15/fa::@5->fa::@6#0] -- register_copy + // [89] phi (byte) bd#101 = (byte) bd#35 [phi:fa::@15/fa::@5->fa::@6#1] -- register_copy + // [89] phi (byte) bc#45 = (byte) bc#109 [phi:fa::@15/fa::@5->fa::@6#2] -- register_copy jmp __b6 // fa::@6 __b6: @@ -3362,14 +4069,16 @@ fa: { // [93] call fb // [110] phi from fa::@16 to fb [phi:fa::@16->fb] fb_from___b16: - // [110] phi (byte) bd#106 = (byte) bd#101 [phi:fa::@16->fb#0] -- register_copy - // [110] phi (byte) bc#113 = (byte) bc#178 [phi:fa::@16->fb#1] -- register_copy + // [110] phi (byte) be#118 = (byte) be#113 [phi:fa::@16->fb#0] -- register_copy + // [110] phi (byte) bd#106 = (byte) bd#101 [phi:fa::@16->fb#1] -- register_copy + // [110] phi (byte) bc#113 = (byte) bc#178 [phi:fa::@16->fb#2] -- register_copy jsr fb // [94] phi from fa::@16 fa::@6 to fa::@7 [phi:fa::@16/fa::@6->fa::@7] __b7_from___b16: __b7_from___b6: - // [94] phi (byte) bd#102 = (byte) bd#35 [phi:fa::@16/fa::@6->fa::@7#0] -- register_copy - // [94] phi (byte) bc#46 = (byte) bc#110 [phi:fa::@16/fa::@6->fa::@7#1] -- register_copy + // [94] phi (byte) be#114 = (byte) be#35 [phi:fa::@16/fa::@6->fa::@7#0] -- register_copy + // [94] phi (byte) bd#102 = (byte) bd#35 [phi:fa::@16/fa::@6->fa::@7#1] -- register_copy + // [94] phi (byte) bc#46 = (byte) bc#110 [phi:fa::@16/fa::@6->fa::@7#2] -- register_copy jmp __b7 // fa::@7 __b7: @@ -3388,14 +4097,16 @@ fa: { // [98] call fb // [110] phi from fa::@17 to fb [phi:fa::@17->fb] fb_from___b17: - // [110] phi (byte) bd#106 = (byte) bd#102 [phi:fa::@17->fb#0] -- register_copy - // [110] phi (byte) bc#113 = (byte) bc#179 [phi:fa::@17->fb#1] -- register_copy + // [110] phi (byte) be#118 = (byte) be#114 [phi:fa::@17->fb#0] -- register_copy + // [110] phi (byte) bd#106 = (byte) bd#102 [phi:fa::@17->fb#1] -- register_copy + // [110] phi (byte) bc#113 = (byte) bc#179 [phi:fa::@17->fb#2] -- register_copy jsr fb // [99] phi from fa::@17 fa::@7 to fa::@8 [phi:fa::@17/fa::@7->fa::@8] __b8_from___b17: __b8_from___b7: - // [99] phi (byte) bd#103 = (byte) bd#35 [phi:fa::@17/fa::@7->fa::@8#0] -- register_copy - // [99] phi (byte) bc#47 = (byte) bc#111 [phi:fa::@17/fa::@7->fa::@8#1] -- register_copy + // [99] phi (byte) be#115 = (byte) be#35 [phi:fa::@17/fa::@7->fa::@8#0] -- register_copy + // [99] phi (byte) bd#103 = (byte) bd#35 [phi:fa::@17/fa::@7->fa::@8#1] -- register_copy + // [99] phi (byte) bc#47 = (byte) bc#111 [phi:fa::@17/fa::@7->fa::@8#2] -- register_copy jmp __b8 // fa::@8 __b8: @@ -3414,14 +4125,16 @@ fa: { // [103] call fb // [110] phi from fa::@18 to fb [phi:fa::@18->fb] fb_from___b18: - // [110] phi (byte) bd#106 = (byte) bd#103 [phi:fa::@18->fb#0] -- register_copy - // [110] phi (byte) bc#113 = (byte) bc#180 [phi:fa::@18->fb#1] -- register_copy + // [110] phi (byte) be#118 = (byte) be#115 [phi:fa::@18->fb#0] -- register_copy + // [110] phi (byte) bd#106 = (byte) bd#103 [phi:fa::@18->fb#1] -- register_copy + // [110] phi (byte) bc#113 = (byte) bc#180 [phi:fa::@18->fb#2] -- register_copy jsr fb // [104] phi from fa::@18 fa::@8 to fa::@9 [phi:fa::@18/fa::@8->fa::@9] __b9_from___b18: __b9_from___b8: - // [104] phi (byte) bd#104 = (byte) bd#35 [phi:fa::@18/fa::@8->fa::@9#0] -- register_copy - // [104] phi (byte) bc#83 = (byte) bc#112 [phi:fa::@18/fa::@8->fa::@9#1] -- register_copy + // [104] phi (byte) be#116 = (byte) be#35 [phi:fa::@18/fa::@8->fa::@9#0] -- register_copy + // [104] phi (byte) bd#104 = (byte) bd#35 [phi:fa::@18/fa::@8->fa::@9#1] -- register_copy + // [104] phi (byte) bc#83 = (byte) bc#112 [phi:fa::@18/fa::@8->fa::@9#2] -- register_copy jmp __b9 // fa::@9 __b9: @@ -3437,22 +4150,25 @@ fa: { // [107] call fb // [110] phi from fa::@19 to fb [phi:fa::@19->fb] fb_from___b19: - // [110] phi (byte) bd#106 = (byte) bd#104 [phi:fa::@19->fb#0] -- register_copy - // [110] phi (byte) bc#113 = (byte) 0 [phi:fa::@19->fb#1] -- vbuz1=vbuc1 + // [110] phi (byte) be#118 = (byte) be#116 [phi:fa::@19->fb#0] -- register_copy + // [110] phi (byte) bd#106 = (byte) bd#104 [phi:fa::@19->fb#1] -- register_copy + // [110] phi (byte) bc#113 = (byte) 0 [phi:fa::@19->fb#2] -- vbuz1=vbuc1 lda #0 sta.z bc_1 jsr fb // [108] phi from fa::@19 to fa::@return [phi:fa::@19->fa::@return] __breturn_from___b19: - // [108] phi (byte) bd#24 = (byte) bd#35 [phi:fa::@19->fa::@return#0] -- register_copy - // [108] phi (byte) bc#24 = (byte) 0 [phi:fa::@19->fa::@return#1] -- vbuz1=vbuc1 + // [108] phi (byte) be#24 = (byte) be#35 [phi:fa::@19->fa::@return#0] -- register_copy + // [108] phi (byte) bd#24 = (byte) bd#35 [phi:fa::@19->fa::@return#1] -- register_copy + // [108] phi (byte) bc#24 = (byte) 0 [phi:fa::@19->fa::@return#2] -- vbuz1=vbuc1 lda #0 sta.z bc jmp __breturn // [108] phi from fa::@9 to fa::@return [phi:fa::@9->fa::@return] __breturn_from___b9: - // [108] phi (byte) bd#24 = (byte) bd#104 [phi:fa::@9->fa::@return#0] -- register_copy - // [108] phi (byte) bc#24 = (byte) bc#83 [phi:fa::@9->fa::@return#1] -- register_copy + // [108] phi (byte) be#24 = (byte) be#116 [phi:fa::@9->fa::@return#0] -- register_copy + // [108] phi (byte) bd#24 = (byte) bd#104 [phi:fa::@9->fa::@return#1] -- register_copy + // [108] phi (byte) bc#24 = (byte) bc#83 [phi:fa::@9->fa::@return#2] -- register_copy jmp __breturn // fa::@return __breturn: @@ -3476,12 +4192,14 @@ fb: { // [114] call fc // [161] phi from fb::@10 to fc [phi:fb::@10->fc] fc_from___b10: - // [161] phi (byte) bd#117 = (byte) bd#235 [phi:fb::@10->fc#0] -- register_copy + // [161] phi (byte) be#129 = (byte) be#118 [phi:fb::@10->fc#0] -- register_copy + // [161] phi (byte) bd#117 = (byte) bd#235 [phi:fb::@10->fc#1] -- register_copy jsr fc // [115] phi from fb fb::@10 to fb::@1 [phi:fb/fb::@10->fb::@1] __b1_from_fb: __b1_from___b10: - // [115] phi (byte) bd#107 = (byte) bd#106 [phi:fb/fb::@10->fb::@1#0] -- register_copy + // [115] phi (byte) be#119 = (byte) be#118 [phi:fb/fb::@10->fb::@1#0] -- register_copy + // [115] phi (byte) bd#107 = (byte) bd#106 [phi:fb/fb::@10->fb::@1#1] -- register_copy jmp __b1 // fb::@1 __b1: @@ -3500,12 +4218,14 @@ fb: { // [119] call fc // [161] phi from fb::@11 to fc [phi:fb::@11->fc] fc_from___b11: - // [161] phi (byte) bd#117 = (byte) bd#236 [phi:fb::@11->fc#0] -- register_copy + // [161] phi (byte) be#129 = (byte) be#119 [phi:fb::@11->fc#0] -- register_copy + // [161] phi (byte) bd#117 = (byte) bd#236 [phi:fb::@11->fc#1] -- register_copy jsr fc // [120] phi from fb::@1 fb::@11 to fb::@2 [phi:fb::@1/fb::@11->fb::@2] __b2_from___b1: __b2_from___b11: - // [120] phi (byte) bd#108 = (byte) bd#107 [phi:fb::@1/fb::@11->fb::@2#0] -- register_copy + // [120] phi (byte) be#120 = (byte) be#119 [phi:fb::@1/fb::@11->fb::@2#0] -- register_copy + // [120] phi (byte) bd#108 = (byte) bd#107 [phi:fb::@1/fb::@11->fb::@2#1] -- register_copy jmp __b2 // fb::@2 __b2: @@ -3524,12 +4244,14 @@ fb: { // [124] call fc // [161] phi from fb::@12 to fc [phi:fb::@12->fc] fc_from___b12: - // [161] phi (byte) bd#117 = (byte) bd#237 [phi:fb::@12->fc#0] -- register_copy + // [161] phi (byte) be#129 = (byte) be#120 [phi:fb::@12->fc#0] -- register_copy + // [161] phi (byte) bd#117 = (byte) bd#237 [phi:fb::@12->fc#1] -- register_copy jsr fc // [125] phi from fb::@12 fb::@2 to fb::@3 [phi:fb::@12/fb::@2->fb::@3] __b3_from___b12: __b3_from___b2: - // [125] phi (byte) bd#109 = (byte) bd#148 [phi:fb::@12/fb::@2->fb::@3#0] -- register_copy + // [125] phi (byte) be#121 = (byte) be#46 [phi:fb::@12/fb::@2->fb::@3#0] -- register_copy + // [125] phi (byte) bd#109 = (byte) bd#148 [phi:fb::@12/fb::@2->fb::@3#1] -- register_copy jmp __b3 // fb::@3 __b3: @@ -3548,12 +4270,14 @@ fb: { // [129] call fc // [161] phi from fb::@13 to fc [phi:fb::@13->fc] fc_from___b13: - // [161] phi (byte) bd#117 = (byte) bd#238 [phi:fb::@13->fc#0] -- register_copy + // [161] phi (byte) be#129 = (byte) be#121 [phi:fb::@13->fc#0] -- register_copy + // [161] phi (byte) bd#117 = (byte) bd#238 [phi:fb::@13->fc#1] -- register_copy jsr fc // [130] phi from fb::@13 fb::@3 to fb::@4 [phi:fb::@13/fb::@3->fb::@4] __b4_from___b13: __b4_from___b3: - // [130] phi (byte) bd#110 = (byte) bd#149 [phi:fb::@13/fb::@3->fb::@4#0] -- register_copy + // [130] phi (byte) be#122 = (byte) be#46 [phi:fb::@13/fb::@3->fb::@4#0] -- register_copy + // [130] phi (byte) bd#110 = (byte) bd#149 [phi:fb::@13/fb::@3->fb::@4#1] -- register_copy jmp __b4 // fb::@4 __b4: @@ -3572,12 +4296,14 @@ fb: { // [134] call fc // [161] phi from fb::@14 to fc [phi:fb::@14->fc] fc_from___b14: - // [161] phi (byte) bd#117 = (byte) bd#239 [phi:fb::@14->fc#0] -- register_copy + // [161] phi (byte) be#129 = (byte) be#122 [phi:fb::@14->fc#0] -- register_copy + // [161] phi (byte) bd#117 = (byte) bd#239 [phi:fb::@14->fc#1] -- register_copy jsr fc // [135] phi from fb::@14 fb::@4 to fb::@5 [phi:fb::@14/fb::@4->fb::@5] __b5_from___b14: __b5_from___b4: - // [135] phi (byte) bd#111 = (byte) bd#150 [phi:fb::@14/fb::@4->fb::@5#0] -- register_copy + // [135] phi (byte) be#123 = (byte) be#46 [phi:fb::@14/fb::@4->fb::@5#0] -- register_copy + // [135] phi (byte) bd#111 = (byte) bd#150 [phi:fb::@14/fb::@4->fb::@5#1] -- register_copy jmp __b5 // fb::@5 __b5: @@ -3596,12 +4322,14 @@ fb: { // [139] call fc // [161] phi from fb::@15 to fc [phi:fb::@15->fc] fc_from___b15: - // [161] phi (byte) bd#117 = (byte) bd#240 [phi:fb::@15->fc#0] -- register_copy + // [161] phi (byte) be#129 = (byte) be#123 [phi:fb::@15->fc#0] -- register_copy + // [161] phi (byte) bd#117 = (byte) bd#240 [phi:fb::@15->fc#1] -- register_copy jsr fc // [140] phi from fb::@15 fb::@5 to fb::@6 [phi:fb::@15/fb::@5->fb::@6] __b6_from___b15: __b6_from___b5: - // [140] phi (byte) bd#112 = (byte) bd#151 [phi:fb::@15/fb::@5->fb::@6#0] -- register_copy + // [140] phi (byte) be#124 = (byte) be#46 [phi:fb::@15/fb::@5->fb::@6#0] -- register_copy + // [140] phi (byte) bd#112 = (byte) bd#151 [phi:fb::@15/fb::@5->fb::@6#1] -- register_copy jmp __b6 // fb::@6 __b6: @@ -3620,12 +4348,14 @@ fb: { // [144] call fc // [161] phi from fb::@16 to fc [phi:fb::@16->fc] fc_from___b16: - // [161] phi (byte) bd#117 = (byte) bd#241 [phi:fb::@16->fc#0] -- register_copy + // [161] phi (byte) be#129 = (byte) be#124 [phi:fb::@16->fc#0] -- register_copy + // [161] phi (byte) bd#117 = (byte) bd#241 [phi:fb::@16->fc#1] -- register_copy jsr fc // [145] phi from fb::@16 fb::@6 to fb::@7 [phi:fb::@16/fb::@6->fb::@7] __b7_from___b16: __b7_from___b6: - // [145] phi (byte) bd#113 = (byte) bd#152 [phi:fb::@16/fb::@6->fb::@7#0] -- register_copy + // [145] phi (byte) be#125 = (byte) be#46 [phi:fb::@16/fb::@6->fb::@7#0] -- register_copy + // [145] phi (byte) bd#113 = (byte) bd#152 [phi:fb::@16/fb::@6->fb::@7#1] -- register_copy jmp __b7 // fb::@7 __b7: @@ -3644,12 +4374,14 @@ fb: { // [149] call fc // [161] phi from fb::@17 to fc [phi:fb::@17->fc] fc_from___b17: - // [161] phi (byte) bd#117 = (byte) bd#242 [phi:fb::@17->fc#0] -- register_copy + // [161] phi (byte) be#129 = (byte) be#125 [phi:fb::@17->fc#0] -- register_copy + // [161] phi (byte) bd#117 = (byte) bd#242 [phi:fb::@17->fc#1] -- register_copy jsr fc // [150] phi from fb::@17 fb::@7 to fb::@8 [phi:fb::@17/fb::@7->fb::@8] __b8_from___b17: __b8_from___b7: - // [150] phi (byte) bd#114 = (byte) bd#153 [phi:fb::@17/fb::@7->fb::@8#0] -- register_copy + // [150] phi (byte) be#126 = (byte) be#46 [phi:fb::@17/fb::@7->fb::@8#0] -- register_copy + // [150] phi (byte) bd#114 = (byte) bd#153 [phi:fb::@17/fb::@7->fb::@8#1] -- register_copy jmp __b8 // fb::@8 __b8: @@ -3668,12 +4400,14 @@ fb: { // [154] call fc // [161] phi from fb::@18 to fc [phi:fb::@18->fc] fc_from___b18: - // [161] phi (byte) bd#117 = (byte) bd#243 [phi:fb::@18->fc#0] -- register_copy + // [161] phi (byte) be#129 = (byte) be#126 [phi:fb::@18->fc#0] -- register_copy + // [161] phi (byte) bd#117 = (byte) bd#243 [phi:fb::@18->fc#1] -- register_copy jsr fc // [155] phi from fb::@18 fb::@8 to fb::@9 [phi:fb::@18/fb::@8->fb::@9] __b9_from___b18: __b9_from___b8: - // [155] phi (byte) bd#116 = (byte) bd#154 [phi:fb::@18/fb::@8->fb::@9#0] -- register_copy + // [155] phi (byte) be#127 = (byte) be#46 [phi:fb::@18/fb::@8->fb::@9#0] -- register_copy + // [155] phi (byte) bd#116 = (byte) bd#154 [phi:fb::@18/fb::@8->fb::@9#1] -- register_copy jmp __b9 // fb::@9 __b9: @@ -3689,19 +4423,22 @@ fb: { // [158] call fc // [161] phi from fb::@19 to fc [phi:fb::@19->fc] fc_from___b19: - // [161] phi (byte) bd#117 = (byte) 0 [phi:fb::@19->fc#0] -- vbuz1=vbuc1 + // [161] phi (byte) be#129 = (byte) be#127 [phi:fb::@19->fc#0] -- register_copy + // [161] phi (byte) bd#117 = (byte) 0 [phi:fb::@19->fc#1] -- vbuz1=vbuc1 lda #0 sta.z bd_1 jsr fc // [159] phi from fb::@19 to fb::@return [phi:fb::@19->fb::@return] __breturn_from___b19: - // [159] phi (byte) bd#35 = (byte) 0 [phi:fb::@19->fb::@return#0] -- vbuz1=vbuc1 + // [159] phi (byte) be#35 = (byte) be#46 [phi:fb::@19->fb::@return#0] -- register_copy + // [159] phi (byte) bd#35 = (byte) 0 [phi:fb::@19->fb::@return#1] -- vbuz1=vbuc1 lda #0 sta.z bd jmp __breturn // [159] phi from fb::@9 to fb::@return [phi:fb::@9->fb::@return] __breturn_from___b9: - // [159] phi (byte) bd#35 = (byte) bd#116 [phi:fb::@9->fb::@return#0] -- register_copy + // [159] phi (byte) be#35 = (byte) be#127 [phi:fb::@9->fb::@return#0] -- register_copy + // [159] phi (byte) bd#35 = (byte) bd#116 [phi:fb::@9->fb::@return#1] -- register_copy jmp __breturn // fb::@return __breturn: @@ -3713,124 +4450,169 @@ fc: { // [162] if((byte) bd#117!=(byte) 0) goto fc::@1 -- vbuz1_neq_0_then_la1 lda.z bd_1 cmp #0 - bne __b1 - // [163] phi from fc to fc::@10 [phi:fc->fc::@10] - __b10_from_fc: + bne __b1_from_fc jmp __b10 // fc::@10 __b10: + // [163] (byte) be#36 ← ++ (byte) be#129 -- vbuz1=_inc_vbuz1 + inc.z be + // [164] phi from fc fc::@10 to fc::@1 [phi:fc/fc::@10->fc::@1] + __b1_from_fc: + __b1_from___b10: + // [164] phi (byte) be#130 = (byte) be#129 [phi:fc/fc::@10->fc::@1#0] -- register_copy jmp __b1 // fc::@1 __b1: - // [164] if((byte) bd#117!=(byte) 1) goto fc::@2 -- vbuz1_neq_vbuc1_then_la1 + // [165] if((byte) bd#117!=(byte) 1) goto fc::@2 -- vbuz1_neq_vbuc1_then_la1 lda #1 cmp.z bd_1 - bne __b2 - // [165] phi from fc::@1 to fc::@11 [phi:fc::@1->fc::@11] - __b11_from___b1: + bne __b2_from___b1 jmp __b11 // fc::@11 __b11: + // [166] (byte) be#37 ← ++ (byte) be#130 -- vbuz1=_inc_vbuz1 + inc.z be + // [167] phi from fc::@1 fc::@11 to fc::@2 [phi:fc::@1/fc::@11->fc::@2] + __b2_from___b1: + __b2_from___b11: + // [167] phi (byte) be#131 = (byte) be#130 [phi:fc::@1/fc::@11->fc::@2#0] -- register_copy jmp __b2 // fc::@2 __b2: - // [166] if((byte) bd#117!=(byte) 2) goto fc::@3 -- vbuz1_neq_vbuc1_then_la1 + // [168] if((byte) bd#117!=(byte) 2) goto fc::@3 -- vbuz1_neq_vbuc1_then_la1 lda #2 cmp.z bd_1 - bne __b3 - // [167] phi from fc::@2 to fc::@12 [phi:fc::@2->fc::@12] - __b12_from___b2: + bne __b3_from___b2 jmp __b12 // fc::@12 __b12: + // [169] (byte) be#38 ← ++ (byte) be#131 -- vbuz1=_inc_vbuz1 + inc.z be + // [170] phi from fc::@12 fc::@2 to fc::@3 [phi:fc::@12/fc::@2->fc::@3] + __b3_from___b12: + __b3_from___b2: + // [170] phi (byte) be#132 = (byte) be#38 [phi:fc::@12/fc::@2->fc::@3#0] -- register_copy jmp __b3 // fc::@3 __b3: - // [168] if((byte) bd#117!=(byte) 3) goto fc::@4 -- vbuz1_neq_vbuc1_then_la1 + // [171] if((byte) bd#117!=(byte) 3) goto fc::@4 -- vbuz1_neq_vbuc1_then_la1 lda #3 cmp.z bd_1 - bne __b4 - // [169] phi from fc::@3 to fc::@13 [phi:fc::@3->fc::@13] - __b13_from___b3: + bne __b4_from___b3 jmp __b13 // fc::@13 __b13: + // [172] (byte) be#39 ← ++ (byte) be#132 -- vbuz1=_inc_vbuz1 + inc.z be + // [173] phi from fc::@13 fc::@3 to fc::@4 [phi:fc::@13/fc::@3->fc::@4] + __b4_from___b13: + __b4_from___b3: + // [173] phi (byte) be#133 = (byte) be#39 [phi:fc::@13/fc::@3->fc::@4#0] -- register_copy jmp __b4 // fc::@4 __b4: - // [170] if((byte) bd#117!=(byte) 4) goto fc::@5 -- vbuz1_neq_vbuc1_then_la1 + // [174] if((byte) bd#117!=(byte) 4) goto fc::@5 -- vbuz1_neq_vbuc1_then_la1 lda #4 cmp.z bd_1 - bne __b5 - // [171] phi from fc::@4 to fc::@14 [phi:fc::@4->fc::@14] - __b14_from___b4: + bne __b5_from___b4 jmp __b14 // fc::@14 __b14: + // [175] (byte) be#40 ← ++ (byte) be#133 -- vbuz1=_inc_vbuz1 + inc.z be + // [176] phi from fc::@14 fc::@4 to fc::@5 [phi:fc::@14/fc::@4->fc::@5] + __b5_from___b14: + __b5_from___b4: + // [176] phi (byte) be#134 = (byte) be#40 [phi:fc::@14/fc::@4->fc::@5#0] -- register_copy jmp __b5 // fc::@5 __b5: - // [172] if((byte) bd#117!=(byte) 5) goto fc::@6 -- vbuz1_neq_vbuc1_then_la1 + // [177] if((byte) bd#117!=(byte) 5) goto fc::@6 -- vbuz1_neq_vbuc1_then_la1 lda #5 cmp.z bd_1 - bne __b6 - // [173] phi from fc::@5 to fc::@15 [phi:fc::@5->fc::@15] - __b15_from___b5: + bne __b6_from___b5 jmp __b15 // fc::@15 __b15: + // [178] (byte) be#41 ← ++ (byte) be#134 -- vbuz1=_inc_vbuz1 + inc.z be + // [179] phi from fc::@15 fc::@5 to fc::@6 [phi:fc::@15/fc::@5->fc::@6] + __b6_from___b15: + __b6_from___b5: + // [179] phi (byte) be#135 = (byte) be#41 [phi:fc::@15/fc::@5->fc::@6#0] -- register_copy jmp __b6 // fc::@6 __b6: - // [174] if((byte) bd#117!=(byte) 6) goto fc::@7 -- vbuz1_neq_vbuc1_then_la1 + // [180] if((byte) bd#117!=(byte) 6) goto fc::@7 -- vbuz1_neq_vbuc1_then_la1 lda #6 cmp.z bd_1 - bne __b7 - // [175] phi from fc::@6 to fc::@16 [phi:fc::@6->fc::@16] - __b16_from___b6: + bne __b7_from___b6 jmp __b16 // fc::@16 __b16: + // [181] (byte) be#42 ← ++ (byte) be#135 -- vbuz1=_inc_vbuz1 + inc.z be + // [182] phi from fc::@16 fc::@6 to fc::@7 [phi:fc::@16/fc::@6->fc::@7] + __b7_from___b16: + __b7_from___b6: + // [182] phi (byte) be#136 = (byte) be#42 [phi:fc::@16/fc::@6->fc::@7#0] -- register_copy jmp __b7 // fc::@7 __b7: - // [176] if((byte) bd#117!=(byte) 7) goto fc::@8 -- vbuz1_neq_vbuc1_then_la1 + // [183] if((byte) bd#117!=(byte) 7) goto fc::@8 -- vbuz1_neq_vbuc1_then_la1 lda #7 cmp.z bd_1 - bne __b8 - // [177] phi from fc::@7 to fc::@17 [phi:fc::@7->fc::@17] - __b17_from___b7: + bne __b8_from___b7 jmp __b17 // fc::@17 __b17: + // [184] (byte) be#43 ← ++ (byte) be#136 -- vbuz1=_inc_vbuz1 + inc.z be + // [185] phi from fc::@17 fc::@7 to fc::@8 [phi:fc::@17/fc::@7->fc::@8] + __b8_from___b17: + __b8_from___b7: + // [185] phi (byte) be#137 = (byte) be#43 [phi:fc::@17/fc::@7->fc::@8#0] -- register_copy jmp __b8 // fc::@8 __b8: - // [178] if((byte) bd#117!=(byte) 8) goto fc::@9 -- vbuz1_neq_vbuc1_then_la1 + // [186] if((byte) bd#117!=(byte) 8) goto fc::@9 -- vbuz1_neq_vbuc1_then_la1 lda #8 cmp.z bd_1 - bne __b9 - // [179] phi from fc::@8 to fc::@18 [phi:fc::@8->fc::@18] - __b18_from___b8: + bne __b9_from___b8 jmp __b18 // fc::@18 __b18: + // [187] (byte) be#44 ← ++ (byte) be#137 -- vbuz1=_inc_vbuz1 + inc.z be + // [188] phi from fc::@18 fc::@8 to fc::@9 [phi:fc::@18/fc::@8->fc::@9] + __b9_from___b18: + __b9_from___b8: + // [188] phi (byte) be#138 = (byte) be#44 [phi:fc::@18/fc::@8->fc::@9#0] -- register_copy jmp __b9 // fc::@9 __b9: - // [180] if((byte) bd#117!=(byte) 9) goto fc::@return -- vbuz1_neq_vbuc1_then_la1 + // [189] if((byte) bd#117!=(byte) 9) goto fc::@19 -- vbuz1_neq_vbuc1_then_la1 lda #9 cmp.z bd_1 - bne __breturn - // [181] phi from fc::@9 to fc::@19 [phi:fc::@9->fc::@19] + bne __b19_from___b9 + // [191] phi from fc::@9 to fc::@return [phi:fc::@9->fc::@return] + __breturn_from___b9: + // [191] phi (byte) be#46 = (byte) 0 [phi:fc::@9->fc::@return#0] -- vbuz1=vbuc1 + lda #0 + sta.z be + jmp __breturn + // [190] phi from fc::@9 to fc::@19 [phi:fc::@9->fc::@19] __b19_from___b9: jmp __b19 // fc::@19 __b19: + // [191] phi from fc::@19 to fc::@return [phi:fc::@19->fc::@return] + __breturn_from___b19: + // [191] phi (byte) be#46 = (byte) be#138 [phi:fc::@19->fc::@return#0] -- register_copy jmp __breturn // fc::@return __breturn: - // [182] return + // [192] return rts } // File Data @@ -3843,31 +4625,37 @@ Potential registers zp[1]:5 [ bc#83 bc#112 bc#47 bc#111 bc#46 bc#110 bc#45 bc#10 Potential registers zp[1]:6 [ bc#113 bc#172 bc#173 bc#174 bc#175 bc#176 bc#177 bc#178 bc#179 bc#180 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:7 [ bd#116 bd#154 bd#114 bd#153 bd#113 bd#152 bd#112 bd#151 bd#111 bd#150 bd#110 bd#149 bd#109 bd#108 bd#107 bd#106 bd#104 bd#103 bd#102 bd#101 bd#100 bd#141 bd#140 bd#139 bd#138 bd#137 bd#93 bd#136 bd#135 bd#134 bd#133 bd#132 bd#131 bd#130 bd#129 bd#2 bd#13 bd#24 bd#35 bd#146 bd#147 bd#148 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:8 [ bd#117 bd#235 bd#236 bd#237 bd#238 bd#239 bd#240 bd#241 bd#242 bd#243 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:9 [ be#138 be#44 be#137 be#43 be#136 be#42 be#135 be#41 be#134 be#40 be#133 be#39 be#132 be#38 be#131 be#130 be#129 be#127 be#126 be#125 be#124 be#123 be#122 be#121 be#120 be#119 be#118 be#116 be#115 be#114 be#113 be#112 be#111 be#110 be#109 be#108 be#107 be#105 be#104 be#103 be#102 be#101 be#100 be#144 be#143 be#142 be#2 be#13 be#24 be#35 be#46 be#36 be#37 ] : zp[1]:9 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [] 118.92: zp[1]:7 [ bd#116 bd#154 bd#114 bd#153 bd#113 bd#152 bd#112 bd#151 bd#111 bd#150 bd#110 bd#149 bd#109 bd#108 bd#107 bd#106 bd#104 bd#103 bd#102 bd#101 bd#100 bd#141 bd#140 bd#139 bd#138 bd#137 bd#93 bd#136 bd#135 bd#134 bd#133 bd#132 bd#131 bd#130 bd#129 bd#2 bd#13 bd#24 bd#35 bd#146 bd#147 bd#148 ] 92.25: zp[1]:5 [ bc#83 bc#112 bc#47 bc#111 bc#46 bc#110 bc#45 bc#109 bc#44 bc#108 bc#43 bc#107 bc#42 bc#41 bc#40 bc#39 bc#71 bc#103 bc#102 bc#101 bc#100 bc#66 bc#65 bc#64 bc#63 bc#2 bc#13 bc#24 bc#104 bc#105 bc#106 ] 61.25: zp[1]:3 [ bb#50 bb#11 bb#25 bb#10 bb#24 bb#68 bb#23 bb#67 bb#22 bb#66 bb#21 bb#6 bb#20 bb#19 bb#18 bb#16 bb#13 bb#3 bb#4 bb#5 ] 38: zp[1]:8 [ bd#117 bd#235 bd#236 bd#237 bd#238 bd#239 bd#240 bd#241 bd#242 bd#243 ] 36.83: zp[1]:4 [ bb#27 bb#100 bb#101 bb#102 bb#103 bb#104 bb#105 bb#106 bb#107 bb#108 ] 36.83: zp[1]:6 [ bc#113 bc#172 bc#173 bc#174 bc#175 bc#176 bc#177 bc#178 bc#179 bc#180 ] 22.79: zp[1]:2 [ ba#17 ba#1 ] +Uplift Scope [] 162.58: zp[1]:9 [ be#138 be#44 be#137 be#43 be#136 be#42 be#135 be#41 be#134 be#40 be#133 be#39 be#132 be#38 be#131 be#130 be#129 be#127 be#126 be#125 be#124 be#123 be#122 be#121 be#120 be#119 be#118 be#116 be#115 be#114 be#113 be#112 be#111 be#110 be#109 be#108 be#107 be#105 be#104 be#103 be#102 be#101 be#100 be#144 be#143 be#142 be#2 be#13 be#24 be#35 be#46 be#36 be#37 ] 118.92: zp[1]:7 [ bd#116 bd#154 bd#114 bd#153 bd#113 bd#152 bd#112 bd#151 bd#111 bd#150 bd#110 bd#149 bd#109 bd#108 bd#107 bd#106 bd#104 bd#103 bd#102 bd#101 bd#100 bd#141 bd#140 bd#139 bd#138 bd#137 bd#93 bd#136 bd#135 bd#134 bd#133 bd#132 bd#131 bd#130 bd#129 bd#2 bd#13 bd#24 bd#35 bd#146 bd#147 bd#148 ] 92.25: zp[1]:5 [ bc#83 bc#112 bc#47 bc#111 bc#46 bc#110 bc#45 bc#109 bc#44 bc#108 bc#43 bc#107 bc#42 bc#41 bc#40 bc#39 bc#71 bc#103 bc#102 bc#101 bc#100 bc#66 bc#65 bc#64 bc#63 bc#2 bc#13 bc#24 bc#104 bc#105 bc#106 ] 61.25: zp[1]:3 [ bb#50 bb#11 bb#25 bb#10 bb#24 bb#68 bb#23 bb#67 bb#22 bb#66 bb#21 bb#6 bb#20 bb#19 bb#18 bb#16 bb#13 bb#3 bb#4 bb#5 ] 37.36: zp[1]:8 [ bd#117 bd#235 bd#236 bd#237 bd#238 bd#239 bd#240 bd#241 bd#242 bd#243 ] 36.83: zp[1]:4 [ bb#27 bb#100 bb#101 bb#102 bb#103 bb#104 bb#105 bb#106 bb#107 bb#108 ] 36.83: zp[1]:6 [ bc#113 bc#172 bc#173 bc#174 bc#175 bc#176 bc#177 bc#178 bc#179 bc#180 ] 22.79: zp[1]:2 [ ba#17 ba#1 ] Uplift Scope [main] Uplift Scope [f0] Uplift Scope [fa] Uplift Scope [fb] Uplift Scope [fc] -Uplifting [] best 1556 combination reg byte y [ bd#116 bd#154 bd#114 bd#153 bd#113 bd#152 bd#112 bd#151 bd#111 bd#150 bd#110 bd#149 bd#109 bd#108 bd#107 bd#106 bd#104 bd#103 bd#102 bd#101 bd#100 bd#141 bd#140 bd#139 bd#138 bd#137 bd#93 bd#136 bd#135 bd#134 bd#133 bd#132 bd#131 bd#130 bd#129 bd#2 bd#13 bd#24 bd#35 bd#146 bd#147 bd#148 ] reg byte x [ bc#83 bc#112 bc#47 bc#111 bc#46 bc#110 bc#45 bc#109 bc#44 bc#108 bc#43 bc#107 bc#42 bc#41 bc#40 bc#39 bc#71 bc#103 bc#102 bc#101 bc#100 bc#66 bc#65 bc#64 bc#63 bc#2 bc#13 bc#24 bc#104 bc#105 bc#106 ] zp[1]:3 [ bb#50 bb#11 bb#25 bb#10 bb#24 bb#68 bb#23 bb#67 bb#22 bb#66 bb#21 bb#6 bb#20 bb#19 bb#18 bb#16 bb#13 bb#3 bb#4 bb#5 ] reg byte a [ bd#117 bd#235 bd#236 bd#237 bd#238 bd#239 bd#240 bd#241 bd#242 bd#243 ] zp[1]:4 [ bb#27 bb#100 bb#101 bb#102 bb#103 bb#104 bb#105 bb#106 bb#107 bb#108 ] zp[1]:6 [ bc#113 bc#172 bc#173 bc#174 bc#175 bc#176 bc#177 bc#178 bc#179 bc#180 ] zp[1]:2 [ ba#17 ba#1 ] -Limited combination testing to 100 combinations of 16384 possible. -Uplifting [main] best 1556 combination -Uplifting [f0] best 1556 combination -Uplifting [fa] best 1556 combination -Uplifting [fb] best 1556 combination -Uplifting [fc] best 1556 combination +Uplifting [] best 1431 combination zp[1]:9 [ be#138 be#44 be#137 be#43 be#136 be#42 be#135 be#41 be#134 be#40 be#133 be#39 be#132 be#38 be#131 be#130 be#129 be#127 be#126 be#125 be#124 be#123 be#122 be#121 be#120 be#119 be#118 be#116 be#115 be#114 be#113 be#112 be#111 be#110 be#109 be#108 be#107 be#105 be#104 be#103 be#102 be#101 be#100 be#144 be#143 be#142 be#2 be#13 be#24 be#35 be#46 be#36 be#37 ] reg byte y [ bd#116 bd#154 bd#114 bd#153 bd#113 bd#152 bd#112 bd#151 bd#111 bd#150 bd#110 bd#149 bd#109 bd#108 bd#107 bd#106 bd#104 bd#103 bd#102 bd#101 bd#100 bd#141 bd#140 bd#139 bd#138 bd#137 bd#93 bd#136 bd#135 bd#134 bd#133 bd#132 bd#131 bd#130 bd#129 bd#2 bd#13 bd#24 bd#35 bd#146 bd#147 bd#148 ] reg byte x [ bc#83 bc#112 bc#47 bc#111 bc#46 bc#110 bc#45 bc#109 bc#44 bc#108 bc#43 bc#107 bc#42 bc#41 bc#40 bc#39 bc#71 bc#103 bc#102 bc#101 bc#100 bc#66 bc#65 bc#64 bc#63 bc#2 bc#13 bc#24 bc#104 bc#105 bc#106 ] zp[1]:3 [ bb#50 bb#11 bb#25 bb#10 bb#24 bb#68 bb#23 bb#67 bb#22 bb#66 bb#21 bb#6 bb#20 bb#19 bb#18 bb#16 bb#13 bb#3 bb#4 bb#5 ] zp[1]:8 [ bd#117 bd#235 bd#236 bd#237 bd#238 bd#239 bd#240 bd#241 bd#242 bd#243 ] zp[1]:4 [ bb#27 bb#100 bb#101 bb#102 bb#103 bb#104 bb#105 bb#106 bb#107 bb#108 ] zp[1]:6 [ bc#113 bc#172 bc#173 bc#174 bc#175 bc#176 bc#177 bc#178 bc#179 bc#180 ] zp[1]:2 [ ba#17 ba#1 ] +Limited combination testing to 100 combinations of 65536 possible. +Uplifting [main] best 1431 combination +Uplifting [f0] best 1431 combination +Uplifting [fa] best 1431 combination +Uplifting [fb] best 1431 combination +Uplifting [fc] best 1431 combination +Attempting to uplift remaining variables inzp[1]:9 [ be#138 be#44 be#137 be#43 be#136 be#42 be#135 be#41 be#134 be#40 be#133 be#39 be#132 be#38 be#131 be#130 be#129 be#127 be#126 be#125 be#124 be#123 be#122 be#121 be#120 be#119 be#118 be#116 be#115 be#114 be#113 be#112 be#111 be#110 be#109 be#108 be#107 be#105 be#104 be#103 be#102 be#101 be#100 be#144 be#143 be#142 be#2 be#13 be#24 be#35 be#46 be#36 be#37 ] +Uplifting [] best 1431 combination zp[1]:9 [ be#138 be#44 be#137 be#43 be#136 be#42 be#135 be#41 be#134 be#40 be#133 be#39 be#132 be#38 be#131 be#130 be#129 be#127 be#126 be#125 be#124 be#123 be#122 be#121 be#120 be#119 be#118 be#116 be#115 be#114 be#113 be#112 be#111 be#110 be#109 be#108 be#107 be#105 be#104 be#103 be#102 be#101 be#100 be#144 be#143 be#142 be#2 be#13 be#24 be#35 be#46 be#36 be#37 ] Attempting to uplift remaining variables inzp[1]:3 [ bb#50 bb#11 bb#25 bb#10 bb#24 bb#68 bb#23 bb#67 bb#22 bb#66 bb#21 bb#6 bb#20 bb#19 bb#18 bb#16 bb#13 bb#3 bb#4 bb#5 ] -Uplifting [] best 1556 combination zp[1]:3 [ bb#50 bb#11 bb#25 bb#10 bb#24 bb#68 bb#23 bb#67 bb#22 bb#66 bb#21 bb#6 bb#20 bb#19 bb#18 bb#16 bb#13 bb#3 bb#4 bb#5 ] +Uplifting [] best 1431 combination zp[1]:3 [ bb#50 bb#11 bb#25 bb#10 bb#24 bb#68 bb#23 bb#67 bb#22 bb#66 bb#21 bb#6 bb#20 bb#19 bb#18 bb#16 bb#13 bb#3 bb#4 bb#5 ] +Attempting to uplift remaining variables inzp[1]:8 [ bd#117 bd#235 bd#236 bd#237 bd#238 bd#239 bd#240 bd#241 bd#242 bd#243 ] +Uplifting [] best 1389 combination reg byte a [ bd#117 bd#235 bd#236 bd#237 bd#238 bd#239 bd#240 bd#241 bd#242 bd#243 ] Attempting to uplift remaining variables inzp[1]:4 [ bb#27 bb#100 bb#101 bb#102 bb#103 bb#104 bb#105 bb#106 bb#107 bb#108 ] -Uplifting [] best 1556 combination zp[1]:4 [ bb#27 bb#100 bb#101 bb#102 bb#103 bb#104 bb#105 bb#106 bb#107 bb#108 ] +Uplifting [] best 1389 combination zp[1]:4 [ bb#27 bb#100 bb#101 bb#102 bb#103 bb#104 bb#105 bb#106 bb#107 bb#108 ] Attempting to uplift remaining variables inzp[1]:6 [ bc#113 bc#172 bc#173 bc#174 bc#175 bc#176 bc#177 bc#178 bc#179 bc#180 ] -Uplifting [] best 1556 combination zp[1]:6 [ bc#113 bc#172 bc#173 bc#174 bc#175 bc#176 bc#177 bc#178 bc#179 bc#180 ] +Uplifting [] best 1389 combination zp[1]:6 [ bc#113 bc#172 bc#173 bc#174 bc#175 bc#176 bc#177 bc#178 bc#179 bc#180 ] Attempting to uplift remaining variables inzp[1]:2 [ ba#17 ba#1 ] -Uplifting [] best 1556 combination zp[1]:2 [ ba#17 ba#1 ] +Uplifting [] best 1389 combination zp[1]:2 [ ba#17 ba#1 ] Allocated (was zp[1]:6) zp[1]:5 [ bc#113 bc#172 bc#173 bc#174 bc#175 bc#176 bc#177 bc#178 bc#179 bc#180 ] +Allocated (was zp[1]:9) zp[1]:6 [ be#138 be#44 be#137 be#43 be#136 be#42 be#135 be#41 be#134 be#40 be#133 be#39 be#132 be#38 be#131 be#130 be#129 be#127 be#126 be#125 be#124 be#123 be#122 be#121 be#120 be#119 be#118 be#116 be#115 be#114 be#113 be#112 be#111 be#110 be#109 be#108 be#107 be#105 be#104 be#103 be#102 be#101 be#100 be#144 be#143 be#142 be#2 be#13 be#24 be#35 be#46 be#36 be#37 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -3877,6 +4665,7 @@ ASSEMBLER BEFORE OPTIMIZATION .pc = $80d "Program" // Global Constants & labels .label ba = 2 + .label be = 6 .label bb = 3 .label bb_1 = 4 .label bc = 5 @@ -3903,11 +4692,14 @@ main: { // [5] phi (byte) ba#17 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 lda #0 sta.z ba - // [5] phi (byte) bd#2 = (byte) 0 [phi:main->main::@1#1] -- vbuyy=vbuc1 + // [5] phi (byte) be#2 = (byte) 0 [phi:main->main::@1#1] -- vbuz1=vbuc1 + lda #0 + sta.z be + // [5] phi (byte) bd#2 = (byte) 0 [phi:main->main::@1#2] -- vbuyy=vbuc1 ldy #0 - // [5] phi (byte) bc#2 = (byte) 0 [phi:main->main::@1#2] -- vbuxx=vbuc1 + // [5] phi (byte) bc#2 = (byte) 0 [phi:main->main::@1#3] -- vbuxx=vbuc1 ldx #0 - // [5] phi (byte) bb#16 = (byte) 0 [phi:main->main::@1#3] -- vbuz1=vbuc1 + // [5] phi (byte) bb#16 = (byte) 0 [phi:main->main::@1#4] -- vbuz1=vbuc1 lda #0 sta.z bb jmp __b1 @@ -3928,9 +4720,10 @@ main: { // [5] phi from main::@3 to main::@1 [phi:main::@3->main::@1] __b1_from___b3: // [5] phi (byte) ba#17 = (byte) ba#1 [phi:main::@3->main::@1#0] -- register_copy - // [5] phi (byte) bd#2 = (byte) bd#13 [phi:main::@3->main::@1#1] -- register_copy - // [5] phi (byte) bc#2 = (byte) bc#13 [phi:main::@3->main::@1#2] -- register_copy - // [5] phi (byte) bb#16 = (byte) bb#13 [phi:main::@3->main::@1#3] -- register_copy + // [5] phi (byte) be#2 = (byte) be#13 [phi:main::@3->main::@1#1] -- register_copy + // [5] phi (byte) bd#2 = (byte) bd#13 [phi:main::@3->main::@1#2] -- register_copy + // [5] phi (byte) bc#2 = (byte) bc#13 [phi:main::@3->main::@1#3] -- register_copy + // [5] phi (byte) bb#16 = (byte) bb#13 [phi:main::@3->main::@1#4] -- register_copy jmp __b1 } // f0 @@ -3950,16 +4743,18 @@ f0: { // [12] call fa // [59] phi from f0::@10 to fa [phi:f0::@10->fa] fa_from___b10: - // [59] phi (byte) bd#137 = (byte) bd#2 [phi:f0::@10->fa#0] -- register_copy - // [59] phi (byte) bc#39 = (byte) bc#2 [phi:f0::@10->fa#1] -- register_copy - // [59] phi (byte) bb#27 = (byte) bb#100 [phi:f0::@10->fa#2] -- register_copy + // [59] phi (byte) be#107 = (byte) be#2 [phi:f0::@10->fa#0] -- register_copy + // [59] phi (byte) bd#137 = (byte) bd#2 [phi:f0::@10->fa#1] -- register_copy + // [59] phi (byte) bc#39 = (byte) bc#2 [phi:f0::@10->fa#2] -- register_copy + // [59] phi (byte) bb#27 = (byte) bb#100 [phi:f0::@10->fa#3] -- register_copy jsr fa // [13] phi from f0 f0::@10 to f0::@1 [phi:f0/f0::@10->f0::@1] __b1_from_f0: __b1_from___b10: - // [13] phi (byte) bd#129 = (byte) bd#2 [phi:f0/f0::@10->f0::@1#0] -- register_copy - // [13] phi (byte) bc#63 = (byte) bc#2 [phi:f0/f0::@10->f0::@1#1] -- register_copy - // [13] phi (byte) bb#18 = (byte) bb#16 [phi:f0/f0::@10->f0::@1#2] -- register_copy + // [13] phi (byte) be#142 = (byte) be#2 [phi:f0/f0::@10->f0::@1#0] -- register_copy + // [13] phi (byte) bd#129 = (byte) bd#2 [phi:f0/f0::@10->f0::@1#1] -- register_copy + // [13] phi (byte) bc#63 = (byte) bc#2 [phi:f0/f0::@10->f0::@1#2] -- register_copy + // [13] phi (byte) bb#18 = (byte) bb#16 [phi:f0/f0::@10->f0::@1#3] -- register_copy jmp __b1 // f0::@1 __b1: @@ -3978,16 +4773,18 @@ f0: { // [17] call fa // [59] phi from f0::@11 to fa [phi:f0::@11->fa] fa_from___b11: - // [59] phi (byte) bd#137 = (byte) bd#129 [phi:f0::@11->fa#0] -- register_copy - // [59] phi (byte) bc#39 = (byte) bc#63 [phi:f0::@11->fa#1] -- register_copy - // [59] phi (byte) bb#27 = (byte) bb#101 [phi:f0::@11->fa#2] -- register_copy + // [59] phi (byte) be#107 = (byte) be#142 [phi:f0::@11->fa#0] -- register_copy + // [59] phi (byte) bd#137 = (byte) bd#129 [phi:f0::@11->fa#1] -- register_copy + // [59] phi (byte) bc#39 = (byte) bc#63 [phi:f0::@11->fa#2] -- register_copy + // [59] phi (byte) bb#27 = (byte) bb#101 [phi:f0::@11->fa#3] -- register_copy jsr fa // [18] phi from f0::@1 f0::@11 to f0::@2 [phi:f0::@1/f0::@11->f0::@2] __b2_from___b1: __b2_from___b11: - // [18] phi (byte) bd#130 = (byte) bd#129 [phi:f0::@1/f0::@11->f0::@2#0] -- register_copy - // [18] phi (byte) bc#64 = (byte) bc#63 [phi:f0::@1/f0::@11->f0::@2#1] -- register_copy - // [18] phi (byte) bb#19 = (byte) bb#18 [phi:f0::@1/f0::@11->f0::@2#2] -- register_copy + // [18] phi (byte) be#143 = (byte) be#142 [phi:f0::@1/f0::@11->f0::@2#0] -- register_copy + // [18] phi (byte) bd#130 = (byte) bd#129 [phi:f0::@1/f0::@11->f0::@2#1] -- register_copy + // [18] phi (byte) bc#64 = (byte) bc#63 [phi:f0::@1/f0::@11->f0::@2#2] -- register_copy + // [18] phi (byte) bb#19 = (byte) bb#18 [phi:f0::@1/f0::@11->f0::@2#3] -- register_copy jmp __b2 // f0::@2 __b2: @@ -4006,16 +4803,18 @@ f0: { // [22] call fa // [59] phi from f0::@12 to fa [phi:f0::@12->fa] fa_from___b12: - // [59] phi (byte) bd#137 = (byte) bd#130 [phi:f0::@12->fa#0] -- register_copy - // [59] phi (byte) bc#39 = (byte) bc#64 [phi:f0::@12->fa#1] -- register_copy - // [59] phi (byte) bb#27 = (byte) bb#102 [phi:f0::@12->fa#2] -- register_copy + // [59] phi (byte) be#107 = (byte) be#143 [phi:f0::@12->fa#0] -- register_copy + // [59] phi (byte) bd#137 = (byte) bd#130 [phi:f0::@12->fa#1] -- register_copy + // [59] phi (byte) bc#39 = (byte) bc#64 [phi:f0::@12->fa#2] -- register_copy + // [59] phi (byte) bb#27 = (byte) bb#102 [phi:f0::@12->fa#3] -- register_copy jsr fa // [23] phi from f0::@12 f0::@2 to f0::@3 [phi:f0::@12/f0::@2->f0::@3] __b3_from___b12: __b3_from___b2: - // [23] phi (byte) bd#131 = (byte) bd#24 [phi:f0::@12/f0::@2->f0::@3#0] -- register_copy - // [23] phi (byte) bc#65 = (byte) bc#24 [phi:f0::@12/f0::@2->f0::@3#1] -- register_copy - // [23] phi (byte) bb#20 = (byte) bb#5 [phi:f0::@12/f0::@2->f0::@3#2] -- register_copy + // [23] phi (byte) be#144 = (byte) be#24 [phi:f0::@12/f0::@2->f0::@3#0] -- register_copy + // [23] phi (byte) bd#131 = (byte) bd#24 [phi:f0::@12/f0::@2->f0::@3#1] -- register_copy + // [23] phi (byte) bc#65 = (byte) bc#24 [phi:f0::@12/f0::@2->f0::@3#2] -- register_copy + // [23] phi (byte) bb#20 = (byte) bb#5 [phi:f0::@12/f0::@2->f0::@3#3] -- register_copy jmp __b3 // f0::@3 __b3: @@ -4034,16 +4833,18 @@ f0: { // [27] call fa // [59] phi from f0::@13 to fa [phi:f0::@13->fa] fa_from___b13: - // [59] phi (byte) bd#137 = (byte) bd#131 [phi:f0::@13->fa#0] -- register_copy - // [59] phi (byte) bc#39 = (byte) bc#65 [phi:f0::@13->fa#1] -- register_copy - // [59] phi (byte) bb#27 = (byte) bb#103 [phi:f0::@13->fa#2] -- register_copy + // [59] phi (byte) be#107 = (byte) be#144 [phi:f0::@13->fa#0] -- register_copy + // [59] phi (byte) bd#137 = (byte) bd#131 [phi:f0::@13->fa#1] -- register_copy + // [59] phi (byte) bc#39 = (byte) bc#65 [phi:f0::@13->fa#2] -- register_copy + // [59] phi (byte) bb#27 = (byte) bb#103 [phi:f0::@13->fa#3] -- register_copy jsr fa // [28] phi from f0::@13 f0::@3 to f0::@4 [phi:f0::@13/f0::@3->f0::@4] __b4_from___b13: __b4_from___b3: - // [28] phi (byte) bd#132 = (byte) bd#24 [phi:f0::@13/f0::@3->f0::@4#0] -- register_copy - // [28] phi (byte) bc#66 = (byte) bc#24 [phi:f0::@13/f0::@3->f0::@4#1] -- register_copy - // [28] phi (byte) bb#21 = (byte) bb#6 [phi:f0::@13/f0::@3->f0::@4#2] -- register_copy + // [28] phi (byte) be#100 = (byte) be#24 [phi:f0::@13/f0::@3->f0::@4#0] -- register_copy + // [28] phi (byte) bd#132 = (byte) bd#24 [phi:f0::@13/f0::@3->f0::@4#1] -- register_copy + // [28] phi (byte) bc#66 = (byte) bc#24 [phi:f0::@13/f0::@3->f0::@4#2] -- register_copy + // [28] phi (byte) bb#21 = (byte) bb#6 [phi:f0::@13/f0::@3->f0::@4#3] -- register_copy jmp __b4 // f0::@4 __b4: @@ -4062,16 +4863,18 @@ f0: { // [32] call fa // [59] phi from f0::@14 to fa [phi:f0::@14->fa] fa_from___b14: - // [59] phi (byte) bd#137 = (byte) bd#132 [phi:f0::@14->fa#0] -- register_copy - // [59] phi (byte) bc#39 = (byte) bc#66 [phi:f0::@14->fa#1] -- register_copy - // [59] phi (byte) bb#27 = (byte) bb#104 [phi:f0::@14->fa#2] -- register_copy + // [59] phi (byte) be#107 = (byte) be#100 [phi:f0::@14->fa#0] -- register_copy + // [59] phi (byte) bd#137 = (byte) bd#132 [phi:f0::@14->fa#1] -- register_copy + // [59] phi (byte) bc#39 = (byte) bc#66 [phi:f0::@14->fa#2] -- register_copy + // [59] phi (byte) bb#27 = (byte) bb#104 [phi:f0::@14->fa#3] -- register_copy jsr fa // [33] phi from f0::@14 f0::@4 to f0::@5 [phi:f0::@14/f0::@4->f0::@5] __b5_from___b14: __b5_from___b4: - // [33] phi (byte) bd#133 = (byte) bd#24 [phi:f0::@14/f0::@4->f0::@5#0] -- register_copy - // [33] phi (byte) bc#100 = (byte) bc#24 [phi:f0::@14/f0::@4->f0::@5#1] -- register_copy - // [33] phi (byte) bb#22 = (byte) bb#66 [phi:f0::@14/f0::@4->f0::@5#2] -- register_copy + // [33] phi (byte) be#101 = (byte) be#24 [phi:f0::@14/f0::@4->f0::@5#0] -- register_copy + // [33] phi (byte) bd#133 = (byte) bd#24 [phi:f0::@14/f0::@4->f0::@5#1] -- register_copy + // [33] phi (byte) bc#100 = (byte) bc#24 [phi:f0::@14/f0::@4->f0::@5#2] -- register_copy + // [33] phi (byte) bb#22 = (byte) bb#66 [phi:f0::@14/f0::@4->f0::@5#3] -- register_copy jmp __b5 // f0::@5 __b5: @@ -4090,16 +4893,18 @@ f0: { // [37] call fa // [59] phi from f0::@15 to fa [phi:f0::@15->fa] fa_from___b15: - // [59] phi (byte) bd#137 = (byte) bd#133 [phi:f0::@15->fa#0] -- register_copy - // [59] phi (byte) bc#39 = (byte) bc#100 [phi:f0::@15->fa#1] -- register_copy - // [59] phi (byte) bb#27 = (byte) bb#105 [phi:f0::@15->fa#2] -- register_copy + // [59] phi (byte) be#107 = (byte) be#101 [phi:f0::@15->fa#0] -- register_copy + // [59] phi (byte) bd#137 = (byte) bd#133 [phi:f0::@15->fa#1] -- register_copy + // [59] phi (byte) bc#39 = (byte) bc#100 [phi:f0::@15->fa#2] -- register_copy + // [59] phi (byte) bb#27 = (byte) bb#105 [phi:f0::@15->fa#3] -- register_copy jsr fa // [38] phi from f0::@15 f0::@5 to f0::@6 [phi:f0::@15/f0::@5->f0::@6] __b6_from___b15: __b6_from___b5: - // [38] phi (byte) bd#134 = (byte) bd#24 [phi:f0::@15/f0::@5->f0::@6#0] -- register_copy - // [38] phi (byte) bc#101 = (byte) bc#24 [phi:f0::@15/f0::@5->f0::@6#1] -- register_copy - // [38] phi (byte) bb#23 = (byte) bb#67 [phi:f0::@15/f0::@5->f0::@6#2] -- register_copy + // [38] phi (byte) be#102 = (byte) be#24 [phi:f0::@15/f0::@5->f0::@6#0] -- register_copy + // [38] phi (byte) bd#134 = (byte) bd#24 [phi:f0::@15/f0::@5->f0::@6#1] -- register_copy + // [38] phi (byte) bc#101 = (byte) bc#24 [phi:f0::@15/f0::@5->f0::@6#2] -- register_copy + // [38] phi (byte) bb#23 = (byte) bb#67 [phi:f0::@15/f0::@5->f0::@6#3] -- register_copy jmp __b6 // f0::@6 __b6: @@ -4118,16 +4923,18 @@ f0: { // [42] call fa // [59] phi from f0::@16 to fa [phi:f0::@16->fa] fa_from___b16: - // [59] phi (byte) bd#137 = (byte) bd#134 [phi:f0::@16->fa#0] -- register_copy - // [59] phi (byte) bc#39 = (byte) bc#101 [phi:f0::@16->fa#1] -- register_copy - // [59] phi (byte) bb#27 = (byte) bb#106 [phi:f0::@16->fa#2] -- register_copy + // [59] phi (byte) be#107 = (byte) be#102 [phi:f0::@16->fa#0] -- register_copy + // [59] phi (byte) bd#137 = (byte) bd#134 [phi:f0::@16->fa#1] -- register_copy + // [59] phi (byte) bc#39 = (byte) bc#101 [phi:f0::@16->fa#2] -- register_copy + // [59] phi (byte) bb#27 = (byte) bb#106 [phi:f0::@16->fa#3] -- register_copy jsr fa // [43] phi from f0::@16 f0::@6 to f0::@7 [phi:f0::@16/f0::@6->f0::@7] __b7_from___b16: __b7_from___b6: - // [43] phi (byte) bd#135 = (byte) bd#24 [phi:f0::@16/f0::@6->f0::@7#0] -- register_copy - // [43] phi (byte) bc#102 = (byte) bc#24 [phi:f0::@16/f0::@6->f0::@7#1] -- register_copy - // [43] phi (byte) bb#24 = (byte) bb#68 [phi:f0::@16/f0::@6->f0::@7#2] -- register_copy + // [43] phi (byte) be#103 = (byte) be#24 [phi:f0::@16/f0::@6->f0::@7#0] -- register_copy + // [43] phi (byte) bd#135 = (byte) bd#24 [phi:f0::@16/f0::@6->f0::@7#1] -- register_copy + // [43] phi (byte) bc#102 = (byte) bc#24 [phi:f0::@16/f0::@6->f0::@7#2] -- register_copy + // [43] phi (byte) bb#24 = (byte) bb#68 [phi:f0::@16/f0::@6->f0::@7#3] -- register_copy jmp __b7 // f0::@7 __b7: @@ -4146,16 +4953,18 @@ f0: { // [47] call fa // [59] phi from f0::@17 to fa [phi:f0::@17->fa] fa_from___b17: - // [59] phi (byte) bd#137 = (byte) bd#135 [phi:f0::@17->fa#0] -- register_copy - // [59] phi (byte) bc#39 = (byte) bc#102 [phi:f0::@17->fa#1] -- register_copy - // [59] phi (byte) bb#27 = (byte) bb#107 [phi:f0::@17->fa#2] -- register_copy + // [59] phi (byte) be#107 = (byte) be#103 [phi:f0::@17->fa#0] -- register_copy + // [59] phi (byte) bd#137 = (byte) bd#135 [phi:f0::@17->fa#1] -- register_copy + // [59] phi (byte) bc#39 = (byte) bc#102 [phi:f0::@17->fa#2] -- register_copy + // [59] phi (byte) bb#27 = (byte) bb#107 [phi:f0::@17->fa#3] -- register_copy jsr fa // [48] phi from f0::@17 f0::@7 to f0::@8 [phi:f0::@17/f0::@7->f0::@8] __b8_from___b17: __b8_from___b7: - // [48] phi (byte) bd#136 = (byte) bd#24 [phi:f0::@17/f0::@7->f0::@8#0] -- register_copy - // [48] phi (byte) bc#103 = (byte) bc#24 [phi:f0::@17/f0::@7->f0::@8#1] -- register_copy - // [48] phi (byte) bb#25 = (byte) bb#10 [phi:f0::@17/f0::@7->f0::@8#2] -- register_copy + // [48] phi (byte) be#104 = (byte) be#24 [phi:f0::@17/f0::@7->f0::@8#0] -- register_copy + // [48] phi (byte) bd#136 = (byte) bd#24 [phi:f0::@17/f0::@7->f0::@8#1] -- register_copy + // [48] phi (byte) bc#103 = (byte) bc#24 [phi:f0::@17/f0::@7->f0::@8#2] -- register_copy + // [48] phi (byte) bb#25 = (byte) bb#10 [phi:f0::@17/f0::@7->f0::@8#3] -- register_copy jmp __b8 // f0::@8 __b8: @@ -4174,16 +4983,18 @@ f0: { // [52] call fa // [59] phi from f0::@18 to fa [phi:f0::@18->fa] fa_from___b18: - // [59] phi (byte) bd#137 = (byte) bd#136 [phi:f0::@18->fa#0] -- register_copy - // [59] phi (byte) bc#39 = (byte) bc#103 [phi:f0::@18->fa#1] -- register_copy - // [59] phi (byte) bb#27 = (byte) bb#108 [phi:f0::@18->fa#2] -- register_copy + // [59] phi (byte) be#107 = (byte) be#104 [phi:f0::@18->fa#0] -- register_copy + // [59] phi (byte) bd#137 = (byte) bd#136 [phi:f0::@18->fa#1] -- register_copy + // [59] phi (byte) bc#39 = (byte) bc#103 [phi:f0::@18->fa#2] -- register_copy + // [59] phi (byte) bb#27 = (byte) bb#108 [phi:f0::@18->fa#3] -- register_copy jsr fa // [53] phi from f0::@18 f0::@8 to f0::@9 [phi:f0::@18/f0::@8->f0::@9] __b9_from___b18: __b9_from___b8: - // [53] phi (byte) bd#93 = (byte) bd#24 [phi:f0::@18/f0::@8->f0::@9#0] -- register_copy - // [53] phi (byte) bc#71 = (byte) bc#24 [phi:f0::@18/f0::@8->f0::@9#1] -- register_copy - // [53] phi (byte) bb#50 = (byte) bb#11 [phi:f0::@18/f0::@8->f0::@9#2] -- register_copy + // [53] phi (byte) be#105 = (byte) be#24 [phi:f0::@18/f0::@8->f0::@9#0] -- register_copy + // [53] phi (byte) bd#93 = (byte) bd#24 [phi:f0::@18/f0::@8->f0::@9#1] -- register_copy + // [53] phi (byte) bc#71 = (byte) bc#24 [phi:f0::@18/f0::@8->f0::@9#2] -- register_copy + // [53] phi (byte) bb#50 = (byte) bb#11 [phi:f0::@18/f0::@8->f0::@9#3] -- register_copy jmp __b9 // f0::@9 __b9: @@ -4199,25 +5010,28 @@ f0: { // [56] call fa // [59] phi from f0::@19 to fa [phi:f0::@19->fa] fa_from___b19: - // [59] phi (byte) bd#137 = (byte) bd#93 [phi:f0::@19->fa#0] -- register_copy - // [59] phi (byte) bc#39 = (byte) bc#71 [phi:f0::@19->fa#1] -- register_copy - // [59] phi (byte) bb#27 = (byte) 0 [phi:f0::@19->fa#2] -- vbuz1=vbuc1 + // [59] phi (byte) be#107 = (byte) be#105 [phi:f0::@19->fa#0] -- register_copy + // [59] phi (byte) bd#137 = (byte) bd#93 [phi:f0::@19->fa#1] -- register_copy + // [59] phi (byte) bc#39 = (byte) bc#71 [phi:f0::@19->fa#2] -- register_copy + // [59] phi (byte) bb#27 = (byte) 0 [phi:f0::@19->fa#3] -- vbuz1=vbuc1 lda #0 sta.z bb_1 jsr fa // [57] phi from f0::@19 to f0::@return [phi:f0::@19->f0::@return] __breturn_from___b19: - // [57] phi (byte) bd#13 = (byte) bd#24 [phi:f0::@19->f0::@return#0] -- register_copy - // [57] phi (byte) bc#13 = (byte) bc#24 [phi:f0::@19->f0::@return#1] -- register_copy - // [57] phi (byte) bb#13 = (byte) 0 [phi:f0::@19->f0::@return#2] -- vbuz1=vbuc1 + // [57] phi (byte) be#13 = (byte) be#24 [phi:f0::@19->f0::@return#0] -- register_copy + // [57] phi (byte) bd#13 = (byte) bd#24 [phi:f0::@19->f0::@return#1] -- register_copy + // [57] phi (byte) bc#13 = (byte) bc#24 [phi:f0::@19->f0::@return#2] -- register_copy + // [57] phi (byte) bb#13 = (byte) 0 [phi:f0::@19->f0::@return#3] -- vbuz1=vbuc1 lda #0 sta.z bb jmp __breturn // [57] phi from f0::@9 to f0::@return [phi:f0::@9->f0::@return] __breturn_from___b9: - // [57] phi (byte) bd#13 = (byte) bd#93 [phi:f0::@9->f0::@return#0] -- register_copy - // [57] phi (byte) bc#13 = (byte) bc#71 [phi:f0::@9->f0::@return#1] -- register_copy - // [57] phi (byte) bb#13 = (byte) bb#50 [phi:f0::@9->f0::@return#2] -- register_copy + // [57] phi (byte) be#13 = (byte) be#105 [phi:f0::@9->f0::@return#0] -- register_copy + // [57] phi (byte) bd#13 = (byte) bd#93 [phi:f0::@9->f0::@return#1] -- register_copy + // [57] phi (byte) bc#13 = (byte) bc#71 [phi:f0::@9->f0::@return#2] -- register_copy + // [57] phi (byte) bb#13 = (byte) bb#50 [phi:f0::@9->f0::@return#3] -- register_copy jmp __breturn // f0::@return __breturn: @@ -4240,14 +5054,16 @@ fa: { // [63] call fb // [110] phi from fa::@10 to fb [phi:fa::@10->fb] fb_from___b10: - // [110] phi (byte) bd#106 = (byte) bd#137 [phi:fa::@10->fb#0] -- register_copy - // [110] phi (byte) bc#113 = (byte) bc#172 [phi:fa::@10->fb#1] -- register_copy + // [110] phi (byte) be#118 = (byte) be#107 [phi:fa::@10->fb#0] -- register_copy + // [110] phi (byte) bd#106 = (byte) bd#137 [phi:fa::@10->fb#1] -- register_copy + // [110] phi (byte) bc#113 = (byte) bc#172 [phi:fa::@10->fb#2] -- register_copy jsr fb // [64] phi from fa fa::@10 to fa::@1 [phi:fa/fa::@10->fa::@1] __b1_from_fa: __b1_from___b10: - // [64] phi (byte) bd#138 = (byte) bd#137 [phi:fa/fa::@10->fa::@1#0] -- register_copy - // [64] phi (byte) bc#40 = (byte) bc#39 [phi:fa/fa::@10->fa::@1#1] -- register_copy + // [64] phi (byte) be#108 = (byte) be#107 [phi:fa/fa::@10->fa::@1#0] -- register_copy + // [64] phi (byte) bd#138 = (byte) bd#137 [phi:fa/fa::@10->fa::@1#1] -- register_copy + // [64] phi (byte) bc#40 = (byte) bc#39 [phi:fa/fa::@10->fa::@1#2] -- register_copy jmp __b1 // fa::@1 __b1: @@ -4265,14 +5081,16 @@ fa: { // [68] call fb // [110] phi from fa::@11 to fb [phi:fa::@11->fb] fb_from___b11: - // [110] phi (byte) bd#106 = (byte) bd#138 [phi:fa::@11->fb#0] -- register_copy - // [110] phi (byte) bc#113 = (byte) bc#173 [phi:fa::@11->fb#1] -- register_copy + // [110] phi (byte) be#118 = (byte) be#108 [phi:fa::@11->fb#0] -- register_copy + // [110] phi (byte) bd#106 = (byte) bd#138 [phi:fa::@11->fb#1] -- register_copy + // [110] phi (byte) bc#113 = (byte) bc#173 [phi:fa::@11->fb#2] -- register_copy jsr fb // [69] phi from fa::@1 fa::@11 to fa::@2 [phi:fa::@1/fa::@11->fa::@2] __b2_from___b1: __b2_from___b11: - // [69] phi (byte) bd#139 = (byte) bd#138 [phi:fa::@1/fa::@11->fa::@2#0] -- register_copy - // [69] phi (byte) bc#41 = (byte) bc#40 [phi:fa::@1/fa::@11->fa::@2#1] -- register_copy + // [69] phi (byte) be#109 = (byte) be#108 [phi:fa::@1/fa::@11->fa::@2#0] -- register_copy + // [69] phi (byte) bd#139 = (byte) bd#138 [phi:fa::@1/fa::@11->fa::@2#1] -- register_copy + // [69] phi (byte) bc#41 = (byte) bc#40 [phi:fa::@1/fa::@11->fa::@2#2] -- register_copy jmp __b2 // fa::@2 __b2: @@ -4290,14 +5108,16 @@ fa: { // [73] call fb // [110] phi from fa::@12 to fb [phi:fa::@12->fb] fb_from___b12: - // [110] phi (byte) bd#106 = (byte) bd#139 [phi:fa::@12->fb#0] -- register_copy - // [110] phi (byte) bc#113 = (byte) bc#174 [phi:fa::@12->fb#1] -- register_copy + // [110] phi (byte) be#118 = (byte) be#109 [phi:fa::@12->fb#0] -- register_copy + // [110] phi (byte) bd#106 = (byte) bd#139 [phi:fa::@12->fb#1] -- register_copy + // [110] phi (byte) bc#113 = (byte) bc#174 [phi:fa::@12->fb#2] -- register_copy jsr fb // [74] phi from fa::@12 fa::@2 to fa::@3 [phi:fa::@12/fa::@2->fa::@3] __b3_from___b12: __b3_from___b2: - // [74] phi (byte) bd#140 = (byte) bd#35 [phi:fa::@12/fa::@2->fa::@3#0] -- register_copy - // [74] phi (byte) bc#42 = (byte) bc#106 [phi:fa::@12/fa::@2->fa::@3#1] -- register_copy + // [74] phi (byte) be#110 = (byte) be#35 [phi:fa::@12/fa::@2->fa::@3#0] -- register_copy + // [74] phi (byte) bd#140 = (byte) bd#35 [phi:fa::@12/fa::@2->fa::@3#1] -- register_copy + // [74] phi (byte) bc#42 = (byte) bc#106 [phi:fa::@12/fa::@2->fa::@3#2] -- register_copy jmp __b3 // fa::@3 __b3: @@ -4315,14 +5135,16 @@ fa: { // [78] call fb // [110] phi from fa::@13 to fb [phi:fa::@13->fb] fb_from___b13: - // [110] phi (byte) bd#106 = (byte) bd#140 [phi:fa::@13->fb#0] -- register_copy - // [110] phi (byte) bc#113 = (byte) bc#175 [phi:fa::@13->fb#1] -- register_copy + // [110] phi (byte) be#118 = (byte) be#110 [phi:fa::@13->fb#0] -- register_copy + // [110] phi (byte) bd#106 = (byte) bd#140 [phi:fa::@13->fb#1] -- register_copy + // [110] phi (byte) bc#113 = (byte) bc#175 [phi:fa::@13->fb#2] -- register_copy jsr fb // [79] phi from fa::@13 fa::@3 to fa::@4 [phi:fa::@13/fa::@3->fa::@4] __b4_from___b13: __b4_from___b3: - // [79] phi (byte) bd#141 = (byte) bd#35 [phi:fa::@13/fa::@3->fa::@4#0] -- register_copy - // [79] phi (byte) bc#43 = (byte) bc#107 [phi:fa::@13/fa::@3->fa::@4#1] -- register_copy + // [79] phi (byte) be#111 = (byte) be#35 [phi:fa::@13/fa::@3->fa::@4#0] -- register_copy + // [79] phi (byte) bd#141 = (byte) bd#35 [phi:fa::@13/fa::@3->fa::@4#1] -- register_copy + // [79] phi (byte) bc#43 = (byte) bc#107 [phi:fa::@13/fa::@3->fa::@4#2] -- register_copy jmp __b4 // fa::@4 __b4: @@ -4340,14 +5162,16 @@ fa: { // [83] call fb // [110] phi from fa::@14 to fb [phi:fa::@14->fb] fb_from___b14: - // [110] phi (byte) bd#106 = (byte) bd#141 [phi:fa::@14->fb#0] -- register_copy - // [110] phi (byte) bc#113 = (byte) bc#176 [phi:fa::@14->fb#1] -- register_copy + // [110] phi (byte) be#118 = (byte) be#111 [phi:fa::@14->fb#0] -- register_copy + // [110] phi (byte) bd#106 = (byte) bd#141 [phi:fa::@14->fb#1] -- register_copy + // [110] phi (byte) bc#113 = (byte) bc#176 [phi:fa::@14->fb#2] -- register_copy jsr fb // [84] phi from fa::@14 fa::@4 to fa::@5 [phi:fa::@14/fa::@4->fa::@5] __b5_from___b14: __b5_from___b4: - // [84] phi (byte) bd#100 = (byte) bd#35 [phi:fa::@14/fa::@4->fa::@5#0] -- register_copy - // [84] phi (byte) bc#44 = (byte) bc#108 [phi:fa::@14/fa::@4->fa::@5#1] -- register_copy + // [84] phi (byte) be#112 = (byte) be#35 [phi:fa::@14/fa::@4->fa::@5#0] -- register_copy + // [84] phi (byte) bd#100 = (byte) bd#35 [phi:fa::@14/fa::@4->fa::@5#1] -- register_copy + // [84] phi (byte) bc#44 = (byte) bc#108 [phi:fa::@14/fa::@4->fa::@5#2] -- register_copy jmp __b5 // fa::@5 __b5: @@ -4365,14 +5189,16 @@ fa: { // [88] call fb // [110] phi from fa::@15 to fb [phi:fa::@15->fb] fb_from___b15: - // [110] phi (byte) bd#106 = (byte) bd#100 [phi:fa::@15->fb#0] -- register_copy - // [110] phi (byte) bc#113 = (byte) bc#177 [phi:fa::@15->fb#1] -- register_copy + // [110] phi (byte) be#118 = (byte) be#112 [phi:fa::@15->fb#0] -- register_copy + // [110] phi (byte) bd#106 = (byte) bd#100 [phi:fa::@15->fb#1] -- register_copy + // [110] phi (byte) bc#113 = (byte) bc#177 [phi:fa::@15->fb#2] -- register_copy jsr fb // [89] phi from fa::@15 fa::@5 to fa::@6 [phi:fa::@15/fa::@5->fa::@6] __b6_from___b15: __b6_from___b5: - // [89] phi (byte) bd#101 = (byte) bd#35 [phi:fa::@15/fa::@5->fa::@6#0] -- register_copy - // [89] phi (byte) bc#45 = (byte) bc#109 [phi:fa::@15/fa::@5->fa::@6#1] -- register_copy + // [89] phi (byte) be#113 = (byte) be#35 [phi:fa::@15/fa::@5->fa::@6#0] -- register_copy + // [89] phi (byte) bd#101 = (byte) bd#35 [phi:fa::@15/fa::@5->fa::@6#1] -- register_copy + // [89] phi (byte) bc#45 = (byte) bc#109 [phi:fa::@15/fa::@5->fa::@6#2] -- register_copy jmp __b6 // fa::@6 __b6: @@ -4390,14 +5216,16 @@ fa: { // [93] call fb // [110] phi from fa::@16 to fb [phi:fa::@16->fb] fb_from___b16: - // [110] phi (byte) bd#106 = (byte) bd#101 [phi:fa::@16->fb#0] -- register_copy - // [110] phi (byte) bc#113 = (byte) bc#178 [phi:fa::@16->fb#1] -- register_copy + // [110] phi (byte) be#118 = (byte) be#113 [phi:fa::@16->fb#0] -- register_copy + // [110] phi (byte) bd#106 = (byte) bd#101 [phi:fa::@16->fb#1] -- register_copy + // [110] phi (byte) bc#113 = (byte) bc#178 [phi:fa::@16->fb#2] -- register_copy jsr fb // [94] phi from fa::@16 fa::@6 to fa::@7 [phi:fa::@16/fa::@6->fa::@7] __b7_from___b16: __b7_from___b6: - // [94] phi (byte) bd#102 = (byte) bd#35 [phi:fa::@16/fa::@6->fa::@7#0] -- register_copy - // [94] phi (byte) bc#46 = (byte) bc#110 [phi:fa::@16/fa::@6->fa::@7#1] -- register_copy + // [94] phi (byte) be#114 = (byte) be#35 [phi:fa::@16/fa::@6->fa::@7#0] -- register_copy + // [94] phi (byte) bd#102 = (byte) bd#35 [phi:fa::@16/fa::@6->fa::@7#1] -- register_copy + // [94] phi (byte) bc#46 = (byte) bc#110 [phi:fa::@16/fa::@6->fa::@7#2] -- register_copy jmp __b7 // fa::@7 __b7: @@ -4415,14 +5243,16 @@ fa: { // [98] call fb // [110] phi from fa::@17 to fb [phi:fa::@17->fb] fb_from___b17: - // [110] phi (byte) bd#106 = (byte) bd#102 [phi:fa::@17->fb#0] -- register_copy - // [110] phi (byte) bc#113 = (byte) bc#179 [phi:fa::@17->fb#1] -- register_copy + // [110] phi (byte) be#118 = (byte) be#114 [phi:fa::@17->fb#0] -- register_copy + // [110] phi (byte) bd#106 = (byte) bd#102 [phi:fa::@17->fb#1] -- register_copy + // [110] phi (byte) bc#113 = (byte) bc#179 [phi:fa::@17->fb#2] -- register_copy jsr fb // [99] phi from fa::@17 fa::@7 to fa::@8 [phi:fa::@17/fa::@7->fa::@8] __b8_from___b17: __b8_from___b7: - // [99] phi (byte) bd#103 = (byte) bd#35 [phi:fa::@17/fa::@7->fa::@8#0] -- register_copy - // [99] phi (byte) bc#47 = (byte) bc#111 [phi:fa::@17/fa::@7->fa::@8#1] -- register_copy + // [99] phi (byte) be#115 = (byte) be#35 [phi:fa::@17/fa::@7->fa::@8#0] -- register_copy + // [99] phi (byte) bd#103 = (byte) bd#35 [phi:fa::@17/fa::@7->fa::@8#1] -- register_copy + // [99] phi (byte) bc#47 = (byte) bc#111 [phi:fa::@17/fa::@7->fa::@8#2] -- register_copy jmp __b8 // fa::@8 __b8: @@ -4440,14 +5270,16 @@ fa: { // [103] call fb // [110] phi from fa::@18 to fb [phi:fa::@18->fb] fb_from___b18: - // [110] phi (byte) bd#106 = (byte) bd#103 [phi:fa::@18->fb#0] -- register_copy - // [110] phi (byte) bc#113 = (byte) bc#180 [phi:fa::@18->fb#1] -- register_copy + // [110] phi (byte) be#118 = (byte) be#115 [phi:fa::@18->fb#0] -- register_copy + // [110] phi (byte) bd#106 = (byte) bd#103 [phi:fa::@18->fb#1] -- register_copy + // [110] phi (byte) bc#113 = (byte) bc#180 [phi:fa::@18->fb#2] -- register_copy jsr fb // [104] phi from fa::@18 fa::@8 to fa::@9 [phi:fa::@18/fa::@8->fa::@9] __b9_from___b18: __b9_from___b8: - // [104] phi (byte) bd#104 = (byte) bd#35 [phi:fa::@18/fa::@8->fa::@9#0] -- register_copy - // [104] phi (byte) bc#83 = (byte) bc#112 [phi:fa::@18/fa::@8->fa::@9#1] -- register_copy + // [104] phi (byte) be#116 = (byte) be#35 [phi:fa::@18/fa::@8->fa::@9#0] -- register_copy + // [104] phi (byte) bd#104 = (byte) bd#35 [phi:fa::@18/fa::@8->fa::@9#1] -- register_copy + // [104] phi (byte) bc#83 = (byte) bc#112 [phi:fa::@18/fa::@8->fa::@9#2] -- register_copy jmp __b9 // fa::@9 __b9: @@ -4463,21 +5295,24 @@ fa: { // [107] call fb // [110] phi from fa::@19 to fb [phi:fa::@19->fb] fb_from___b19: - // [110] phi (byte) bd#106 = (byte) bd#104 [phi:fa::@19->fb#0] -- register_copy - // [110] phi (byte) bc#113 = (byte) 0 [phi:fa::@19->fb#1] -- vbuz1=vbuc1 + // [110] phi (byte) be#118 = (byte) be#116 [phi:fa::@19->fb#0] -- register_copy + // [110] phi (byte) bd#106 = (byte) bd#104 [phi:fa::@19->fb#1] -- register_copy + // [110] phi (byte) bc#113 = (byte) 0 [phi:fa::@19->fb#2] -- vbuz1=vbuc1 lda #0 sta.z bc jsr fb // [108] phi from fa::@19 to fa::@return [phi:fa::@19->fa::@return] __breturn_from___b19: - // [108] phi (byte) bd#24 = (byte) bd#35 [phi:fa::@19->fa::@return#0] -- register_copy - // [108] phi (byte) bc#24 = (byte) 0 [phi:fa::@19->fa::@return#1] -- vbuxx=vbuc1 + // [108] phi (byte) be#24 = (byte) be#35 [phi:fa::@19->fa::@return#0] -- register_copy + // [108] phi (byte) bd#24 = (byte) bd#35 [phi:fa::@19->fa::@return#1] -- register_copy + // [108] phi (byte) bc#24 = (byte) 0 [phi:fa::@19->fa::@return#2] -- vbuxx=vbuc1 ldx #0 jmp __breturn // [108] phi from fa::@9 to fa::@return [phi:fa::@9->fa::@return] __breturn_from___b9: - // [108] phi (byte) bd#24 = (byte) bd#104 [phi:fa::@9->fa::@return#0] -- register_copy - // [108] phi (byte) bc#24 = (byte) bc#83 [phi:fa::@9->fa::@return#1] -- register_copy + // [108] phi (byte) be#24 = (byte) be#116 [phi:fa::@9->fa::@return#0] -- register_copy + // [108] phi (byte) bd#24 = (byte) bd#104 [phi:fa::@9->fa::@return#1] -- register_copy + // [108] phi (byte) bc#24 = (byte) bc#83 [phi:fa::@9->fa::@return#2] -- register_copy jmp __breturn // fa::@return __breturn: @@ -4500,12 +5335,14 @@ fb: { // [114] call fc // [161] phi from fb::@10 to fc [phi:fb::@10->fc] fc_from___b10: - // [161] phi (byte) bd#117 = (byte) bd#235 [phi:fb::@10->fc#0] -- register_copy + // [161] phi (byte) be#129 = (byte) be#118 [phi:fb::@10->fc#0] -- register_copy + // [161] phi (byte) bd#117 = (byte) bd#235 [phi:fb::@10->fc#1] -- register_copy jsr fc // [115] phi from fb fb::@10 to fb::@1 [phi:fb/fb::@10->fb::@1] __b1_from_fb: __b1_from___b10: - // [115] phi (byte) bd#107 = (byte) bd#106 [phi:fb/fb::@10->fb::@1#0] -- register_copy + // [115] phi (byte) be#119 = (byte) be#118 [phi:fb/fb::@10->fb::@1#0] -- register_copy + // [115] phi (byte) bd#107 = (byte) bd#106 [phi:fb/fb::@10->fb::@1#1] -- register_copy jmp __b1 // fb::@1 __b1: @@ -4523,12 +5360,14 @@ fb: { // [119] call fc // [161] phi from fb::@11 to fc [phi:fb::@11->fc] fc_from___b11: - // [161] phi (byte) bd#117 = (byte) bd#236 [phi:fb::@11->fc#0] -- register_copy + // [161] phi (byte) be#129 = (byte) be#119 [phi:fb::@11->fc#0] -- register_copy + // [161] phi (byte) bd#117 = (byte) bd#236 [phi:fb::@11->fc#1] -- register_copy jsr fc // [120] phi from fb::@1 fb::@11 to fb::@2 [phi:fb::@1/fb::@11->fb::@2] __b2_from___b1: __b2_from___b11: - // [120] phi (byte) bd#108 = (byte) bd#107 [phi:fb::@1/fb::@11->fb::@2#0] -- register_copy + // [120] phi (byte) be#120 = (byte) be#119 [phi:fb::@1/fb::@11->fb::@2#0] -- register_copy + // [120] phi (byte) bd#108 = (byte) bd#107 [phi:fb::@1/fb::@11->fb::@2#1] -- register_copy jmp __b2 // fb::@2 __b2: @@ -4546,12 +5385,14 @@ fb: { // [124] call fc // [161] phi from fb::@12 to fc [phi:fb::@12->fc] fc_from___b12: - // [161] phi (byte) bd#117 = (byte) bd#237 [phi:fb::@12->fc#0] -- register_copy + // [161] phi (byte) be#129 = (byte) be#120 [phi:fb::@12->fc#0] -- register_copy + // [161] phi (byte) bd#117 = (byte) bd#237 [phi:fb::@12->fc#1] -- register_copy jsr fc // [125] phi from fb::@12 fb::@2 to fb::@3 [phi:fb::@12/fb::@2->fb::@3] __b3_from___b12: __b3_from___b2: - // [125] phi (byte) bd#109 = (byte) bd#148 [phi:fb::@12/fb::@2->fb::@3#0] -- register_copy + // [125] phi (byte) be#121 = (byte) be#46 [phi:fb::@12/fb::@2->fb::@3#0] -- register_copy + // [125] phi (byte) bd#109 = (byte) bd#148 [phi:fb::@12/fb::@2->fb::@3#1] -- register_copy jmp __b3 // fb::@3 __b3: @@ -4569,12 +5410,14 @@ fb: { // [129] call fc // [161] phi from fb::@13 to fc [phi:fb::@13->fc] fc_from___b13: - // [161] phi (byte) bd#117 = (byte) bd#238 [phi:fb::@13->fc#0] -- register_copy + // [161] phi (byte) be#129 = (byte) be#121 [phi:fb::@13->fc#0] -- register_copy + // [161] phi (byte) bd#117 = (byte) bd#238 [phi:fb::@13->fc#1] -- register_copy jsr fc // [130] phi from fb::@13 fb::@3 to fb::@4 [phi:fb::@13/fb::@3->fb::@4] __b4_from___b13: __b4_from___b3: - // [130] phi (byte) bd#110 = (byte) bd#149 [phi:fb::@13/fb::@3->fb::@4#0] -- register_copy + // [130] phi (byte) be#122 = (byte) be#46 [phi:fb::@13/fb::@3->fb::@4#0] -- register_copy + // [130] phi (byte) bd#110 = (byte) bd#149 [phi:fb::@13/fb::@3->fb::@4#1] -- register_copy jmp __b4 // fb::@4 __b4: @@ -4592,12 +5435,14 @@ fb: { // [134] call fc // [161] phi from fb::@14 to fc [phi:fb::@14->fc] fc_from___b14: - // [161] phi (byte) bd#117 = (byte) bd#239 [phi:fb::@14->fc#0] -- register_copy + // [161] phi (byte) be#129 = (byte) be#122 [phi:fb::@14->fc#0] -- register_copy + // [161] phi (byte) bd#117 = (byte) bd#239 [phi:fb::@14->fc#1] -- register_copy jsr fc // [135] phi from fb::@14 fb::@4 to fb::@5 [phi:fb::@14/fb::@4->fb::@5] __b5_from___b14: __b5_from___b4: - // [135] phi (byte) bd#111 = (byte) bd#150 [phi:fb::@14/fb::@4->fb::@5#0] -- register_copy + // [135] phi (byte) be#123 = (byte) be#46 [phi:fb::@14/fb::@4->fb::@5#0] -- register_copy + // [135] phi (byte) bd#111 = (byte) bd#150 [phi:fb::@14/fb::@4->fb::@5#1] -- register_copy jmp __b5 // fb::@5 __b5: @@ -4615,12 +5460,14 @@ fb: { // [139] call fc // [161] phi from fb::@15 to fc [phi:fb::@15->fc] fc_from___b15: - // [161] phi (byte) bd#117 = (byte) bd#240 [phi:fb::@15->fc#0] -- register_copy + // [161] phi (byte) be#129 = (byte) be#123 [phi:fb::@15->fc#0] -- register_copy + // [161] phi (byte) bd#117 = (byte) bd#240 [phi:fb::@15->fc#1] -- register_copy jsr fc // [140] phi from fb::@15 fb::@5 to fb::@6 [phi:fb::@15/fb::@5->fb::@6] __b6_from___b15: __b6_from___b5: - // [140] phi (byte) bd#112 = (byte) bd#151 [phi:fb::@15/fb::@5->fb::@6#0] -- register_copy + // [140] phi (byte) be#124 = (byte) be#46 [phi:fb::@15/fb::@5->fb::@6#0] -- register_copy + // [140] phi (byte) bd#112 = (byte) bd#151 [phi:fb::@15/fb::@5->fb::@6#1] -- register_copy jmp __b6 // fb::@6 __b6: @@ -4638,12 +5485,14 @@ fb: { // [144] call fc // [161] phi from fb::@16 to fc [phi:fb::@16->fc] fc_from___b16: - // [161] phi (byte) bd#117 = (byte) bd#241 [phi:fb::@16->fc#0] -- register_copy + // [161] phi (byte) be#129 = (byte) be#124 [phi:fb::@16->fc#0] -- register_copy + // [161] phi (byte) bd#117 = (byte) bd#241 [phi:fb::@16->fc#1] -- register_copy jsr fc // [145] phi from fb::@16 fb::@6 to fb::@7 [phi:fb::@16/fb::@6->fb::@7] __b7_from___b16: __b7_from___b6: - // [145] phi (byte) bd#113 = (byte) bd#152 [phi:fb::@16/fb::@6->fb::@7#0] -- register_copy + // [145] phi (byte) be#125 = (byte) be#46 [phi:fb::@16/fb::@6->fb::@7#0] -- register_copy + // [145] phi (byte) bd#113 = (byte) bd#152 [phi:fb::@16/fb::@6->fb::@7#1] -- register_copy jmp __b7 // fb::@7 __b7: @@ -4661,12 +5510,14 @@ fb: { // [149] call fc // [161] phi from fb::@17 to fc [phi:fb::@17->fc] fc_from___b17: - // [161] phi (byte) bd#117 = (byte) bd#242 [phi:fb::@17->fc#0] -- register_copy + // [161] phi (byte) be#129 = (byte) be#125 [phi:fb::@17->fc#0] -- register_copy + // [161] phi (byte) bd#117 = (byte) bd#242 [phi:fb::@17->fc#1] -- register_copy jsr fc // [150] phi from fb::@17 fb::@7 to fb::@8 [phi:fb::@17/fb::@7->fb::@8] __b8_from___b17: __b8_from___b7: - // [150] phi (byte) bd#114 = (byte) bd#153 [phi:fb::@17/fb::@7->fb::@8#0] -- register_copy + // [150] phi (byte) be#126 = (byte) be#46 [phi:fb::@17/fb::@7->fb::@8#0] -- register_copy + // [150] phi (byte) bd#114 = (byte) bd#153 [phi:fb::@17/fb::@7->fb::@8#1] -- register_copy jmp __b8 // fb::@8 __b8: @@ -4684,12 +5535,14 @@ fb: { // [154] call fc // [161] phi from fb::@18 to fc [phi:fb::@18->fc] fc_from___b18: - // [161] phi (byte) bd#117 = (byte) bd#243 [phi:fb::@18->fc#0] -- register_copy + // [161] phi (byte) be#129 = (byte) be#126 [phi:fb::@18->fc#0] -- register_copy + // [161] phi (byte) bd#117 = (byte) bd#243 [phi:fb::@18->fc#1] -- register_copy jsr fc // [155] phi from fb::@18 fb::@8 to fb::@9 [phi:fb::@18/fb::@8->fb::@9] __b9_from___b18: __b9_from___b8: - // [155] phi (byte) bd#116 = (byte) bd#154 [phi:fb::@18/fb::@8->fb::@9#0] -- register_copy + // [155] phi (byte) be#127 = (byte) be#46 [phi:fb::@18/fb::@8->fb::@9#0] -- register_copy + // [155] phi (byte) bd#116 = (byte) bd#154 [phi:fb::@18/fb::@8->fb::@9#1] -- register_copy jmp __b9 // fb::@9 __b9: @@ -4705,17 +5558,20 @@ fb: { // [158] call fc // [161] phi from fb::@19 to fc [phi:fb::@19->fc] fc_from___b19: - // [161] phi (byte) bd#117 = (byte) 0 [phi:fb::@19->fc#0] -- vbuaa=vbuc1 + // [161] phi (byte) be#129 = (byte) be#127 [phi:fb::@19->fc#0] -- register_copy + // [161] phi (byte) bd#117 = (byte) 0 [phi:fb::@19->fc#1] -- vbuaa=vbuc1 lda #0 jsr fc // [159] phi from fb::@19 to fb::@return [phi:fb::@19->fb::@return] __breturn_from___b19: - // [159] phi (byte) bd#35 = (byte) 0 [phi:fb::@19->fb::@return#0] -- vbuyy=vbuc1 + // [159] phi (byte) be#35 = (byte) be#46 [phi:fb::@19->fb::@return#0] -- register_copy + // [159] phi (byte) bd#35 = (byte) 0 [phi:fb::@19->fb::@return#1] -- vbuyy=vbuc1 ldy #0 jmp __breturn // [159] phi from fb::@9 to fb::@return [phi:fb::@9->fb::@return] __breturn_from___b9: - // [159] phi (byte) bd#35 = (byte) bd#116 [phi:fb::@9->fb::@return#0] -- register_copy + // [159] phi (byte) be#35 = (byte) be#127 [phi:fb::@9->fb::@return#0] -- register_copy + // [159] phi (byte) bd#35 = (byte) bd#116 [phi:fb::@9->fb::@return#1] -- register_copy jmp __breturn // fb::@return __breturn: @@ -4726,115 +5582,160 @@ fb: { fc: { // [162] if((byte) bd#117!=(byte) 0) goto fc::@1 -- vbuaa_neq_0_then_la1 cmp #0 - bne __b1 - // [163] phi from fc to fc::@10 [phi:fc->fc::@10] - __b10_from_fc: + bne __b1_from_fc jmp __b10 // fc::@10 __b10: + // [163] (byte) be#36 ← ++ (byte) be#129 -- vbuz1=_inc_vbuz1 + inc.z be + // [164] phi from fc fc::@10 to fc::@1 [phi:fc/fc::@10->fc::@1] + __b1_from_fc: + __b1_from___b10: + // [164] phi (byte) be#130 = (byte) be#129 [phi:fc/fc::@10->fc::@1#0] -- register_copy jmp __b1 // fc::@1 __b1: - // [164] if((byte) bd#117!=(byte) 1) goto fc::@2 -- vbuaa_neq_vbuc1_then_la1 + // [165] if((byte) bd#117!=(byte) 1) goto fc::@2 -- vbuaa_neq_vbuc1_then_la1 cmp #1 - bne __b2 - // [165] phi from fc::@1 to fc::@11 [phi:fc::@1->fc::@11] - __b11_from___b1: + bne __b2_from___b1 jmp __b11 // fc::@11 __b11: + // [166] (byte) be#37 ← ++ (byte) be#130 -- vbuz1=_inc_vbuz1 + inc.z be + // [167] phi from fc::@1 fc::@11 to fc::@2 [phi:fc::@1/fc::@11->fc::@2] + __b2_from___b1: + __b2_from___b11: + // [167] phi (byte) be#131 = (byte) be#130 [phi:fc::@1/fc::@11->fc::@2#0] -- register_copy jmp __b2 // fc::@2 __b2: - // [166] if((byte) bd#117!=(byte) 2) goto fc::@3 -- vbuaa_neq_vbuc1_then_la1 + // [168] if((byte) bd#117!=(byte) 2) goto fc::@3 -- vbuaa_neq_vbuc1_then_la1 cmp #2 - bne __b3 - // [167] phi from fc::@2 to fc::@12 [phi:fc::@2->fc::@12] - __b12_from___b2: + bne __b3_from___b2 jmp __b12 // fc::@12 __b12: + // [169] (byte) be#38 ← ++ (byte) be#131 -- vbuz1=_inc_vbuz1 + inc.z be + // [170] phi from fc::@12 fc::@2 to fc::@3 [phi:fc::@12/fc::@2->fc::@3] + __b3_from___b12: + __b3_from___b2: + // [170] phi (byte) be#132 = (byte) be#38 [phi:fc::@12/fc::@2->fc::@3#0] -- register_copy jmp __b3 // fc::@3 __b3: - // [168] if((byte) bd#117!=(byte) 3) goto fc::@4 -- vbuaa_neq_vbuc1_then_la1 + // [171] if((byte) bd#117!=(byte) 3) goto fc::@4 -- vbuaa_neq_vbuc1_then_la1 cmp #3 - bne __b4 - // [169] phi from fc::@3 to fc::@13 [phi:fc::@3->fc::@13] - __b13_from___b3: + bne __b4_from___b3 jmp __b13 // fc::@13 __b13: + // [172] (byte) be#39 ← ++ (byte) be#132 -- vbuz1=_inc_vbuz1 + inc.z be + // [173] phi from fc::@13 fc::@3 to fc::@4 [phi:fc::@13/fc::@3->fc::@4] + __b4_from___b13: + __b4_from___b3: + // [173] phi (byte) be#133 = (byte) be#39 [phi:fc::@13/fc::@3->fc::@4#0] -- register_copy jmp __b4 // fc::@4 __b4: - // [170] if((byte) bd#117!=(byte) 4) goto fc::@5 -- vbuaa_neq_vbuc1_then_la1 + // [174] if((byte) bd#117!=(byte) 4) goto fc::@5 -- vbuaa_neq_vbuc1_then_la1 cmp #4 - bne __b5 - // [171] phi from fc::@4 to fc::@14 [phi:fc::@4->fc::@14] - __b14_from___b4: + bne __b5_from___b4 jmp __b14 // fc::@14 __b14: + // [175] (byte) be#40 ← ++ (byte) be#133 -- vbuz1=_inc_vbuz1 + inc.z be + // [176] phi from fc::@14 fc::@4 to fc::@5 [phi:fc::@14/fc::@4->fc::@5] + __b5_from___b14: + __b5_from___b4: + // [176] phi (byte) be#134 = (byte) be#40 [phi:fc::@14/fc::@4->fc::@5#0] -- register_copy jmp __b5 // fc::@5 __b5: - // [172] if((byte) bd#117!=(byte) 5) goto fc::@6 -- vbuaa_neq_vbuc1_then_la1 + // [177] if((byte) bd#117!=(byte) 5) goto fc::@6 -- vbuaa_neq_vbuc1_then_la1 cmp #5 - bne __b6 - // [173] phi from fc::@5 to fc::@15 [phi:fc::@5->fc::@15] - __b15_from___b5: + bne __b6_from___b5 jmp __b15 // fc::@15 __b15: + // [178] (byte) be#41 ← ++ (byte) be#134 -- vbuz1=_inc_vbuz1 + inc.z be + // [179] phi from fc::@15 fc::@5 to fc::@6 [phi:fc::@15/fc::@5->fc::@6] + __b6_from___b15: + __b6_from___b5: + // [179] phi (byte) be#135 = (byte) be#41 [phi:fc::@15/fc::@5->fc::@6#0] -- register_copy jmp __b6 // fc::@6 __b6: - // [174] if((byte) bd#117!=(byte) 6) goto fc::@7 -- vbuaa_neq_vbuc1_then_la1 + // [180] if((byte) bd#117!=(byte) 6) goto fc::@7 -- vbuaa_neq_vbuc1_then_la1 cmp #6 - bne __b7 - // [175] phi from fc::@6 to fc::@16 [phi:fc::@6->fc::@16] - __b16_from___b6: + bne __b7_from___b6 jmp __b16 // fc::@16 __b16: + // [181] (byte) be#42 ← ++ (byte) be#135 -- vbuz1=_inc_vbuz1 + inc.z be + // [182] phi from fc::@16 fc::@6 to fc::@7 [phi:fc::@16/fc::@6->fc::@7] + __b7_from___b16: + __b7_from___b6: + // [182] phi (byte) be#136 = (byte) be#42 [phi:fc::@16/fc::@6->fc::@7#0] -- register_copy jmp __b7 // fc::@7 __b7: - // [176] if((byte) bd#117!=(byte) 7) goto fc::@8 -- vbuaa_neq_vbuc1_then_la1 + // [183] if((byte) bd#117!=(byte) 7) goto fc::@8 -- vbuaa_neq_vbuc1_then_la1 cmp #7 - bne __b8 - // [177] phi from fc::@7 to fc::@17 [phi:fc::@7->fc::@17] - __b17_from___b7: + bne __b8_from___b7 jmp __b17 // fc::@17 __b17: + // [184] (byte) be#43 ← ++ (byte) be#136 -- vbuz1=_inc_vbuz1 + inc.z be + // [185] phi from fc::@17 fc::@7 to fc::@8 [phi:fc::@17/fc::@7->fc::@8] + __b8_from___b17: + __b8_from___b7: + // [185] phi (byte) be#137 = (byte) be#43 [phi:fc::@17/fc::@7->fc::@8#0] -- register_copy jmp __b8 // fc::@8 __b8: - // [178] if((byte) bd#117!=(byte) 8) goto fc::@9 -- vbuaa_neq_vbuc1_then_la1 + // [186] if((byte) bd#117!=(byte) 8) goto fc::@9 -- vbuaa_neq_vbuc1_then_la1 cmp #8 - bne __b9 - // [179] phi from fc::@8 to fc::@18 [phi:fc::@8->fc::@18] - __b18_from___b8: + bne __b9_from___b8 jmp __b18 // fc::@18 __b18: + // [187] (byte) be#44 ← ++ (byte) be#137 -- vbuz1=_inc_vbuz1 + inc.z be + // [188] phi from fc::@18 fc::@8 to fc::@9 [phi:fc::@18/fc::@8->fc::@9] + __b9_from___b18: + __b9_from___b8: + // [188] phi (byte) be#138 = (byte) be#44 [phi:fc::@18/fc::@8->fc::@9#0] -- register_copy jmp __b9 // fc::@9 __b9: - // [180] if((byte) bd#117!=(byte) 9) goto fc::@return -- vbuaa_neq_vbuc1_then_la1 + // [189] if((byte) bd#117!=(byte) 9) goto fc::@19 -- vbuaa_neq_vbuc1_then_la1 cmp #9 - bne __breturn - // [181] phi from fc::@9 to fc::@19 [phi:fc::@9->fc::@19] + bne __b19_from___b9 + // [191] phi from fc::@9 to fc::@return [phi:fc::@9->fc::@return] + __breturn_from___b9: + // [191] phi (byte) be#46 = (byte) 0 [phi:fc::@9->fc::@return#0] -- vbuz1=vbuc1 + lda #0 + sta.z be + jmp __breturn + // [190] phi from fc::@9 to fc::@19 [phi:fc::@9->fc::@19] __b19_from___b9: jmp __b19 // fc::@19 __b19: + // [191] phi from fc::@19 to fc::@return [phi:fc::@19->fc::@return] + __breturn_from___b19: + // [191] phi (byte) be#46 = (byte) be#138 [phi:fc::@19->fc::@return#0] -- register_copy jmp __breturn // fc::@return __breturn: - // [182] return + // [192] return rts } // File Data @@ -4926,6 +5827,7 @@ Removing instruction jmp __b9 Removing instruction jmp __b19 Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination +Removing instruction lda #0 Replacing instruction ldy #0 with TAY Replacing instruction ldx #0 with TAX Removing instruction lda #0 @@ -4962,6 +5864,16 @@ Replacing label __b7_from___b6 with __b7 Replacing label __b8_from___b7 with __b8 Replacing label __b9_from___b8 with __b9 Replacing label __breturn_from___b9 with __breturn +Replacing label __b1_from_fc with __b1 +Replacing label __b2_from___b1 with __b2 +Replacing label __b3_from___b2 with __b3 +Replacing label __b4_from___b3 with __b4 +Replacing label __b5_from___b4 with __b5 +Replacing label __b6_from___b5 with __b6 +Replacing label __b7_from___b6 with __b7 +Replacing label __b8_from___b7 with __b8 +Replacing label __b9_from___b8 with __b9 +Replacing label __b19_from___b9 with __b19 Replacing label __breturn with __b19 Removing instruction __bbegin: Removing instruction __b1_from___bbegin: @@ -5032,25 +5944,26 @@ Removing instruction __b9_from___b8: Removing instruction __b19_from___b9: Removing instruction fc_from___b19: Removing instruction __breturn_from___b9: -Removing instruction __b10_from_fc: -Removing instruction __b10: -Removing instruction __b11_from___b1: -Removing instruction __b11: -Removing instruction __b12_from___b2: -Removing instruction __b12: -Removing instruction __b13_from___b3: -Removing instruction __b13: -Removing instruction __b14_from___b4: -Removing instruction __b14: -Removing instruction __b15_from___b5: -Removing instruction __b15: -Removing instruction __b16_from___b6: -Removing instruction __b16: -Removing instruction __b17_from___b7: -Removing instruction __b17: -Removing instruction __b18_from___b8: -Removing instruction __b18: +Removing instruction __b1_from_fc: +Removing instruction __b1_from___b10: +Removing instruction __b2_from___b1: +Removing instruction __b2_from___b11: +Removing instruction __b3_from___b12: +Removing instruction __b3_from___b2: +Removing instruction __b4_from___b13: +Removing instruction __b4_from___b3: +Removing instruction __b5_from___b14: +Removing instruction __b5_from___b4: +Removing instruction __b6_from___b15: +Removing instruction __b6_from___b5: +Removing instruction __b7_from___b16: +Removing instruction __b7_from___b6: +Removing instruction __b8_from___b17: +Removing instruction __b8_from___b7: +Removing instruction __b9_from___b18: +Removing instruction __b9_from___b8: Removing instruction __b19_from___b9: +Removing instruction __breturn_from___b19: Removing instruction __breturn: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction __bend: @@ -5117,6 +6030,16 @@ Removing instruction __b18: Removing instruction fc_from___b18: Removing instruction __b19: Removing instruction __breturn_from___b19: +Removing instruction __b10: +Removing instruction __b11: +Removing instruction __b12: +Removing instruction __b13: +Removing instruction __b14: +Removing instruction __b15: +Removing instruction __b16: +Removing instruction __b17: +Removing instruction __b18: +Removing instruction __breturn_from___b9: Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main @@ -5124,29 +6047,9 @@ Succesful ASM optimization Pass5SkipBegin 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 __b19 Succesful ASM optimization Pass5DoubleJumpElimination -Removing instruction bne __b1 -Removing instruction bne __b2 -Removing instruction bne __b3 -Removing instruction bne __b4 -Removing instruction bne __b5 -Removing instruction bne __b6 -Removing instruction bne __b7 -Removing instruction bne __b8 -Removing instruction bne __b9 -Removing instruction bne __b19 -Succesful ASM optimization Pass5NextJumpElimination Removing instruction __b1: -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 __b19: Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE @@ -5245,7 +6148,7 @@ FINAL SYMBOL TABLE (byte) bd#113 reg byte y 4.0 (byte) bd#114 reg byte y 4.0 (byte) bd#116 reg byte y 3.0 -(byte) bd#117 reg byte a 1.9999999999999991 +(byte) bd#117 reg byte a 1.3571428571428568 (byte) bd#129 reg byte y 2.0 (byte) bd#13 reg byte y 3.75 (byte) bd#130 reg byte y 2.0 @@ -5282,6 +6185,60 @@ FINAL SYMBOL TABLE (byte) bd#243 reg byte a 4.0 (byte) bd#35 reg byte y 1.8333333333333335 (byte) bd#93 reg byte y 2.6666666666666665 +(byte) be +(byte) be#100 be zp[1]:6 2.0 +(byte) be#101 be zp[1]:6 2.0 +(byte) be#102 be zp[1]:6 2.0 +(byte) be#103 be zp[1]:6 2.0 +(byte) be#104 be zp[1]:6 2.0 +(byte) be#105 be zp[1]:6 2.6666666666666665 +(byte) be#107 be zp[1]:6 6.0 +(byte) be#108 be zp[1]:6 2.0 +(byte) be#109 be zp[1]:6 2.0 +(byte) be#110 be zp[1]:6 2.0 +(byte) be#111 be zp[1]:6 2.0 +(byte) be#112 be zp[1]:6 2.0 +(byte) be#113 be zp[1]:6 2.0 +(byte) be#114 be zp[1]:6 2.0 +(byte) be#115 be zp[1]:6 2.0 +(byte) be#116 be zp[1]:6 2.6666666666666665 +(byte) be#118 be zp[1]:6 6.0 +(byte) be#119 be zp[1]:6 2.0 +(byte) be#120 be zp[1]:6 2.0 +(byte) be#121 be zp[1]:6 2.0 +(byte) be#122 be zp[1]:6 2.0 +(byte) be#123 be zp[1]:6 2.0 +(byte) be#124 be zp[1]:6 2.0 +(byte) be#125 be zp[1]:6 2.0 +(byte) be#126 be zp[1]:6 2.0 +(byte) be#127 be zp[1]:6 2.6666666666666665 +(byte) be#129 be zp[1]:6 12.0 +(byte) be#13 be zp[1]:6 3.75 +(byte) be#130 be zp[1]:6 4.0 +(byte) be#131 be zp[1]:6 4.0 +(byte) be#132 be zp[1]:6 4.0 +(byte) be#133 be zp[1]:6 4.0 +(byte) be#134 be zp[1]:6 4.0 +(byte) be#135 be zp[1]:6 4.0 +(byte) be#136 be zp[1]:6 4.0 +(byte) be#137 be zp[1]:6 4.0 +(byte) be#138 be zp[1]:6 2.0 +(byte) be#142 be zp[1]:6 2.0 +(byte) be#143 be zp[1]:6 2.0 +(byte) be#144 be zp[1]:6 2.0 +(byte) be#2 be zp[1]:6 3.0 +(byte) be#24 be zp[1]:6 2.0 +(byte) be#35 be zp[1]:6 2.0 +(byte) be#36 be zp[1]:6 4.0 +(byte) be#37 be zp[1]:6 4.0 +(byte) be#38 be zp[1]:6 4.0 +(byte) be#39 be zp[1]:6 4.0 +(byte) be#40 be zp[1]:6 4.0 +(byte) be#41 be zp[1]:6 4.0 +(byte) be#42 be zp[1]:6 4.0 +(byte) be#43 be zp[1]:6 4.0 +(byte) be#44 be zp[1]:6 4.0 +(byte) be#46 be zp[1]:6 1.8333333333333335 (void()) f0() (label) f0::@1 (label) f0::@10 @@ -5378,10 +6335,11 @@ reg byte x [ bc#83 bc#112 bc#47 bc#111 bc#46 bc#110 bc#45 bc#109 bc#44 bc#108 bc zp[1]:5 [ bc#113 bc#172 bc#173 bc#174 bc#175 bc#176 bc#177 bc#178 bc#179 bc#180 ] reg byte y [ bd#116 bd#154 bd#114 bd#153 bd#113 bd#152 bd#112 bd#151 bd#111 bd#150 bd#110 bd#149 bd#109 bd#108 bd#107 bd#106 bd#104 bd#103 bd#102 bd#101 bd#100 bd#141 bd#140 bd#139 bd#138 bd#137 bd#93 bd#136 bd#135 bd#134 bd#133 bd#132 bd#131 bd#130 bd#129 bd#2 bd#13 bd#24 bd#35 bd#146 bd#147 bd#148 ] reg byte a [ bd#117 bd#235 bd#236 bd#237 bd#238 bd#239 bd#240 bd#241 bd#242 bd#243 ] +zp[1]:6 [ be#138 be#44 be#137 be#43 be#136 be#42 be#135 be#41 be#134 be#40 be#133 be#39 be#132 be#38 be#131 be#130 be#129 be#127 be#126 be#125 be#124 be#123 be#122 be#121 be#120 be#119 be#118 be#116 be#115 be#114 be#113 be#112 be#111 be#110 be#109 be#108 be#107 be#105 be#104 be#103 be#102 be#101 be#100 be#144 be#143 be#142 be#2 be#13 be#24 be#35 be#46 be#36 be#37 ] FINAL ASSEMBLER -Score: 913 +Score: 1019 // File Comments // Upstart @@ -5390,6 +6348,7 @@ Score: 913 .pc = $80d "Program" // Global Constants & labels .label ba = 2 + .label be = 6 .label bb = 3 .label bb_1 = 4 .label bc = 5 @@ -5406,11 +6365,13 @@ main: { // [5] phi (byte) ba#17 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 lda #0 sta.z ba - // [5] phi (byte) bd#2 = (byte) 0 [phi:main->main::@1#1] -- vbuyy=vbuc1 + // [5] phi (byte) be#2 = (byte) 0 [phi:main->main::@1#1] -- vbuz1=vbuc1 + sta.z be + // [5] phi (byte) bd#2 = (byte) 0 [phi:main->main::@1#2] -- vbuyy=vbuc1 tay - // [5] phi (byte) bc#2 = (byte) 0 [phi:main->main::@1#2] -- vbuxx=vbuc1 + // [5] phi (byte) bc#2 = (byte) 0 [phi:main->main::@1#3] -- vbuxx=vbuc1 tax - // [5] phi (byte) bb#16 = (byte) 0 [phi:main->main::@1#3] -- vbuz1=vbuc1 + // [5] phi (byte) bb#16 = (byte) 0 [phi:main->main::@1#4] -- vbuz1=vbuc1 sta.z bb // main::@1 // [6] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -5425,9 +6386,10 @@ main: { inc.z ba // [5] phi from main::@3 to main::@1 [phi:main::@3->main::@1] // [5] phi (byte) ba#17 = (byte) ba#1 [phi:main::@3->main::@1#0] -- register_copy - // [5] phi (byte) bd#2 = (byte) bd#13 [phi:main::@3->main::@1#1] -- register_copy - // [5] phi (byte) bc#2 = (byte) bc#13 [phi:main::@3->main::@1#2] -- register_copy - // [5] phi (byte) bb#16 = (byte) bb#13 [phi:main::@3->main::@1#3] -- register_copy + // [5] phi (byte) be#2 = (byte) be#13 [phi:main::@3->main::@1#1] -- register_copy + // [5] phi (byte) bd#2 = (byte) bd#13 [phi:main::@3->main::@1#2] -- register_copy + // [5] phi (byte) bc#2 = (byte) bc#13 [phi:main::@3->main::@1#3] -- register_copy + // [5] phi (byte) bb#16 = (byte) bb#13 [phi:main::@3->main::@1#4] -- register_copy jmp __b2 } // f0 @@ -5447,14 +6409,16 @@ f0: { // fa() // [12] call fa // [59] phi from f0::@10 to fa [phi:f0::@10->fa] - // [59] phi (byte) bd#137 = (byte) bd#2 [phi:f0::@10->fa#0] -- register_copy - // [59] phi (byte) bc#39 = (byte) bc#2 [phi:f0::@10->fa#1] -- register_copy - // [59] phi (byte) bb#27 = (byte) bb#100 [phi:f0::@10->fa#2] -- register_copy + // [59] phi (byte) be#107 = (byte) be#2 [phi:f0::@10->fa#0] -- register_copy + // [59] phi (byte) bd#137 = (byte) bd#2 [phi:f0::@10->fa#1] -- register_copy + // [59] phi (byte) bc#39 = (byte) bc#2 [phi:f0::@10->fa#2] -- register_copy + // [59] phi (byte) bb#27 = (byte) bb#100 [phi:f0::@10->fa#3] -- register_copy jsr fa // [13] phi from f0 f0::@10 to f0::@1 [phi:f0/f0::@10->f0::@1] - // [13] phi (byte) bd#129 = (byte) bd#2 [phi:f0/f0::@10->f0::@1#0] -- register_copy - // [13] phi (byte) bc#63 = (byte) bc#2 [phi:f0/f0::@10->f0::@1#1] -- register_copy - // [13] phi (byte) bb#18 = (byte) bb#16 [phi:f0/f0::@10->f0::@1#2] -- register_copy + // [13] phi (byte) be#142 = (byte) be#2 [phi:f0/f0::@10->f0::@1#0] -- register_copy + // [13] phi (byte) bd#129 = (byte) bd#2 [phi:f0/f0::@10->f0::@1#1] -- register_copy + // [13] phi (byte) bc#63 = (byte) bc#2 [phi:f0/f0::@10->f0::@1#2] -- register_copy + // [13] phi (byte) bb#18 = (byte) bb#16 [phi:f0/f0::@10->f0::@1#3] -- register_copy // f0::@1 __b1: // if(ba==1) @@ -5472,14 +6436,16 @@ f0: { // fa() // [17] call fa // [59] phi from f0::@11 to fa [phi:f0::@11->fa] - // [59] phi (byte) bd#137 = (byte) bd#129 [phi:f0::@11->fa#0] -- register_copy - // [59] phi (byte) bc#39 = (byte) bc#63 [phi:f0::@11->fa#1] -- register_copy - // [59] phi (byte) bb#27 = (byte) bb#101 [phi:f0::@11->fa#2] -- register_copy + // [59] phi (byte) be#107 = (byte) be#142 [phi:f0::@11->fa#0] -- register_copy + // [59] phi (byte) bd#137 = (byte) bd#129 [phi:f0::@11->fa#1] -- register_copy + // [59] phi (byte) bc#39 = (byte) bc#63 [phi:f0::@11->fa#2] -- register_copy + // [59] phi (byte) bb#27 = (byte) bb#101 [phi:f0::@11->fa#3] -- register_copy jsr fa // [18] phi from f0::@1 f0::@11 to f0::@2 [phi:f0::@1/f0::@11->f0::@2] - // [18] phi (byte) bd#130 = (byte) bd#129 [phi:f0::@1/f0::@11->f0::@2#0] -- register_copy - // [18] phi (byte) bc#64 = (byte) bc#63 [phi:f0::@1/f0::@11->f0::@2#1] -- register_copy - // [18] phi (byte) bb#19 = (byte) bb#18 [phi:f0::@1/f0::@11->f0::@2#2] -- register_copy + // [18] phi (byte) be#143 = (byte) be#142 [phi:f0::@1/f0::@11->f0::@2#0] -- register_copy + // [18] phi (byte) bd#130 = (byte) bd#129 [phi:f0::@1/f0::@11->f0::@2#1] -- register_copy + // [18] phi (byte) bc#64 = (byte) bc#63 [phi:f0::@1/f0::@11->f0::@2#2] -- register_copy + // [18] phi (byte) bb#19 = (byte) bb#18 [phi:f0::@1/f0::@11->f0::@2#3] -- register_copy // f0::@2 __b2: // if(ba==2) @@ -5497,14 +6463,16 @@ f0: { // fa() // [22] call fa // [59] phi from f0::@12 to fa [phi:f0::@12->fa] - // [59] phi (byte) bd#137 = (byte) bd#130 [phi:f0::@12->fa#0] -- register_copy - // [59] phi (byte) bc#39 = (byte) bc#64 [phi:f0::@12->fa#1] -- register_copy - // [59] phi (byte) bb#27 = (byte) bb#102 [phi:f0::@12->fa#2] -- register_copy + // [59] phi (byte) be#107 = (byte) be#143 [phi:f0::@12->fa#0] -- register_copy + // [59] phi (byte) bd#137 = (byte) bd#130 [phi:f0::@12->fa#1] -- register_copy + // [59] phi (byte) bc#39 = (byte) bc#64 [phi:f0::@12->fa#2] -- register_copy + // [59] phi (byte) bb#27 = (byte) bb#102 [phi:f0::@12->fa#3] -- register_copy jsr fa // [23] phi from f0::@12 f0::@2 to f0::@3 [phi:f0::@12/f0::@2->f0::@3] - // [23] phi (byte) bd#131 = (byte) bd#24 [phi:f0::@12/f0::@2->f0::@3#0] -- register_copy - // [23] phi (byte) bc#65 = (byte) bc#24 [phi:f0::@12/f0::@2->f0::@3#1] -- register_copy - // [23] phi (byte) bb#20 = (byte) bb#5 [phi:f0::@12/f0::@2->f0::@3#2] -- register_copy + // [23] phi (byte) be#144 = (byte) be#24 [phi:f0::@12/f0::@2->f0::@3#0] -- register_copy + // [23] phi (byte) bd#131 = (byte) bd#24 [phi:f0::@12/f0::@2->f0::@3#1] -- register_copy + // [23] phi (byte) bc#65 = (byte) bc#24 [phi:f0::@12/f0::@2->f0::@3#2] -- register_copy + // [23] phi (byte) bb#20 = (byte) bb#5 [phi:f0::@12/f0::@2->f0::@3#3] -- register_copy // f0::@3 __b3: // if(ba==3) @@ -5522,14 +6490,16 @@ f0: { // fa() // [27] call fa // [59] phi from f0::@13 to fa [phi:f0::@13->fa] - // [59] phi (byte) bd#137 = (byte) bd#131 [phi:f0::@13->fa#0] -- register_copy - // [59] phi (byte) bc#39 = (byte) bc#65 [phi:f0::@13->fa#1] -- register_copy - // [59] phi (byte) bb#27 = (byte) bb#103 [phi:f0::@13->fa#2] -- register_copy + // [59] phi (byte) be#107 = (byte) be#144 [phi:f0::@13->fa#0] -- register_copy + // [59] phi (byte) bd#137 = (byte) bd#131 [phi:f0::@13->fa#1] -- register_copy + // [59] phi (byte) bc#39 = (byte) bc#65 [phi:f0::@13->fa#2] -- register_copy + // [59] phi (byte) bb#27 = (byte) bb#103 [phi:f0::@13->fa#3] -- register_copy jsr fa // [28] phi from f0::@13 f0::@3 to f0::@4 [phi:f0::@13/f0::@3->f0::@4] - // [28] phi (byte) bd#132 = (byte) bd#24 [phi:f0::@13/f0::@3->f0::@4#0] -- register_copy - // [28] phi (byte) bc#66 = (byte) bc#24 [phi:f0::@13/f0::@3->f0::@4#1] -- register_copy - // [28] phi (byte) bb#21 = (byte) bb#6 [phi:f0::@13/f0::@3->f0::@4#2] -- register_copy + // [28] phi (byte) be#100 = (byte) be#24 [phi:f0::@13/f0::@3->f0::@4#0] -- register_copy + // [28] phi (byte) bd#132 = (byte) bd#24 [phi:f0::@13/f0::@3->f0::@4#1] -- register_copy + // [28] phi (byte) bc#66 = (byte) bc#24 [phi:f0::@13/f0::@3->f0::@4#2] -- register_copy + // [28] phi (byte) bb#21 = (byte) bb#6 [phi:f0::@13/f0::@3->f0::@4#3] -- register_copy // f0::@4 __b4: // if(ba==4) @@ -5547,14 +6517,16 @@ f0: { // fa() // [32] call fa // [59] phi from f0::@14 to fa [phi:f0::@14->fa] - // [59] phi (byte) bd#137 = (byte) bd#132 [phi:f0::@14->fa#0] -- register_copy - // [59] phi (byte) bc#39 = (byte) bc#66 [phi:f0::@14->fa#1] -- register_copy - // [59] phi (byte) bb#27 = (byte) bb#104 [phi:f0::@14->fa#2] -- register_copy + // [59] phi (byte) be#107 = (byte) be#100 [phi:f0::@14->fa#0] -- register_copy + // [59] phi (byte) bd#137 = (byte) bd#132 [phi:f0::@14->fa#1] -- register_copy + // [59] phi (byte) bc#39 = (byte) bc#66 [phi:f0::@14->fa#2] -- register_copy + // [59] phi (byte) bb#27 = (byte) bb#104 [phi:f0::@14->fa#3] -- register_copy jsr fa // [33] phi from f0::@14 f0::@4 to f0::@5 [phi:f0::@14/f0::@4->f0::@5] - // [33] phi (byte) bd#133 = (byte) bd#24 [phi:f0::@14/f0::@4->f0::@5#0] -- register_copy - // [33] phi (byte) bc#100 = (byte) bc#24 [phi:f0::@14/f0::@4->f0::@5#1] -- register_copy - // [33] phi (byte) bb#22 = (byte) bb#66 [phi:f0::@14/f0::@4->f0::@5#2] -- register_copy + // [33] phi (byte) be#101 = (byte) be#24 [phi:f0::@14/f0::@4->f0::@5#0] -- register_copy + // [33] phi (byte) bd#133 = (byte) bd#24 [phi:f0::@14/f0::@4->f0::@5#1] -- register_copy + // [33] phi (byte) bc#100 = (byte) bc#24 [phi:f0::@14/f0::@4->f0::@5#2] -- register_copy + // [33] phi (byte) bb#22 = (byte) bb#66 [phi:f0::@14/f0::@4->f0::@5#3] -- register_copy // f0::@5 __b5: // if(ba==5) @@ -5572,14 +6544,16 @@ f0: { // fa() // [37] call fa // [59] phi from f0::@15 to fa [phi:f0::@15->fa] - // [59] phi (byte) bd#137 = (byte) bd#133 [phi:f0::@15->fa#0] -- register_copy - // [59] phi (byte) bc#39 = (byte) bc#100 [phi:f0::@15->fa#1] -- register_copy - // [59] phi (byte) bb#27 = (byte) bb#105 [phi:f0::@15->fa#2] -- register_copy + // [59] phi (byte) be#107 = (byte) be#101 [phi:f0::@15->fa#0] -- register_copy + // [59] phi (byte) bd#137 = (byte) bd#133 [phi:f0::@15->fa#1] -- register_copy + // [59] phi (byte) bc#39 = (byte) bc#100 [phi:f0::@15->fa#2] -- register_copy + // [59] phi (byte) bb#27 = (byte) bb#105 [phi:f0::@15->fa#3] -- register_copy jsr fa // [38] phi from f0::@15 f0::@5 to f0::@6 [phi:f0::@15/f0::@5->f0::@6] - // [38] phi (byte) bd#134 = (byte) bd#24 [phi:f0::@15/f0::@5->f0::@6#0] -- register_copy - // [38] phi (byte) bc#101 = (byte) bc#24 [phi:f0::@15/f0::@5->f0::@6#1] -- register_copy - // [38] phi (byte) bb#23 = (byte) bb#67 [phi:f0::@15/f0::@5->f0::@6#2] -- register_copy + // [38] phi (byte) be#102 = (byte) be#24 [phi:f0::@15/f0::@5->f0::@6#0] -- register_copy + // [38] phi (byte) bd#134 = (byte) bd#24 [phi:f0::@15/f0::@5->f0::@6#1] -- register_copy + // [38] phi (byte) bc#101 = (byte) bc#24 [phi:f0::@15/f0::@5->f0::@6#2] -- register_copy + // [38] phi (byte) bb#23 = (byte) bb#67 [phi:f0::@15/f0::@5->f0::@6#3] -- register_copy // f0::@6 __b6: // if(ba==6) @@ -5597,14 +6571,16 @@ f0: { // fa() // [42] call fa // [59] phi from f0::@16 to fa [phi:f0::@16->fa] - // [59] phi (byte) bd#137 = (byte) bd#134 [phi:f0::@16->fa#0] -- register_copy - // [59] phi (byte) bc#39 = (byte) bc#101 [phi:f0::@16->fa#1] -- register_copy - // [59] phi (byte) bb#27 = (byte) bb#106 [phi:f0::@16->fa#2] -- register_copy + // [59] phi (byte) be#107 = (byte) be#102 [phi:f0::@16->fa#0] -- register_copy + // [59] phi (byte) bd#137 = (byte) bd#134 [phi:f0::@16->fa#1] -- register_copy + // [59] phi (byte) bc#39 = (byte) bc#101 [phi:f0::@16->fa#2] -- register_copy + // [59] phi (byte) bb#27 = (byte) bb#106 [phi:f0::@16->fa#3] -- register_copy jsr fa // [43] phi from f0::@16 f0::@6 to f0::@7 [phi:f0::@16/f0::@6->f0::@7] - // [43] phi (byte) bd#135 = (byte) bd#24 [phi:f0::@16/f0::@6->f0::@7#0] -- register_copy - // [43] phi (byte) bc#102 = (byte) bc#24 [phi:f0::@16/f0::@6->f0::@7#1] -- register_copy - // [43] phi (byte) bb#24 = (byte) bb#68 [phi:f0::@16/f0::@6->f0::@7#2] -- register_copy + // [43] phi (byte) be#103 = (byte) be#24 [phi:f0::@16/f0::@6->f0::@7#0] -- register_copy + // [43] phi (byte) bd#135 = (byte) bd#24 [phi:f0::@16/f0::@6->f0::@7#1] -- register_copy + // [43] phi (byte) bc#102 = (byte) bc#24 [phi:f0::@16/f0::@6->f0::@7#2] -- register_copy + // [43] phi (byte) bb#24 = (byte) bb#68 [phi:f0::@16/f0::@6->f0::@7#3] -- register_copy // f0::@7 __b7: // if(ba==7) @@ -5622,14 +6598,16 @@ f0: { // fa() // [47] call fa // [59] phi from f0::@17 to fa [phi:f0::@17->fa] - // [59] phi (byte) bd#137 = (byte) bd#135 [phi:f0::@17->fa#0] -- register_copy - // [59] phi (byte) bc#39 = (byte) bc#102 [phi:f0::@17->fa#1] -- register_copy - // [59] phi (byte) bb#27 = (byte) bb#107 [phi:f0::@17->fa#2] -- register_copy + // [59] phi (byte) be#107 = (byte) be#103 [phi:f0::@17->fa#0] -- register_copy + // [59] phi (byte) bd#137 = (byte) bd#135 [phi:f0::@17->fa#1] -- register_copy + // [59] phi (byte) bc#39 = (byte) bc#102 [phi:f0::@17->fa#2] -- register_copy + // [59] phi (byte) bb#27 = (byte) bb#107 [phi:f0::@17->fa#3] -- register_copy jsr fa // [48] phi from f0::@17 f0::@7 to f0::@8 [phi:f0::@17/f0::@7->f0::@8] - // [48] phi (byte) bd#136 = (byte) bd#24 [phi:f0::@17/f0::@7->f0::@8#0] -- register_copy - // [48] phi (byte) bc#103 = (byte) bc#24 [phi:f0::@17/f0::@7->f0::@8#1] -- register_copy - // [48] phi (byte) bb#25 = (byte) bb#10 [phi:f0::@17/f0::@7->f0::@8#2] -- register_copy + // [48] phi (byte) be#104 = (byte) be#24 [phi:f0::@17/f0::@7->f0::@8#0] -- register_copy + // [48] phi (byte) bd#136 = (byte) bd#24 [phi:f0::@17/f0::@7->f0::@8#1] -- register_copy + // [48] phi (byte) bc#103 = (byte) bc#24 [phi:f0::@17/f0::@7->f0::@8#2] -- register_copy + // [48] phi (byte) bb#25 = (byte) bb#10 [phi:f0::@17/f0::@7->f0::@8#3] -- register_copy // f0::@8 __b8: // if(ba==8) @@ -5647,14 +6625,16 @@ f0: { // fa() // [52] call fa // [59] phi from f0::@18 to fa [phi:f0::@18->fa] - // [59] phi (byte) bd#137 = (byte) bd#136 [phi:f0::@18->fa#0] -- register_copy - // [59] phi (byte) bc#39 = (byte) bc#103 [phi:f0::@18->fa#1] -- register_copy - // [59] phi (byte) bb#27 = (byte) bb#108 [phi:f0::@18->fa#2] -- register_copy + // [59] phi (byte) be#107 = (byte) be#104 [phi:f0::@18->fa#0] -- register_copy + // [59] phi (byte) bd#137 = (byte) bd#136 [phi:f0::@18->fa#1] -- register_copy + // [59] phi (byte) bc#39 = (byte) bc#103 [phi:f0::@18->fa#2] -- register_copy + // [59] phi (byte) bb#27 = (byte) bb#108 [phi:f0::@18->fa#3] -- register_copy jsr fa // [53] phi from f0::@18 f0::@8 to f0::@9 [phi:f0::@18/f0::@8->f0::@9] - // [53] phi (byte) bd#93 = (byte) bd#24 [phi:f0::@18/f0::@8->f0::@9#0] -- register_copy - // [53] phi (byte) bc#71 = (byte) bc#24 [phi:f0::@18/f0::@8->f0::@9#1] -- register_copy - // [53] phi (byte) bb#50 = (byte) bb#11 [phi:f0::@18/f0::@8->f0::@9#2] -- register_copy + // [53] phi (byte) be#105 = (byte) be#24 [phi:f0::@18/f0::@8->f0::@9#0] -- register_copy + // [53] phi (byte) bd#93 = (byte) bd#24 [phi:f0::@18/f0::@8->f0::@9#1] -- register_copy + // [53] phi (byte) bc#71 = (byte) bc#24 [phi:f0::@18/f0::@8->f0::@9#2] -- register_copy + // [53] phi (byte) bb#50 = (byte) bb#11 [phi:f0::@18/f0::@8->f0::@9#3] -- register_copy // f0::@9 __b9: // if(ba==9) @@ -5667,23 +6647,26 @@ f0: { // fa() // [56] call fa // [59] phi from f0::@19 to fa [phi:f0::@19->fa] - // [59] phi (byte) bd#137 = (byte) bd#93 [phi:f0::@19->fa#0] -- register_copy - // [59] phi (byte) bc#39 = (byte) bc#71 [phi:f0::@19->fa#1] -- register_copy - // [59] phi (byte) bb#27 = (byte) 0 [phi:f0::@19->fa#2] -- vbuz1=vbuc1 + // [59] phi (byte) be#107 = (byte) be#105 [phi:f0::@19->fa#0] -- register_copy + // [59] phi (byte) bd#137 = (byte) bd#93 [phi:f0::@19->fa#1] -- register_copy + // [59] phi (byte) bc#39 = (byte) bc#71 [phi:f0::@19->fa#2] -- register_copy + // [59] phi (byte) bb#27 = (byte) 0 [phi:f0::@19->fa#3] -- vbuz1=vbuc1 lda #0 sta.z bb_1 jsr fa // [57] phi from f0::@19 to f0::@return [phi:f0::@19->f0::@return] - // [57] phi (byte) bd#13 = (byte) bd#24 [phi:f0::@19->f0::@return#0] -- register_copy - // [57] phi (byte) bc#13 = (byte) bc#24 [phi:f0::@19->f0::@return#1] -- register_copy - // [57] phi (byte) bb#13 = (byte) 0 [phi:f0::@19->f0::@return#2] -- vbuz1=vbuc1 + // [57] phi (byte) be#13 = (byte) be#24 [phi:f0::@19->f0::@return#0] -- register_copy + // [57] phi (byte) bd#13 = (byte) bd#24 [phi:f0::@19->f0::@return#1] -- register_copy + // [57] phi (byte) bc#13 = (byte) bc#24 [phi:f0::@19->f0::@return#2] -- register_copy + // [57] phi (byte) bb#13 = (byte) 0 [phi:f0::@19->f0::@return#3] -- vbuz1=vbuc1 lda #0 sta.z bb rts // [57] phi from f0::@9 to f0::@return [phi:f0::@9->f0::@return] - // [57] phi (byte) bd#13 = (byte) bd#93 [phi:f0::@9->f0::@return#0] -- register_copy - // [57] phi (byte) bc#13 = (byte) bc#71 [phi:f0::@9->f0::@return#1] -- register_copy - // [57] phi (byte) bb#13 = (byte) bb#50 [phi:f0::@9->f0::@return#2] -- register_copy + // [57] phi (byte) be#13 = (byte) be#105 [phi:f0::@9->f0::@return#0] -- register_copy + // [57] phi (byte) bd#13 = (byte) bd#93 [phi:f0::@9->f0::@return#1] -- register_copy + // [57] phi (byte) bc#13 = (byte) bc#71 [phi:f0::@9->f0::@return#2] -- register_copy + // [57] phi (byte) bb#13 = (byte) bb#50 [phi:f0::@9->f0::@return#3] -- register_copy // f0::@return __breturn: // } @@ -5706,12 +6689,14 @@ fa: { // fb() // [63] call fb // [110] phi from fa::@10 to fb [phi:fa::@10->fb] - // [110] phi (byte) bd#106 = (byte) bd#137 [phi:fa::@10->fb#0] -- register_copy - // [110] phi (byte) bc#113 = (byte) bc#172 [phi:fa::@10->fb#1] -- register_copy + // [110] phi (byte) be#118 = (byte) be#107 [phi:fa::@10->fb#0] -- register_copy + // [110] phi (byte) bd#106 = (byte) bd#137 [phi:fa::@10->fb#1] -- register_copy + // [110] phi (byte) bc#113 = (byte) bc#172 [phi:fa::@10->fb#2] -- register_copy jsr fb // [64] phi from fa fa::@10 to fa::@1 [phi:fa/fa::@10->fa::@1] - // [64] phi (byte) bd#138 = (byte) bd#137 [phi:fa/fa::@10->fa::@1#0] -- register_copy - // [64] phi (byte) bc#40 = (byte) bc#39 [phi:fa/fa::@10->fa::@1#1] -- register_copy + // [64] phi (byte) be#108 = (byte) be#107 [phi:fa/fa::@10->fa::@1#0] -- register_copy + // [64] phi (byte) bd#138 = (byte) bd#137 [phi:fa/fa::@10->fa::@1#1] -- register_copy + // [64] phi (byte) bc#40 = (byte) bc#39 [phi:fa/fa::@10->fa::@1#2] -- register_copy // fa::@1 __b1: // if(bb==1) @@ -5728,12 +6713,14 @@ fa: { // fb() // [68] call fb // [110] phi from fa::@11 to fb [phi:fa::@11->fb] - // [110] phi (byte) bd#106 = (byte) bd#138 [phi:fa::@11->fb#0] -- register_copy - // [110] phi (byte) bc#113 = (byte) bc#173 [phi:fa::@11->fb#1] -- register_copy + // [110] phi (byte) be#118 = (byte) be#108 [phi:fa::@11->fb#0] -- register_copy + // [110] phi (byte) bd#106 = (byte) bd#138 [phi:fa::@11->fb#1] -- register_copy + // [110] phi (byte) bc#113 = (byte) bc#173 [phi:fa::@11->fb#2] -- register_copy jsr fb // [69] phi from fa::@1 fa::@11 to fa::@2 [phi:fa::@1/fa::@11->fa::@2] - // [69] phi (byte) bd#139 = (byte) bd#138 [phi:fa::@1/fa::@11->fa::@2#0] -- register_copy - // [69] phi (byte) bc#41 = (byte) bc#40 [phi:fa::@1/fa::@11->fa::@2#1] -- register_copy + // [69] phi (byte) be#109 = (byte) be#108 [phi:fa::@1/fa::@11->fa::@2#0] -- register_copy + // [69] phi (byte) bd#139 = (byte) bd#138 [phi:fa::@1/fa::@11->fa::@2#1] -- register_copy + // [69] phi (byte) bc#41 = (byte) bc#40 [phi:fa::@1/fa::@11->fa::@2#2] -- register_copy // fa::@2 __b2: // if(bb==2) @@ -5750,12 +6737,14 @@ fa: { // fb() // [73] call fb // [110] phi from fa::@12 to fb [phi:fa::@12->fb] - // [110] phi (byte) bd#106 = (byte) bd#139 [phi:fa::@12->fb#0] -- register_copy - // [110] phi (byte) bc#113 = (byte) bc#174 [phi:fa::@12->fb#1] -- register_copy + // [110] phi (byte) be#118 = (byte) be#109 [phi:fa::@12->fb#0] -- register_copy + // [110] phi (byte) bd#106 = (byte) bd#139 [phi:fa::@12->fb#1] -- register_copy + // [110] phi (byte) bc#113 = (byte) bc#174 [phi:fa::@12->fb#2] -- register_copy jsr fb // [74] phi from fa::@12 fa::@2 to fa::@3 [phi:fa::@12/fa::@2->fa::@3] - // [74] phi (byte) bd#140 = (byte) bd#35 [phi:fa::@12/fa::@2->fa::@3#0] -- register_copy - // [74] phi (byte) bc#42 = (byte) bc#106 [phi:fa::@12/fa::@2->fa::@3#1] -- register_copy + // [74] phi (byte) be#110 = (byte) be#35 [phi:fa::@12/fa::@2->fa::@3#0] -- register_copy + // [74] phi (byte) bd#140 = (byte) bd#35 [phi:fa::@12/fa::@2->fa::@3#1] -- register_copy + // [74] phi (byte) bc#42 = (byte) bc#106 [phi:fa::@12/fa::@2->fa::@3#2] -- register_copy // fa::@3 __b3: // if(bb==3) @@ -5772,12 +6761,14 @@ fa: { // fb() // [78] call fb // [110] phi from fa::@13 to fb [phi:fa::@13->fb] - // [110] phi (byte) bd#106 = (byte) bd#140 [phi:fa::@13->fb#0] -- register_copy - // [110] phi (byte) bc#113 = (byte) bc#175 [phi:fa::@13->fb#1] -- register_copy + // [110] phi (byte) be#118 = (byte) be#110 [phi:fa::@13->fb#0] -- register_copy + // [110] phi (byte) bd#106 = (byte) bd#140 [phi:fa::@13->fb#1] -- register_copy + // [110] phi (byte) bc#113 = (byte) bc#175 [phi:fa::@13->fb#2] -- register_copy jsr fb // [79] phi from fa::@13 fa::@3 to fa::@4 [phi:fa::@13/fa::@3->fa::@4] - // [79] phi (byte) bd#141 = (byte) bd#35 [phi:fa::@13/fa::@3->fa::@4#0] -- register_copy - // [79] phi (byte) bc#43 = (byte) bc#107 [phi:fa::@13/fa::@3->fa::@4#1] -- register_copy + // [79] phi (byte) be#111 = (byte) be#35 [phi:fa::@13/fa::@3->fa::@4#0] -- register_copy + // [79] phi (byte) bd#141 = (byte) bd#35 [phi:fa::@13/fa::@3->fa::@4#1] -- register_copy + // [79] phi (byte) bc#43 = (byte) bc#107 [phi:fa::@13/fa::@3->fa::@4#2] -- register_copy // fa::@4 __b4: // if(bb==4) @@ -5794,12 +6785,14 @@ fa: { // fb() // [83] call fb // [110] phi from fa::@14 to fb [phi:fa::@14->fb] - // [110] phi (byte) bd#106 = (byte) bd#141 [phi:fa::@14->fb#0] -- register_copy - // [110] phi (byte) bc#113 = (byte) bc#176 [phi:fa::@14->fb#1] -- register_copy + // [110] phi (byte) be#118 = (byte) be#111 [phi:fa::@14->fb#0] -- register_copy + // [110] phi (byte) bd#106 = (byte) bd#141 [phi:fa::@14->fb#1] -- register_copy + // [110] phi (byte) bc#113 = (byte) bc#176 [phi:fa::@14->fb#2] -- register_copy jsr fb // [84] phi from fa::@14 fa::@4 to fa::@5 [phi:fa::@14/fa::@4->fa::@5] - // [84] phi (byte) bd#100 = (byte) bd#35 [phi:fa::@14/fa::@4->fa::@5#0] -- register_copy - // [84] phi (byte) bc#44 = (byte) bc#108 [phi:fa::@14/fa::@4->fa::@5#1] -- register_copy + // [84] phi (byte) be#112 = (byte) be#35 [phi:fa::@14/fa::@4->fa::@5#0] -- register_copy + // [84] phi (byte) bd#100 = (byte) bd#35 [phi:fa::@14/fa::@4->fa::@5#1] -- register_copy + // [84] phi (byte) bc#44 = (byte) bc#108 [phi:fa::@14/fa::@4->fa::@5#2] -- register_copy // fa::@5 __b5: // if(bb==5) @@ -5816,12 +6809,14 @@ fa: { // fb() // [88] call fb // [110] phi from fa::@15 to fb [phi:fa::@15->fb] - // [110] phi (byte) bd#106 = (byte) bd#100 [phi:fa::@15->fb#0] -- register_copy - // [110] phi (byte) bc#113 = (byte) bc#177 [phi:fa::@15->fb#1] -- register_copy + // [110] phi (byte) be#118 = (byte) be#112 [phi:fa::@15->fb#0] -- register_copy + // [110] phi (byte) bd#106 = (byte) bd#100 [phi:fa::@15->fb#1] -- register_copy + // [110] phi (byte) bc#113 = (byte) bc#177 [phi:fa::@15->fb#2] -- register_copy jsr fb // [89] phi from fa::@15 fa::@5 to fa::@6 [phi:fa::@15/fa::@5->fa::@6] - // [89] phi (byte) bd#101 = (byte) bd#35 [phi:fa::@15/fa::@5->fa::@6#0] -- register_copy - // [89] phi (byte) bc#45 = (byte) bc#109 [phi:fa::@15/fa::@5->fa::@6#1] -- register_copy + // [89] phi (byte) be#113 = (byte) be#35 [phi:fa::@15/fa::@5->fa::@6#0] -- register_copy + // [89] phi (byte) bd#101 = (byte) bd#35 [phi:fa::@15/fa::@5->fa::@6#1] -- register_copy + // [89] phi (byte) bc#45 = (byte) bc#109 [phi:fa::@15/fa::@5->fa::@6#2] -- register_copy // fa::@6 __b6: // if(bb==6) @@ -5838,12 +6833,14 @@ fa: { // fb() // [93] call fb // [110] phi from fa::@16 to fb [phi:fa::@16->fb] - // [110] phi (byte) bd#106 = (byte) bd#101 [phi:fa::@16->fb#0] -- register_copy - // [110] phi (byte) bc#113 = (byte) bc#178 [phi:fa::@16->fb#1] -- register_copy + // [110] phi (byte) be#118 = (byte) be#113 [phi:fa::@16->fb#0] -- register_copy + // [110] phi (byte) bd#106 = (byte) bd#101 [phi:fa::@16->fb#1] -- register_copy + // [110] phi (byte) bc#113 = (byte) bc#178 [phi:fa::@16->fb#2] -- register_copy jsr fb // [94] phi from fa::@16 fa::@6 to fa::@7 [phi:fa::@16/fa::@6->fa::@7] - // [94] phi (byte) bd#102 = (byte) bd#35 [phi:fa::@16/fa::@6->fa::@7#0] -- register_copy - // [94] phi (byte) bc#46 = (byte) bc#110 [phi:fa::@16/fa::@6->fa::@7#1] -- register_copy + // [94] phi (byte) be#114 = (byte) be#35 [phi:fa::@16/fa::@6->fa::@7#0] -- register_copy + // [94] phi (byte) bd#102 = (byte) bd#35 [phi:fa::@16/fa::@6->fa::@7#1] -- register_copy + // [94] phi (byte) bc#46 = (byte) bc#110 [phi:fa::@16/fa::@6->fa::@7#2] -- register_copy // fa::@7 __b7: // if(bb==7) @@ -5860,12 +6857,14 @@ fa: { // fb() // [98] call fb // [110] phi from fa::@17 to fb [phi:fa::@17->fb] - // [110] phi (byte) bd#106 = (byte) bd#102 [phi:fa::@17->fb#0] -- register_copy - // [110] phi (byte) bc#113 = (byte) bc#179 [phi:fa::@17->fb#1] -- register_copy + // [110] phi (byte) be#118 = (byte) be#114 [phi:fa::@17->fb#0] -- register_copy + // [110] phi (byte) bd#106 = (byte) bd#102 [phi:fa::@17->fb#1] -- register_copy + // [110] phi (byte) bc#113 = (byte) bc#179 [phi:fa::@17->fb#2] -- register_copy jsr fb // [99] phi from fa::@17 fa::@7 to fa::@8 [phi:fa::@17/fa::@7->fa::@8] - // [99] phi (byte) bd#103 = (byte) bd#35 [phi:fa::@17/fa::@7->fa::@8#0] -- register_copy - // [99] phi (byte) bc#47 = (byte) bc#111 [phi:fa::@17/fa::@7->fa::@8#1] -- register_copy + // [99] phi (byte) be#115 = (byte) be#35 [phi:fa::@17/fa::@7->fa::@8#0] -- register_copy + // [99] phi (byte) bd#103 = (byte) bd#35 [phi:fa::@17/fa::@7->fa::@8#1] -- register_copy + // [99] phi (byte) bc#47 = (byte) bc#111 [phi:fa::@17/fa::@7->fa::@8#2] -- register_copy // fa::@8 __b8: // if(bb==8) @@ -5882,12 +6881,14 @@ fa: { // fb() // [103] call fb // [110] phi from fa::@18 to fb [phi:fa::@18->fb] - // [110] phi (byte) bd#106 = (byte) bd#103 [phi:fa::@18->fb#0] -- register_copy - // [110] phi (byte) bc#113 = (byte) bc#180 [phi:fa::@18->fb#1] -- register_copy + // [110] phi (byte) be#118 = (byte) be#115 [phi:fa::@18->fb#0] -- register_copy + // [110] phi (byte) bd#106 = (byte) bd#103 [phi:fa::@18->fb#1] -- register_copy + // [110] phi (byte) bc#113 = (byte) bc#180 [phi:fa::@18->fb#2] -- register_copy jsr fb // [104] phi from fa::@18 fa::@8 to fa::@9 [phi:fa::@18/fa::@8->fa::@9] - // [104] phi (byte) bd#104 = (byte) bd#35 [phi:fa::@18/fa::@8->fa::@9#0] -- register_copy - // [104] phi (byte) bc#83 = (byte) bc#112 [phi:fa::@18/fa::@8->fa::@9#1] -- register_copy + // [104] phi (byte) be#116 = (byte) be#35 [phi:fa::@18/fa::@8->fa::@9#0] -- register_copy + // [104] phi (byte) bd#104 = (byte) bd#35 [phi:fa::@18/fa::@8->fa::@9#1] -- register_copy + // [104] phi (byte) bc#83 = (byte) bc#112 [phi:fa::@18/fa::@8->fa::@9#2] -- register_copy // fa::@9 __b9: // if(bb==9) @@ -5900,19 +6901,22 @@ fa: { // fb() // [107] call fb // [110] phi from fa::@19 to fb [phi:fa::@19->fb] - // [110] phi (byte) bd#106 = (byte) bd#104 [phi:fa::@19->fb#0] -- register_copy - // [110] phi (byte) bc#113 = (byte) 0 [phi:fa::@19->fb#1] -- vbuz1=vbuc1 + // [110] phi (byte) be#118 = (byte) be#116 [phi:fa::@19->fb#0] -- register_copy + // [110] phi (byte) bd#106 = (byte) bd#104 [phi:fa::@19->fb#1] -- register_copy + // [110] phi (byte) bc#113 = (byte) 0 [phi:fa::@19->fb#2] -- vbuz1=vbuc1 lda #0 sta.z bc jsr fb // [108] phi from fa::@19 to fa::@return [phi:fa::@19->fa::@return] - // [108] phi (byte) bd#24 = (byte) bd#35 [phi:fa::@19->fa::@return#0] -- register_copy - // [108] phi (byte) bc#24 = (byte) 0 [phi:fa::@19->fa::@return#1] -- vbuxx=vbuc1 + // [108] phi (byte) be#24 = (byte) be#35 [phi:fa::@19->fa::@return#0] -- register_copy + // [108] phi (byte) bd#24 = (byte) bd#35 [phi:fa::@19->fa::@return#1] -- register_copy + // [108] phi (byte) bc#24 = (byte) 0 [phi:fa::@19->fa::@return#2] -- vbuxx=vbuc1 ldx #0 rts // [108] phi from fa::@9 to fa::@return [phi:fa::@9->fa::@return] - // [108] phi (byte) bd#24 = (byte) bd#104 [phi:fa::@9->fa::@return#0] -- register_copy - // [108] phi (byte) bc#24 = (byte) bc#83 [phi:fa::@9->fa::@return#1] -- register_copy + // [108] phi (byte) be#24 = (byte) be#116 [phi:fa::@9->fa::@return#0] -- register_copy + // [108] phi (byte) bd#24 = (byte) bd#104 [phi:fa::@9->fa::@return#1] -- register_copy + // [108] phi (byte) bc#24 = (byte) bc#83 [phi:fa::@9->fa::@return#2] -- register_copy // fa::@return __breturn: // } @@ -5935,10 +6939,12 @@ fb: { // fc() // [114] call fc // [161] phi from fb::@10 to fc [phi:fb::@10->fc] - // [161] phi (byte) bd#117 = (byte) bd#235 [phi:fb::@10->fc#0] -- register_copy + // [161] phi (byte) be#129 = (byte) be#118 [phi:fb::@10->fc#0] -- register_copy + // [161] phi (byte) bd#117 = (byte) bd#235 [phi:fb::@10->fc#1] -- register_copy jsr fc // [115] phi from fb fb::@10 to fb::@1 [phi:fb/fb::@10->fb::@1] - // [115] phi (byte) bd#107 = (byte) bd#106 [phi:fb/fb::@10->fb::@1#0] -- register_copy + // [115] phi (byte) be#119 = (byte) be#118 [phi:fb/fb::@10->fb::@1#0] -- register_copy + // [115] phi (byte) bd#107 = (byte) bd#106 [phi:fb/fb::@10->fb::@1#1] -- register_copy // fb::@1 __b1: // if(bc==1) @@ -5955,10 +6961,12 @@ fb: { // fc() // [119] call fc // [161] phi from fb::@11 to fc [phi:fb::@11->fc] - // [161] phi (byte) bd#117 = (byte) bd#236 [phi:fb::@11->fc#0] -- register_copy + // [161] phi (byte) be#129 = (byte) be#119 [phi:fb::@11->fc#0] -- register_copy + // [161] phi (byte) bd#117 = (byte) bd#236 [phi:fb::@11->fc#1] -- register_copy jsr fc // [120] phi from fb::@1 fb::@11 to fb::@2 [phi:fb::@1/fb::@11->fb::@2] - // [120] phi (byte) bd#108 = (byte) bd#107 [phi:fb::@1/fb::@11->fb::@2#0] -- register_copy + // [120] phi (byte) be#120 = (byte) be#119 [phi:fb::@1/fb::@11->fb::@2#0] -- register_copy + // [120] phi (byte) bd#108 = (byte) bd#107 [phi:fb::@1/fb::@11->fb::@2#1] -- register_copy // fb::@2 __b2: // if(bc==2) @@ -5975,10 +6983,12 @@ fb: { // fc() // [124] call fc // [161] phi from fb::@12 to fc [phi:fb::@12->fc] - // [161] phi (byte) bd#117 = (byte) bd#237 [phi:fb::@12->fc#0] -- register_copy + // [161] phi (byte) be#129 = (byte) be#120 [phi:fb::@12->fc#0] -- register_copy + // [161] phi (byte) bd#117 = (byte) bd#237 [phi:fb::@12->fc#1] -- register_copy jsr fc // [125] phi from fb::@12 fb::@2 to fb::@3 [phi:fb::@12/fb::@2->fb::@3] - // [125] phi (byte) bd#109 = (byte) bd#148 [phi:fb::@12/fb::@2->fb::@3#0] -- register_copy + // [125] phi (byte) be#121 = (byte) be#46 [phi:fb::@12/fb::@2->fb::@3#0] -- register_copy + // [125] phi (byte) bd#109 = (byte) bd#148 [phi:fb::@12/fb::@2->fb::@3#1] -- register_copy // fb::@3 __b3: // if(bc==3) @@ -5995,10 +7005,12 @@ fb: { // fc() // [129] call fc // [161] phi from fb::@13 to fc [phi:fb::@13->fc] - // [161] phi (byte) bd#117 = (byte) bd#238 [phi:fb::@13->fc#0] -- register_copy + // [161] phi (byte) be#129 = (byte) be#121 [phi:fb::@13->fc#0] -- register_copy + // [161] phi (byte) bd#117 = (byte) bd#238 [phi:fb::@13->fc#1] -- register_copy jsr fc // [130] phi from fb::@13 fb::@3 to fb::@4 [phi:fb::@13/fb::@3->fb::@4] - // [130] phi (byte) bd#110 = (byte) bd#149 [phi:fb::@13/fb::@3->fb::@4#0] -- register_copy + // [130] phi (byte) be#122 = (byte) be#46 [phi:fb::@13/fb::@3->fb::@4#0] -- register_copy + // [130] phi (byte) bd#110 = (byte) bd#149 [phi:fb::@13/fb::@3->fb::@4#1] -- register_copy // fb::@4 __b4: // if(bc==4) @@ -6015,10 +7027,12 @@ fb: { // fc() // [134] call fc // [161] phi from fb::@14 to fc [phi:fb::@14->fc] - // [161] phi (byte) bd#117 = (byte) bd#239 [phi:fb::@14->fc#0] -- register_copy + // [161] phi (byte) be#129 = (byte) be#122 [phi:fb::@14->fc#0] -- register_copy + // [161] phi (byte) bd#117 = (byte) bd#239 [phi:fb::@14->fc#1] -- register_copy jsr fc // [135] phi from fb::@14 fb::@4 to fb::@5 [phi:fb::@14/fb::@4->fb::@5] - // [135] phi (byte) bd#111 = (byte) bd#150 [phi:fb::@14/fb::@4->fb::@5#0] -- register_copy + // [135] phi (byte) be#123 = (byte) be#46 [phi:fb::@14/fb::@4->fb::@5#0] -- register_copy + // [135] phi (byte) bd#111 = (byte) bd#150 [phi:fb::@14/fb::@4->fb::@5#1] -- register_copy // fb::@5 __b5: // if(bc==5) @@ -6035,10 +7049,12 @@ fb: { // fc() // [139] call fc // [161] phi from fb::@15 to fc [phi:fb::@15->fc] - // [161] phi (byte) bd#117 = (byte) bd#240 [phi:fb::@15->fc#0] -- register_copy + // [161] phi (byte) be#129 = (byte) be#123 [phi:fb::@15->fc#0] -- register_copy + // [161] phi (byte) bd#117 = (byte) bd#240 [phi:fb::@15->fc#1] -- register_copy jsr fc // [140] phi from fb::@15 fb::@5 to fb::@6 [phi:fb::@15/fb::@5->fb::@6] - // [140] phi (byte) bd#112 = (byte) bd#151 [phi:fb::@15/fb::@5->fb::@6#0] -- register_copy + // [140] phi (byte) be#124 = (byte) be#46 [phi:fb::@15/fb::@5->fb::@6#0] -- register_copy + // [140] phi (byte) bd#112 = (byte) bd#151 [phi:fb::@15/fb::@5->fb::@6#1] -- register_copy // fb::@6 __b6: // if(bc==6) @@ -6055,10 +7071,12 @@ fb: { // fc() // [144] call fc // [161] phi from fb::@16 to fc [phi:fb::@16->fc] - // [161] phi (byte) bd#117 = (byte) bd#241 [phi:fb::@16->fc#0] -- register_copy + // [161] phi (byte) be#129 = (byte) be#124 [phi:fb::@16->fc#0] -- register_copy + // [161] phi (byte) bd#117 = (byte) bd#241 [phi:fb::@16->fc#1] -- register_copy jsr fc // [145] phi from fb::@16 fb::@6 to fb::@7 [phi:fb::@16/fb::@6->fb::@7] - // [145] phi (byte) bd#113 = (byte) bd#152 [phi:fb::@16/fb::@6->fb::@7#0] -- register_copy + // [145] phi (byte) be#125 = (byte) be#46 [phi:fb::@16/fb::@6->fb::@7#0] -- register_copy + // [145] phi (byte) bd#113 = (byte) bd#152 [phi:fb::@16/fb::@6->fb::@7#1] -- register_copy // fb::@7 __b7: // if(bc==7) @@ -6075,10 +7093,12 @@ fb: { // fc() // [149] call fc // [161] phi from fb::@17 to fc [phi:fb::@17->fc] - // [161] phi (byte) bd#117 = (byte) bd#242 [phi:fb::@17->fc#0] -- register_copy + // [161] phi (byte) be#129 = (byte) be#125 [phi:fb::@17->fc#0] -- register_copy + // [161] phi (byte) bd#117 = (byte) bd#242 [phi:fb::@17->fc#1] -- register_copy jsr fc // [150] phi from fb::@17 fb::@7 to fb::@8 [phi:fb::@17/fb::@7->fb::@8] - // [150] phi (byte) bd#114 = (byte) bd#153 [phi:fb::@17/fb::@7->fb::@8#0] -- register_copy + // [150] phi (byte) be#126 = (byte) be#46 [phi:fb::@17/fb::@7->fb::@8#0] -- register_copy + // [150] phi (byte) bd#114 = (byte) bd#153 [phi:fb::@17/fb::@7->fb::@8#1] -- register_copy // fb::@8 __b8: // if(bc==8) @@ -6095,10 +7115,12 @@ fb: { // fc() // [154] call fc // [161] phi from fb::@18 to fc [phi:fb::@18->fc] - // [161] phi (byte) bd#117 = (byte) bd#243 [phi:fb::@18->fc#0] -- register_copy + // [161] phi (byte) be#129 = (byte) be#126 [phi:fb::@18->fc#0] -- register_copy + // [161] phi (byte) bd#117 = (byte) bd#243 [phi:fb::@18->fc#1] -- register_copy jsr fc // [155] phi from fb::@18 fb::@8 to fb::@9 [phi:fb::@18/fb::@8->fb::@9] - // [155] phi (byte) bd#116 = (byte) bd#154 [phi:fb::@18/fb::@8->fb::@9#0] -- register_copy + // [155] phi (byte) be#127 = (byte) be#46 [phi:fb::@18/fb::@8->fb::@9#0] -- register_copy + // [155] phi (byte) bd#116 = (byte) bd#154 [phi:fb::@18/fb::@8->fb::@9#1] -- register_copy // fb::@9 __b9: // if(bc==9) @@ -6111,15 +7133,18 @@ fb: { // fc() // [158] call fc // [161] phi from fb::@19 to fc [phi:fb::@19->fc] - // [161] phi (byte) bd#117 = (byte) 0 [phi:fb::@19->fc#0] -- vbuaa=vbuc1 + // [161] phi (byte) be#129 = (byte) be#127 [phi:fb::@19->fc#0] -- register_copy + // [161] phi (byte) bd#117 = (byte) 0 [phi:fb::@19->fc#1] -- vbuaa=vbuc1 lda #0 jsr fc // [159] phi from fb::@19 to fb::@return [phi:fb::@19->fb::@return] - // [159] phi (byte) bd#35 = (byte) 0 [phi:fb::@19->fb::@return#0] -- vbuyy=vbuc1 + // [159] phi (byte) be#35 = (byte) be#46 [phi:fb::@19->fb::@return#0] -- register_copy + // [159] phi (byte) bd#35 = (byte) 0 [phi:fb::@19->fb::@return#1] -- vbuyy=vbuc1 ldy #0 rts // [159] phi from fb::@9 to fb::@return [phi:fb::@9->fb::@return] - // [159] phi (byte) bd#35 = (byte) bd#116 [phi:fb::@9->fb::@return#0] -- register_copy + // [159] phi (byte) be#35 = (byte) be#127 [phi:fb::@9->fb::@return#0] -- register_copy + // [159] phi (byte) bd#35 = (byte) bd#116 [phi:fb::@9->fb::@return#1] -- register_copy // fb::@return __breturn: // } @@ -6131,65 +7156,128 @@ fc: { // if(bd==0) // [162] if((byte) bd#117!=(byte) 0) goto fc::@1 -- vbuaa_neq_0_then_la1 cmp #0 - // [163] phi from fc to fc::@10 [phi:fc->fc::@10] + bne __b1 // fc::@10 + // be++; + // [163] (byte) be#36 ← ++ (byte) be#129 -- vbuz1=_inc_vbuz1 + inc.z be + // [164] phi from fc fc::@10 to fc::@1 [phi:fc/fc::@10->fc::@1] + // [164] phi (byte) be#130 = (byte) be#129 [phi:fc/fc::@10->fc::@1#0] -- register_copy // fc::@1 + __b1: // if(bd==1) - // [164] if((byte) bd#117!=(byte) 1) goto fc::@2 -- vbuaa_neq_vbuc1_then_la1 + // [165] if((byte) bd#117!=(byte) 1) goto fc::@2 -- vbuaa_neq_vbuc1_then_la1 cmp #1 - // [165] phi from fc::@1 to fc::@11 [phi:fc::@1->fc::@11] + bne __b2 // fc::@11 + // be++; + // [166] (byte) be#37 ← ++ (byte) be#130 -- vbuz1=_inc_vbuz1 + inc.z be + // [167] phi from fc::@1 fc::@11 to fc::@2 [phi:fc::@1/fc::@11->fc::@2] + // [167] phi (byte) be#131 = (byte) be#130 [phi:fc::@1/fc::@11->fc::@2#0] -- register_copy // fc::@2 + __b2: // if(bd==2) - // [166] if((byte) bd#117!=(byte) 2) goto fc::@3 -- vbuaa_neq_vbuc1_then_la1 + // [168] if((byte) bd#117!=(byte) 2) goto fc::@3 -- vbuaa_neq_vbuc1_then_la1 cmp #2 - // [167] phi from fc::@2 to fc::@12 [phi:fc::@2->fc::@12] + bne __b3 // fc::@12 + // be++; + // [169] (byte) be#38 ← ++ (byte) be#131 -- vbuz1=_inc_vbuz1 + inc.z be + // [170] phi from fc::@12 fc::@2 to fc::@3 [phi:fc::@12/fc::@2->fc::@3] + // [170] phi (byte) be#132 = (byte) be#38 [phi:fc::@12/fc::@2->fc::@3#0] -- register_copy // fc::@3 + __b3: // if(bd==3) - // [168] if((byte) bd#117!=(byte) 3) goto fc::@4 -- vbuaa_neq_vbuc1_then_la1 + // [171] if((byte) bd#117!=(byte) 3) goto fc::@4 -- vbuaa_neq_vbuc1_then_la1 cmp #3 - // [169] phi from fc::@3 to fc::@13 [phi:fc::@3->fc::@13] + bne __b4 // fc::@13 + // be++; + // [172] (byte) be#39 ← ++ (byte) be#132 -- vbuz1=_inc_vbuz1 + inc.z be + // [173] phi from fc::@13 fc::@3 to fc::@4 [phi:fc::@13/fc::@3->fc::@4] + // [173] phi (byte) be#133 = (byte) be#39 [phi:fc::@13/fc::@3->fc::@4#0] -- register_copy // fc::@4 + __b4: // if(bd==4) - // [170] if((byte) bd#117!=(byte) 4) goto fc::@5 -- vbuaa_neq_vbuc1_then_la1 + // [174] if((byte) bd#117!=(byte) 4) goto fc::@5 -- vbuaa_neq_vbuc1_then_la1 cmp #4 - // [171] phi from fc::@4 to fc::@14 [phi:fc::@4->fc::@14] + bne __b5 // fc::@14 + // be++; + // [175] (byte) be#40 ← ++ (byte) be#133 -- vbuz1=_inc_vbuz1 + inc.z be + // [176] phi from fc::@14 fc::@4 to fc::@5 [phi:fc::@14/fc::@4->fc::@5] + // [176] phi (byte) be#134 = (byte) be#40 [phi:fc::@14/fc::@4->fc::@5#0] -- register_copy // fc::@5 + __b5: // if(bd==5) - // [172] if((byte) bd#117!=(byte) 5) goto fc::@6 -- vbuaa_neq_vbuc1_then_la1 + // [177] if((byte) bd#117!=(byte) 5) goto fc::@6 -- vbuaa_neq_vbuc1_then_la1 cmp #5 - // [173] phi from fc::@5 to fc::@15 [phi:fc::@5->fc::@15] + bne __b6 // fc::@15 + // be++; + // [178] (byte) be#41 ← ++ (byte) be#134 -- vbuz1=_inc_vbuz1 + inc.z be + // [179] phi from fc::@15 fc::@5 to fc::@6 [phi:fc::@15/fc::@5->fc::@6] + // [179] phi (byte) be#135 = (byte) be#41 [phi:fc::@15/fc::@5->fc::@6#0] -- register_copy // fc::@6 + __b6: // if(bd==6) - // [174] if((byte) bd#117!=(byte) 6) goto fc::@7 -- vbuaa_neq_vbuc1_then_la1 + // [180] if((byte) bd#117!=(byte) 6) goto fc::@7 -- vbuaa_neq_vbuc1_then_la1 cmp #6 - // [175] phi from fc::@6 to fc::@16 [phi:fc::@6->fc::@16] + bne __b7 // fc::@16 + // be++; + // [181] (byte) be#42 ← ++ (byte) be#135 -- vbuz1=_inc_vbuz1 + inc.z be + // [182] phi from fc::@16 fc::@6 to fc::@7 [phi:fc::@16/fc::@6->fc::@7] + // [182] phi (byte) be#136 = (byte) be#42 [phi:fc::@16/fc::@6->fc::@7#0] -- register_copy // fc::@7 + __b7: // if(bd==7) - // [176] if((byte) bd#117!=(byte) 7) goto fc::@8 -- vbuaa_neq_vbuc1_then_la1 + // [183] if((byte) bd#117!=(byte) 7) goto fc::@8 -- vbuaa_neq_vbuc1_then_la1 cmp #7 - // [177] phi from fc::@7 to fc::@17 [phi:fc::@7->fc::@17] + bne __b8 // fc::@17 + // be++; + // [184] (byte) be#43 ← ++ (byte) be#136 -- vbuz1=_inc_vbuz1 + inc.z be + // [185] phi from fc::@17 fc::@7 to fc::@8 [phi:fc::@17/fc::@7->fc::@8] + // [185] phi (byte) be#137 = (byte) be#43 [phi:fc::@17/fc::@7->fc::@8#0] -- register_copy // fc::@8 + __b8: // if(bd==8) - // [178] if((byte) bd#117!=(byte) 8) goto fc::@9 -- vbuaa_neq_vbuc1_then_la1 + // [186] if((byte) bd#117!=(byte) 8) goto fc::@9 -- vbuaa_neq_vbuc1_then_la1 cmp #8 - // [179] phi from fc::@8 to fc::@18 [phi:fc::@8->fc::@18] + bne __b9 // fc::@18 + // be++; + // [187] (byte) be#44 ← ++ (byte) be#137 -- vbuz1=_inc_vbuz1 + inc.z be + // [188] phi from fc::@18 fc::@8 to fc::@9 [phi:fc::@18/fc::@8->fc::@9] + // [188] phi (byte) be#138 = (byte) be#44 [phi:fc::@18/fc::@8->fc::@9#0] -- register_copy // fc::@9 + __b9: // if(bd==9) - // [180] if((byte) bd#117!=(byte) 9) goto fc::@return -- vbuaa_neq_vbuc1_then_la1 + // [189] if((byte) bd#117!=(byte) 9) goto fc::@19 -- vbuaa_neq_vbuc1_then_la1 cmp #9 - // [181] phi from fc::@9 to fc::@19 [phi:fc::@9->fc::@19] + bne __b19 + // [191] phi from fc::@9 to fc::@return [phi:fc::@9->fc::@return] + // [191] phi (byte) be#46 = (byte) 0 [phi:fc::@9->fc::@return#0] -- vbuz1=vbuc1 + lda #0 + sta.z be + rts + // [190] phi from fc::@9 to fc::@19 [phi:fc::@9->fc::@19] // fc::@19 + __b19: + // [191] phi from fc::@19 to fc::@return [phi:fc::@19->fc::@return] + // [191] phi (byte) be#46 = (byte) be#138 [phi:fc::@19->fc::@return#0] -- register_copy // fc::@return // } - // [182] return + // [192] return rts } // File Data diff --git a/src/test/ref/no-recursion-heavy.sym b/src/test/ref/no-recursion-heavy.sym index bf27aac0b..64e387c5c 100644 --- a/src/test/ref/no-recursion-heavy.sym +++ b/src/test/ref/no-recursion-heavy.sym @@ -93,7 +93,7 @@ (byte) bd#113 reg byte y 4.0 (byte) bd#114 reg byte y 4.0 (byte) bd#116 reg byte y 3.0 -(byte) bd#117 reg byte a 1.9999999999999991 +(byte) bd#117 reg byte a 1.3571428571428568 (byte) bd#129 reg byte y 2.0 (byte) bd#13 reg byte y 3.75 (byte) bd#130 reg byte y 2.0 @@ -130,6 +130,60 @@ (byte) bd#243 reg byte a 4.0 (byte) bd#35 reg byte y 1.8333333333333335 (byte) bd#93 reg byte y 2.6666666666666665 +(byte) be +(byte) be#100 be zp[1]:6 2.0 +(byte) be#101 be zp[1]:6 2.0 +(byte) be#102 be zp[1]:6 2.0 +(byte) be#103 be zp[1]:6 2.0 +(byte) be#104 be zp[1]:6 2.0 +(byte) be#105 be zp[1]:6 2.6666666666666665 +(byte) be#107 be zp[1]:6 6.0 +(byte) be#108 be zp[1]:6 2.0 +(byte) be#109 be zp[1]:6 2.0 +(byte) be#110 be zp[1]:6 2.0 +(byte) be#111 be zp[1]:6 2.0 +(byte) be#112 be zp[1]:6 2.0 +(byte) be#113 be zp[1]:6 2.0 +(byte) be#114 be zp[1]:6 2.0 +(byte) be#115 be zp[1]:6 2.0 +(byte) be#116 be zp[1]:6 2.6666666666666665 +(byte) be#118 be zp[1]:6 6.0 +(byte) be#119 be zp[1]:6 2.0 +(byte) be#120 be zp[1]:6 2.0 +(byte) be#121 be zp[1]:6 2.0 +(byte) be#122 be zp[1]:6 2.0 +(byte) be#123 be zp[1]:6 2.0 +(byte) be#124 be zp[1]:6 2.0 +(byte) be#125 be zp[1]:6 2.0 +(byte) be#126 be zp[1]:6 2.0 +(byte) be#127 be zp[1]:6 2.6666666666666665 +(byte) be#129 be zp[1]:6 12.0 +(byte) be#13 be zp[1]:6 3.75 +(byte) be#130 be zp[1]:6 4.0 +(byte) be#131 be zp[1]:6 4.0 +(byte) be#132 be zp[1]:6 4.0 +(byte) be#133 be zp[1]:6 4.0 +(byte) be#134 be zp[1]:6 4.0 +(byte) be#135 be zp[1]:6 4.0 +(byte) be#136 be zp[1]:6 4.0 +(byte) be#137 be zp[1]:6 4.0 +(byte) be#138 be zp[1]:6 2.0 +(byte) be#142 be zp[1]:6 2.0 +(byte) be#143 be zp[1]:6 2.0 +(byte) be#144 be zp[1]:6 2.0 +(byte) be#2 be zp[1]:6 3.0 +(byte) be#24 be zp[1]:6 2.0 +(byte) be#35 be zp[1]:6 2.0 +(byte) be#36 be zp[1]:6 4.0 +(byte) be#37 be zp[1]:6 4.0 +(byte) be#38 be zp[1]:6 4.0 +(byte) be#39 be zp[1]:6 4.0 +(byte) be#40 be zp[1]:6 4.0 +(byte) be#41 be zp[1]:6 4.0 +(byte) be#42 be zp[1]:6 4.0 +(byte) be#43 be zp[1]:6 4.0 +(byte) be#44 be zp[1]:6 4.0 +(byte) be#46 be zp[1]:6 1.8333333333333335 (void()) f0() (label) f0::@1 (label) f0::@10 @@ -226,3 +280,4 @@ reg byte x [ bc#83 bc#112 bc#47 bc#111 bc#46 bc#110 bc#45 bc#109 bc#44 bc#108 bc zp[1]:5 [ bc#113 bc#172 bc#173 bc#174 bc#175 bc#176 bc#177 bc#178 bc#179 bc#180 ] reg byte y [ bd#116 bd#154 bd#114 bd#153 bd#113 bd#152 bd#112 bd#151 bd#111 bd#150 bd#110 bd#149 bd#109 bd#108 bd#107 bd#106 bd#104 bd#103 bd#102 bd#101 bd#100 bd#141 bd#140 bd#139 bd#138 bd#137 bd#93 bd#136 bd#135 bd#134 bd#133 bd#132 bd#131 bd#130 bd#129 bd#2 bd#13 bd#24 bd#35 bd#146 bd#147 bd#148 ] reg byte a [ bd#117 bd#235 bd#236 bd#237 bd#238 bd#239 bd#240 bd#241 bd#242 bd#243 ] +zp[1]:6 [ be#138 be#44 be#137 be#43 be#136 be#42 be#135 be#41 be#134 be#40 be#133 be#39 be#132 be#38 be#131 be#130 be#129 be#127 be#126 be#125 be#124 be#123 be#122 be#121 be#120 be#119 be#118 be#116 be#115 be#114 be#113 be#112 be#111 be#110 be#109 be#108 be#107 be#105 be#104 be#103 be#102 be#101 be#100 be#144 be#143 be#142 be#2 be#13 be#24 be#35 be#46 be#36 be#37 ] diff --git a/src/test/ref/pointer-pointer-2.log b/src/test/ref/pointer-pointer-2.log index 629153fa8..19acba487 100644 --- a/src/test/ref/pointer-pointer-2.log +++ b/src/test/ref/pointer-pointer-2.log @@ -315,7 +315,7 @@ VARIABLE REGISTER WEIGHTS (byte*) main::screen#1 101.0 (byte*) main::screen#2 65.0 (byte*) main::screen#4 11.0 -(byte*) main::text loadstore 50.75 +(byte*) main::text loadstore 40.6 (void()) nexttext((byte**) nexttext::textp) (byte~) nexttext::$0 2.0 (byte**) nexttext::textp @@ -494,13 +494,13 @@ Removing always clobbered register reg byte a as potential for zp[1]:5 [ main::i Removing always clobbered register reg byte y as potential for zp[1]:5 [ main::i#5 main::i#1 ] Removing always clobbered register reg byte a as potential for zp[1]:2 [ textid#11 textid#13 ] Removing always clobbered register reg byte y as potential for zp[1]:2 [ textid#11 textid#13 ] -Statement [12] *((byte*) main::screen#2) ← *((byte*) main::text) [ main::i#5 textid#13 main::screen#2 ] ( main:2 [ main::i#5 textid#13 main::screen#2 ] ) always clobbers reg byte a reg byte y +Statement [12] *((byte*) main::screen#2) ← *((byte*) main::text) [ main::text main::i#5 textid#13 main::screen#2 ] ( main:2 [ main::text main::i#5 textid#13 main::screen#2 ] ) always clobbers reg byte a reg byte y Statement [15] (byte~) nexttext::$0 ← (byte) textid#11 & (byte) 1 [ textid#11 nexttext::$0 ] ( main:2::nexttext:6 [ main::text main::screen#4 main::i#5 textid#11 nexttext::$0 ] ) always clobbers reg byte a Statement [18] *((const byte**) nexttext::textp#0) ← (const byte*) text2 [ textid#13 ] ( main:2::nexttext:6 [ main::text main::screen#4 main::i#5 textid#13 ] ) always clobbers reg byte a Statement [20] *((const byte**) nexttext::textp#0) ← (const byte*) text1 [ textid#13 ] ( main:2::nexttext:6 [ main::text main::screen#4 main::i#5 textid#13 ] ) always clobbers reg byte a Statement [4] (byte*) main::text ← (byte*) 0 [ main::text ] ( main:2 [ main::text ] ) always clobbers reg byte a Statement [8] if((byte) 0!=*((byte*) main::text)) goto main::@3 [ main::text main::i#5 textid#13 main::screen#2 ] ( main:2 [ main::text main::i#5 textid#13 main::screen#2 ] ) always clobbers reg byte a reg byte y -Statement [12] *((byte*) main::screen#2) ← *((byte*) main::text) [ main::i#5 textid#13 main::screen#2 ] ( main:2 [ main::i#5 textid#13 main::screen#2 ] ) always clobbers reg byte a reg byte y +Statement [12] *((byte*) main::screen#2) ← *((byte*) main::text) [ main::text main::i#5 textid#13 main::screen#2 ] ( main:2 [ main::text main::i#5 textid#13 main::screen#2 ] ) always clobbers reg byte a reg byte y Statement [15] (byte~) nexttext::$0 ← (byte) textid#11 & (byte) 1 [ textid#11 nexttext::$0 ] ( main:2::nexttext:6 [ main::text main::screen#4 main::i#5 textid#11 nexttext::$0 ] ) always clobbers reg byte a Statement [18] *((const byte**) nexttext::textp#0) ← (const byte*) text2 [ textid#13 ] ( main:2::nexttext:6 [ main::text main::screen#4 main::i#5 textid#13 ] ) always clobbers reg byte a Statement [20] *((const byte**) nexttext::textp#0) ← (const byte*) text1 [ textid#13 ] ( main:2::nexttext:6 [ main::text main::screen#4 main::i#5 textid#13 ] ) always clobbers reg byte a @@ -511,7 +511,7 @@ Potential registers zp[2]:6 [ main::text ] : zp[2]:6 , Potential registers zp[1]:8 [ nexttext::$0 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 177: zp[2]:3 [ main::screen#4 main::screen#2 main::screen#1 ] 50.75: zp[2]:6 [ main::text ] 19.64: zp[1]:5 [ main::i#5 main::i#1 ] +Uplift Scope [main] 177: zp[2]:3 [ main::screen#4 main::screen#2 main::screen#1 ] 40.6: zp[2]:6 [ main::text ] 19.64: zp[1]:5 [ main::i#5 main::i#1 ] Uplift Scope [] 8.5: zp[1]:2 [ textid#11 textid#13 ] Uplift Scope [nexttext] 2: zp[1]:8 [ nexttext::$0 ] @@ -720,7 +720,7 @@ FINAL SYMBOL TABLE (byte*) main::screen#1 screen zp[2]:3 101.0 (byte*) main::screen#2 screen zp[2]:3 65.0 (byte*) main::screen#4 screen zp[2]:3 11.0 -(byte*) main::text loadstore zp[2]:5 50.75 +(byte*) main::text loadstore zp[2]:5 40.6 (void()) nexttext((byte**) nexttext::textp) (byte~) nexttext::$0 reg byte a 2.0 (label) nexttext::@1 diff --git a/src/test/ref/pointer-pointer-2.sym b/src/test/ref/pointer-pointer-2.sym index 7c2b3142f..e4176dd07 100644 --- a/src/test/ref/pointer-pointer-2.sym +++ b/src/test/ref/pointer-pointer-2.sym @@ -14,7 +14,7 @@ (byte*) main::screen#1 screen zp[2]:3 101.0 (byte*) main::screen#2 screen zp[2]:3 65.0 (byte*) main::screen#4 screen zp[2]:3 11.0 -(byte*) main::text loadstore zp[2]:5 50.75 +(byte*) main::text loadstore zp[2]:5 40.6 (void()) nexttext((byte**) nexttext::textp) (byte~) nexttext::$0 reg byte a 2.0 (label) nexttext::@1 diff --git a/src/test/ref/reserve-zp-global.log b/src/test/ref/reserve-zp-global.log index d5bd330c2..440c71ba9 100644 --- a/src/test/ref/reserve-zp-global.log +++ b/src/test/ref/reserve-zp-global.log @@ -147,7 +147,7 @@ sub1::@return: scope:[sub1] from sub1 VARIABLE REGISTER WEIGHTS (void()) main() (byte~) main::$0 22.0 -(byte) main::i loadstore 8.142857142857142 +(byte) main::i loadstore 7.125 (byte()) sub1((byte) sub1::i) (byte) sub1::i (byte) sub1::i#0 15.0 @@ -257,7 +257,7 @@ sub1: { REGISTER UPLIFT POTENTIAL REGISTERS Statement [4] (byte) main::i ← (byte) 0 [ main::i ] ( main:2 [ main::i ] ) always clobbers reg byte a -Statement [9] *((const byte*) main::SCREEN + (byte) main::i) ← (byte~) main::$0 [ ] ( main:2 [ ] ) always clobbers reg byte y +Statement [9] *((const byte*) main::SCREEN + (byte) main::i) ← (byte~) main::$0 [ main::i ] ( main:2 [ main::i ] ) always clobbers reg byte y Statement [11] if((byte) main::i!=(byte) 3) goto main::@1 [ main::i ] ( main:2 [ main::i ] ) always clobbers reg byte a Statement [13] (byte) sub1::return#1 ← (byte) sub1::i#0 + (byte) sub1::i#0 [ sub1::return#1 ] ( main:2::sub1:6 [ main::i sub1::return#1 ] ) always clobbers reg byte a Potential registers zp[1]:4 [ main::i ] : zp[1]:4 , @@ -268,7 +268,7 @@ Potential registers zp[1]:9 [ sub1::return#1 ] : zp[1]:9 , reg byte a , reg byte REGISTER UPLIFT SCOPES Uplift Scope [sub1] 22: zp[1]:7 [ sub1::return#0 ] 15: zp[1]:6 [ sub1::i#0 ] 4.33: zp[1]:9 [ sub1::return#1 ] -Uplift Scope [main] 22: zp[1]:8 [ main::$0 ] 8.14: zp[1]:4 [ main::i ] +Uplift Scope [main] 22: zp[1]:8 [ main::$0 ] 7.12: zp[1]:4 [ main::i ] Uplift Scope [] Uplifting [sub1] best 452 combination reg byte a [ sub1::return#0 ] reg byte a [ sub1::i#0 ] reg byte a [ sub1::return#1 ] @@ -380,7 +380,7 @@ FINAL SYMBOL TABLE (label) main::@2 (label) main::@return (const byte*) main::SCREEN = (byte*) 1024 -(byte) main::i loadstore zp[1]:4 8.142857142857142 +(byte) main::i loadstore zp[1]:4 7.125 (byte()) sub1((byte) sub1::i) (label) sub1::@return (byte) sub1::i diff --git a/src/test/ref/reserve-zp-global.sym b/src/test/ref/reserve-zp-global.sym index 66114aa09..61722a187 100644 --- a/src/test/ref/reserve-zp-global.sym +++ b/src/test/ref/reserve-zp-global.sym @@ -7,7 +7,7 @@ (label) main::@2 (label) main::@return (const byte*) main::SCREEN = (byte*) 1024 -(byte) main::i loadstore zp[1]:4 8.142857142857142 +(byte) main::i loadstore zp[1]:4 7.125 (byte()) sub1((byte) sub1::i) (label) sub1::@return (byte) sub1::i diff --git a/src/test/ref/reserve-zp-procedure-1.log b/src/test/ref/reserve-zp-procedure-1.log index 8b9f34d49..9045d1c56 100644 --- a/src/test/ref/reserve-zp-procedure-1.log +++ b/src/test/ref/reserve-zp-procedure-1.log @@ -147,7 +147,7 @@ sub1::@return: scope:[sub1] from sub1 VARIABLE REGISTER WEIGHTS (void()) main() (byte~) main::$0 22.0 -(byte) main::i loadstore 8.142857142857142 +(byte) main::i loadstore 7.125 (byte()) sub1((byte) sub1::i) (byte) sub1::i (byte) sub1::i#0 15.0 @@ -257,7 +257,7 @@ sub1: { REGISTER UPLIFT POTENTIAL REGISTERS Statement [4] (byte) main::i ← (byte) 0 [ main::i ] ( main:2 [ main::i ] ) always clobbers reg byte a -Statement [9] *((const byte*) main::SCREEN + (byte) main::i) ← (byte~) main::$0 [ ] ( main:2 [ ] ) always clobbers reg byte y +Statement [9] *((const byte*) main::SCREEN + (byte) main::i) ← (byte~) main::$0 [ main::i ] ( main:2 [ main::i ] ) always clobbers reg byte y Statement [11] if((byte) main::i!=(byte) 3) goto main::@1 [ main::i ] ( main:2 [ main::i ] ) always clobbers reg byte a Statement [13] (byte) sub1::return#1 ← (byte) sub1::i#0 + (byte) sub1::i#0 [ sub1::return#1 ] ( main:2::sub1:6 [ main::i sub1::return#1 ] ) always clobbers reg byte a Potential registers zp[1]:5 [ main::i ] : zp[1]:5 , @@ -268,7 +268,7 @@ Potential registers zp[1]:9 [ sub1::return#1 ] : zp[1]:9 , reg byte a , reg byte REGISTER UPLIFT SCOPES Uplift Scope [sub1] 22: zp[1]:7 [ sub1::return#0 ] 15: zp[1]:6 [ sub1::i#0 ] 4.33: zp[1]:9 [ sub1::return#1 ] -Uplift Scope [main] 22: zp[1]:8 [ main::$0 ] 8.14: zp[1]:5 [ main::i ] +Uplift Scope [main] 22: zp[1]:8 [ main::$0 ] 7.12: zp[1]:5 [ main::i ] Uplift Scope [] Uplifting [sub1] best 452 combination reg byte a [ sub1::return#0 ] reg byte a [ sub1::i#0 ] reg byte a [ sub1::return#1 ] @@ -380,7 +380,7 @@ FINAL SYMBOL TABLE (label) main::@2 (label) main::@return (const byte*) main::SCREEN = (byte*) 1024 -(byte) main::i loadstore zp[1]:5 8.142857142857142 +(byte) main::i loadstore zp[1]:5 7.125 (byte()) sub1((byte) sub1::i) (label) sub1::@return (byte) sub1::i diff --git a/src/test/ref/reserve-zp-procedure-1.sym b/src/test/ref/reserve-zp-procedure-1.sym index 9b27eecaa..1c1a9138c 100644 --- a/src/test/ref/reserve-zp-procedure-1.sym +++ b/src/test/ref/reserve-zp-procedure-1.sym @@ -7,7 +7,7 @@ (label) main::@2 (label) main::@return (const byte*) main::SCREEN = (byte*) 1024 -(byte) main::i loadstore zp[1]:5 8.142857142857142 +(byte) main::i loadstore zp[1]:5 7.125 (byte()) sub1((byte) sub1::i) (label) sub1::@return (byte) sub1::i diff --git a/src/test/ref/reserve-zp-procedure-2.log b/src/test/ref/reserve-zp-procedure-2.log index 0ba5b8679..9bbf9b033 100644 --- a/src/test/ref/reserve-zp-procedure-2.log +++ b/src/test/ref/reserve-zp-procedure-2.log @@ -211,7 +211,7 @@ VARIABLE REGISTER WEIGHTS (void()) main() (byte~) main::$0 22.0 (byte~) main::$1 22.0 -(byte) main::i loadstore 6.583333333333334 +(byte) main::i loadstore 6.076923076923077 (byte()) sub1((byte) sub1::i) (byte) sub1::i (byte) sub1::i#0 15.0 @@ -385,7 +385,7 @@ sub1: { REGISTER UPLIFT POTENTIAL REGISTERS Statement [4] (byte) main::i ← (byte) 0 [ main::i ] ( main:2 [ main::i ] ) always clobbers reg byte a Statement [9] *((const byte*) main::SCREEN + (byte) main::i) ← (byte~) main::$0 [ main::i ] ( main:2 [ main::i ] ) always clobbers reg byte y -Statement [14] *((const byte*) main::SCREEN+(byte) $28 + (byte) main::i) ← (byte~) main::$1 [ ] ( main:2 [ ] ) always clobbers reg byte y +Statement [14] *((const byte*) main::SCREEN+(byte) $28 + (byte) main::i) ← (byte~) main::$1 [ main::i ] ( main:2 [ main::i ] ) always clobbers reg byte y Statement [16] if((byte) main::i!=(byte) 3) goto main::@1 [ main::i ] ( main:2 [ main::i ] ) always clobbers reg byte a Statement [18] (byte~) sub2::$0 ← (byte) sub2::i#0 + (byte) sub2::i#0 [ sub2::i#0 sub2::$0 ] ( main:2::sub2:11 [ main::i sub2::i#0 sub2::$0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:12 [ sub2::i#0 ] @@ -393,7 +393,7 @@ Statement [19] (byte) sub2::return#1 ← (byte~) sub2::$0 + (byte) sub2::i#0 [ s Statement [21] (byte) sub1::return#1 ← (byte) sub1::i#0 + (byte) sub1::i#0 [ sub1::return#1 ] ( main:2::sub1:6 [ main::i sub1::return#1 ] ) always clobbers reg byte a Statement [4] (byte) main::i ← (byte) 0 [ main::i ] ( main:2 [ main::i ] ) always clobbers reg byte a Statement [9] *((const byte*) main::SCREEN + (byte) main::i) ← (byte~) main::$0 [ main::i ] ( main:2 [ main::i ] ) always clobbers reg byte y -Statement [14] *((const byte*) main::SCREEN+(byte) $28 + (byte) main::i) ← (byte~) main::$1 [ ] ( main:2 [ ] ) always clobbers reg byte y +Statement [14] *((const byte*) main::SCREEN+(byte) $28 + (byte) main::i) ← (byte~) main::$1 [ main::i ] ( main:2 [ main::i ] ) always clobbers reg byte y Statement [16] if((byte) main::i!=(byte) 3) goto main::@1 [ main::i ] ( main:2 [ main::i ] ) always clobbers reg byte a Statement [18] (byte~) sub2::$0 ← (byte) sub2::i#0 + (byte) sub2::i#0 [ sub2::i#0 sub2::$0 ] ( main:2::sub2:11 [ main::i sub2::i#0 sub2::$0 ] ) always clobbers reg byte a Statement [19] (byte) sub2::return#1 ← (byte~) sub2::$0 + (byte) sub2::i#0 [ sub2::return#1 ] ( main:2::sub2:11 [ main::i sub2::return#1 ] ) always clobbers reg byte a @@ -410,7 +410,7 @@ Potential registers zp[1]:16 [ sub2::return#1 ] : zp[1]:16 , reg byte a , reg by Potential registers zp[1]:17 [ sub1::return#1 ] : zp[1]:17 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 22: zp[1]:11 [ main::$0 ] 22: zp[1]:14 [ main::$1 ] 6.58: zp[1]:8 [ main::i ] +Uplift Scope [main] 22: zp[1]:11 [ main::$0 ] 22: zp[1]:14 [ main::$1 ] 6.08: zp[1]:8 [ main::i ] Uplift Scope [sub1] 22: zp[1]:10 [ sub1::return#0 ] 15: zp[1]:9 [ sub1::i#0 ] 4.33: zp[1]:17 [ sub1::return#1 ] Uplift Scope [sub2] 22: zp[1]:13 [ sub2::return#0 ] 8.5: zp[1]:12 [ sub2::i#0 ] 4.33: zp[1]:16 [ sub2::return#1 ] 4: zp[1]:15 [ sub2::$0 ] Uplift Scope [] @@ -560,7 +560,7 @@ FINAL SYMBOL TABLE (label) main::@3 (label) main::@return (const byte*) main::SCREEN = (byte*) 1024 -(byte) main::i loadstore zp[1]:8 6.583333333333334 +(byte) main::i loadstore zp[1]:8 6.076923076923077 (byte()) sub1((byte) sub1::i) (label) sub1::@return (byte) sub1::i diff --git a/src/test/ref/reserve-zp-procedure-2.sym b/src/test/ref/reserve-zp-procedure-2.sym index 4c3d058bf..0f04d665a 100644 --- a/src/test/ref/reserve-zp-procedure-2.sym +++ b/src/test/ref/reserve-zp-procedure-2.sym @@ -9,7 +9,7 @@ (label) main::@3 (label) main::@return (const byte*) main::SCREEN = (byte*) 1024 -(byte) main::i loadstore zp[1]:8 6.583333333333334 +(byte) main::i loadstore zp[1]:8 6.076923076923077 (byte()) sub1((byte) sub1::i) (label) sub1::@return (byte) sub1::i diff --git a/src/test/ref/reserve-zp-procedure-3.log b/src/test/ref/reserve-zp-procedure-3.log index 0141fa6e9..f86cb393c 100644 --- a/src/test/ref/reserve-zp-procedure-3.log +++ b/src/test/ref/reserve-zp-procedure-3.log @@ -148,7 +148,7 @@ sub1::@return: scope:[sub1] from sub1 VARIABLE REGISTER WEIGHTS (void()) main() (byte~) main::$0 22.0 -(byte) main::i loadstore 8.142857142857142 +(byte) main::i loadstore 7.125 (byte()) sub1((byte) sub1::i) (byte) sub1::i (byte) sub1::i#0 15.0 @@ -258,7 +258,7 @@ sub1: { REGISTER UPLIFT POTENTIAL REGISTERS Statement [4] (byte) main::i ← (byte) 0 [ main::i ] ( main:2 [ main::i ] ) always clobbers reg byte a -Statement [9] *((const byte*) main::SCREEN + (byte) main::i) ← (byte~) main::$0 [ ] ( main:2 [ ] ) always clobbers reg byte y +Statement [9] *((const byte*) main::SCREEN + (byte) main::i) ← (byte~) main::$0 [ main::i ] ( main:2 [ main::i ] ) always clobbers reg byte y Statement [11] if((byte) main::i!=(byte) 3) goto main::@1 [ main::i ] ( main:2 [ main::i ] ) always clobbers reg byte a Statement [13] (byte) sub1::return#1 ← (byte) sub1::i#0 + (byte) sub1::i#0 [ sub1::return#1 ] ( main:2::sub1:6 [ main::i sub1::return#1 ] ) always clobbers reg byte a Potential registers zp[1]:5 [ main::i ] : zp[1]:5 , @@ -269,7 +269,7 @@ Potential registers zp[1]:9 [ sub1::return#1 ] : zp[1]:9 , reg byte a , reg byte REGISTER UPLIFT SCOPES Uplift Scope [sub1] 22: zp[1]:7 [ sub1::return#0 ] 15: zp[1]:6 [ sub1::i#0 ] 4.33: zp[1]:9 [ sub1::return#1 ] -Uplift Scope [main] 22: zp[1]:8 [ main::$0 ] 8.14: zp[1]:5 [ main::i ] +Uplift Scope [main] 22: zp[1]:8 [ main::$0 ] 7.12: zp[1]:5 [ main::i ] Uplift Scope [] Uplifting [sub1] best 452 combination reg byte a [ sub1::return#0 ] reg byte a [ sub1::i#0 ] reg byte a [ sub1::return#1 ] @@ -381,7 +381,7 @@ FINAL SYMBOL TABLE (label) main::@2 (label) main::@return (const byte*) main::SCREEN = (byte*) 1024 -(byte) main::i loadstore zp[1]:5 8.142857142857142 +(byte) main::i loadstore zp[1]:5 7.125 (byte()) sub1((byte) sub1::i) (label) sub1::@return (byte) sub1::i diff --git a/src/test/ref/reserve-zp-procedure-3.sym b/src/test/ref/reserve-zp-procedure-3.sym index 9b27eecaa..1c1a9138c 100644 --- a/src/test/ref/reserve-zp-procedure-3.sym +++ b/src/test/ref/reserve-zp-procedure-3.sym @@ -7,7 +7,7 @@ (label) main::@2 (label) main::@return (const byte*) main::SCREEN = (byte*) 1024 -(byte) main::i loadstore zp[1]:5 8.142857142857142 +(byte) main::i loadstore zp[1]:5 7.125 (byte()) sub1((byte) sub1::i) (label) sub1::@return (byte) sub1::i diff --git a/src/test/ref/test-interrupt-volatile-write.log b/src/test/ref/test-interrupt-volatile-write.log index e8838f81d..20aca08c9 100644 --- a/src/test/ref/test-interrupt-volatile-write.log +++ b/src/test/ref/test-interrupt-volatile-write.log @@ -171,7 +171,7 @@ irq::@1: scope:[irq] from irq VARIABLE REGISTER WEIGHTS -(byte) col loadstore 17.999999999999996 +(byte) col loadstore 15.75 interrupt(KERNEL_MIN)(void()) irq() (void()) main() @@ -273,12 +273,12 @@ Statement [5] if((byte) col<(byte) $a+(byte) 1) goto main::@1 [ col ] ( main:2 [ Statement [6] (byte) col ← (byte) 0 [ col ] ( main:2 [ col ] ) always clobbers reg byte a Statement asm { lda$dc0d } always clobbers reg byte a Statement [8] *((const byte*) BGCOL) ← (byte) col [ col ] ( [ col ] ) always clobbers reg byte a -Statement [9] if((byte) col!=(byte) 0) goto irq::@1 [ ] ( [ ] ) always clobbers reg byte a +Statement [9] if((byte) col!=(byte) 0) goto irq::@1 [ col ] ( [ col ] ) always clobbers reg byte a Statement [10] (byte) col ← (byte) col + (byte) 2 [ ] ( [ ] ) always clobbers reg byte a Potential registers zp[1]:2 [ col ] : zp[1]:2 , REGISTER UPLIFT SCOPES -Uplift Scope [] 18: zp[1]:2 [ col ] +Uplift Scope [] 15.75: zp[1]:2 [ col ] Uplift Scope [main] Uplift Scope [irq] @@ -403,7 +403,7 @@ FINAL SYMBOL TABLE (label) @end (const byte*) BGCOL = (byte*) 53280 (const void()**) KERNEL_IRQ = (void()**) 788 -(byte) col loadstore zp[1]:2 17.999999999999996 +(byte) col loadstore zp[1]:2 15.75 interrupt(KERNEL_MIN)(void()) irq() (label) irq::@1 (label) irq::@2 diff --git a/src/test/ref/test-interrupt-volatile-write.sym b/src/test/ref/test-interrupt-volatile-write.sym index a5709240f..bf405db6a 100644 --- a/src/test/ref/test-interrupt-volatile-write.sym +++ b/src/test/ref/test-interrupt-volatile-write.sym @@ -3,7 +3,7 @@ (label) @end (const byte*) BGCOL = (byte*) 53280 (const void()**) KERNEL_IRQ = (void()**) 788 -(byte) col loadstore zp[1]:2 17.999999999999996 +(byte) col loadstore zp[1]:2 15.75 interrupt(KERNEL_MIN)(void()) irq() (label) irq::@1 (label) irq::@2 diff --git a/src/test/ref/test-interrupt-volatile.log b/src/test/ref/test-interrupt-volatile.log index dbb613b30..02aaad71d 100644 --- a/src/test/ref/test-interrupt-volatile.log +++ b/src/test/ref/test-interrupt-volatile.log @@ -107,7 +107,7 @@ irq::@return: scope:[irq] from irq VARIABLE REGISTER WEIGHTS -(byte) col loadstore 26.0 +(byte) col loadstore 5.200000000000001 interrupt(KERNEL_MIN)(void()) irq() (void()) main() @@ -176,14 +176,14 @@ irq: { // File Data REGISTER UPLIFT POTENTIAL REGISTERS -Statement [0] (byte) col ← (byte) 0 [ ] ( [ ] ) always clobbers reg byte a -Statement [4] *((const void()**) KERNEL_IRQ) ← &interrupt(KERNEL_MIN)(void()) irq() [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [0] (byte) col ← (byte) 0 [ col ] ( [ col ] ) always clobbers reg byte a +Statement [4] *((const void()**) KERNEL_IRQ) ← &interrupt(KERNEL_MIN)(void()) irq() [ col ] ( main:2 [ col ] ) always clobbers reg byte a Statement asm { lda$dc0d } always clobbers reg byte a Statement [7] *((const byte*) BGCOL) ← (byte) col [ ] ( [ ] ) always clobbers reg byte a Potential registers zp[1]:2 [ col ] : zp[1]:2 , REGISTER UPLIFT SCOPES -Uplift Scope [] 26: zp[1]:2 [ col ] +Uplift Scope [] 5.2: zp[1]:2 [ col ] Uplift Scope [main] Uplift Scope [irq] @@ -272,7 +272,7 @@ FINAL SYMBOL TABLE (label) @end (const byte*) BGCOL = (byte*) 53280 (const void()**) KERNEL_IRQ = (void()**) 788 -(byte) col loadstore zp[1]:2 26.0 +(byte) col loadstore zp[1]:2 5.200000000000001 interrupt(KERNEL_MIN)(void()) irq() (label) irq::@return (void()) main() diff --git a/src/test/ref/test-interrupt-volatile.sym b/src/test/ref/test-interrupt-volatile.sym index bdb5f4324..a99499a41 100644 --- a/src/test/ref/test-interrupt-volatile.sym +++ b/src/test/ref/test-interrupt-volatile.sym @@ -3,7 +3,7 @@ (label) @end (const byte*) BGCOL = (byte*) 53280 (const void()**) KERNEL_IRQ = (void()**) 788 -(byte) col loadstore zp[1]:2 26.0 +(byte) col loadstore zp[1]:2 5.200000000000001 interrupt(KERNEL_MIN)(void()) irq() (label) irq::@return (void()) main() diff --git a/src/test/ref/var-register-zp.log b/src/test/ref/var-register-zp.log index 37069ab79..364ab1ccb 100644 --- a/src/test/ref/var-register-zp.log +++ b/src/test/ref/var-register-zp.log @@ -140,8 +140,8 @@ VARIABLE REGISTER WEIGHTS (signed word~) main::$1 22.0 (byte~) main::$3 22.0 (byte~) main::$4 22.0 -(byte) main::i loadstore !zp[-1]:2 9.875 -(signed word) main::j loadstore !zp[-1]:4 3.8888888888888893 +(byte) main::i loadstore !zp[-1]:2 6.583333333333334 +(signed word) main::j loadstore !zp[-1]:4 3.1818181818181817 (signed word) main::k (signed word) main::k#0 11.0 @@ -267,12 +267,12 @@ REGISTER UPLIFT POTENTIAL REGISTERS Statement [4] (byte) main::i ← (byte) 0 [ main::i ] ( main:2 [ main::i ] ) always clobbers reg byte a Statement [5] (signed word) main::j ← (signed word) 0 [ main::i main::j ] ( main:2 [ main::i main::j ] ) always clobbers reg byte a Statement [6] if((byte) main::i<(byte) 4) goto main::@2 [ main::i main::j ] ( main:2 [ main::i main::j ] ) always clobbers reg byte a -Statement [8] (byte~) main::$3 ← (byte) main::i << (byte) 1 [ main::j main::$3 ] ( main:2 [ main::j main::$3 ] ) always clobbers reg byte a -Statement [9] *((const signed word*) SCREEN + (byte~) main::$3) ← (signed word) main::j [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [8] (byte~) main::$3 ← (byte) main::i << (byte) 1 [ main::i main::j main::$3 ] ( main:2 [ main::i main::j main::$3 ] ) always clobbers reg byte a +Statement [9] *((const signed word*) SCREEN + (byte~) main::$3) ← (signed word) main::j [ main::i main::j ] ( main:2 [ main::i main::j ] ) always clobbers reg byte a Statement [12] (signed word~) main::$1 ← (signed word)(byte) main::i [ main::i main::j main::$1 ] ( main:2 [ main::i main::j main::$1 ] ) always clobbers reg byte a Statement [13] (signed word) main::k#0 ← (signed word~) main::$1 << (byte) 1 [ main::i main::j main::k#0 ] ( main:2 [ main::i main::j main::k#0 ] ) always clobbers reg byte a -Statement [14] (byte~) main::$4 ← (byte) main::i << (byte) 1 [ main::j main::k#0 main::$4 ] ( main:2 [ main::j main::k#0 main::$4 ] ) always clobbers reg byte a -Statement [15] *((const signed word*) SCREEN + (byte~) main::$4) ← (signed word) main::k#0 [ main::j ] ( main:2 [ main::j ] ) always clobbers reg byte a +Statement [14] (byte~) main::$4 ← (byte) main::i << (byte) 1 [ main::i main::j main::k#0 main::$4 ] ( main:2 [ main::i main::j main::k#0 main::$4 ] ) always clobbers reg byte a +Statement [15] *((const signed word*) SCREEN + (byte~) main::$4) ← (signed word) main::k#0 [ main::i main::j ] ( main:2 [ main::i main::j ] ) always clobbers reg byte a Potential registers zp[1]:2 [ main::i ] : zp[1]:2 , Potential registers zp[2]:4 [ main::j ] : zp[2]:4 , Potential registers zp[1]:3 [ main::$3 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , @@ -281,7 +281,7 @@ Potential registers zp[2]:8 [ main::k#0 ] : zp[2]:8 , Potential registers zp[1]:10 [ main::$4 ] : zp[1]:10 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 22: zp[1]:3 [ main::$3 ] 22: zp[2]:6 [ main::$1 ] 22: zp[1]:10 [ main::$4 ] 11: zp[2]:8 [ main::k#0 ] 9.88: zp[1]:2 [ main::i ] 3.89: zp[2]:4 [ main::j ] +Uplift Scope [main] 22: zp[1]:3 [ main::$3 ] 22: zp[2]:6 [ main::$1 ] 22: zp[1]:10 [ main::$4 ] 11: zp[2]:8 [ main::k#0 ] 6.58: zp[1]:2 [ main::i ] 3.18: zp[2]:4 [ main::j ] Uplift Scope [] Uplifting [main] best 1126 combination reg byte a [ main::$3 ] zp[2]:6 [ main::$1 ] reg byte a [ main::$4 ] zp[2]:8 [ main::k#0 ] zp[1]:2 [ main::i ] zp[2]:4 [ main::j ] @@ -415,8 +415,8 @@ FINAL SYMBOL TABLE (label) main::@1 (label) main::@2 (label) main::@return -(byte) main::i loadstore !zp[-1]:2 zp[1]:2 9.875 -(signed word) main::j loadstore !zp[-1]:4 zp[2]:4 3.8888888888888893 +(byte) main::i loadstore !zp[-1]:2 zp[1]:2 6.583333333333334 +(signed word) main::j loadstore !zp[-1]:4 zp[2]:4 3.1818181818181817 (signed word) main::k (signed word) main::k#0 k zp[2]:6 11.0 diff --git a/src/test/ref/var-register-zp.sym b/src/test/ref/var-register-zp.sym index 10ebbcf2a..6b389c4ce 100644 --- a/src/test/ref/var-register-zp.sym +++ b/src/test/ref/var-register-zp.sym @@ -9,8 +9,8 @@ (label) main::@1 (label) main::@2 (label) main::@return -(byte) main::i loadstore !zp[-1]:2 zp[1]:2 9.875 -(signed word) main::j loadstore !zp[-1]:4 zp[2]:4 3.8888888888888893 +(byte) main::i loadstore !zp[-1]:2 zp[1]:2 6.583333333333334 +(signed word) main::j loadstore !zp[-1]:4 zp[2]:4 3.1818181818181817 (signed word) main::k (signed word) main::k#0 k zp[2]:6 11.0 diff --git a/src/test/ref/varmodel-ma_mem-2.log b/src/test/ref/varmodel-ma_mem-2.log index 360d37477..a678e05f2 100644 --- a/src/test/ref/varmodel-ma_mem-2.log +++ b/src/test/ref/varmodel-ma_mem-2.log @@ -93,8 +93,8 @@ main::@return: scope:[main] from main::@1 VARIABLE REGISTER WEIGHTS (void()) main() -(byte) main::i loadstore 35.0 -(byte*) main::screen loadstore 7.000000000000001 +(byte) main::i loadstore 7.000000000000001 +(byte*) main::screen loadstore 5.833333333333333 Initial phi equivalence classes Added variable main::screen to live range equivalence class [ main::screen ] @@ -170,14 +170,14 @@ main: { REGISTER UPLIFT POTENTIAL REGISTERS Statement [4] (byte*) main::screen ← (byte*) 1024 [ main::screen ] ( main:2 [ main::screen ] ) always clobbers reg byte a -Statement [5] (byte) main::i ← (byte) 0 [ main::screen ] ( main:2 [ main::screen ] ) always clobbers reg byte a -Statement [6] *((byte*) main::screen) ← (byte) 'a' [ ] ( main:2 [ ] ) always clobbers reg byte a reg byte y -Statement [9] if((byte) main::i!=(byte) 6) goto main::@1 [ main::screen ] ( main:2 [ main::screen ] ) always clobbers reg byte a +Statement [5] (byte) main::i ← (byte) 0 [ main::screen main::i ] ( main:2 [ main::screen main::i ] ) always clobbers reg byte a +Statement [6] *((byte*) main::screen) ← (byte) 'a' [ main::screen main::i ] ( main:2 [ main::screen main::i ] ) always clobbers reg byte a reg byte y +Statement [9] if((byte) main::i!=(byte) 6) goto main::@1 [ main::screen main::i ] ( main:2 [ main::screen main::i ] ) always clobbers reg byte a Potential registers zp[2]:2 [ main::screen ] : zp[2]:2 , Potential registers mem[1] [ main::i ] : mem[1] , REGISTER UPLIFT SCOPES -Uplift Scope [main] 35: mem[1] [ main::i ] 7: zp[2]:2 [ main::screen ] +Uplift Scope [main] 7: mem[1] [ main::i ] 5.83: zp[2]:2 [ main::screen ] Uplift Scope [] Uplifting [main] best 437 combination mem[1] [ main::i ] zp[2]:2 [ main::screen ] @@ -274,8 +274,8 @@ FINAL SYMBOL TABLE (void()) main() (label) main::@1 (label) main::@return -(byte) main::i loadstore mem[1] 35.0 -(byte*) main::screen loadstore zp[2]:2 7.000000000000001 +(byte) main::i loadstore mem[1] 7.000000000000001 +(byte*) main::screen loadstore zp[2]:2 5.833333333333333 zp[2]:2 [ main::screen ] mem[1] [ main::i ] diff --git a/src/test/ref/varmodel-ma_mem-2.sym b/src/test/ref/varmodel-ma_mem-2.sym index c89c6f4be..125ae4c29 100644 --- a/src/test/ref/varmodel-ma_mem-2.sym +++ b/src/test/ref/varmodel-ma_mem-2.sym @@ -4,8 +4,8 @@ (void()) main() (label) main::@1 (label) main::@return -(byte) main::i loadstore mem[1] 35.0 -(byte*) main::screen loadstore zp[2]:2 7.000000000000001 +(byte) main::i loadstore mem[1] 7.000000000000001 +(byte*) main::screen loadstore zp[2]:2 5.833333333333333 zp[2]:2 [ main::screen ] mem[1] [ main::i ] diff --git a/src/test/ref/varmodel-ma_mem-3.log b/src/test/ref/varmodel-ma_mem-3.log index bbc9d666b..e4dbfc92d 100644 --- a/src/test/ref/varmodel-ma_mem-3.log +++ b/src/test/ref/varmodel-ma_mem-3.log @@ -202,8 +202,8 @@ model_ma_mem::@return: scope:[model_ma_mem] from model_ma_mem::@1 VARIABLE REGISTER WEIGHTS (void()) main() (void()) model_ma_mem() -(byte) model_ma_mem::i loadstore 35.0 -(byte*) model_ma_mem::screen loadstore 7.000000000000001 +(byte) model_ma_mem::i loadstore 7.000000000000001 +(byte*) model_ma_mem::screen loadstore 5.833333333333333 (void()) model_ssa_zp() (byte) model_ssa_zp::i (byte) model_ssa_zp::i#1 16.5 @@ -365,14 +365,14 @@ Statement [11] *((byte*) model_ssa_zp::screen#2) ← (byte) 'b' [ model_ssa_zp:: Removing always clobbered register reg byte a as potential for zp[1]:4 [ model_ssa_zp::i#2 model_ssa_zp::i#1 ] Removing always clobbered register reg byte y as potential for zp[1]:4 [ model_ssa_zp::i#2 model_ssa_zp::i#1 ] Statement [16] (byte*) model_ma_mem::screen ← (byte*) 1024 [ model_ma_mem::screen ] ( main:2::model_ma_mem:5 [ model_ma_mem::screen ] ) always clobbers reg byte a -Statement [17] (byte) model_ma_mem::i ← (byte) 0 [ model_ma_mem::screen ] ( main:2::model_ma_mem:5 [ model_ma_mem::screen ] ) always clobbers reg byte a -Statement [18] *((byte*) model_ma_mem::screen) ← (byte) 'a' [ ] ( main:2::model_ma_mem:5 [ ] ) always clobbers reg byte a reg byte y -Statement [21] if((byte) model_ma_mem::i!=(byte) 6) goto model_ma_mem::@1 [ model_ma_mem::screen ] ( main:2::model_ma_mem:5 [ model_ma_mem::screen ] ) always clobbers reg byte a +Statement [17] (byte) model_ma_mem::i ← (byte) 0 [ model_ma_mem::screen model_ma_mem::i ] ( main:2::model_ma_mem:5 [ model_ma_mem::screen model_ma_mem::i ] ) always clobbers reg byte a +Statement [18] *((byte*) model_ma_mem::screen) ← (byte) 'a' [ model_ma_mem::screen model_ma_mem::i ] ( main:2::model_ma_mem:5 [ model_ma_mem::screen model_ma_mem::i ] ) always clobbers reg byte a reg byte y +Statement [21] if((byte) model_ma_mem::i!=(byte) 6) goto model_ma_mem::@1 [ model_ma_mem::screen model_ma_mem::i ] ( main:2::model_ma_mem:5 [ model_ma_mem::screen model_ma_mem::i ] ) always clobbers reg byte a Statement [11] *((byte*) model_ssa_zp::screen#2) ← (byte) 'b' [ model_ssa_zp::screen#2 model_ssa_zp::i#2 ] ( main:2::model_ssa_zp:7 [ model_ssa_zp::screen#2 model_ssa_zp::i#2 ] ) always clobbers reg byte a reg byte y Statement [16] (byte*) model_ma_mem::screen ← (byte*) 1024 [ model_ma_mem::screen ] ( main:2::model_ma_mem:5 [ model_ma_mem::screen ] ) always clobbers reg byte a -Statement [17] (byte) model_ma_mem::i ← (byte) 0 [ model_ma_mem::screen ] ( main:2::model_ma_mem:5 [ model_ma_mem::screen ] ) always clobbers reg byte a -Statement [18] *((byte*) model_ma_mem::screen) ← (byte) 'a' [ ] ( main:2::model_ma_mem:5 [ ] ) always clobbers reg byte a reg byte y -Statement [21] if((byte) model_ma_mem::i!=(byte) 6) goto model_ma_mem::@1 [ model_ma_mem::screen ] ( main:2::model_ma_mem:5 [ model_ma_mem::screen ] ) always clobbers reg byte a +Statement [17] (byte) model_ma_mem::i ← (byte) 0 [ model_ma_mem::screen model_ma_mem::i ] ( main:2::model_ma_mem:5 [ model_ma_mem::screen model_ma_mem::i ] ) always clobbers reg byte a +Statement [18] *((byte*) model_ma_mem::screen) ← (byte) 'a' [ model_ma_mem::screen model_ma_mem::i ] ( main:2::model_ma_mem:5 [ model_ma_mem::screen model_ma_mem::i ] ) always clobbers reg byte a reg byte y +Statement [21] if((byte) model_ma_mem::i!=(byte) 6) goto model_ma_mem::@1 [ model_ma_mem::screen model_ma_mem::i ] ( main:2::model_ma_mem:5 [ model_ma_mem::screen model_ma_mem::i ] ) always clobbers reg byte a Potential registers zp[2]:2 [ model_ssa_zp::screen#2 model_ssa_zp::screen#1 ] : zp[2]:2 , Potential registers zp[1]:4 [ model_ssa_zp::i#2 model_ssa_zp::i#1 ] : zp[1]:4 , reg byte x , Potential registers mem[2] [ model_ma_mem::screen ] : mem[2] , @@ -380,7 +380,7 @@ Potential registers mem[1] [ model_ma_mem::i ] : mem[1] , REGISTER UPLIFT SCOPES Uplift Scope [model_ssa_zp] 23.83: zp[2]:2 [ model_ssa_zp::screen#2 model_ssa_zp::screen#1 ] 23.83: zp[1]:4 [ model_ssa_zp::i#2 model_ssa_zp::i#1 ] -Uplift Scope [model_ma_mem] 35: mem[1] [ model_ma_mem::i ] 7: mem[2] [ model_ma_mem::screen ] +Uplift Scope [model_ma_mem] 7: mem[1] [ model_ma_mem::i ] 5.83: mem[2] [ model_ma_mem::screen ] Uplift Scope [main] Uplift Scope [] @@ -565,8 +565,8 @@ FINAL SYMBOL TABLE (void()) model_ma_mem() (label) model_ma_mem::@1 (label) model_ma_mem::@return -(byte) model_ma_mem::i loadstore mem[1] 35.0 -(byte*) model_ma_mem::screen loadstore mem[2] 7.000000000000001 +(byte) model_ma_mem::i loadstore mem[1] 7.000000000000001 +(byte*) model_ma_mem::screen loadstore mem[2] 5.833333333333333 (void()) model_ssa_zp() (label) model_ssa_zp::@1 (label) model_ssa_zp::@return diff --git a/src/test/ref/varmodel-ma_mem-3.sym b/src/test/ref/varmodel-ma_mem-3.sym index 478a64e3e..c503a4b3d 100644 --- a/src/test/ref/varmodel-ma_mem-3.sym +++ b/src/test/ref/varmodel-ma_mem-3.sym @@ -7,8 +7,8 @@ (void()) model_ma_mem() (label) model_ma_mem::@1 (label) model_ma_mem::@return -(byte) model_ma_mem::i loadstore mem[1] 35.0 -(byte*) model_ma_mem::screen loadstore mem[2] 7.000000000000001 +(byte) model_ma_mem::i loadstore mem[1] 7.000000000000001 +(byte*) model_ma_mem::screen loadstore mem[2] 5.833333333333333 (void()) model_ssa_zp() (label) model_ssa_zp::@1 (label) model_ssa_zp::@return diff --git a/src/test/ref/varmodel-ma_mem.log b/src/test/ref/varmodel-ma_mem.log index af8e23f06..59ea7f074 100644 --- a/src/test/ref/varmodel-ma_mem.log +++ b/src/test/ref/varmodel-ma_mem.log @@ -93,8 +93,8 @@ main::@return: scope:[main] from main::@1 VARIABLE REGISTER WEIGHTS (void()) main() -(byte) main::i loadstore 35.0 -(byte*) main::screen loadstore 7.000000000000001 +(byte) main::i loadstore 7.000000000000001 +(byte*) main::screen loadstore 5.833333333333333 Initial phi equivalence classes Added variable main::screen to live range equivalence class [ main::screen ] @@ -174,14 +174,14 @@ main: { REGISTER UPLIFT POTENTIAL REGISTERS Statement [4] (byte*) main::screen ← (byte*) 1024 [ main::screen ] ( main:2 [ main::screen ] ) always clobbers reg byte a -Statement [5] (byte) main::i ← (byte) 0 [ main::screen ] ( main:2 [ main::screen ] ) always clobbers reg byte a -Statement [6] *((byte*) main::screen) ← (byte) 'a' [ ] ( main:2 [ ] ) always clobbers reg byte a reg byte y -Statement [9] if((byte) main::i!=(byte) 6) goto main::@1 [ main::screen ] ( main:2 [ main::screen ] ) always clobbers reg byte a +Statement [5] (byte) main::i ← (byte) 0 [ main::screen main::i ] ( main:2 [ main::screen main::i ] ) always clobbers reg byte a +Statement [6] *((byte*) main::screen) ← (byte) 'a' [ main::screen main::i ] ( main:2 [ main::screen main::i ] ) always clobbers reg byte a reg byte y +Statement [9] if((byte) main::i!=(byte) 6) goto main::@1 [ main::screen main::i ] ( main:2 [ main::screen main::i ] ) always clobbers reg byte a Potential registers mem[2] [ main::screen ] : mem[2] , Potential registers mem[1] [ main::i ] : mem[1] , REGISTER UPLIFT SCOPES -Uplift Scope [main] 35: mem[1] [ main::i ] 7: mem[2] [ main::screen ] +Uplift Scope [main] 7: mem[1] [ main::i ] 5.83: mem[2] [ main::screen ] Uplift Scope [] Uplifting [main] best 599 combination mem[1] [ main::i ] mem[2] [ main::screen ] @@ -282,8 +282,8 @@ FINAL SYMBOL TABLE (void()) main() (label) main::@1 (label) main::@return -(byte) main::i loadstore mem[1] 35.0 -(byte*) main::screen loadstore mem[2] 7.000000000000001 +(byte) main::i loadstore mem[1] 7.000000000000001 +(byte*) main::screen loadstore mem[2] 5.833333333333333 mem[2] [ main::screen ] mem[1] [ main::i ] diff --git a/src/test/ref/varmodel-ma_mem.sym b/src/test/ref/varmodel-ma_mem.sym index 1c4b41008..a697176c5 100644 --- a/src/test/ref/varmodel-ma_mem.sym +++ b/src/test/ref/varmodel-ma_mem.sym @@ -4,8 +4,8 @@ (void()) main() (label) main::@1 (label) main::@return -(byte) main::i loadstore mem[1] 35.0 -(byte*) main::screen loadstore mem[2] 7.000000000000001 +(byte) main::i loadstore mem[1] 7.000000000000001 +(byte*) main::screen loadstore mem[2] 5.833333333333333 mem[2] [ main::screen ] mem[1] [ main::i ] diff --git a/src/test/ref/volatile-0.log b/src/test/ref/volatile-0.log index a166e664c..2b1d5418d 100644 --- a/src/test/ref/volatile-0.log +++ b/src/test/ref/volatile-0.log @@ -93,7 +93,7 @@ main::@2: scope:[main] from main::@1 VARIABLE REGISTER WEIGHTS -(byte) i loadstore 11.400000000000002 +(byte) i loadstore 9.5 (void()) main() Initial phi equivalence classes @@ -161,11 +161,11 @@ main: { REGISTER UPLIFT POTENTIAL REGISTERS Statement [0] (byte) i ← (byte) 3 [ i ] ( [ i ] ) always clobbers reg byte a Statement [5] if((byte) i<(byte) 7) goto main::@2 [ i ] ( main:2 [ i ] ) always clobbers reg byte a -Statement [7] *((const byte*) SCREEN + (byte) i) ← (byte) i [ ] ( main:2 [ ] ) always clobbers reg byte a reg byte y +Statement [7] *((const byte*) SCREEN + (byte) i) ← (byte) i [ i ] ( main:2 [ i ] ) always clobbers reg byte a reg byte y Potential registers zp[1]:2 [ i ] : zp[1]:2 , REGISTER UPLIFT SCOPES -Uplift Scope [] 11.4: zp[1]:2 [ i ] +Uplift Scope [] 9.5: zp[1]:2 [ i ] Uplift Scope [main] Uplifting [] best 338 combination zp[1]:2 [ i ] @@ -250,7 +250,7 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (const byte*) SCREEN = (byte*) 1024 -(byte) i loadstore zp[1]:2 11.400000000000002 +(byte) i loadstore zp[1]:2 9.5 (void()) main() (label) main::@1 (label) main::@2 diff --git a/src/test/ref/volatile-0.sym b/src/test/ref/volatile-0.sym index aa305302a..9751b30ff 100644 --- a/src/test/ref/volatile-0.sym +++ b/src/test/ref/volatile-0.sym @@ -2,7 +2,7 @@ (label) @begin (label) @end (const byte*) SCREEN = (byte*) 1024 -(byte) i loadstore zp[1]:2 11.400000000000002 +(byte) i loadstore zp[1]:2 9.5 (void()) main() (label) main::@1 (label) main::@2 diff --git a/src/test/ref/volatile-1.log b/src/test/ref/volatile-1.log index 33aeb390d..0beba251f 100644 --- a/src/test/ref/volatile-1.log +++ b/src/test/ref/volatile-1.log @@ -94,7 +94,7 @@ main::@2: scope:[main] from main::@1 VARIABLE REGISTER WEIGHTS (void()) main() -(byte) main::i loadstore 19.0 +(byte) main::i loadstore 14.25 Initial phi equivalence classes Added variable main::i to live range equivalence class [ main::i ] @@ -159,11 +159,11 @@ main: { REGISTER UPLIFT POTENTIAL REGISTERS Statement [4] (byte) main::i ← (byte) 3 [ main::i ] ( main:2 [ main::i ] ) always clobbers reg byte a Statement [5] if((byte) main::i<(byte) 7) goto main::@2 [ main::i ] ( main:2 [ main::i ] ) always clobbers reg byte a -Statement [7] *((const byte*) SCREEN + (byte) main::i) ← (byte) main::i [ ] ( main:2 [ ] ) always clobbers reg byte a reg byte y +Statement [7] *((const byte*) SCREEN + (byte) main::i) ← (byte) main::i [ main::i ] ( main:2 [ main::i ] ) always clobbers reg byte a reg byte y Potential registers zp[1]:2 [ main::i ] : zp[1]:2 , REGISTER UPLIFT SCOPES -Uplift Scope [main] 19: zp[1]:2 [ main::i ] +Uplift Scope [main] 14.25: zp[1]:2 [ main::i ] Uplift Scope [] Uplifting [main] best 311 combination zp[1]:2 [ main::i ] @@ -253,7 +253,7 @@ FINAL SYMBOL TABLE (label) main::@1 (label) main::@2 (label) main::@return -(byte) main::i loadstore zp[1]:2 19.0 +(byte) main::i loadstore zp[1]:2 14.25 zp[1]:2 [ main::i ] diff --git a/src/test/ref/volatile-1.sym b/src/test/ref/volatile-1.sym index 0ed59b48c..36f6e7cb5 100644 --- a/src/test/ref/volatile-1.sym +++ b/src/test/ref/volatile-1.sym @@ -6,6 +6,6 @@ (label) main::@1 (label) main::@2 (label) main::@return -(byte) main::i loadstore zp[1]:2 19.0 +(byte) main::i loadstore zp[1]:2 14.25 zp[1]:2 [ main::i ]