1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-09-08 17:54:40 +00:00

Implemented handling of expr-statements that do not produce a statement - this forces an assignment to a tmp-var (which means that it will be type-checked and more). Closes #276

This commit is contained in:
jespergravgaard 2019-08-25 21:37:10 +02:00
parent c75e788fd1
commit 19e53bf6fd
86 changed files with 2775 additions and 2586 deletions

View File

@ -0,0 +1,9 @@
clc
lda {c1},y
adc #1
sta {c1},x
bne !+
lda {c1}+1,y
adc #0
sta {c1}+1,x
!:

View File

@ -0,0 +1,9 @@
clc
lda {c1},x
adc #1
sta {c1},y
bne !+
lda {c1}+1,x
adc #0
sta {c1}+1,y
!:

View File

@ -133,6 +133,11 @@ public class Compiler {
new PassNAddTypeConversionAssignment(program, false).execute();
new Pass1AssertProcedureCallParameters(program).execute();
if(getLog().isVerbosePass1CreateSsa()) {
getLog().append("CONTROL FLOW GRAPH BEFORE SIZEOF FIX");
getLog().append(program.getGraph().toString(program));
}
new Pass1PointerSizeofFix(program).execute(); // After this point in the code all pointer math is byte-based
new PassNSizeOfSimplification(program).execute(); // Needed to eliminate sizeof() referencing pointer value variables

View File

@ -802,7 +802,19 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor<Objec
@Override
public Void visitStmtExpr(KickCParser.StmtExprContext ctx) {
PrePostModifierHandler.addPreModifiers(this, ctx.commaExpr(), new StatementSource(ctx));
this.visit(ctx.commaExpr());
beginNotConsumedTracking();
RValue exprVal = (RValue) this.visit(ctx.commaExpr());
if(notConsumed(exprVal)) {
// Make a tmpVar to create the statement
VariableIntermediate tmpVar = getCurrentScope().addVariableIntermediate();
List<Comment> comments = ensureUnusedComments(getCommentsSymbol(ctx));
RValue rVal = exprVal;
if(exprVal instanceof LValue) {
rVal = copyLValue((LValue) exprVal);
}
sequence.addStatement(new StatementAssignment(tmpVar.getRef(), rVal, new StatementSource(ctx), comments));
}
endNotConsumedTracking();
PrePostModifierHandler.addPostModifiers(this, ctx.commaExpr(), new StatementSource(ctx));
return null;
}
@ -1532,6 +1544,55 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor<Objec
return null;
}
/** RValues that have not yet been output as part of a statement.
* The expression visitor methods updates this so that the surrounding
* statement can make sure to output any rValue that has not been output.
* Null if we are not currently monitoring this.
* */
public Set<RValue> exprNotConsumed = null;
/**
* Begins monitoring list of expressions not consumed.
*/
void beginNotConsumedTracking() {
exprNotConsumed = new LinkedHashSet<>();
}
/**
* Ends monitoring list of expressions not consumed.
*/
void endNotConsumedTracking() {
exprNotConsumed = null;
}
/**
* Consumes an RValue by outputting it as part of a statement.
* This helps ensure that all expression RValues are output in statements
* @param rValue The RValue being consume
*/
void consumeExpr(RValue rValue) {
exprNotConsumed.remove(rValue);
}
/**
* Marks an expression that has been produced which has not been output as part of a statement.
* When the RValue is output in a statement it will be consumed using {@link #consumeExpr(RValue)}.
* @param rValue The RValue that has been produced but not consumed
*/
void addExprToConsume(RValue rValue) {
if(exprNotConsumed!=null)
exprNotConsumed.add(rValue);
}
/** Examines whether an RValue is in the list of non-consumed RValues.
*
* @return true if the RValue is in the list
*/
boolean notConsumed(RValue rValue) {
return exprNotConsumed.contains(rValue);
}
@Override
public Object visitExprAssignment(KickCParser.ExprAssignmentContext ctx) {
Object val = visit(ctx.expr(0));
@ -1546,6 +1607,8 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor<Objec
RValue rValue = (RValue) this.visit(ctx.expr(1));
Statement stmt = new StatementAssignment(lValue, rValue, new StatementSource(ctx), ensureUnusedComments(getCommentsSymbol(ctx)));
sequence.addStatement(stmt);
consumeExpr(lValue);
consumeExpr(rValue);
return lValue;
}
@ -1569,6 +1632,8 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor<Objec
LValue rValue1 = copyLValue(lValue);
Statement stmt = new StatementAssignment(lValue, rValue1, operator, rValue, new StatementSource(ctx), ensureUnusedComments(getCommentsSymbol(ctx)));
sequence.addStatement(stmt);
consumeExpr(lValue);
consumeExpr(rValue);
return lValue;
}
@ -1578,11 +1643,25 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor<Objec
} else if(lValue instanceof LvalueIntermediate) {
return new LvalueIntermediate((VariableRef) copyLValue(((LvalueIntermediate) lValue).getVariable()));
} else if(lValue instanceof PointerDereferenceSimple) {
return new PointerDereferenceSimple(copyLValue((LValue) ((PointerDereferenceSimple) lValue).getPointer()));
RValue pointer = ((PointerDereferenceSimple) lValue).getPointer();
if(pointer instanceof LValue) {
pointer = copyLValue((LValue) pointer);
}
return new PointerDereferenceSimple(pointer);
} else if(lValue instanceof PointerDereferenceIndexed) {
return new PointerDereferenceIndexed(((PointerDereferenceIndexed) lValue).getPointer(), ((PointerDereferenceIndexed) lValue).getIndex());
RValue pointer = ((PointerDereferenceIndexed) lValue).getPointer();
if(pointer instanceof LValue) {
pointer = copyLValue((LValue) pointer);
}
RValue index = ((PointerDereferenceIndexed) lValue).getIndex();
if(index instanceof LValue) {
index = copyLValue((LValue) index);
}
return new PointerDereferenceIndexed(pointer, index);
} else if(lValue instanceof StructMemberRef) {
return new StructMemberRef(copyLValue((LValue) ((StructMemberRef) lValue).getStruct()), ((StructMemberRef) lValue).getMemberName());
} else if(lValue instanceof ForwardVariableRef) {
return new ForwardVariableRef(((ForwardVariableRef) lValue).getName());
} else {
throw new CompileError("Unknown LValue type " + lValue);
}
@ -1592,14 +1671,18 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor<Objec
public Object visitExprDot(KickCParser.ExprDotContext ctx) {
RValue structExpr = (RValue) visit(ctx.expr());
String name = ctx.NAME().getText();
return new StructMemberRef(structExpr, name);
StructMemberRef structMemberRef = new StructMemberRef(structExpr, name);
addExprToConsume(structMemberRef);
return structMemberRef;
}
@Override
public Object visitExprArrow(KickCParser.ExprArrowContext ctx) {
RValue structPtrExpr = (RValue) visit(ctx.expr());
String name = ctx.NAME().getText();
return new StructMemberRef(new PointerDereferenceSimple(structPtrExpr), name);
StructMemberRef structMemberRef = new StructMemberRef(new PointerDereferenceSimple(structPtrExpr), name);
addExprToConsume(structMemberRef);
return structMemberRef;
}
@Override
@ -1611,6 +1694,7 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor<Objec
VariableRef tmpVarRef = tmpVar.getRef();
Statement stmt = new StatementAssignment(tmpVarRef, operator, child, new StatementSource(ctx), ensureUnusedComments(getCommentsSymbol(ctx)));
sequence.addStatement(stmt);
consumeExpr(child);
return tmpVarRef;
}
@ -1627,6 +1711,7 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor<Objec
VariableRef tmpVarRef = tmpVar.getRef();
Statement stmt = new StatementAssignment(tmpVarRef, Operators.SIZEOF, child, new StatementSource(ctx), ensureUnusedComments(getCommentsSymbol(ctx)));
sequence.addStatement(stmt);
consumeExpr(child);
return tmpVarRef;
}
}
@ -1644,6 +1729,7 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor<Objec
VariableRef tmpVarRef = tmpVar.getRef();
Statement stmt = new StatementAssignment(tmpVarRef, Operators.TYPEID, child, new StatementSource(ctx), ensureUnusedComments(getCommentsSymbol(ctx)));
sequence.addStatement(stmt);
consumeExpr(child);
return tmpVarRef;
}
}
@ -1667,6 +1753,10 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor<Objec
} else {
RValue procedurePointer = (RValue) this.visit(ctx.expr());
sequence.addStatement(new StatementCallPointer(tmpVarRef, procedurePointer, parameters, new StatementSource(ctx), ensureUnusedComments(getCommentsSymbol(ctx))));
consumeExpr(procedurePointer);
}
for(RValue parameter : parameters) {
consumeExpr(parameter);
}
return tmpVarRef;
}
@ -1685,7 +1775,9 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor<Objec
public RValue visitExprArray(KickCParser.ExprArrayContext ctx) {
RValue array = (RValue) visit(ctx.expr());
RValue index = (RValue) visit(ctx.commaExpr());
return new PointerDereferenceIndexed(array, index);
PointerDereferenceIndexed pointerDereferenceIndexed = new PointerDereferenceIndexed(array, index);
addExprToConsume(pointerDereferenceIndexed);
return pointerDereferenceIndexed;
}
@Override
@ -1784,6 +1876,8 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor<Objec
VariableRef tmpVarRef = tmpVar.getRef();
Statement stmt = new StatementAssignment(tmpVarRef, left, operator, right, new StatementSource(ctx), ensureUnusedComments(getCommentsSymbol(ctx)));
sequence.addStatement(stmt);
consumeExpr(left);
consumeExpr(right);
return tmpVarRef;
}
}
@ -1791,7 +1885,9 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor<Objec
@Override
public Object visitExprPtr(KickCParser.ExprPtrContext ctx) {
RValue child = (RValue) this.visit(ctx.expr());
return new PointerDereferenceSimple(child);
PointerDereferenceSimple pointerDereferenceSimple = new PointerDereferenceSimple(child);
addExprToConsume(pointerDereferenceSimple);
return pointerDereferenceSimple;
}
@Override
@ -1809,6 +1905,7 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor<Objec
VariableRef tmpVarRef = tmpVar.getRef();
Statement stmt = new StatementAssignment(tmpVarRef, operator, child, new StatementSource(ctx), ensureUnusedComments(getCommentsSymbol(ctx)));
sequence.addStatement(stmt);
consumeExpr(child);
return tmpVarRef;
}
}
@ -1839,6 +1936,9 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor<Objec
phiVariable.setrValue(trueExitLabel, trueVar);
phiVariable.setrValue(falseExitLabel, falseVar);
sequence.addStatement(phiBlock);
consumeExpr(condValue);
consumeExpr(falseValue);
consumeExpr(trueValue);
return finalVar;
}
@ -2095,9 +2195,9 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor<Objec
List<PrePostModifier> modifiers,
StatementSource source) {
for(PrePostModifier mod : modifiers) {
Statement stmt = new StatementAssignment((LValue) mod.child, mod.operator, copyLValue((LValue) mod.child), source, Comment.NO_COMMENTS);
parser.sequence.addStatement(stmt);
parser.consumeExpr(mod.child);
if(parser.program.getLog().isVerboseParse()) {
parser.program.getLog().append("Adding pre/post-modifier " + stmt.toString(parser.program, false));
}

View File

@ -1,12 +1,13 @@
package dk.camelot64.kickc.passes;
import dk.camelot64.kickc.model.*;
import dk.camelot64.kickc.model.CompileError;
import dk.camelot64.kickc.model.ControlFlowBlock;
import dk.camelot64.kickc.model.Program;
import dk.camelot64.kickc.model.statements.Statement;
import dk.camelot64.kickc.model.statements.StatementLValue;
import dk.camelot64.kickc.model.values.LValue;
import dk.camelot64.kickc.model.values.LvalueIntermediate;
import dk.camelot64.kickc.model.values.VariableRef;
import dk.camelot64.kickc.model.statements.Statement;
import dk.camelot64.kickc.model.statements.StatementAssignment;
import dk.camelot64.kickc.model.statements.StatementLValue;
/**
* Asserts that all intermediate lvalues have been replaced by something else

View File

@ -73,7 +73,7 @@ public class TestPrograms {
@Test
public void testFunctionAsArray() throws IOException, URISyntaxException {
compileAndCompare("function-as-array");
assertError("function-as-array", "Cannot infer pointer element type from type: void()");
}
@Test

View File

@ -1,5 +1,6 @@
// Tests treating a function like an array
// Should produce an error
// Should produce an
// https://gitlab.com/camelot/kickc/issues/276
void main() {
// Add a ball

View File

@ -3,7 +3,7 @@
void main() {
byte i = 0;
while(true) {
*(getfn(++i))();
(*getfn(++i))();
}
}

View File

@ -3,7 +3,7 @@
void main() {
byte i = 0;
while(true) {
*(getfn(++i))();
(*getfn(++i))();
}
}

View File

@ -1,5 +1,6 @@
Resolved forward reference frame_cnt to (byte) frame_cnt
Resolved forward reference frame_cnt to (byte) frame_cnt
Resolved forward reference frame_cnt to (byte) frame_cnt
Resolved forward reference irq to interrupt(HARDWARE_CLOBBER)(void()) irq()
Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src)
Warning! Adding boolean cast to non-boolean condition (number~) abs_u16::$1

View File

@ -55,8 +55,8 @@ main: {
.const toD0181_return = (>(SCREEN&$3fff)*4)|(>BITMAP)/4&$f
.label _9 = $c
.label _14 = $c
.label _24 = $24
.label _25 = $24
.label _26 = $24
.label cos_x = $24
.label xpos = $c
.label x = $20
@ -65,8 +65,8 @@ main: {
.label y = $17
.label idx_x = 2
.label idx_y = $12
.label _26 = $24
.label _27 = $24
.label _28 = $24
jsr sin16s_gen2
jsr bitmap_init
jsr bitmap_clear
@ -85,17 +85,17 @@ main: {
b2:
lda.z idx_x
asl
sta.z _24
sta.z _25
lda.z idx_x+1
rol
sta.z _24+1
sta.z _25+1
clc
lda.z _26
lda.z _27
adc #<SINUS
sta.z _26
lda.z _26+1
sta.z _27
lda.z _27+1
adc #>SINUS
sta.z _26+1
sta.z _27+1
ldy #0
lda (cos_x),y
tax
@ -133,17 +133,17 @@ main: {
sta.z x+1
lda.z idx_y
asl
sta.z _25
sta.z _26
lda.z idx_y+1
rol
sta.z _25+1
sta.z _26+1
clc
lda.z _27
lda.z _28
adc #<SINUS
sta.z _27
lda.z _27+1
sta.z _28
lda.z _28+1
adc #>SINUS
sta.z _27+1
sta.z _28+1
ldy #0
lda (sin_y),y
tax

View File

@ -37,9 +37,9 @@ main::@1: scope:[main] from main::@4 main::@5
[15] (word) main::idx_x#3 ← phi( main::@5/(byte) 0 main::@4/(word) main::idx_x#10 )
to:main::@2
main::@2: scope:[main] from main::@1
[16] (word~) main::$24 ← (word) main::idx_x#3 << (byte) 1
[17] (signed word*~) main::$26 ← (const signed word[$200]) SINUS#0 + (word~) main::$24
[18] (signed word) main::cos_x#0 ← *((signed word*~) main::$26)
[16] (word~) main::$25 ← (word) main::idx_x#3 << (byte) 1
[17] (signed word*~) main::$27 ← (const signed word[$200]) SINUS#0 + (word~) main::$25
[18] (signed word) main::cos_x#0 ← *((signed word*~) main::$27)
[19] (signed word) mul16s::b#1 ← (signed word) main::cos_x#0
[20] call mul16s
[21] (signed dword) mul16s::return#3 ← (signed dword) mul16s::return#0
@ -49,9 +49,9 @@ main::@9: scope:[main] from main::@2
[23] (signed dword~) main::$9 ← (signed dword) main::xpos#0 << (signed byte) 4
[24] (word~) main::$10 ← > (signed dword~) main::$9
[25] (word) main::x#0 ← (byte) $a0 + (word~) main::$10
[26] (word~) main::$25 ← (word) main::idx_y#3 << (byte) 1
[27] (signed word*~) main::$27 ← (const signed word[$200]) SINUS#0 + (word~) main::$25
[28] (signed word) main::sin_y#0 ← *((signed word*~) main::$27)
[26] (word~) main::$26 ← (word) main::idx_y#3 << (byte) 1
[27] (signed word*~) main::$28 ← (const signed word[$200]) SINUS#0 + (word~) main::$26
[28] (signed word) main::sin_y#0 ← *((signed word*~) main::$28)
[29] (signed word) mul16s::b#2 ← (signed word) main::sin_y#0
[30] call mul16s
[31] (signed dword) mul16s::return#4 ← (signed dword) mul16s::return#0

View File

@ -1,5 +1,6 @@
Resolved forward reference frame_cnt to (byte) frame_cnt
Resolved forward reference frame_cnt to (byte) frame_cnt
Resolved forward reference frame_cnt to (byte) frame_cnt
Resolved forward reference irq to interrupt(HARDWARE_CLOBBER)(void()) irq()
Fixing pointer increment (signed word*) sin16s_gen::sintab ← ++ (signed word*) sin16s_gen::sintab
Fixing pointer increment (signed word*) sin16s_gen2::sintab ← ++ (signed word*) sin16s_gen2::sintab
@ -850,8 +851,8 @@ main::@2: scope:[main] from main::@1
(byte) frame_cnt#15 ← phi( main::@1/(byte) frame_cnt#16 )
(word) main::idx_y#5 ← phi( main::@1/(word) main::idx_y#8 )
(word) main::idx_x#3 ← phi( main::@1/(word) main::idx_x#5 )
(word~) main::$24 ← (word) main::idx_x#3 * (const byte) SIZEOF_SIGNED_WORD
(signed word) main::cos_x#0 ← *((signed word[$200]) SINUS#0 + (word~) main::$24)
(word~) main::$25 ← (word) main::idx_x#3 * (const byte) SIZEOF_SIGNED_WORD
(signed word) main::cos_x#0 ← *((signed word[$200]) SINUS#0 + (word~) main::$25)
(signed word) mul16s::a#1 ← (number) $a0
(signed word) mul16s::b#1 ← (signed word) main::cos_x#0
call mul16s
@ -872,8 +873,8 @@ main::@16: scope:[main] from main::@2
(number~) main::$11 ← (number) $a0 + (word~) main::$10
(word~) main::$12 ← ((word)) (number~) main::$11
(word) main::x#0 ← (word~) main::$12
(word~) main::$25 ← (word) main::idx_y#3 * (const byte) SIZEOF_SIGNED_WORD
(signed word) main::sin_y#0 ← *((signed word[$200]) SINUS#0 + (word~) main::$25)
(word~) main::$26 ← (word) main::idx_y#3 * (const byte) SIZEOF_SIGNED_WORD
(signed word) main::sin_y#0 ← *((signed word[$200]) SINUS#0 + (word~) main::$26)
(signed word) mul16s::a#2 ← (number) $64
(signed word) mul16s::b#2 ← (signed word) main::sin_y#0
call mul16s
@ -1402,8 +1403,8 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(bool~) main::$21
(bool~) main::$22
(bool~) main::$23
(word~) main::$24
(word~) main::$25
(word~) main::$26
(byte~) main::$3
(byte~) main::$4
(number~) main::$5
@ -2634,8 +2635,8 @@ Resolved ranged next value [322] bitmap_init::x#1 ← ++ bitmap_init::x#2 to ++
Resolved ranged comparison value [324] if(bitmap_init::x#1!=rangelast(0,$ff)) goto bitmap_init::@1 to (number) 0
Resolved ranged next value [342] bitmap_init::y#1 ← ++ bitmap_init::y#2 to ++
Resolved ranged comparison value [344] if(bitmap_init::y#1!=rangelast(0,$ff)) goto bitmap_init::@5 to (number) 0
De-inlining pointer[w] to *(pointer+w) [430] (signed word) main::cos_x#0 ← *((const signed word[$200]) SINUS#0 + (word~) main::$24)
De-inlining pointer[w] to *(pointer+w) [444] (signed word) main::sin_y#0 ← *((const signed word[$200]) SINUS#0 + (word~) main::$25)
De-inlining pointer[w] to *(pointer+w) [430] (signed word) main::cos_x#0 ← *((const signed word[$200]) SINUS#0 + (word~) main::$25)
De-inlining pointer[w] to *(pointer+w) [444] (signed word) main::sin_y#0 ← *((const signed word[$200]) SINUS#0 + (word~) main::$26)
Successful SSA optimization Pass2DeInlineWordDerefIdx
Simplifying expression containing zero bitmap_clear::$0 in [354] (byte) bitmap_clear::col#0 ← (byte~) bitmap_clear::$0 + (const byte) bitmap_clear::bgcol#0
Successful SSA optimization PassNSimplifyExpressionWithZero
@ -2750,8 +2751,8 @@ Successful SSA optimization Pass2NopCastInlining
Inlining Noop Cast [70] (signed word~) sin16s_gen2::$9 ← (signed word)(word~) sin16s_gen2::$7 keeping sin16s_gen2::$9
Inlining Noop Cast [160] (byte*) bitmap_plot::plotter#0 ← (byte*)(word~) bitmap_plot::$3 keeping bitmap_plot::plotter#0
Successful SSA optimization Pass2NopCastInlining
Rewriting multiplication to use shift [173] (word~) main::$24 ← (word) main::idx_x#3 * (const byte) SIZEOF_SIGNED_WORD
Rewriting multiplication to use shift [183] (word~) main::$25 ← (word) main::idx_y#3 * (const byte) SIZEOF_SIGNED_WORD
Rewriting multiplication to use shift [173] (word~) main::$25 ← (word) main::idx_x#3 * (const byte) SIZEOF_SIGNED_WORD
Rewriting multiplication to use shift [183] (word~) main::$26 ← (word) main::idx_y#3 * (const byte) SIZEOF_SIGNED_WORD
Successful SSA optimization Pass2MultiplyToShiftRewriting
Inlining constant with var siblings (const word) divr16u::quotient#0
Inlining constant with var siblings (const byte) divr16u::i#0
@ -3087,9 +3088,9 @@ main::@1: scope:[main] from main::@4 main::@5
[15] (word) main::idx_x#3 ← phi( main::@5/(byte) 0 main::@4/(word) main::idx_x#10 )
to:main::@2
main::@2: scope:[main] from main::@1
[16] (word~) main::$24 ← (word) main::idx_x#3 << (byte) 1
[17] (signed word*~) main::$26 ← (const signed word[$200]) SINUS#0 + (word~) main::$24
[18] (signed word) main::cos_x#0 ← *((signed word*~) main::$26)
[16] (word~) main::$25 ← (word) main::idx_x#3 << (byte) 1
[17] (signed word*~) main::$27 ← (const signed word[$200]) SINUS#0 + (word~) main::$25
[18] (signed word) main::cos_x#0 ← *((signed word*~) main::$27)
[19] (signed word) mul16s::b#1 ← (signed word) main::cos_x#0
[20] call mul16s
[21] (signed dword) mul16s::return#3 ← (signed dword) mul16s::return#0
@ -3099,9 +3100,9 @@ main::@9: scope:[main] from main::@2
[23] (signed dword~) main::$9 ← (signed dword) main::xpos#0 << (signed byte) 4
[24] (word~) main::$10 ← > (signed dword~) main::$9
[25] (word) main::x#0 ← (byte) $a0 + (word~) main::$10
[26] (word~) main::$25 ← (word) main::idx_y#3 << (byte) 1
[27] (signed word*~) main::$27 ← (const signed word[$200]) SINUS#0 + (word~) main::$25
[28] (signed word) main::sin_y#0 ← *((signed word*~) main::$27)
[26] (word~) main::$26 ← (word) main::idx_y#3 << (byte) 1
[27] (signed word*~) main::$28 ← (const signed word[$200]) SINUS#0 + (word~) main::$26
[28] (signed word) main::sin_y#0 ← *((signed word*~) main::$28)
[29] (signed word) mul16s::b#2 ← (signed word) main::sin_y#0
[30] call mul16s
[31] (signed dword) mul16s::return#4 ← (signed dword) mul16s::return#0
@ -3599,10 +3600,10 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(word~) main::$10 22.0
(signed dword~) main::$14 22.0
(word~) main::$15 22.0
(word~) main::$24 22.0
(word~) main::$25 22.0
(signed word*~) main::$26 22.0
(word~) main::$26 22.0
(signed word*~) main::$27 22.0
(signed word*~) main::$28 22.0
(signed dword~) main::$9 22.0
(signed word) main::cos_x
(signed word) main::cos_x#0 22.0
@ -3811,16 +3812,16 @@ Initial phi equivalence classes
[ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ]
[ divr16u::i#2 divr16u::i#1 ]
[ frame_cnt#10 frame_cnt#0 frame_cnt#1 ]
Added variable main::$24 to zero page equivalence class [ main::$24 ]
Added variable main::$26 to zero page equivalence class [ main::$26 ]
Added variable main::$25 to zero page equivalence class [ main::$25 ]
Added variable main::$27 to zero page equivalence class [ main::$27 ]
Added variable main::cos_x#0 to zero page equivalence class [ main::cos_x#0 ]
Added variable mul16s::return#3 to zero page equivalence class [ mul16s::return#3 ]
Added variable main::xpos#0 to zero page equivalence class [ main::xpos#0 ]
Added variable main::$9 to zero page equivalence class [ main::$9 ]
Added variable main::$10 to zero page equivalence class [ main::$10 ]
Added variable main::x#0 to zero page equivalence class [ main::x#0 ]
Added variable main::$25 to zero page equivalence class [ main::$25 ]
Added variable main::$27 to zero page equivalence class [ main::$27 ]
Added variable main::$26 to zero page equivalence class [ main::$26 ]
Added variable main::$28 to zero page equivalence class [ main::$28 ]
Added variable main::sin_y#0 to zero page equivalence class [ main::sin_y#0 ]
Added variable mul16s::return#4 to zero page equivalence class [ mul16s::return#4 ]
Added variable main::ypos#0 to zero page equivalence class [ main::ypos#0 ]
@ -3911,16 +3912,16 @@ Complete equivalence classes
[ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ]
[ divr16u::i#2 divr16u::i#1 ]
[ frame_cnt#10 frame_cnt#0 frame_cnt#1 ]
[ main::$24 ]
[ main::$26 ]
[ main::$25 ]
[ main::$27 ]
[ main::cos_x#0 ]
[ mul16s::return#3 ]
[ main::xpos#0 ]
[ main::$9 ]
[ main::$10 ]
[ main::x#0 ]
[ main::$25 ]
[ main::$27 ]
[ main::$26 ]
[ main::$28 ]
[ main::sin_y#0 ]
[ mul16s::return#4 ]
[ main::ypos#0 ]
@ -4010,16 +4011,16 @@ Allocated zp ZP_WORD:62 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::divid
Allocated zp ZP_WORD:64 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ]
Allocated zp ZP_BYTE:66 [ divr16u::i#2 divr16u::i#1 ]
Allocated zp ZP_BYTE:67 [ frame_cnt#10 frame_cnt#0 frame_cnt#1 ]
Allocated zp ZP_WORD:68 [ main::$24 ]
Allocated zp ZP_WORD:70 [ main::$26 ]
Allocated zp ZP_WORD:68 [ main::$25 ]
Allocated zp ZP_WORD:70 [ main::$27 ]
Allocated zp ZP_WORD:72 [ main::cos_x#0 ]
Allocated zp ZP_DWORD:74 [ mul16s::return#3 ]
Allocated zp ZP_DWORD:78 [ main::xpos#0 ]
Allocated zp ZP_DWORD:82 [ main::$9 ]
Allocated zp ZP_WORD:86 [ main::$10 ]
Allocated zp ZP_WORD:88 [ main::x#0 ]
Allocated zp ZP_WORD:90 [ main::$25 ]
Allocated zp ZP_WORD:92 [ main::$27 ]
Allocated zp ZP_WORD:90 [ main::$26 ]
Allocated zp ZP_WORD:92 [ main::$28 ]
Allocated zp ZP_WORD:94 [ main::sin_y#0 ]
Allocated zp ZP_DWORD:96 [ mul16s::return#4 ]
Allocated zp ZP_DWORD:100 [ main::ypos#0 ]
@ -4160,8 +4161,8 @@ main: {
.label _10 = $56
.label _14 = $68
.label _15 = $6c
.label _24 = $44
.label _25 = $5a
.label _25 = $44
.label _26 = $5a
.label cos_x = $48
.label xpos = $4e
.label x = $58
@ -4170,8 +4171,8 @@ main: {
.label y = $6e
.label idx_x = 2
.label idx_y = 4
.label _26 = $46
.label _27 = $5c
.label _27 = $46
.label _28 = $5c
// [6] call sin16s_gen2
// [128] phi from main to sin16s_gen2 [phi:main->sin16s_gen2]
sin16s_gen2_from_main:
@ -4231,27 +4232,27 @@ main: {
jmp b2
// main::@2
b2:
// [16] (word~) main::$24 ← (word) main::idx_x#3 << (byte) 1 -- vwuz1=vwuz2_rol_1
// [16] (word~) main::$25 ← (word) main::idx_x#3 << (byte) 1 -- vwuz1=vwuz2_rol_1
lda.z idx_x
asl
sta.z _24
sta.z _25
lda.z idx_x+1
rol
sta.z _24+1
// [17] (signed word*~) main::$26 ← (const signed word[$200]) SINUS#0 + (word~) main::$24 -- pwsz1=pwsc1_plus_vwuz2
lda.z _24
sta.z _25+1
// [17] (signed word*~) main::$27 ← (const signed word[$200]) SINUS#0 + (word~) main::$25 -- pwsz1=pwsc1_plus_vwuz2
lda.z _25
clc
adc #<SINUS
sta.z _26
lda.z _24+1
sta.z _27
lda.z _25+1
adc #>SINUS
sta.z _26+1
// [18] (signed word) main::cos_x#0 ← *((signed word*~) main::$26) -- vwsz1=_deref_pwsz2
sta.z _27+1
// [18] (signed word) main::cos_x#0 ← *((signed word*~) main::$27) -- vwsz1=_deref_pwsz2
ldy #0
lda (_26),y
lda (_27),y
sta.z cos_x
iny
lda (_26),y
lda (_27),y
sta.z cos_x+1
// [19] (signed word) mul16s::b#1 ← (signed word) main::cos_x#0 -- vwsz1=vwsz2
lda.z cos_x
@ -4327,27 +4328,27 @@ main: {
lda #0
adc.z _10+1
sta.z x+1
// [26] (word~) main::$25 ← (word) main::idx_y#3 << (byte) 1 -- vwuz1=vwuz2_rol_1
// [26] (word~) main::$26 ← (word) main::idx_y#3 << (byte) 1 -- vwuz1=vwuz2_rol_1
lda.z idx_y
asl
sta.z _25
sta.z _26
lda.z idx_y+1
rol
sta.z _25+1
// [27] (signed word*~) main::$27 ← (const signed word[$200]) SINUS#0 + (word~) main::$25 -- pwsz1=pwsc1_plus_vwuz2
lda.z _25
sta.z _26+1
// [27] (signed word*~) main::$28 ← (const signed word[$200]) SINUS#0 + (word~) main::$26 -- pwsz1=pwsc1_plus_vwuz2
lda.z _26
clc
adc #<SINUS
sta.z _27
lda.z _25+1
sta.z _28
lda.z _26+1
adc #>SINUS
sta.z _27+1
// [28] (signed word) main::sin_y#0 ← *((signed word*~) main::$27) -- vwsz1=_deref_pwsz2
sta.z _28+1
// [28] (signed word) main::sin_y#0 ← *((signed word*~) main::$28) -- vwsz1=_deref_pwsz2
ldy #0
lda (_27),y
lda (_28),y
sta.z sin_y
iny
lda (_27),y
lda (_28),y
sta.z sin_y+1
// [29] (signed word) mul16s::b#2 ← (signed word) main::sin_y#0 -- vwsz1=vwsz2
lda.z sin_y
@ -5961,17 +5962,17 @@ Equivalence Class zp ZP_BYTE:142 [ bitmap_init::$4 ] has ALU potential.
Statement [1] (byte) frame_cnt#0 ← (byte) 1 [ frame_cnt#0 ] ( [ frame_cnt#0 ] ) always clobbers reg byte a
Statement [11] *((const byte*) D011#0) ← (const byte) VIC_BMM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ frame_cnt#0 ] ( main:3 [ frame_cnt#0 ] ) always clobbers reg byte a
Statement [13] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 [ frame_cnt#0 ] ( main:3 [ frame_cnt#0 ] ) always clobbers reg byte a
Statement [16] (word~) main::$24 ← (word) main::idx_x#3 << (byte) 1 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::$24 ] ( main:3 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::$24 ] ) always clobbers reg byte a
Statement [17] (signed word*~) main::$26 ← (const signed word[$200]) SINUS#0 + (word~) main::$24 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::$26 ] ( main:3 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::$26 ] ) always clobbers reg byte a
Statement [18] (signed word) main::cos_x#0 ← *((signed word*~) main::$26) [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::cos_x#0 ] ( main:3 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::cos_x#0 ] ) always clobbers reg byte a reg byte y
Statement [16] (word~) main::$25 ← (word) main::idx_x#3 << (byte) 1 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::$25 ] ( main:3 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::$25 ] ) always clobbers reg byte a
Statement [17] (signed word*~) main::$27 ← (const signed word[$200]) SINUS#0 + (word~) main::$25 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::$27 ] ( main:3 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::$27 ] ) always clobbers reg byte a
Statement [18] (signed word) main::cos_x#0 ← *((signed word*~) main::$27) [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::cos_x#0 ] ( main:3 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::cos_x#0 ] ) always clobbers reg byte a reg byte y
Statement [19] (signed word) mul16s::b#1 ← (signed word) main::cos_x#0 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::b#1 ] ( main:3 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::b#1 ] ) always clobbers reg byte a
Statement [21] (signed dword) mul16s::return#3 ← (signed dword) mul16s::return#0 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::return#3 ] ( main:3 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::return#3 ] ) always clobbers reg byte a
Statement [22] (signed dword) main::xpos#0 ← (signed dword) mul16s::return#3 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::xpos#0 ] ( main:3 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::xpos#0 ] ) always clobbers reg byte a
Statement [23] (signed dword~) main::$9 ← (signed dword) main::xpos#0 << (signed byte) 4 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::$9 ] ( main:3 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::$9 ] ) always clobbers reg byte a
Statement [25] (word) main::x#0 ← (byte) $a0 + (word~) main::$10 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 ] ( main:3 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 ] ) always clobbers reg byte a
Statement [26] (word~) main::$25 ← (word) main::idx_y#3 << (byte) 1 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 main::$25 ] ( main:3 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 main::$25 ] ) always clobbers reg byte a
Statement [27] (signed word*~) main::$27 ← (const signed word[$200]) SINUS#0 + (word~) main::$25 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 main::$27 ] ( main:3 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 main::$27 ] ) always clobbers reg byte a
Statement [28] (signed word) main::sin_y#0 ← *((signed word*~) main::$27) [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 main::sin_y#0 ] ( main:3 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 main::sin_y#0 ] ) always clobbers reg byte a reg byte y
Statement [26] (word~) main::$26 ← (word) main::idx_y#3 << (byte) 1 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 main::$26 ] ( main:3 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 main::$26 ] ) always clobbers reg byte a
Statement [27] (signed word*~) main::$28 ← (const signed word[$200]) SINUS#0 + (word~) main::$26 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 main::$28 ] ( main:3 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 main::$28 ] ) always clobbers reg byte a
Statement [28] (signed word) main::sin_y#0 ← *((signed word*~) main::$28) [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 main::sin_y#0 ] ( main:3 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 main::sin_y#0 ] ) always clobbers reg byte a reg byte y
Statement [29] (signed word) mul16s::b#2 ← (signed word) main::sin_y#0 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::b#2 ] ( main:3 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::b#2 ] ) always clobbers reg byte a
Statement [31] (signed dword) mul16s::return#4 ← (signed dword) mul16s::return#0 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::return#4 ] ( main:3 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::return#4 ] ) always clobbers reg byte a
Statement [32] (signed dword) main::ypos#0 ← (signed dword) mul16s::return#4 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 main::ypos#0 ] ( main:3 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 main::ypos#0 ] ) always clobbers reg byte a
@ -6091,17 +6092,17 @@ Statement [230] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg b
Statement [1] (byte) frame_cnt#0 ← (byte) 1 [ frame_cnt#0 ] ( [ frame_cnt#0 ] ) always clobbers reg byte a
Statement [11] *((const byte*) D011#0) ← (const byte) VIC_BMM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ frame_cnt#0 ] ( main:3 [ frame_cnt#0 ] ) always clobbers reg byte a
Statement [13] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 [ frame_cnt#0 ] ( main:3 [ frame_cnt#0 ] ) always clobbers reg byte a
Statement [16] (word~) main::$24 ← (word) main::idx_x#3 << (byte) 1 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::$24 ] ( main:3 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::$24 ] ) always clobbers reg byte a
Statement [17] (signed word*~) main::$26 ← (const signed word[$200]) SINUS#0 + (word~) main::$24 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::$26 ] ( main:3 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::$26 ] ) always clobbers reg byte a
Statement [18] (signed word) main::cos_x#0 ← *((signed word*~) main::$26) [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::cos_x#0 ] ( main:3 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::cos_x#0 ] ) always clobbers reg byte a reg byte y
Statement [16] (word~) main::$25 ← (word) main::idx_x#3 << (byte) 1 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::$25 ] ( main:3 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::$25 ] ) always clobbers reg byte a
Statement [17] (signed word*~) main::$27 ← (const signed word[$200]) SINUS#0 + (word~) main::$25 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::$27 ] ( main:3 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::$27 ] ) always clobbers reg byte a
Statement [18] (signed word) main::cos_x#0 ← *((signed word*~) main::$27) [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::cos_x#0 ] ( main:3 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::cos_x#0 ] ) always clobbers reg byte a reg byte y
Statement [19] (signed word) mul16s::b#1 ← (signed word) main::cos_x#0 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::b#1 ] ( main:3 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::b#1 ] ) always clobbers reg byte a
Statement [21] (signed dword) mul16s::return#3 ← (signed dword) mul16s::return#0 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::return#3 ] ( main:3 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 mul16s::return#3 ] ) always clobbers reg byte a
Statement [22] (signed dword) main::xpos#0 ← (signed dword) mul16s::return#3 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::xpos#0 ] ( main:3 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::xpos#0 ] ) always clobbers reg byte a
Statement [23] (signed dword~) main::$9 ← (signed dword) main::xpos#0 << (signed byte) 4 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::$9 ] ( main:3 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::$9 ] ) always clobbers reg byte a
Statement [25] (word) main::x#0 ← (byte) $a0 + (word~) main::$10 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 ] ( main:3 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 ] ) always clobbers reg byte a
Statement [26] (word~) main::$25 ← (word) main::idx_y#3 << (byte) 1 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 main::$25 ] ( main:3 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 main::$25 ] ) always clobbers reg byte a
Statement [27] (signed word*~) main::$27 ← (const signed word[$200]) SINUS#0 + (word~) main::$25 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 main::$27 ] ( main:3 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 main::$27 ] ) always clobbers reg byte a
Statement [28] (signed word) main::sin_y#0 ← *((signed word*~) main::$27) [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 main::sin_y#0 ] ( main:3 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 main::sin_y#0 ] ) always clobbers reg byte a reg byte y
Statement [26] (word~) main::$26 ← (word) main::idx_y#3 << (byte) 1 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 main::$26 ] ( main:3 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 main::$26 ] ) always clobbers reg byte a
Statement [27] (signed word*~) main::$28 ← (const signed word[$200]) SINUS#0 + (word~) main::$26 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 main::$28 ] ( main:3 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 main::$28 ] ) always clobbers reg byte a
Statement [28] (signed word) main::sin_y#0 ← *((signed word*~) main::$28) [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 main::sin_y#0 ] ( main:3 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 main::sin_y#0 ] ) always clobbers reg byte a reg byte y
Statement [29] (signed word) mul16s::b#2 ← (signed word) main::sin_y#0 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::b#2 ] ( main:3 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::b#2 ] ) always clobbers reg byte a
Statement [31] (signed dword) mul16s::return#4 ← (signed dword) mul16s::return#0 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::return#4 ] ( main:3 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 mul16s::return#4 ] ) always clobbers reg byte a
Statement [32] (signed dword) main::ypos#0 ← (signed dword) mul16s::return#4 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 main::ypos#0 ] ( main:3 [ frame_cnt#0 main::idx_x#3 main::idx_y#3 main::x#0 main::ypos#0 ] ) always clobbers reg byte a
@ -6243,16 +6244,16 @@ Potential registers zp ZP_WORD:62 [ divr16u::dividend#3 divr16u::dividend#5 divr
Potential registers zp ZP_WORD:64 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] : zp ZP_WORD:64 ,
Potential registers zp ZP_BYTE:66 [ divr16u::i#2 divr16u::i#1 ] : zp ZP_BYTE:66 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:67 [ frame_cnt#10 frame_cnt#0 frame_cnt#1 ] : zp ZP_BYTE:67 ,
Potential registers zp ZP_WORD:68 [ main::$24 ] : zp ZP_WORD:68 ,
Potential registers zp ZP_WORD:70 [ main::$26 ] : zp ZP_WORD:70 ,
Potential registers zp ZP_WORD:68 [ main::$25 ] : zp ZP_WORD:68 ,
Potential registers zp ZP_WORD:70 [ main::$27 ] : zp ZP_WORD:70 ,
Potential registers zp ZP_WORD:72 [ main::cos_x#0 ] : zp ZP_WORD:72 ,
Potential registers zp ZP_DWORD:74 [ mul16s::return#3 ] : zp ZP_DWORD:74 ,
Potential registers zp ZP_DWORD:78 [ main::xpos#0 ] : zp ZP_DWORD:78 ,
Potential registers zp ZP_DWORD:82 [ main::$9 ] : zp ZP_DWORD:82 ,
Potential registers zp ZP_WORD:86 [ main::$10 ] : zp ZP_WORD:86 , reg byte alu ,
Potential registers zp ZP_WORD:88 [ main::x#0 ] : zp ZP_WORD:88 ,
Potential registers zp ZP_WORD:90 [ main::$25 ] : zp ZP_WORD:90 ,
Potential registers zp ZP_WORD:92 [ main::$27 ] : zp ZP_WORD:92 ,
Potential registers zp ZP_WORD:90 [ main::$26 ] : zp ZP_WORD:90 ,
Potential registers zp ZP_WORD:92 [ main::$28 ] : zp ZP_WORD:92 ,
Potential registers zp ZP_WORD:94 [ main::sin_y#0 ] : zp ZP_WORD:94 ,
Potential registers zp ZP_DWORD:96 [ mul16s::return#4 ] : zp ZP_DWORD:96 ,
Potential registers zp ZP_DWORD:100 [ main::ypos#0 ] : zp ZP_DWORD:100 ,
@ -6313,7 +6314,7 @@ Potential registers zp ZP_WORD:225 [ rem16u#1 ] : zp ZP_WORD:225 ,
REGISTER UPLIFT SCOPES
Uplift Scope [mul16u] 346.86: zp ZP_DWORD:20 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] 251.57: zp ZP_DWORD:24 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] 202: zp ZP_BYTE:138 [ mul16u::$1 ] 178.67: zp ZP_WORD:18 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] 4: zp ZP_WORD:14 [ mul16u::b#0 ] 4: zp ZP_WORD:16 [ mul16u::b#1 ] 4: zp ZP_DWORD:122 [ mul16u::return#2 ] 4: zp ZP_DWORD:197 [ mul16u::return#3 ]
Uplift Scope [main] 23.18: zp ZP_WORD:4 [ main::idx_y#3 main::idx_y#10 main::idx_y#1 ] 22: zp ZP_WORD:68 [ main::$24 ] 22: zp ZP_WORD:70 [ main::$26 ] 22: zp ZP_WORD:72 [ main::cos_x#0 ] 22: zp ZP_DWORD:78 [ main::xpos#0 ] 22: zp ZP_DWORD:82 [ main::$9 ] 22: zp ZP_WORD:86 [ main::$10 ] 22: zp ZP_WORD:90 [ main::$25 ] 22: zp ZP_WORD:92 [ main::$27 ] 22: zp ZP_WORD:94 [ main::sin_y#0 ] 22: zp ZP_DWORD:100 [ main::ypos#0 ] 22: zp ZP_DWORD:104 [ main::$14 ] 22: zp ZP_WORD:108 [ main::$15 ] 16.04: zp ZP_WORD:2 [ main::idx_x#3 main::idx_x#10 main::idx_x#1 ] 11: zp ZP_WORD:110 [ main::y#0 ] 1.83: zp ZP_WORD:88 [ main::x#0 ]
Uplift Scope [main] 23.18: zp ZP_WORD:4 [ main::idx_y#3 main::idx_y#10 main::idx_y#1 ] 22: zp ZP_WORD:68 [ main::$25 ] 22: zp ZP_WORD:70 [ main::$27 ] 22: zp ZP_WORD:72 [ main::cos_x#0 ] 22: zp ZP_DWORD:78 [ main::xpos#0 ] 22: zp ZP_DWORD:82 [ main::$9 ] 22: zp ZP_WORD:86 [ main::$10 ] 22: zp ZP_WORD:90 [ main::$26 ] 22: zp ZP_WORD:92 [ main::$28 ] 22: zp ZP_WORD:94 [ main::sin_y#0 ] 22: zp ZP_DWORD:100 [ main::ypos#0 ] 22: zp ZP_DWORD:104 [ main::$14 ] 22: zp ZP_WORD:108 [ main::$15 ] 16.04: zp ZP_WORD:2 [ main::idx_x#3 main::idx_x#10 main::idx_x#1 ] 11: zp ZP_WORD:110 [ main::y#0 ] 1.83: zp ZP_WORD:88 [ main::x#0 ]
Uplift Scope [divr16u] 106.92: zp ZP_WORD:60 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] 35.54: zp ZP_WORD:64 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] 22: zp ZP_BYTE:223 [ divr16u::$1 ] 22: zp ZP_BYTE:224 [ divr16u::$2 ] 18.19: zp ZP_BYTE:66 [ divr16u::i#2 divr16u::i#1 ] 9.75: zp ZP_WORD:62 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] 4: zp ZP_WORD:211 [ divr16u::return#2 ] 4: zp ZP_WORD:215 [ divr16u::return#3 ]
Uplift Scope [bitmap_init] 39.88: zp ZP_WORD:38 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] 34.83: zp ZP_BYTE:35 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] 22: zp ZP_BYTE:36 [ bitmap_init::x#2 bitmap_init::x#1 ] 22: zp ZP_BYTE:37 [ bitmap_init::y#2 bitmap_init::y#1 ] 22: zp ZP_BYTE:142 [ bitmap_init::$4 ] 22: zp ZP_BYTE:143 [ bitmap_init::$5 ] 22: zp ZP_BYTE:144 [ bitmap_init::$6 ] 5.5: zp ZP_BYTE:141 [ bitmap_init::$7 ]
Uplift Scope [mul16s] 46.18: zp ZP_WORD:8 [ mul16s::b#3 mul16s::b#2 mul16s::b#1 ] 23: zp ZP_WORD:6 [ mul16s::a#3 mul16s::a#0 ] 22: zp ZP_DWORD:74 [ mul16s::return#3 ] 22: zp ZP_DWORD:96 [ mul16s::return#4 ] 22: zp ZP_DWORD:155 [ mul16s::return#2 ] 16.5: zp ZP_DWORD:10 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 ] 7: zp ZP_DWORD:134 [ mul16s::return#0 ] 4: zp ZP_WORD:126 [ mul16s::$9 ] 4: zp ZP_WORD:128 [ mul16s::$16 ] 4: zp ZP_WORD:130 [ mul16s::$13 ] 4: zp ZP_WORD:132 [ mul16s::$17 ]
@ -6329,7 +6330,7 @@ Uplift Scope [init_irq]
Uplift Scope [irq]
Uplifting [mul16u] best 27229 combination zp ZP_DWORD:20 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp ZP_DWORD:24 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp ZP_WORD:18 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] zp ZP_WORD:14 [ mul16u::b#0 ] zp ZP_WORD:16 [ mul16u::b#1 ] zp ZP_DWORD:122 [ mul16u::return#2 ] zp ZP_DWORD:197 [ mul16u::return#3 ]
Uplifting [main] best 26989 combination zp ZP_WORD:4 [ main::idx_y#3 main::idx_y#10 main::idx_y#1 ] zp ZP_WORD:68 [ main::$24 ] zp ZP_WORD:70 [ main::$26 ] zp ZP_WORD:72 [ main::cos_x#0 ] zp ZP_DWORD:78 [ main::xpos#0 ] zp ZP_DWORD:82 [ main::$9 ] reg byte alu [ main::$10 ] zp ZP_WORD:90 [ main::$25 ] zp ZP_WORD:92 [ main::$27 ] zp ZP_WORD:94 [ main::sin_y#0 ] zp ZP_DWORD:100 [ main::ypos#0 ] zp ZP_DWORD:104 [ main::$14 ] reg byte alu [ main::$15 ] zp ZP_WORD:2 [ main::idx_x#3 main::idx_x#10 main::idx_x#1 ] zp ZP_WORD:110 [ main::y#0 ] zp ZP_WORD:88 [ main::x#0 ]
Uplifting [main] best 26989 combination zp ZP_WORD:4 [ main::idx_y#3 main::idx_y#10 main::idx_y#1 ] zp ZP_WORD:68 [ main::$25 ] zp ZP_WORD:70 [ main::$27 ] zp ZP_WORD:72 [ main::cos_x#0 ] zp ZP_DWORD:78 [ main::xpos#0 ] zp ZP_DWORD:82 [ main::$9 ] reg byte alu [ main::$10 ] zp ZP_WORD:90 [ main::$26 ] zp ZP_WORD:92 [ main::$28 ] zp ZP_WORD:94 [ main::sin_y#0 ] zp ZP_DWORD:100 [ main::ypos#0 ] zp ZP_DWORD:104 [ main::$14 ] reg byte alu [ main::$15 ] zp ZP_WORD:2 [ main::idx_x#3 main::idx_x#10 main::idx_x#1 ] zp ZP_WORD:110 [ main::y#0 ] zp ZP_WORD:88 [ main::x#0 ]
Uplifting [divr16u] best 26779 combination zp ZP_WORD:60 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:64 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:62 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp ZP_WORD:211 [ divr16u::return#2 ] zp ZP_WORD:215 [ divr16u::return#3 ]
Uplifting [bitmap_init] best 26269 combination zp ZP_WORD:38 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] reg byte a [ bitmap_init::$4 ] zp ZP_BYTE:143 [ bitmap_init::$5 ] zp ZP_BYTE:144 [ bitmap_init::$6 ] zp ZP_BYTE:141 [ bitmap_init::$7 ]
Limited combination testing to 100 combinations of 15360 possible.
@ -6372,10 +6373,10 @@ Coalescing zero page register [ zp ZP_WORD:55 [ mulu16_sel::v1#5 mulu16_sel::v1#
Coalescing zero page register [ zp ZP_WORD:55 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 ] ] with [ zp ZP_WORD:187 [ sin16s::x4#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:64 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] ] with [ zp ZP_WORD:211 [ divr16u::return#2 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:64 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 ] ] with [ zp ZP_WORD:215 [ divr16u::return#3 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:68 [ main::$24 ] ] with [ zp ZP_WORD:70 [ main::$26 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:68 [ main::$25 ] ] with [ zp ZP_WORD:70 [ main::$27 ] ] - score: 1
Coalescing zero page register [ zp ZP_DWORD:74 [ mul16s::return#3 ] ] with [ zp ZP_DWORD:78 [ main::xpos#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:88 [ main::x#0 ] ] with [ zp ZP_WORD:113 [ bitmap_plot::x#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:90 [ main::$25 ] ] with [ zp ZP_WORD:92 [ main::$27 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:90 [ main::$26 ] ] with [ zp ZP_WORD:92 [ main::$28 ] ] - score: 1
Coalescing zero page register [ zp ZP_DWORD:96 [ mul16s::return#4 ] ] with [ zp ZP_DWORD:100 [ main::ypos#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:115 [ bitmap_plot::plotter#0 ] ] with [ zp ZP_WORD:119 [ bitmap_plot::plotter#1 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:126 [ mul16s::$9 ] ] with [ zp ZP_WORD:128 [ mul16s::$16 ] ] - score: 1
@ -6387,8 +6388,8 @@ Coalescing zero page register [ zp ZP_WORD:179 [ mulu16_sel::return#2 ] ] with [
Coalescing zero page register [ zp ZP_WORD:189 [ mulu16_sel::return#11 ] ] with [ zp ZP_WORD:191 [ sin16s::x5#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_DWORD:201 [ mulu16_sel::$0 ] ] with [ zp ZP_DWORD:205 [ mulu16_sel::$1 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:6 [ mul16s::a#3 mul16s::a#0 mul16s::$17 sin16s::return#0 ] ] with [ zp ZP_WORD:53 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:8 [ mul16s::b#3 mul16s::b#2 mul16s::b#1 main::cos_x#0 main::sin_y#0 ] ] with [ zp ZP_WORD:68 [ main::$24 main::$26 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:8 [ mul16s::b#3 mul16s::b#2 mul16s::b#1 main::cos_x#0 main::sin_y#0 main::$24 main::$26 ] ] with [ zp ZP_WORD:90 [ main::$25 main::$27 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:8 [ mul16s::b#3 mul16s::b#2 mul16s::b#1 main::cos_x#0 main::sin_y#0 ] ] with [ zp ZP_WORD:68 [ main::$25 main::$27 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:8 [ mul16s::b#3 mul16s::b#2 mul16s::b#1 main::cos_x#0 main::sin_y#0 main::$25 main::$27 ] ] with [ zp ZP_WORD:90 [ main::$26 main::$28 ] ] - score: 1
Coalescing zero page register [ zp ZP_DWORD:10 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 ] ] with [ zp ZP_DWORD:20 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 ] ] - score: 1
Coalescing zero page register [ zp ZP_DWORD:10 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 ] ] with [ zp ZP_DWORD:74 [ mul16s::return#3 main::xpos#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_DWORD:10 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#3 main::xpos#0 ] ] with [ zp ZP_DWORD:96 [ mul16s::return#4 main::ypos#0 ] ] - score: 1
@ -6406,7 +6407,7 @@ Coalescing zero page register [ zp ZP_WORD:171 [ mulu16_sel::return#0 mulu16_sel
Coalescing zero page register [ zp ZP_WORD:16 [ mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] ] with [ zp ZP_WORD:2 [ main::idx_x#3 main::idx_x#10 main::idx_x#1 ] ]
Coalescing zero page register [ zp ZP_WORD:28 [ memset::num#2 memset::end#0 ] ] with [ zp ZP_WORD:4 [ main::idx_y#3 main::idx_y#10 main::idx_y#1 ] ]
Coalescing zero page register [ zp ZP_WORD:30 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] ] with [ zp ZP_WORD:6 [ mul16s::a#3 mul16s::a#0 mul16s::$17 sin16s::return#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::usinx#0 ] ]
Coalescing zero page register [ zp ZP_WORD:38 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] ] with [ zp ZP_WORD:8 [ mul16s::b#3 mul16s::b#2 mul16s::b#1 main::cos_x#0 main::sin_y#0 main::$24 main::$26 main::$25 main::$27 ] ]
Coalescing zero page register [ zp ZP_WORD:38 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] ] with [ zp ZP_WORD:8 [ mul16s::b#3 mul16s::b#2 mul16s::b#1 main::cos_x#0 main::sin_y#0 main::$25 main::$27 main::$26 main::$28 ] ]
Coalescing zero page register [ zp ZP_DWORD:49 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 sin16s::$4 ] ] with [ zp ZP_DWORD:10 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#3 main::xpos#0 mul16s::return#4 main::ypos#0 mul16s::return#2 sin16s_gen2::$6 main::$9 main::$14 mulu16_sel::$0 mulu16_sel::$1 ] ]
Coalescing zero page register [ zp ZP_WORD:55 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ] ] with [ zp ZP_WORD:14 [ mul16u::b#0 ] ]
Coalescing zero page register [ zp ZP_WORD:60 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 ] ] with [ zp ZP_WORD:18 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] ]
@ -6421,7 +6422,7 @@ Coalescing zero page register [ zp ZP_WORD:213 [ div32u16u::quotient_hi#0 ] ] wi
Coalescing zero page register [ zp ZP_WORD:62 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 sin16s_gen2::i#6 sin16s_gen2::i#1 ] ] with [ zp ZP_WORD:28 [ memset::num#2 memset::end#0 main::idx_y#3 main::idx_y#10 main::idx_y#1 ] ]
Coalescing zero page register [ zp ZP_WORD:115 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 main::y#0 ] ] with [ zp ZP_WORD:30 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 mul16s::a#3 mul16s::a#0 mul16s::$17 sin16s::return#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::usinx#0 ] ]
Coalescing zero page register [ zp ZP_WORD:126 [ mul16s::$9 mul16s::$16 bitmap_plot::$1 ] ] with [ zp ZP_WORD:55 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 mul16u::b#0 ] ]
Coalescing zero page register [ zp ZP_WORD:213 [ div32u16u::quotient_hi#0 mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 ] ] with [ zp ZP_WORD:38 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 mul16s::b#3 mul16s::b#2 mul16s::b#1 main::cos_x#0 main::sin_y#0 main::$24 main::$26 main::$25 main::$27 ] ]
Coalescing zero page register [ zp ZP_WORD:213 [ div32u16u::quotient_hi#0 mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 ] ] with [ zp ZP_WORD:38 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 mul16s::b#3 mul16s::b#2 mul16s::b#1 main::cos_x#0 main::sin_y#0 main::$25 main::$27 main::$26 main::$28 ] ]
Allocated (was zp ZP_WORD:16) zp ZP_WORD:2 [ mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 main::idx_x#3 main::idx_x#10 main::idx_x#1 ]
Allocated (was zp ZP_DWORD:24) zp ZP_DWORD:4 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ]
Allocated (was zp ZP_DWORD:42) zp ZP_DWORD:8 [ sin16s_gen2::x#6 sin16s_gen2::x#1 ]
@ -6436,7 +6437,7 @@ Allocated (was zp ZP_BYTE:141) zp ZP_BYTE:27 [ bitmap_init::$7 sin16s::isUpper#2
Allocated (was zp ZP_DWORD:145) zp ZP_DWORD:28 [ div32u16u::return#2 sin16s_gen2::step#0 div32u16u::return#0 ]
Allocated (was zp ZP_WORD:163) zp ZP_WORD:32 [ sin16s_gen2::$9 main::x#0 bitmap_plot::x#0 ]
Allocated (was zp ZP_WORD:169) zp ZP_WORD:34 [ sin16s::x1#0 mul16s::$13 ]
Allocated (was zp ZP_WORD:213) zp ZP_WORD:36 [ div32u16u::quotient_hi#0 mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 mul16s::b#3 mul16s::b#2 mul16s::b#1 main::cos_x#0 main::sin_y#0 main::$24 main::$26 main::$25 main::$27 ]
Allocated (was zp ZP_WORD:213) zp ZP_WORD:36 [ div32u16u::quotient_hi#0 mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 mul16s::b#3 mul16s::b#2 mul16s::b#1 main::cos_x#0 main::sin_y#0 main::$25 main::$27 main::$26 main::$28 ]
Interrupt procedure irq clobbers ACNZ
Removing interrupt register storage stx regx+1 in CHU421 entry interrupt(HARDWARE_CLOBBER)
Removing interrupt register storage sty regy+1 in CHU421 entry interrupt(HARDWARE_CLOBBER)
@ -6524,8 +6525,8 @@ main: {
.const toD0181_return = (>(SCREEN&$3fff)*4)|(>BITMAP)/4&$f
.label _9 = $c
.label _14 = $c
.label _24 = $24
.label _25 = $24
.label _26 = $24
.label cos_x = $24
.label xpos = $c
.label x = $20
@ -6534,8 +6535,8 @@ main: {
.label y = $17
.label idx_x = 2
.label idx_y = $12
.label _26 = $24
.label _27 = $24
.label _28 = $24
// [6] call sin16s_gen2
// [128] phi from main to sin16s_gen2 [phi:main->sin16s_gen2]
sin16s_gen2_from_main:
@ -6595,22 +6596,22 @@ main: {
jmp b2
// main::@2
b2:
// [16] (word~) main::$24 ← (word) main::idx_x#3 << (byte) 1 -- vwuz1=vwuz2_rol_1
// [16] (word~) main::$25 ← (word) main::idx_x#3 << (byte) 1 -- vwuz1=vwuz2_rol_1
lda.z idx_x
asl
sta.z _24
sta.z _25
lda.z idx_x+1
rol
sta.z _24+1
// [17] (signed word*~) main::$26 ← (const signed word[$200]) SINUS#0 + (word~) main::$24 -- pwsz1=pwsc1_plus_vwuz1
sta.z _25+1
// [17] (signed word*~) main::$27 ← (const signed word[$200]) SINUS#0 + (word~) main::$25 -- pwsz1=pwsc1_plus_vwuz1
clc
lda.z _26
lda.z _27
adc #<SINUS
sta.z _26
lda.z _26+1
sta.z _27
lda.z _27+1
adc #>SINUS
sta.z _26+1
// [18] (signed word) main::cos_x#0 ← *((signed word*~) main::$26) -- vwsz1=_deref_pwsz1
sta.z _27+1
// [18] (signed word) main::cos_x#0 ← *((signed word*~) main::$27) -- vwsz1=_deref_pwsz1
ldy #0
lda (cos_x),y
tax
@ -6660,22 +6661,22 @@ main: {
lda #>$a0
adc.z _9+3
sta.z x+1
// [26] (word~) main::$25 ← (word) main::idx_y#3 << (byte) 1 -- vwuz1=vwuz2_rol_1
// [26] (word~) main::$26 ← (word) main::idx_y#3 << (byte) 1 -- vwuz1=vwuz2_rol_1
lda.z idx_y
asl
sta.z _25
sta.z _26
lda.z idx_y+1
rol
sta.z _25+1
// [27] (signed word*~) main::$27 ← (const signed word[$200]) SINUS#0 + (word~) main::$25 -- pwsz1=pwsc1_plus_vwuz1
sta.z _26+1
// [27] (signed word*~) main::$28 ← (const signed word[$200]) SINUS#0 + (word~) main::$26 -- pwsz1=pwsc1_plus_vwuz1
clc
lda.z _27
lda.z _28
adc #<SINUS
sta.z _27
lda.z _27+1
sta.z _28
lda.z _28+1
adc #>SINUS
sta.z _27+1
// [28] (signed word) main::sin_y#0 ← *((signed word*~) main::$27) -- vwsz1=_deref_pwsz1
sta.z _28+1
// [28] (signed word) main::sin_y#0 ← *((signed word*~) main::$28) -- vwsz1=_deref_pwsz1
ldy #0
lda (sin_y),y
tax
@ -8437,10 +8438,10 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(word~) main::$10 reg byte alu 22.0
(signed dword~) main::$14 $14 zp ZP_DWORD:12 22.0
(word~) main::$15 reg byte alu 22.0
(word~) main::$24 $24 zp ZP_WORD:36 22.0
(word~) main::$25 $25 zp ZP_WORD:36 22.0
(signed word*~) main::$26 $26 zp ZP_WORD:36 22.0
(word~) main::$26 $26 zp ZP_WORD:36 22.0
(signed word*~) main::$27 $27 zp ZP_WORD:36 22.0
(signed word*~) main::$28 $28 zp ZP_WORD:36 22.0
(signed dword~) main::$9 $9 zp ZP_DWORD:12 22.0
(label) main::@1
(label) main::@10
@ -8698,7 +8699,7 @@ reg byte a [ bitmap_init::$6 ]
zp ZP_DWORD:28 [ div32u16u::return#2 sin16s_gen2::step#0 div32u16u::return#0 ]
zp ZP_WORD:32 [ sin16s_gen2::$9 main::x#0 bitmap_plot::x#0 ]
zp ZP_WORD:34 [ sin16s::x1#0 mul16s::$13 ]
zp ZP_WORD:36 [ div32u16u::quotient_hi#0 mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 mul16s::b#3 mul16s::b#2 mul16s::b#1 main::cos_x#0 main::sin_y#0 main::$24 main::$26 main::$25 main::$27 ]
zp ZP_WORD:36 [ div32u16u::quotient_hi#0 mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 mul16s::b#3 mul16s::b#2 mul16s::b#1 main::cos_x#0 main::sin_y#0 main::$25 main::$27 main::$26 main::$28 ]
reg byte a [ divr16u::$1 ]
reg byte a [ divr16u::$2 ]
@ -8777,8 +8778,8 @@ main: {
.const toD0181_return = (>(SCREEN&$3fff)*4)|(>BITMAP)/4&$f
.label _9 = $c
.label _14 = $c
.label _24 = $24
.label _25 = $24
.label _26 = $24
.label cos_x = $24
.label xpos = $c
.label x = $20
@ -8787,8 +8788,8 @@ main: {
.label y = $17
.label idx_x = 2
.label idx_y = $12
.label _26 = $24
.label _27 = $24
.label _28 = $24
// sin16s_gen2(SINUS, 512, -0x1001, 0x1001)
// [6] call sin16s_gen2
// [128] phi from main to sin16s_gen2 [phi:main->sin16s_gen2]
@ -8834,22 +8835,22 @@ main: {
// main::@2
b2:
// cos_x = SINUS[idx_x]
// [16] (word~) main::$24 ← (word) main::idx_x#3 << (byte) 1 -- vwuz1=vwuz2_rol_1
// [16] (word~) main::$25 ← (word) main::idx_x#3 << (byte) 1 -- vwuz1=vwuz2_rol_1
lda.z idx_x
asl
sta.z _24
sta.z _25
lda.z idx_x+1
rol
sta.z _24+1
// [17] (signed word*~) main::$26 ← (const signed word[$200]) SINUS#0 + (word~) main::$24 -- pwsz1=pwsc1_plus_vwuz1
sta.z _25+1
// [17] (signed word*~) main::$27 ← (const signed word[$200]) SINUS#0 + (word~) main::$25 -- pwsz1=pwsc1_plus_vwuz1
clc
lda.z _26
lda.z _27
adc #<SINUS
sta.z _26
lda.z _26+1
sta.z _27
lda.z _27+1
adc #>SINUS
sta.z _26+1
// [18] (signed word) main::cos_x#0 ← *((signed word*~) main::$26) -- vwsz1=_deref_pwsz1
sta.z _27+1
// [18] (signed word) main::cos_x#0 ← *((signed word*~) main::$27) -- vwsz1=_deref_pwsz1
ldy #0
lda (cos_x),y
tax
@ -8903,22 +8904,22 @@ main: {
adc.z _9+3
sta.z x+1
// sin_y = SINUS[idx_y]
// [26] (word~) main::$25 ← (word) main::idx_y#3 << (byte) 1 -- vwuz1=vwuz2_rol_1
// [26] (word~) main::$26 ← (word) main::idx_y#3 << (byte) 1 -- vwuz1=vwuz2_rol_1
lda.z idx_y
asl
sta.z _25
sta.z _26
lda.z idx_y+1
rol
sta.z _25+1
// [27] (signed word*~) main::$27 ← (const signed word[$200]) SINUS#0 + (word~) main::$25 -- pwsz1=pwsc1_plus_vwuz1
sta.z _26+1
// [27] (signed word*~) main::$28 ← (const signed word[$200]) SINUS#0 + (word~) main::$26 -- pwsz1=pwsc1_plus_vwuz1
clc
lda.z _27
lda.z _28
adc #<SINUS
sta.z _27
lda.z _27+1
sta.z _28
lda.z _28+1
adc #>SINUS
sta.z _27+1
// [28] (signed word) main::sin_y#0 ← *((signed word*~) main::$27) -- vwsz1=_deref_pwsz1
sta.z _28+1
// [28] (signed word) main::sin_y#0 ← *((signed word*~) main::$28) -- vwsz1=_deref_pwsz1
ldy #0
lda (sin_y),y
tax

View File

@ -172,10 +172,10 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(word~) main::$10 reg byte alu 22.0
(signed dword~) main::$14 $14 zp ZP_DWORD:12 22.0
(word~) main::$15 reg byte alu 22.0
(word~) main::$24 $24 zp ZP_WORD:36 22.0
(word~) main::$25 $25 zp ZP_WORD:36 22.0
(signed word*~) main::$26 $26 zp ZP_WORD:36 22.0
(word~) main::$26 $26 zp ZP_WORD:36 22.0
(signed word*~) main::$27 $27 zp ZP_WORD:36 22.0
(signed word*~) main::$28 $28 zp ZP_WORD:36 22.0
(signed dword~) main::$9 $9 zp ZP_DWORD:12 22.0
(label) main::@1
(label) main::@10
@ -433,6 +433,6 @@ reg byte a [ bitmap_init::$6 ]
zp ZP_DWORD:28 [ div32u16u::return#2 sin16s_gen2::step#0 div32u16u::return#0 ]
zp ZP_WORD:32 [ sin16s_gen2::$9 main::x#0 bitmap_plot::x#0 ]
zp ZP_WORD:34 [ sin16s::x1#0 mul16s::$13 ]
zp ZP_WORD:36 [ div32u16u::quotient_hi#0 mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 mul16s::b#3 mul16s::b#2 mul16s::b#1 main::cos_x#0 main::sin_y#0 main::$24 main::$26 main::$25 main::$27 ]
zp ZP_WORD:36 [ div32u16u::quotient_hi#0 mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 mul16s::b#3 mul16s::b#2 mul16s::b#1 main::cos_x#0 main::sin_y#0 main::$25 main::$27 main::$26 main::$28 ]
reg byte a [ divr16u::$1 ]
reg byte a [ divr16u::$2 ]

View File

@ -58,8 +58,8 @@ main: {
.label _11 = $20
.label _16 = $17
.label _17 = $17
.label _32 = $24
.label _33 = $24
.label _34 = $24
.label _35 = $24
.label cos_x = $24
.label xpos = $e
.label x = $20
@ -70,8 +70,8 @@ main: {
.label idx_y = $12
.label r = 8
.label r_add = $1b
.label _34 = $24
.label _35 = $24
.label _36 = $24
.label _37 = $24
jsr sin16s_gen2
jsr bitmap_init
jsr bitmap_clear
@ -94,17 +94,17 @@ main: {
b2:
lda.z idx_x
asl
sta.z _32
sta.z _34
lda.z idx_x+1
rol
sta.z _32+1
clc
lda.z _34
adc #<SINUS
sta.z _34
lda.z _34+1
adc #>SINUS
sta.z _34+1
clc
lda.z _36
adc #<SINUS
sta.z _36
lda.z _36+1
adc #>SINUS
sta.z _36+1
ldy #0
lda (cos_x),y
tax
@ -134,17 +134,17 @@ main: {
sta.z x+1
lda.z idx_y
asl
sta.z _33
sta.z _35
lda.z idx_y+1
rol
sta.z _33+1
clc
lda.z _35
adc #<SINUS
sta.z _35
lda.z _35+1
adc #>SINUS
sta.z _35+1
clc
lda.z _37
adc #<SINUS
sta.z _37
lda.z _37+1
adc #>SINUS
sta.z _37+1
ldy #0
lda (sin_y),y
tax

View File

@ -39,9 +39,9 @@ main::@1: scope:[main] from main::@5 main::@8
[15] (word) main::idx_x#11 ← phi( main::@8/(byte) 0 main::@5/(word) main::idx_x#10 )
to:main::@2
main::@2: scope:[main] from main::@1
[16] (word~) main::$32 ← (word) main::idx_x#11 << (byte) 1
[17] (signed word*~) main::$34 ← (const signed word[$200]) SINUS#0 + (word~) main::$32
[18] (signed word) main::cos_x#0 ← *((signed word*~) main::$34)
[16] (word~) main::$34 ← (word) main::idx_x#11 << (byte) 1
[17] (signed word*~) main::$36 ← (const signed word[$200]) SINUS#0 + (word~) main::$34
[18] (signed word) main::cos_x#0 ← *((signed word*~) main::$36)
[19] (signed word) mul16s::a#1 ← (signed word) main::r#10
[20] (signed word) mul16s::b#1 ← (signed word) main::cos_x#0
[21] call mul16s
@ -52,9 +52,9 @@ main::@12: scope:[main] from main::@2
[24] (word~) main::$10 ← > (signed dword) main::xpos#0
[25] (signed word~) main::$11 ← (signed word)(word~) main::$10 >> (signed byte) 2
[26] (signed word) main::x#0 ← (signed word) $a0 + (signed word~) main::$11
[27] (word~) main::$33 ← (word) main::idx_y#3 << (byte) 1
[28] (signed word*~) main::$35 ← (const signed word[$200]) SINUS#0 + (word~) main::$33
[29] (signed word) main::sin_y#0 ← *((signed word*~) main::$35)
[27] (word~) main::$35 ← (word) main::idx_y#3 << (byte) 1
[28] (signed word*~) main::$37 ← (const signed word[$200]) SINUS#0 + (word~) main::$35
[29] (signed word) main::sin_y#0 ← *((signed word*~) main::$37)
[30] (signed word) mul16s::a#2 ← (signed word) main::r#10
[31] (signed word) mul16s::b#2 ← (signed word) main::sin_y#0
[32] call mul16s

View File

@ -1,5 +1,6 @@
Resolved forward reference frame_cnt to (byte) frame_cnt
Resolved forward reference frame_cnt to (byte) frame_cnt
Resolved forward reference frame_cnt to (byte) frame_cnt
Resolved forward reference irq to interrupt(HARDWARE_CLOBBER)(void()) irq()
Fixing pointer increment (signed word*) sin16s_gen::sintab ← ++ (signed word*) sin16s_gen::sintab
Fixing pointer increment (signed word*) sin16s_gen2::sintab ← ++ (signed word*) sin16s_gen2::sintab
@ -865,8 +866,8 @@ main::@2: scope:[main] from main::@1
(word) main::idx_y#5 ← phi( main::@1/(word) main::idx_y#8 )
(signed word) main::r#2 ← phi( main::@1/(signed word) main::r#6 )
(word) main::idx_x#3 ← phi( main::@1/(word) main::idx_x#6 )
(word~) main::$32 ← (word) main::idx_x#3 * (const byte) SIZEOF_SIGNED_WORD
(signed word) main::cos_x#0 ← *((signed word[$200]) SINUS#0 + (word~) main::$32)
(word~) main::$34 ← (word) main::idx_x#3 * (const byte) SIZEOF_SIGNED_WORD
(signed word) main::cos_x#0 ← *((signed word[$200]) SINUS#0 + (word~) main::$34)
(signed word) mul16s::a#1 ← (signed word) main::r#2
(signed word) mul16s::b#1 ← (signed word) main::cos_x#0
call mul16s
@ -890,8 +891,8 @@ main::@28: scope:[main] from main::@2
(number~) main::$12 ← (number) $a0 + (signed word~) main::$11
(word~) main::$13 ← ((word)) (number~) main::$12
(word) main::x#0 ← (word~) main::$13
(word~) main::$33 ← (word) main::idx_y#3 * (const byte) SIZEOF_SIGNED_WORD
(signed word) main::sin_y#0 ← *((signed word[$200]) SINUS#0 + (word~) main::$33)
(word~) main::$35 ← (word) main::idx_y#3 * (const byte) SIZEOF_SIGNED_WORD
(signed word) main::sin_y#0 ← *((signed word[$200]) SINUS#0 + (word~) main::$35)
(signed word) mul16s::a#2 ← (signed word) main::r#3
(signed word) mul16s::b#2 ← (signed word) main::sin_y#0
call mul16s
@ -932,9 +933,9 @@ main::@30: scope:[main] from main::@29
(byte) frame_cnt#3 ← phi( main::@29/(byte) frame_cnt#7 )
*((byte[$100]) plots_per_frame#0 + (byte) frame_cnt#3) ← ++ *((byte[$100]) plots_per_frame#0 + (byte) frame_cnt#3)
(word) main::idx_x#1 ← (word) main::idx_x#4 + (byte) main::r_add#2
(bool~) main::$22 ← (word) main::idx_x#1 >= (number) $200
(bool~) main::$23 ← ! (bool~) main::$22
if((bool~) main::$23) goto main::@4
(bool~) main::$23 ← (word) main::idx_x#1 >= (number) $200
(bool~) main::$24 ← ! (bool~) main::$23
if((bool~) main::$24) goto main::@4
to:main::@11
main::@4: scope:[main] from main::@11 main::@30
(byte) frame_cnt#20 ← phi( main::@11/(byte) frame_cnt#22 main::@30/(byte) frame_cnt#3 )
@ -946,9 +947,9 @@ main::@4: scope:[main] from main::@11 main::@30
(byte) main::r_add#3 ← phi( main::@11/(byte) main::r_add#7 main::@30/(byte) main::r_add#2 )
(word) main::idx_y#4 ← phi( main::@11/(word) main::idx_y#6 main::@30/(word) main::idx_y#7 )
(word) main::idx_y#1 ← (word) main::idx_y#4 + (byte) main::r_add#3
(bool~) main::$24 ← (word) main::idx_y#1 >= (number) $200
(bool~) main::$25 ← ! (bool~) main::$24
if((bool~) main::$25) goto main::@5
(bool~) main::$25 ← (word) main::idx_y#1 >= (number) $200
(bool~) main::$26 ← ! (bool~) main::$25
if((bool~) main::$26) goto main::@5
to:main::@12
main::@11: scope:[main] from main::@30
(byte) frame_cnt#22 ← phi( main::@30/(byte) frame_cnt#3 )
@ -970,11 +971,11 @@ main::@5: scope:[main] from main::@12 main::@4
(byte) main::r_add#4 ← phi( main::@12/(byte) main::r_add#8 main::@4/(byte) main::r_add#3 )
(signed word) main::r#4 ← phi( main::@12/(signed word) main::r#7 main::@4/(signed word) main::r#8 )
(signed word) main::r#1 ← (signed word) main::r#4 + (byte) main::r_add#4
(bool~) main::$26 ← (word) main::idx_x#5 == (number) 0
(bool~) main::$27 ← (byte) main::r_add#4 != (number) 1
(bool~) main::$28 ← (bool~) main::$26 && (bool~) main::$27
(bool~) main::$29 ← ! (bool~) main::$28
if((bool~) main::$29) goto main::@6
(bool~) main::$27 ← (word) main::idx_x#5 == (number) 0
(bool~) main::$28 ← (byte) main::r_add#4 != (number) 1
(bool~) main::$29 ← (bool~) main::$27 && (bool~) main::$28
(bool~) main::$30 ← ! (bool~) main::$29
if((bool~) main::$30) goto main::@6
to:main::@13
main::@12: scope:[main] from main::@4
(byte) frame_cnt#19 ← phi( main::@4/(byte) frame_cnt#20 )
@ -995,9 +996,9 @@ main::@6: scope:[main] from main::@13 main::@5
(word) rem16u#29 ← phi( main::@13/(word) rem16u#33 main::@5/(word) rem16u#34 )
(word) main::idx_x#10 ← phi( main::@13/(word) main::idx_x#12 main::@5/(word) main::idx_x#5 )
(signed word) main::r#5 ← phi( main::@13/(signed word) main::r#9 main::@5/(signed word) main::r#1 )
(bool~) main::$30 ← (signed word) main::r#5 >= (number) $200*(number) $c+(number) $100
(bool~) main::$31 ← ! (bool~) main::$30
if((bool~) main::$31) goto main::@1
(bool~) main::$31 ← (signed word) main::r#5 >= (number) $200*(number) $c+(number) $100
(bool~) main::$32 ← ! (bool~) main::$31
if((bool~) main::$32) goto main::@1
to:main::@17
main::@13: scope:[main] from main::@5
(byte) frame_cnt#16 ← phi( main::@5/(byte) frame_cnt#17 )
@ -1485,7 +1486,6 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(number~) main::$18
(word~) main::$19
(byte~) main::$20
(bool~) main::$22
(bool~) main::$23
(bool~) main::$24
(bool~) main::$25
@ -1496,8 +1496,9 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(byte~) main::$3
(bool~) main::$30
(bool~) main::$31
(word~) main::$32
(word~) main::$33
(bool~) main::$32
(word~) main::$34
(word~) main::$35
(byte~) main::$4
(number~) main::$5
(byte~) main::$6
@ -2129,13 +2130,13 @@ Adding number conversion cast (snumber) main::$12 in (number~) main::$12 ← (sn
Adding number conversion cast (snumber) 2 in (signed word~) main::$17 ← (signed word~) main::$16 >> (number) 2
Adding number conversion cast (snumber) $64 in (number~) main::$18 ← (number) $64 + (signed word~) main::$17
Adding number conversion cast (snumber) main::$18 in (number~) main::$18 ← (snumber)(number) $64 + (signed word~) main::$17
Adding number conversion cast (unumber) $200 in (bool~) main::$22 ← (word) main::idx_x#1 >= (number) $200
Adding number conversion cast (unumber) $200 in (bool~) main::$24 ← (word) main::idx_y#1 >= (number) $200
Adding number conversion cast (unumber) $200 in (bool~) main::$23 ← (word) main::idx_x#1 >= (number) $200
Adding number conversion cast (unumber) $200 in (bool~) main::$25 ← (word) main::idx_y#1 >= (number) $200
Adding number conversion cast (unumber) 0 in (word) main::idx_x#2 ← (number) 0
Adding number conversion cast (unumber) 0 in (bool~) main::$26 ← (word) main::idx_x#5 == (number) 0
Adding number conversion cast (unumber) 1 in (bool~) main::$27 ← (byte) main::r_add#4 != (number) 1
Adding number conversion cast (unumber) 0 in (bool~) main::$27 ← (word) main::idx_x#5 == (number) 0
Adding number conversion cast (unumber) 1 in (bool~) main::$28 ← (byte) main::r_add#4 != (number) 1
Adding number conversion cast (unumber) 0 in (word) main::idx_y#2 ← (number) 0
Adding number conversion cast (snumber) $200*$c+$100 in (bool~) main::$30 ← (signed word) main::r#5 >= (number) $200*(number) $c+(number) $100
Adding number conversion cast (snumber) $200*$c+$100 in (bool~) main::$31 ← (signed word) main::r#5 >= (number) $200*(number) $c+(number) $100
Adding number conversion cast (unumber) 2 in (byte) main::r_add#1 ← (byte) main::r_add#5 / (number) 2
Adding number conversion cast (unumber) 1 in (byte) frame_cnt#0 ← (number) 1
Adding number conversion cast (unumber) $80 in *((byte*) VIC_CONTROL#0) ← *((byte*) VIC_CONTROL#0) | (number) $80
@ -2425,9 +2426,9 @@ Inversing boolean not [258] (bool~) sin16s::$16 ← (byte) sin16s::isUpper#2 ==
Inversing boolean not [287] (bool~) memset::$1 ← (word) memset::num#2 <= (byte) 0 from [286] (bool~) memset::$0 ← (word) memset::num#2 > (byte) 0
Inversing boolean not [320] (bool~) bitmap_init::$1 ← (byte) bitmap_init::bits#1 != (byte) 0 from [319] (bool~) bitmap_init::$0 ← (byte) bitmap_init::bits#1 == (byte) 0
Inversing boolean not [340] (bool~) bitmap_init::$9 ← (byte~) bitmap_init::$7 != (byte) 7 from [339] (bool~) bitmap_init::$8 ← (byte~) bitmap_init::$7 == (byte) 7
Inversing boolean not [470] (bool~) main::$23 ← (word) main::idx_x#1 < (word) $200 from [469] (bool~) main::$22 ← (word) main::idx_x#1 >= (word) $200
Inversing boolean not [475] (bool~) main::$25 ← (word) main::idx_y#1 < (word) $200 from [474] (bool~) main::$24 ← (word) main::idx_y#1 >= (word) $200
Inversing boolean not [490] (bool~) main::$31 ← (signed word) main::r#5 < (signed word)(number) $200*(number) $c+(number) $100 from [489] (bool~) main::$30 ← (signed word) main::r#5 >= (signed word)(number) $200*(number) $c+(number) $100
Inversing boolean not [470] (bool~) main::$24 ← (word) main::idx_x#1 < (word) $200 from [469] (bool~) main::$23 ← (word) main::idx_x#1 >= (word) $200
Inversing boolean not [475] (bool~) main::$26 ← (word) main::idx_y#1 < (word) $200 from [474] (bool~) main::$25 ← (word) main::idx_y#1 >= (word) $200
Inversing boolean not [490] (bool~) main::$32 ← (signed word) main::r#5 < (signed word)(number) $200*(number) $c+(number) $100 from [489] (bool~) main::$31 ← (signed word) main::r#5 >= (signed word)(number) $200*(number) $c+(number) $100
Inversing boolean not [519] (bool~) irq::$0 ← (byte) 0 == (byte) frame_cnt#4 from [518] (bool~) irq::$1 ← (byte) 0 != (byte) frame_cnt#4
Successful SSA optimization Pass2UnaryNotSimplification
Alias (word) divr16u::rem#0 = (word~) divr16u::$0 (word) divr16u::rem#7
@ -2699,14 +2700,14 @@ Simple Condition (bool~) bitmap_init::$1 [321] if((byte) bitmap_init::bits#1!=(b
Simple Condition (bool~) bitmap_init::$2 [325] if((byte) bitmap_init::x#1!=rangelast(0,$ff)) goto bitmap_init::@1
Simple Condition (bool~) bitmap_init::$9 [341] if((byte~) bitmap_init::$7!=(byte) 7) goto bitmap_init::@6
Simple Condition (bool~) bitmap_init::$11 [345] if((byte) bitmap_init::y#1!=rangelast(0,$ff)) goto bitmap_init::@5
Simple Condition (bool~) main::$23 [471] if((word) main::idx_x#1<(word) $200) goto main::@4
Simple Condition (bool~) main::$25 [476] if((word) main::idx_y#1<(word) $200) goto main::@5
Simple Condition (bool~) main::$31 [491] if((signed word) main::r#1<(signed word)(number) $200*(number) $c+(number) $100) goto main::@1
Simple Condition (bool~) main::$24 [471] if((word) main::idx_x#1<(word) $200) goto main::@4
Simple Condition (bool~) main::$26 [476] if((word) main::idx_y#1<(word) $200) goto main::@5
Simple Condition (bool~) main::$32 [491] if((signed word) main::r#1<(signed word)(number) $200*(number) $c+(number) $100) goto main::@1
Simple Condition (bool~) irq::$0 [520] if((byte) 0==(byte) frame_cnt#0) goto irq::@1
Successful SSA optimization Pass2ConditionalJumpSimplification
Rewriting ! if()-condition to reversed if() [484] (bool~) main::$29 ← ! (bool~) main::$28
Rewriting ! if()-condition to reversed if() [484] (bool~) main::$30 ← ! (bool~) main::$29
Successful SSA optimization Pass2ConditionalAndOrRewriting
Rewriting && if()-condition to two if()s [483] (bool~) main::$28 ← (bool~) main::$26 && (bool~) main::$27
Rewriting && if()-condition to two if()s [483] (bool~) main::$29 ← (bool~) main::$27 && (bool~) main::$28
Successful SSA optimization Pass2ConditionalAndOrRewriting
Negating conditional jump and destination [491] if((signed word) main::r#1>=(signed word)(number) $200*(number) $c+(number) $100) goto main::@17
Constant right-side identified [226] (word) mulu16_sel::v2#2 ← (unumber)(number) $10000/(number) 6
@ -2812,8 +2813,8 @@ Resolved ranged next value [323] bitmap_init::x#1 ← ++ bitmap_init::x#2 to ++
Resolved ranged comparison value [325] if(bitmap_init::x#1!=rangelast(0,$ff)) goto bitmap_init::@1 to (number) 0
Resolved ranged next value [343] bitmap_init::y#1 ← ++ bitmap_init::y#2 to ++
Resolved ranged comparison value [345] if(bitmap_init::y#1!=rangelast(0,$ff)) goto bitmap_init::@5 to (number) 0
De-inlining pointer[w] to *(pointer+w) [433] (signed word) main::cos_x#0 ← *((const signed word[$200]) SINUS#0 + (word~) main::$32)
De-inlining pointer[w] to *(pointer+w) [448] (signed word) main::sin_y#0 ← *((const signed word[$200]) SINUS#0 + (word~) main::$33)
De-inlining pointer[w] to *(pointer+w) [433] (signed word) main::cos_x#0 ← *((const signed word[$200]) SINUS#0 + (word~) main::$34)
De-inlining pointer[w] to *(pointer+w) [448] (signed word) main::sin_y#0 ← *((const signed word[$200]) SINUS#0 + (word~) main::$35)
Successful SSA optimization Pass2DeInlineWordDerefIdx
Simplifying expression containing zero bitmap_clear::$0 in [355] (byte) bitmap_clear::col#0 ← (byte~) bitmap_clear::$0 + (const byte) bitmap_clear::bgcol#0
Successful SSA optimization PassNSimplifyExpressionWithZero
@ -2854,8 +2855,8 @@ Identical Phi Values (word) sin16s_gen2::i#9 (const word) sin16s_gen2::i#0
Identical Phi Values (dword) sin16s_gen2::x#9 (const dword) sin16s_gen2::x#0
Identical Phi Values (signed word*) sin16s_gen2::sintab#11 (const signed word*) sin16s_gen2::sintab#1
Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition (bool~) main::$26 [241] if((word) main::idx_x#10==(byte) 0) goto main::@31
Simple Condition (bool~) main::$27 [265] if((byte) main::r_add#10!=(byte) 1) goto main::@13
Simple Condition (bool~) main::$27 [241] if((word) main::idx_x#10==(byte) 0) goto main::@31
Simple Condition (bool~) main::$28 [265] if((byte) main::r_add#10!=(byte) 1) goto main::@13
Successful SSA optimization Pass2ConditionalJumpSimplification
Negating conditional jump and destination [241] if((word) main::idx_x#10!=(byte) 0) goto main::@6
Negating conditional jump and destination [265] if((byte) main::r_add#10==(byte) 1) goto main::@6
@ -2934,8 +2935,8 @@ Inlining Noop Cast [185] (word) main::x#0 ← (word)(signed word~) main::$12 kee
Inlining Noop Cast [195] (signed word~) main::$16 ← (signed word)(word~) main::$15 keeping main::$16
Inlining Noop Cast [198] (word) main::y#0 ← (word)(signed word~) main::$18 keeping main::y#0
Successful SSA optimization Pass2NopCastInlining
Rewriting multiplication to use shift [173] (word~) main::$32 ← (word) main::idx_x#11 * (const byte) SIZEOF_SIGNED_WORD
Rewriting multiplication to use shift [186] (word~) main::$33 ← (word) main::idx_y#3 * (const byte) SIZEOF_SIGNED_WORD
Rewriting multiplication to use shift [173] (word~) main::$34 ← (word) main::idx_x#11 * (const byte) SIZEOF_SIGNED_WORD
Rewriting multiplication to use shift [186] (word~) main::$35 ← (word) main::idx_y#3 * (const byte) SIZEOF_SIGNED_WORD
Rewriting division to use shift [213] (byte) main::r_add#1 ← (byte) main::r_add#10 / (byte) 2
Successful SSA optimization Pass2MultiplyToShiftRewriting
Inlining constant with var siblings (const word) divr16u::quotient#0
@ -3290,9 +3291,9 @@ main::@1: scope:[main] from main::@5 main::@8
[15] (word) main::idx_x#11 ← phi( main::@8/(byte) 0 main::@5/(word) main::idx_x#10 )
to:main::@2
main::@2: scope:[main] from main::@1
[16] (word~) main::$32 ← (word) main::idx_x#11 << (byte) 1
[17] (signed word*~) main::$34 ← (const signed word[$200]) SINUS#0 + (word~) main::$32
[18] (signed word) main::cos_x#0 ← *((signed word*~) main::$34)
[16] (word~) main::$34 ← (word) main::idx_x#11 << (byte) 1
[17] (signed word*~) main::$36 ← (const signed word[$200]) SINUS#0 + (word~) main::$34
[18] (signed word) main::cos_x#0 ← *((signed word*~) main::$36)
[19] (signed word) mul16s::a#1 ← (signed word) main::r#10
[20] (signed word) mul16s::b#1 ← (signed word) main::cos_x#0
[21] call mul16s
@ -3303,9 +3304,9 @@ main::@12: scope:[main] from main::@2
[24] (word~) main::$10 ← > (signed dword) main::xpos#0
[25] (signed word~) main::$11 ← (signed word)(word~) main::$10 >> (signed byte) 2
[26] (signed word) main::x#0 ← (signed word) $a0 + (signed word~) main::$11
[27] (word~) main::$33 ← (word) main::idx_y#3 << (byte) 1
[28] (signed word*~) main::$35 ← (const signed word[$200]) SINUS#0 + (word~) main::$33
[29] (signed word) main::sin_y#0 ← *((signed word*~) main::$35)
[27] (word~) main::$35 ← (word) main::idx_y#3 << (byte) 1
[28] (signed word*~) main::$37 ← (const signed word[$200]) SINUS#0 + (word~) main::$35
[29] (signed word) main::sin_y#0 ← *((signed word*~) main::$37)
[30] (signed word) mul16s::a#2 ← (signed word) main::r#10
[31] (signed word) mul16s::b#2 ← (signed word) main::sin_y#0
[32] call mul16s
@ -3821,10 +3822,10 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(signed word~) main::$11 22.0
(word~) main::$16 11.0
(signed word~) main::$17 22.0
(word~) main::$32 22.0
(word~) main::$33 22.0
(signed word*~) main::$34 22.0
(signed word*~) main::$35 22.0
(word~) main::$34 22.0
(word~) main::$35 22.0
(signed word*~) main::$36 22.0
(signed word*~) main::$37 22.0
(signed word) main::cos_x
(signed word) main::cos_x#0 11.0
(word) main::idx_x
@ -4043,16 +4044,16 @@ Initial phi equivalence classes
[ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ]
[ divr16u::i#2 divr16u::i#1 ]
[ frame_cnt#2 frame_cnt#0 frame_cnt#1 ]
Added variable main::$32 to zero page equivalence class [ main::$32 ]
Added variable main::$34 to zero page equivalence class [ main::$34 ]
Added variable main::$36 to zero page equivalence class [ main::$36 ]
Added variable main::cos_x#0 to zero page equivalence class [ main::cos_x#0 ]
Added variable mul16s::return#3 to zero page equivalence class [ mul16s::return#3 ]
Added variable main::xpos#0 to zero page equivalence class [ main::xpos#0 ]
Added variable main::$10 to zero page equivalence class [ main::$10 ]
Added variable main::$11 to zero page equivalence class [ main::$11 ]
Added variable main::x#0 to zero page equivalence class [ main::x#0 ]
Added variable main::$33 to zero page equivalence class [ main::$33 ]
Added variable main::$35 to zero page equivalence class [ main::$35 ]
Added variable main::$37 to zero page equivalence class [ main::$37 ]
Added variable main::sin_y#0 to zero page equivalence class [ main::sin_y#0 ]
Added variable mul16s::return#4 to zero page equivalence class [ mul16s::return#4 ]
Added variable main::ypos#0 to zero page equivalence class [ main::ypos#0 ]
@ -4145,16 +4146,16 @@ Complete equivalence classes
[ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ]
[ divr16u::i#2 divr16u::i#1 ]
[ frame_cnt#2 frame_cnt#0 frame_cnt#1 ]
[ main::$32 ]
[ main::$34 ]
[ main::$36 ]
[ main::cos_x#0 ]
[ mul16s::return#3 ]
[ main::xpos#0 ]
[ main::$10 ]
[ main::$11 ]
[ main::x#0 ]
[ main::$33 ]
[ main::$35 ]
[ main::$37 ]
[ main::sin_y#0 ]
[ mul16s::return#4 ]
[ main::ypos#0 ]
@ -4246,16 +4247,16 @@ Allocated zp ZP_WORD:65 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::divid
Allocated zp ZP_WORD:67 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ]
Allocated zp ZP_BYTE:69 [ divr16u::i#2 divr16u::i#1 ]
Allocated zp ZP_BYTE:70 [ frame_cnt#2 frame_cnt#0 frame_cnt#1 ]
Allocated zp ZP_WORD:71 [ main::$32 ]
Allocated zp ZP_WORD:73 [ main::$34 ]
Allocated zp ZP_WORD:71 [ main::$34 ]
Allocated zp ZP_WORD:73 [ main::$36 ]
Allocated zp ZP_WORD:75 [ main::cos_x#0 ]
Allocated zp ZP_DWORD:77 [ mul16s::return#3 ]
Allocated zp ZP_DWORD:81 [ main::xpos#0 ]
Allocated zp ZP_WORD:85 [ main::$10 ]
Allocated zp ZP_WORD:87 [ main::$11 ]
Allocated zp ZP_WORD:89 [ main::x#0 ]
Allocated zp ZP_WORD:91 [ main::$33 ]
Allocated zp ZP_WORD:93 [ main::$35 ]
Allocated zp ZP_WORD:91 [ main::$35 ]
Allocated zp ZP_WORD:93 [ main::$37 ]
Allocated zp ZP_WORD:95 [ main::sin_y#0 ]
Allocated zp ZP_DWORD:97 [ mul16s::return#4 ]
Allocated zp ZP_DWORD:101 [ main::ypos#0 ]
@ -4397,8 +4398,8 @@ main: {
.label _11 = $57
.label _16 = $69
.label _17 = $6b
.label _32 = $47
.label _33 = $5b
.label _34 = $47
.label _35 = $5b
.label cos_x = $4b
.label xpos = $51
.label x = $59
@ -4409,8 +4410,8 @@ main: {
.label idx_y = 6
.label r = 4
.label r_add = 8
.label _34 = $49
.label _35 = $5d
.label _36 = $49
.label _37 = $5d
// [6] call sin16s_gen2
// [137] phi from main to sin16s_gen2 [phi:main->sin16s_gen2]
sin16s_gen2_from_main:
@ -4478,27 +4479,27 @@ main: {
jmp b2
// main::@2
b2:
// [16] (word~) main::$32 ← (word) main::idx_x#11 << (byte) 1 -- vwuz1=vwuz2_rol_1
// [16] (word~) main::$34 ← (word) main::idx_x#11 << (byte) 1 -- vwuz1=vwuz2_rol_1
lda.z idx_x
asl
sta.z _32
sta.z _34
lda.z idx_x+1
rol
sta.z _32+1
// [17] (signed word*~) main::$34 ← (const signed word[$200]) SINUS#0 + (word~) main::$32 -- pwsz1=pwsc1_plus_vwuz2
lda.z _32
sta.z _34+1
// [17] (signed word*~) main::$36 ← (const signed word[$200]) SINUS#0 + (word~) main::$34 -- pwsz1=pwsc1_plus_vwuz2
lda.z _34
clc
adc #<SINUS
sta.z _34
lda.z _32+1
sta.z _36
lda.z _34+1
adc #>SINUS
sta.z _34+1
// [18] (signed word) main::cos_x#0 ← *((signed word*~) main::$34) -- vwsz1=_deref_pwsz2
sta.z _36+1
// [18] (signed word) main::cos_x#0 ← *((signed word*~) main::$36) -- vwsz1=_deref_pwsz2
ldy #0
lda (_34),y
lda (_36),y
sta.z cos_x
iny
lda (_34),y
lda (_36),y
sta.z cos_x+1
// [19] (signed word) mul16s::a#1 ← (signed word) main::r#10 -- vwsz1=vwsz2
lda.z r
@ -4562,27 +4563,27 @@ main: {
lda.z _11+1
adc #>$a0
sta.z x+1
// [27] (word~) main::$33 ← (word) main::idx_y#3 << (byte) 1 -- vwuz1=vwuz2_rol_1
// [27] (word~) main::$35 ← (word) main::idx_y#3 << (byte) 1 -- vwuz1=vwuz2_rol_1
lda.z idx_y
asl
sta.z _33
sta.z _35
lda.z idx_y+1
rol
sta.z _33+1
// [28] (signed word*~) main::$35 ← (const signed word[$200]) SINUS#0 + (word~) main::$33 -- pwsz1=pwsc1_plus_vwuz2
lda.z _33
sta.z _35+1
// [28] (signed word*~) main::$37 ← (const signed word[$200]) SINUS#0 + (word~) main::$35 -- pwsz1=pwsc1_plus_vwuz2
lda.z _35
clc
adc #<SINUS
sta.z _35
lda.z _33+1
sta.z _37
lda.z _35+1
adc #>SINUS
sta.z _35+1
// [29] (signed word) main::sin_y#0 ← *((signed word*~) main::$35) -- vwsz1=_deref_pwsz2
sta.z _37+1
// [29] (signed word) main::sin_y#0 ← *((signed word*~) main::$37) -- vwsz1=_deref_pwsz2
ldy #0
lda (_35),y
lda (_37),y
sta.z sin_y
iny
lda (_35),y
lda (_37),y
sta.z sin_y+1
// [30] (signed word) mul16s::a#2 ← (signed word) main::r#10 -- vwsz1=vwsz2
lda.z r
@ -6243,10 +6244,10 @@ Equivalence Class zp ZP_BYTE:141 [ bitmap_init::$4 ] has ALU potential.
Statement [1] (byte) frame_cnt#0 ← (byte) 1 [ frame_cnt#0 ] ( [ frame_cnt#0 ] ) always clobbers reg byte a
Statement [11] *((const byte*) D011#0) ← (const byte) VIC_BMM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ frame_cnt#0 ] ( main:3 [ frame_cnt#0 ] ) always clobbers reg byte a
Statement [13] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 [ frame_cnt#0 ] ( main:3 [ frame_cnt#0 ] ) always clobbers reg byte a
Statement [16] (word~) main::$32 ← (word) main::idx_x#11 << (byte) 1 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::$32 ] ( main:3 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::$32 ] ) always clobbers reg byte a
Statement [16] (word~) main::$34 ← (word) main::idx_x#11 << (byte) 1 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::$34 ] ( main:3 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::$34 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:8 [ main::r_add#10 main::r_add#12 main::r_add#1 ]
Statement [17] (signed word*~) main::$34 ← (const signed word[$200]) SINUS#0 + (word~) main::$32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::$34 ] ( main:3 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::$34 ] ) always clobbers reg byte a
Statement [18] (signed word) main::cos_x#0 ← *((signed word*~) main::$34) [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::cos_x#0 ] ( main:3 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::cos_x#0 ] ) always clobbers reg byte a reg byte y
Statement [17] (signed word*~) main::$36 ← (const signed word[$200]) SINUS#0 + (word~) main::$34 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::$36 ] ( main:3 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::$36 ] ) always clobbers reg byte a
Statement [18] (signed word) main::cos_x#0 ← *((signed word*~) main::$36) [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::cos_x#0 ] ( main:3 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::cos_x#0 ] ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:8 [ main::r_add#10 main::r_add#12 main::r_add#1 ]
Statement [19] (signed word) mul16s::a#1 ← (signed word) main::r#10 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::cos_x#0 mul16s::a#1 ] ( main:3 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::cos_x#0 mul16s::a#1 ] ) always clobbers reg byte a
Statement [20] (signed word) mul16s::b#1 ← (signed word) main::cos_x#0 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#1 mul16s::b#1 ] ( main:3 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#1 mul16s::b#1 ] ) always clobbers reg byte a
@ -6255,9 +6256,9 @@ Statement [23] (signed dword) main::xpos#0 ← (signed dword) mul16s::return#3 [
Statement [24] (word~) main::$10 ← > (signed dword) main::xpos#0 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::$10 ] ( main:3 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::$10 ] ) always clobbers reg byte a
Statement [25] (signed word~) main::$11 ← (signed word)(word~) main::$10 >> (signed byte) 2 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::$11 ] ( main:3 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::$11 ] ) always clobbers reg byte a
Statement [26] (signed word) main::x#0 ← (signed word) $a0 + (signed word~) main::$11 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 ] ( main:3 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 ] ) always clobbers reg byte a
Statement [27] (word~) main::$33 ← (word) main::idx_y#3 << (byte) 1 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 main::$33 ] ( main:3 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 main::$33 ] ) always clobbers reg byte a
Statement [28] (signed word*~) main::$35 ← (const signed word[$200]) SINUS#0 + (word~) main::$33 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 main::$35 ] ( main:3 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 main::$35 ] ) always clobbers reg byte a
Statement [29] (signed word) main::sin_y#0 ← *((signed word*~) main::$35) [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 main::sin_y#0 ] ( main:3 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 main::sin_y#0 ] ) always clobbers reg byte a reg byte y
Statement [27] (word~) main::$35 ← (word) main::idx_y#3 << (byte) 1 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 main::$35 ] ( main:3 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 main::$35 ] ) always clobbers reg byte a
Statement [28] (signed word*~) main::$37 ← (const signed word[$200]) SINUS#0 + (word~) main::$35 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 main::$37 ] ( main:3 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 main::$37 ] ) always clobbers reg byte a
Statement [29] (signed word) main::sin_y#0 ← *((signed word*~) main::$37) [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 main::sin_y#0 ] ( main:3 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 main::sin_y#0 ] ) always clobbers reg byte a reg byte y
Statement [30] (signed word) mul16s::a#2 ← (signed word) main::r#10 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 main::sin_y#0 mul16s::a#2 ] ( main:3 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 main::sin_y#0 mul16s::a#2 ] ) always clobbers reg byte a
Statement [31] (signed word) mul16s::b#2 ← (signed word) main::sin_y#0 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#2 mul16s::b#2 ] ( main:3 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#2 mul16s::b#2 ] ) always clobbers reg byte a
Statement [33] (signed dword) mul16s::return#4 ← (signed dword) mul16s::return#0 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::return#4 ] ( main:3 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::return#4 ] ) always clobbers reg byte a
@ -6386,9 +6387,9 @@ Statement [239] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg b
Statement [1] (byte) frame_cnt#0 ← (byte) 1 [ frame_cnt#0 ] ( [ frame_cnt#0 ] ) always clobbers reg byte a
Statement [11] *((const byte*) D011#0) ← (const byte) VIC_BMM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [ frame_cnt#0 ] ( main:3 [ frame_cnt#0 ] ) always clobbers reg byte a
Statement [13] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 [ frame_cnt#0 ] ( main:3 [ frame_cnt#0 ] ) always clobbers reg byte a
Statement [16] (word~) main::$32 ← (word) main::idx_x#11 << (byte) 1 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::$32 ] ( main:3 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::$32 ] ) always clobbers reg byte a
Statement [17] (signed word*~) main::$34 ← (const signed word[$200]) SINUS#0 + (word~) main::$32 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::$34 ] ( main:3 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::$34 ] ) always clobbers reg byte a
Statement [18] (signed word) main::cos_x#0 ← *((signed word*~) main::$34) [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::cos_x#0 ] ( main:3 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::cos_x#0 ] ) always clobbers reg byte a reg byte y
Statement [16] (word~) main::$34 ← (word) main::idx_x#11 << (byte) 1 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::$34 ] ( main:3 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::$34 ] ) always clobbers reg byte a
Statement [17] (signed word*~) main::$36 ← (const signed word[$200]) SINUS#0 + (word~) main::$34 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::$36 ] ( main:3 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::$36 ] ) always clobbers reg byte a
Statement [18] (signed word) main::cos_x#0 ← *((signed word*~) main::$36) [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::cos_x#0 ] ( main:3 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::cos_x#0 ] ) always clobbers reg byte a reg byte y
Statement [19] (signed word) mul16s::a#1 ← (signed word) main::r#10 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::cos_x#0 mul16s::a#1 ] ( main:3 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::cos_x#0 mul16s::a#1 ] ) always clobbers reg byte a
Statement [20] (signed word) mul16s::b#1 ← (signed word) main::cos_x#0 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#1 mul16s::b#1 ] ( main:3 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#1 mul16s::b#1 ] ) always clobbers reg byte a
Statement [22] (signed dword) mul16s::return#3 ← (signed dword) mul16s::return#0 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::return#3 ] ( main:3 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::return#3 ] ) always clobbers reg byte a
@ -6396,9 +6397,9 @@ Statement [23] (signed dword) main::xpos#0 ← (signed dword) mul16s::return#3 [
Statement [24] (word~) main::$10 ← > (signed dword) main::xpos#0 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::$10 ] ( main:3 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::$10 ] ) always clobbers reg byte a
Statement [25] (signed word~) main::$11 ← (signed word)(word~) main::$10 >> (signed byte) 2 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::$11 ] ( main:3 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::$11 ] ) always clobbers reg byte a
Statement [26] (signed word) main::x#0 ← (signed word) $a0 + (signed word~) main::$11 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 ] ( main:3 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 ] ) always clobbers reg byte a
Statement [27] (word~) main::$33 ← (word) main::idx_y#3 << (byte) 1 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 main::$33 ] ( main:3 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 main::$33 ] ) always clobbers reg byte a
Statement [28] (signed word*~) main::$35 ← (const signed word[$200]) SINUS#0 + (word~) main::$33 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 main::$35 ] ( main:3 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 main::$35 ] ) always clobbers reg byte a
Statement [29] (signed word) main::sin_y#0 ← *((signed word*~) main::$35) [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 main::sin_y#0 ] ( main:3 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 main::sin_y#0 ] ) always clobbers reg byte a reg byte y
Statement [27] (word~) main::$35 ← (word) main::idx_y#3 << (byte) 1 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 main::$35 ] ( main:3 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 main::$35 ] ) always clobbers reg byte a
Statement [28] (signed word*~) main::$37 ← (const signed word[$200]) SINUS#0 + (word~) main::$35 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 main::$37 ] ( main:3 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 main::$37 ] ) always clobbers reg byte a
Statement [29] (signed word) main::sin_y#0 ← *((signed word*~) main::$37) [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 main::sin_y#0 ] ( main:3 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 main::sin_y#0 ] ) always clobbers reg byte a reg byte y
Statement [30] (signed word) mul16s::a#2 ← (signed word) main::r#10 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 main::sin_y#0 mul16s::a#2 ] ( main:3 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 main::sin_y#0 mul16s::a#2 ] ) always clobbers reg byte a
Statement [31] (signed word) mul16s::b#2 ← (signed word) main::sin_y#0 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#2 mul16s::b#2 ] ( main:3 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#2 mul16s::b#2 ] ) always clobbers reg byte a
Statement [33] (signed dword) mul16s::return#4 ← (signed dword) mul16s::return#0 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::return#4 ] ( main:3 [ frame_cnt#0 main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::return#4 ] ) always clobbers reg byte a
@ -6550,16 +6551,16 @@ Potential registers zp ZP_WORD:65 [ divr16u::dividend#3 divr16u::dividend#5 divr
Potential registers zp ZP_WORD:67 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] : zp ZP_WORD:67 ,
Potential registers zp ZP_BYTE:69 [ divr16u::i#2 divr16u::i#1 ] : zp ZP_BYTE:69 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:70 [ frame_cnt#2 frame_cnt#0 frame_cnt#1 ] : zp ZP_BYTE:70 ,
Potential registers zp ZP_WORD:71 [ main::$32 ] : zp ZP_WORD:71 ,
Potential registers zp ZP_WORD:73 [ main::$34 ] : zp ZP_WORD:73 ,
Potential registers zp ZP_WORD:71 [ main::$34 ] : zp ZP_WORD:71 ,
Potential registers zp ZP_WORD:73 [ main::$36 ] : zp ZP_WORD:73 ,
Potential registers zp ZP_WORD:75 [ main::cos_x#0 ] : zp ZP_WORD:75 ,
Potential registers zp ZP_DWORD:77 [ mul16s::return#3 ] : zp ZP_DWORD:77 ,
Potential registers zp ZP_DWORD:81 [ main::xpos#0 ] : zp ZP_DWORD:81 ,
Potential registers zp ZP_WORD:85 [ main::$10 ] : zp ZP_WORD:85 ,
Potential registers zp ZP_WORD:87 [ main::$11 ] : zp ZP_WORD:87 ,
Potential registers zp ZP_WORD:89 [ main::x#0 ] : zp ZP_WORD:89 ,
Potential registers zp ZP_WORD:91 [ main::$33 ] : zp ZP_WORD:91 ,
Potential registers zp ZP_WORD:93 [ main::$35 ] : zp ZP_WORD:93 ,
Potential registers zp ZP_WORD:91 [ main::$35 ] : zp ZP_WORD:91 ,
Potential registers zp ZP_WORD:93 [ main::$37 ] : zp ZP_WORD:93 ,
Potential registers zp ZP_WORD:95 [ main::sin_y#0 ] : zp ZP_WORD:95 ,
Potential registers zp ZP_DWORD:97 [ mul16s::return#4 ] : zp ZP_DWORD:97 ,
Potential registers zp ZP_DWORD:101 [ main::ypos#0 ] : zp ZP_DWORD:101 ,
@ -6620,7 +6621,7 @@ Potential registers zp ZP_WORD:224 [ rem16u#1 ] : zp ZP_WORD:224 ,
REGISTER UPLIFT SCOPES
Uplift Scope [mul16u] 346.86: zp ZP_DWORD:23 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] 251.57: zp ZP_DWORD:27 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] 202: zp ZP_BYTE:137 [ mul16u::$1 ] 178.67: zp ZP_WORD:21 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] 4: zp ZP_WORD:17 [ mul16u::b#0 ] 4: zp ZP_WORD:19 [ mul16u::b#1 ] 4: zp ZP_DWORD:121 [ mul16u::return#2 ] 4: zp ZP_DWORD:196 [ mul16u::return#3 ]
Uplift Scope [main] 40.53: zp ZP_BYTE:8 [ main::r_add#10 main::r_add#12 main::r_add#1 ] 22: zp ZP_WORD:71 [ main::$32 ] 22: zp ZP_WORD:73 [ main::$34 ] 22: zp ZP_DWORD:81 [ main::xpos#0 ] 22: zp ZP_WORD:87 [ main::$11 ] 22: zp ZP_WORD:91 [ main::$33 ] 22: zp ZP_WORD:93 [ main::$35 ] 22: zp ZP_DWORD:101 [ main::ypos#0 ] 22: zp ZP_WORD:107 [ main::$17 ] 15.22: zp ZP_WORD:2 [ main::idx_x#11 main::idx_x#10 main::idx_x#1 ] 15.21: zp ZP_WORD:6 [ main::idx_y#3 main::idx_y#10 main::idx_y#1 ] 11: zp ZP_WORD:75 [ main::cos_x#0 ] 11: zp ZP_WORD:85 [ main::$10 ] 11: zp ZP_WORD:95 [ main::sin_y#0 ] 11: zp ZP_WORD:105 [ main::$16 ] 11: zp ZP_WORD:109 [ main::y#0 ] 6.76: zp ZP_WORD:4 [ main::r#10 main::r#1 ] 0.85: zp ZP_WORD:89 [ main::x#0 ]
Uplift Scope [main] 40.53: zp ZP_BYTE:8 [ main::r_add#10 main::r_add#12 main::r_add#1 ] 22: zp ZP_WORD:71 [ main::$34 ] 22: zp ZP_WORD:73 [ main::$36 ] 22: zp ZP_DWORD:81 [ main::xpos#0 ] 22: zp ZP_WORD:87 [ main::$11 ] 22: zp ZP_WORD:91 [ main::$35 ] 22: zp ZP_WORD:93 [ main::$37 ] 22: zp ZP_DWORD:101 [ main::ypos#0 ] 22: zp ZP_WORD:107 [ main::$17 ] 15.22: zp ZP_WORD:2 [ main::idx_x#11 main::idx_x#10 main::idx_x#1 ] 15.21: zp ZP_WORD:6 [ main::idx_y#3 main::idx_y#10 main::idx_y#1 ] 11: zp ZP_WORD:75 [ main::cos_x#0 ] 11: zp ZP_WORD:85 [ main::$10 ] 11: zp ZP_WORD:95 [ main::sin_y#0 ] 11: zp ZP_WORD:105 [ main::$16 ] 11: zp ZP_WORD:109 [ main::y#0 ] 6.76: zp ZP_WORD:4 [ main::r#10 main::r#1 ] 0.85: zp ZP_WORD:89 [ main::x#0 ]
Uplift Scope [divr16u] 106.92: zp ZP_WORD:63 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] 35.54: zp ZP_WORD:67 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] 22: zp ZP_BYTE:222 [ divr16u::$1 ] 22: zp ZP_BYTE:223 [ divr16u::$2 ] 18.19: zp ZP_BYTE:69 [ divr16u::i#2 divr16u::i#1 ] 9.75: zp ZP_WORD:65 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] 4: zp ZP_WORD:210 [ divr16u::return#2 ] 4: zp ZP_WORD:214 [ divr16u::return#3 ]
Uplift Scope [mul16s] 46.69: zp ZP_WORD:9 [ mul16s::a#3 mul16s::a#1 mul16s::a#2 mul16s::a#0 ] 46.18: zp ZP_WORD:11 [ mul16s::b#3 mul16s::b#1 mul16s::b#2 ] 22: zp ZP_DWORD:77 [ mul16s::return#3 ] 22: zp ZP_DWORD:97 [ mul16s::return#4 ] 22: zp ZP_DWORD:154 [ mul16s::return#2 ] 16.5: zp ZP_DWORD:13 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 ] 7: zp ZP_DWORD:133 [ mul16s::return#0 ] 4: zp ZP_WORD:125 [ mul16s::$9 ] 4: zp ZP_WORD:127 [ mul16s::$16 ] 4: zp ZP_WORD:129 [ mul16s::$13 ] 4: zp ZP_WORD:131 [ mul16s::$17 ]
Uplift Scope [bitmap_init] 39.88: zp ZP_WORD:41 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] 34.83: zp ZP_BYTE:38 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] 22: zp ZP_BYTE:39 [ bitmap_init::x#2 bitmap_init::x#1 ] 22: zp ZP_BYTE:40 [ bitmap_init::y#2 bitmap_init::y#1 ] 22: zp ZP_BYTE:141 [ bitmap_init::$4 ] 22: zp ZP_BYTE:142 [ bitmap_init::$5 ] 22: zp ZP_BYTE:143 [ bitmap_init::$6 ] 5.5: zp ZP_BYTE:140 [ bitmap_init::$7 ]
@ -6636,7 +6637,7 @@ Uplift Scope [init_irq]
Uplift Scope [irq]
Uplifting [mul16u] best 27154 combination zp ZP_DWORD:23 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp ZP_DWORD:27 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp ZP_WORD:21 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] zp ZP_WORD:17 [ mul16u::b#0 ] zp ZP_WORD:19 [ mul16u::b#1 ] zp ZP_DWORD:121 [ mul16u::return#2 ] zp ZP_DWORD:196 [ mul16u::return#3 ]
Uplifting [main] best 27154 combination zp ZP_BYTE:8 [ main::r_add#10 main::r_add#12 main::r_add#1 ] zp ZP_WORD:71 [ main::$32 ] zp ZP_WORD:73 [ main::$34 ] zp ZP_DWORD:81 [ main::xpos#0 ] zp ZP_WORD:87 [ main::$11 ] zp ZP_WORD:91 [ main::$33 ] zp ZP_WORD:93 [ main::$35 ] zp ZP_DWORD:101 [ main::ypos#0 ] zp ZP_WORD:107 [ main::$17 ] zp ZP_WORD:2 [ main::idx_x#11 main::idx_x#10 main::idx_x#1 ] zp ZP_WORD:6 [ main::idx_y#3 main::idx_y#10 main::idx_y#1 ] zp ZP_WORD:75 [ main::cos_x#0 ] zp ZP_WORD:85 [ main::$10 ] zp ZP_WORD:95 [ main::sin_y#0 ] zp ZP_WORD:105 [ main::$16 ] zp ZP_WORD:109 [ main::y#0 ] zp ZP_WORD:4 [ main::r#10 main::r#1 ] zp ZP_WORD:89 [ main::x#0 ]
Uplifting [main] best 27154 combination zp ZP_BYTE:8 [ main::r_add#10 main::r_add#12 main::r_add#1 ] zp ZP_WORD:71 [ main::$34 ] zp ZP_WORD:73 [ main::$36 ] zp ZP_DWORD:81 [ main::xpos#0 ] zp ZP_WORD:87 [ main::$11 ] zp ZP_WORD:91 [ main::$35 ] zp ZP_WORD:93 [ main::$37 ] zp ZP_DWORD:101 [ main::ypos#0 ] zp ZP_WORD:107 [ main::$17 ] zp ZP_WORD:2 [ main::idx_x#11 main::idx_x#10 main::idx_x#1 ] zp ZP_WORD:6 [ main::idx_y#3 main::idx_y#10 main::idx_y#1 ] zp ZP_WORD:75 [ main::cos_x#0 ] zp ZP_WORD:85 [ main::$10 ] zp ZP_WORD:95 [ main::sin_y#0 ] zp ZP_WORD:105 [ main::$16 ] zp ZP_WORD:109 [ main::y#0 ] zp ZP_WORD:4 [ main::r#10 main::r#1 ] zp ZP_WORD:89 [ main::x#0 ]
Uplifting [divr16u] best 26944 combination zp ZP_WORD:63 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:67 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:65 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp ZP_WORD:210 [ divr16u::return#2 ] zp ZP_WORD:214 [ divr16u::return#3 ]
Uplifting [mul16s] best 26944 combination zp ZP_WORD:9 [ mul16s::a#3 mul16s::a#1 mul16s::a#2 mul16s::a#0 ] zp ZP_WORD:11 [ mul16s::b#3 mul16s::b#1 mul16s::b#2 ] zp ZP_DWORD:77 [ mul16s::return#3 ] zp ZP_DWORD:97 [ mul16s::return#4 ] zp ZP_DWORD:154 [ mul16s::return#2 ] zp ZP_DWORD:13 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 ] zp ZP_DWORD:133 [ mul16s::return#0 ] zp ZP_WORD:125 [ mul16s::$9 ] zp ZP_WORD:127 [ mul16s::$16 ] zp ZP_WORD:129 [ mul16s::$13 ] zp ZP_WORD:131 [ mul16s::$17 ]
Uplifting [bitmap_init] best 26434 combination zp ZP_WORD:41 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] reg byte a [ bitmap_init::$4 ] zp ZP_BYTE:142 [ bitmap_init::$5 ] zp ZP_BYTE:143 [ bitmap_init::$6 ] zp ZP_BYTE:140 [ bitmap_init::$7 ]
@ -6681,11 +6682,11 @@ Coalescing zero page register [ zp ZP_WORD:58 [ mulu16_sel::v1#5 mulu16_sel::v1#
Coalescing zero page register [ zp ZP_WORD:58 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 ] ] with [ zp ZP_WORD:186 [ sin16s::x4#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:67 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] ] with [ zp ZP_WORD:210 [ divr16u::return#2 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:67 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 ] ] with [ zp ZP_WORD:214 [ divr16u::return#3 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:71 [ main::$32 ] ] with [ zp ZP_WORD:73 [ main::$34 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:71 [ main::$34 ] ] with [ zp ZP_WORD:73 [ main::$36 ] ] - score: 1
Coalescing zero page register [ zp ZP_DWORD:77 [ mul16s::return#3 ] ] with [ zp ZP_DWORD:81 [ main::xpos#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:85 [ main::$10 ] ] with [ zp ZP_WORD:87 [ main::$11 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:89 [ main::x#0 ] ] with [ zp ZP_WORD:112 [ bitmap_plot::x#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:91 [ main::$33 ] ] with [ zp ZP_WORD:93 [ main::$35 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:91 [ main::$35 ] ] with [ zp ZP_WORD:93 [ main::$37 ] ] - score: 1
Coalescing zero page register [ zp ZP_DWORD:97 [ mul16s::return#4 ] ] with [ zp ZP_DWORD:101 [ main::ypos#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:105 [ main::$16 ] ] with [ zp ZP_WORD:107 [ main::$17 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:114 [ bitmap_plot::plotter#0 ] ] with [ zp ZP_WORD:118 [ bitmap_plot::plotter#1 ] ] - score: 1
@ -6699,8 +6700,8 @@ Coalescing zero page register [ zp ZP_WORD:178 [ mulu16_sel::return#2 ] ] with [
Coalescing zero page register [ zp ZP_WORD:188 [ mulu16_sel::return#11 ] ] with [ zp ZP_WORD:190 [ sin16s::x5#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_DWORD:200 [ mulu16_sel::$0 ] ] with [ zp ZP_DWORD:204 [ mulu16_sel::$1 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:4 [ main::r#10 main::r#1 mul16s::a#3 mul16s::a#1 mul16s::a#2 mul16s::a#0 ] ] with [ zp ZP_WORD:56 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:11 [ mul16s::b#3 mul16s::b#1 mul16s::b#2 main::cos_x#0 main::sin_y#0 ] ] with [ zp ZP_WORD:71 [ main::$32 main::$34 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:11 [ mul16s::b#3 mul16s::b#1 mul16s::b#2 main::cos_x#0 main::sin_y#0 main::$32 main::$34 ] ] with [ zp ZP_WORD:91 [ main::$33 main::$35 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:11 [ mul16s::b#3 mul16s::b#1 mul16s::b#2 main::cos_x#0 main::sin_y#0 ] ] with [ zp ZP_WORD:71 [ main::$34 main::$36 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:11 [ mul16s::b#3 mul16s::b#1 mul16s::b#2 main::cos_x#0 main::sin_y#0 main::$34 main::$36 ] ] with [ zp ZP_WORD:91 [ main::$35 main::$37 ] ] - score: 1
Coalescing zero page register [ zp ZP_DWORD:13 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 ] ] with [ zp ZP_DWORD:23 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 ] ] - score: 1
Coalescing zero page register [ zp ZP_DWORD:13 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 ] ] with [ zp ZP_DWORD:77 [ mul16s::return#3 main::xpos#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_DWORD:13 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#3 main::xpos#0 ] ] with [ zp ZP_DWORD:97 [ mul16s::return#4 main::ypos#0 ] ] - score: 1
@ -6718,7 +6719,7 @@ Coalescing zero page register [ zp ZP_WORD:170 [ mulu16_sel::return#0 mulu16_sel
Coalescing zero page register [ zp ZP_WORD:19 [ mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] ] with [ zp ZP_WORD:2 [ main::idx_x#11 main::idx_x#10 main::idx_x#1 ] ]
Coalescing zero page register [ zp ZP_WORD:31 [ memset::num#2 memset::end#0 ] ] with [ zp ZP_WORD:4 [ main::r#10 main::r#1 mul16s::a#3 mul16s::a#1 mul16s::a#2 mul16s::a#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s::usinx#0 ] ]
Coalescing zero page register [ zp ZP_WORD:33 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] ] with [ zp ZP_WORD:6 [ main::idx_y#3 main::idx_y#10 main::idx_y#1 ] ]
Coalescing zero page register [ zp ZP_WORD:41 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] ] with [ zp ZP_WORD:11 [ mul16s::b#3 mul16s::b#1 mul16s::b#2 main::cos_x#0 main::sin_y#0 main::$32 main::$34 main::$33 main::$35 ] ]
Coalescing zero page register [ zp ZP_WORD:41 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] ] with [ zp ZP_WORD:11 [ mul16s::b#3 mul16s::b#1 mul16s::b#2 main::cos_x#0 main::sin_y#0 main::$34 main::$36 main::$35 main::$37 ] ]
Coalescing zero page register [ zp ZP_BYTE:51 [ sin16s::isUpper#2 ] ] with [ zp ZP_BYTE:8 [ main::r_add#10 main::r_add#12 main::r_add#1 ] ]
Coalescing zero page register [ zp ZP_DWORD:52 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 sin16s::$4 ] ] with [ zp ZP_DWORD:13 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#3 main::xpos#0 mul16s::return#4 main::ypos#0 mul16s::return#2 sin16s_gen2::$6 mulu16_sel::$0 mulu16_sel::$1 ] ]
Coalescing zero page register [ zp ZP_WORD:58 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ] ] with [ zp ZP_WORD:17 [ mul16u::b#0 ] ]
@ -6734,7 +6735,7 @@ Coalescing zero page register [ zp ZP_WORD:65 [ divr16u::dividend#3 divr16u::div
Coalescing zero page register [ zp ZP_WORD:114 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 main::$16 main::$17 main::y#0 ] ] with [ zp ZP_WORD:58 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 mul16u::b#0 ] ]
Coalescing zero page register [ zp ZP_WORD:125 [ mul16s::$9 mul16s::$16 bitmap_plot::$1 ] ] with [ zp ZP_WORD:63 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] ]
Coalescing zero page register [ zp ZP_BYTE:140 [ bitmap_init::$7 ] ] with [ zp ZP_BYTE:51 [ sin16s::isUpper#2 main::r_add#10 main::r_add#12 main::r_add#1 ] ]
Coalescing zero page register [ zp ZP_WORD:212 [ div32u16u::quotient_hi#0 mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 ] ] with [ zp ZP_WORD:41 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 mul16s::b#3 mul16s::b#1 mul16s::b#2 main::cos_x#0 main::sin_y#0 main::$32 main::$34 main::$33 main::$35 ] ]
Coalescing zero page register [ zp ZP_WORD:212 [ div32u16u::quotient_hi#0 mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 ] ] with [ zp ZP_WORD:41 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 mul16s::b#3 mul16s::b#1 mul16s::b#2 main::cos_x#0 main::sin_y#0 main::$34 main::$36 main::$35 main::$37 ] ]
Allocated (was zp ZP_WORD:19) zp ZP_WORD:2 [ mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 main::idx_x#11 main::idx_x#10 main::idx_x#1 ]
Allocated (was zp ZP_DWORD:27) zp ZP_DWORD:4 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ]
Allocated (was zp ZP_WORD:31) zp ZP_WORD:8 [ memset::num#2 memset::end#0 main::r#10 main::r#1 mul16s::a#3 mul16s::a#1 mul16s::a#2 mul16s::a#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s::usinx#0 ]
@ -6749,7 +6750,7 @@ Allocated (was zp ZP_BYTE:140) zp ZP_BYTE:27 [ bitmap_init::$7 sin16s::isUpper#2
Allocated (was zp ZP_DWORD:144) zp ZP_DWORD:28 [ div32u16u::return#2 sin16s_gen2::step#0 div32u16u::return#0 ]
Allocated (was zp ZP_WORD:162) zp ZP_WORD:32 [ sin16s_gen2::$9 main::$10 main::$11 main::x#0 bitmap_plot::x#0 ]
Allocated (was zp ZP_WORD:168) zp ZP_WORD:34 [ sin16s::x1#0 mul16s::$13 mul16s::$17 ]
Allocated (was zp ZP_WORD:212) zp ZP_WORD:36 [ div32u16u::quotient_hi#0 mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 mul16s::b#3 mul16s::b#1 mul16s::b#2 main::cos_x#0 main::sin_y#0 main::$32 main::$34 main::$33 main::$35 ]
Allocated (was zp ZP_WORD:212) zp ZP_WORD:36 [ div32u16u::quotient_hi#0 mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 mul16s::b#3 mul16s::b#1 mul16s::b#2 main::cos_x#0 main::sin_y#0 main::$34 main::$36 main::$35 main::$37 ]
Interrupt procedure irq clobbers ACNZ
Removing interrupt register storage stx regx+1 in CHU440 entry interrupt(HARDWARE_CLOBBER)
Removing interrupt register storage sty regy+1 in CHU440 entry interrupt(HARDWARE_CLOBBER)
@ -6840,8 +6841,8 @@ main: {
.label _11 = $20
.label _16 = $17
.label _17 = $17
.label _32 = $24
.label _33 = $24
.label _34 = $24
.label _35 = $24
.label cos_x = $24
.label xpos = $e
.label x = $20
@ -6852,8 +6853,8 @@ main: {
.label idx_y = $12
.label r = 8
.label r_add = $1b
.label _34 = $24
.label _35 = $24
.label _36 = $24
.label _37 = $24
// [6] call sin16s_gen2
// [137] phi from main to sin16s_gen2 [phi:main->sin16s_gen2]
sin16s_gen2_from_main:
@ -6921,22 +6922,22 @@ main: {
jmp b2
// main::@2
b2:
// [16] (word~) main::$32 ← (word) main::idx_x#11 << (byte) 1 -- vwuz1=vwuz2_rol_1
// [16] (word~) main::$34 ← (word) main::idx_x#11 << (byte) 1 -- vwuz1=vwuz2_rol_1
lda.z idx_x
asl
sta.z _32
sta.z _34
lda.z idx_x+1
rol
sta.z _32+1
// [17] (signed word*~) main::$34 ← (const signed word[$200]) SINUS#0 + (word~) main::$32 -- pwsz1=pwsc1_plus_vwuz1
clc
lda.z _34
adc #<SINUS
sta.z _34
lda.z _34+1
adc #>SINUS
sta.z _34+1
// [18] (signed word) main::cos_x#0 ← *((signed word*~) main::$34) -- vwsz1=_deref_pwsz1
// [17] (signed word*~) main::$36 ← (const signed word[$200]) SINUS#0 + (word~) main::$34 -- pwsz1=pwsc1_plus_vwuz1
clc
lda.z _36
adc #<SINUS
sta.z _36
lda.z _36+1
adc #>SINUS
sta.z _36+1
// [18] (signed word) main::cos_x#0 ← *((signed word*~) main::$36) -- vwsz1=_deref_pwsz1
ldy #0
lda (cos_x),y
tax
@ -6979,22 +6980,22 @@ main: {
lda.z x+1
adc #>$a0
sta.z x+1
// [27] (word~) main::$33 ← (word) main::idx_y#3 << (byte) 1 -- vwuz1=vwuz2_rol_1
// [27] (word~) main::$35 ← (word) main::idx_y#3 << (byte) 1 -- vwuz1=vwuz2_rol_1
lda.z idx_y
asl
sta.z _33
sta.z _35
lda.z idx_y+1
rol
sta.z _33+1
// [28] (signed word*~) main::$35 ← (const signed word[$200]) SINUS#0 + (word~) main::$33 -- pwsz1=pwsc1_plus_vwuz1
clc
lda.z _35
adc #<SINUS
sta.z _35
lda.z _35+1
adc #>SINUS
sta.z _35+1
// [29] (signed word) main::sin_y#0 ← *((signed word*~) main::$35) -- vwsz1=_deref_pwsz1
// [28] (signed word*~) main::$37 ← (const signed word[$200]) SINUS#0 + (word~) main::$35 -- pwsz1=pwsc1_plus_vwuz1
clc
lda.z _37
adc #<SINUS
sta.z _37
lda.z _37+1
adc #>SINUS
sta.z _37+1
// [29] (signed word) main::sin_y#0 ← *((signed word*~) main::$37) -- vwsz1=_deref_pwsz1
ldy #0
lda (sin_y),y
tax
@ -8831,10 +8832,10 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(signed word~) main::$11 $11 zp ZP_WORD:32 22.0
(word~) main::$16 $16 zp ZP_WORD:23 11.0
(signed word~) main::$17 $17 zp ZP_WORD:23 22.0
(word~) main::$32 $32 zp ZP_WORD:36 22.0
(word~) main::$33 $33 zp ZP_WORD:36 22.0
(signed word*~) main::$34 $34 zp ZP_WORD:36 22.0
(signed word*~) main::$35 $35 zp ZP_WORD:36 22.0
(word~) main::$34 $34 zp ZP_WORD:36 22.0
(word~) main::$35 $35 zp ZP_WORD:36 22.0
(signed word*~) main::$36 $36 zp ZP_WORD:36 22.0
(signed word*~) main::$37 $37 zp ZP_WORD:36 22.0
(label) main::@1
(label) main::@10
(label) main::@11
@ -9102,7 +9103,7 @@ reg byte a [ bitmap_init::$6 ]
zp ZP_DWORD:28 [ div32u16u::return#2 sin16s_gen2::step#0 div32u16u::return#0 ]
zp ZP_WORD:32 [ sin16s_gen2::$9 main::$10 main::$11 main::x#0 bitmap_plot::x#0 ]
zp ZP_WORD:34 [ sin16s::x1#0 mul16s::$13 mul16s::$17 ]
zp ZP_WORD:36 [ div32u16u::quotient_hi#0 mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 mul16s::b#3 mul16s::b#1 mul16s::b#2 main::cos_x#0 main::sin_y#0 main::$32 main::$34 main::$33 main::$35 ]
zp ZP_WORD:36 [ div32u16u::quotient_hi#0 mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 mul16s::b#3 mul16s::b#1 mul16s::b#2 main::cos_x#0 main::sin_y#0 main::$34 main::$36 main::$35 main::$37 ]
reg byte a [ divr16u::$1 ]
reg byte a [ divr16u::$2 ]
@ -9184,8 +9185,8 @@ main: {
.label _11 = $20
.label _16 = $17
.label _17 = $17
.label _32 = $24
.label _33 = $24
.label _34 = $24
.label _35 = $24
.label cos_x = $24
.label xpos = $e
.label x = $20
@ -9196,8 +9197,8 @@ main: {
.label idx_y = $12
.label r = 8
.label r_add = $1b
.label _34 = $24
.label _35 = $24
.label _36 = $24
.label _37 = $24
// sin16s_gen2(SINUS, 512, -0x1001, 0x1001)
// [6] call sin16s_gen2
// [137] phi from main to sin16s_gen2 [phi:main->sin16s_gen2]
@ -9249,22 +9250,22 @@ main: {
// main::@2
b2:
// cos_x = SINUS[idx_x]
// [16] (word~) main::$32 ← (word) main::idx_x#11 << (byte) 1 -- vwuz1=vwuz2_rol_1
// [16] (word~) main::$34 ← (word) main::idx_x#11 << (byte) 1 -- vwuz1=vwuz2_rol_1
lda.z idx_x
asl
sta.z _32
sta.z _34
lda.z idx_x+1
rol
sta.z _32+1
// [17] (signed word*~) main::$34 ← (const signed word[$200]) SINUS#0 + (word~) main::$32 -- pwsz1=pwsc1_plus_vwuz1
clc
lda.z _34
adc #<SINUS
sta.z _34
lda.z _34+1
adc #>SINUS
sta.z _34+1
// [18] (signed word) main::cos_x#0 ← *((signed word*~) main::$34) -- vwsz1=_deref_pwsz1
// [17] (signed word*~) main::$36 ← (const signed word[$200]) SINUS#0 + (word~) main::$34 -- pwsz1=pwsc1_plus_vwuz1
clc
lda.z _36
adc #<SINUS
sta.z _36
lda.z _36+1
adc #>SINUS
sta.z _36+1
// [18] (signed word) main::cos_x#0 ← *((signed word*~) main::$36) -- vwsz1=_deref_pwsz1
ldy #0
lda (cos_x),y
tax
@ -9311,22 +9312,22 @@ main: {
adc #>$a0
sta.z x+1
// sin_y = SINUS[idx_y]
// [27] (word~) main::$33 ← (word) main::idx_y#3 << (byte) 1 -- vwuz1=vwuz2_rol_1
// [27] (word~) main::$35 ← (word) main::idx_y#3 << (byte) 1 -- vwuz1=vwuz2_rol_1
lda.z idx_y
asl
sta.z _33
sta.z _35
lda.z idx_y+1
rol
sta.z _33+1
// [28] (signed word*~) main::$35 ← (const signed word[$200]) SINUS#0 + (word~) main::$33 -- pwsz1=pwsc1_plus_vwuz1
clc
lda.z _35
adc #<SINUS
sta.z _35
lda.z _35+1
adc #>SINUS
sta.z _35+1
// [29] (signed word) main::sin_y#0 ← *((signed word*~) main::$35) -- vwsz1=_deref_pwsz1
// [28] (signed word*~) main::$37 ← (const signed word[$200]) SINUS#0 + (word~) main::$35 -- pwsz1=pwsc1_plus_vwuz1
clc
lda.z _37
adc #<SINUS
sta.z _37
lda.z _37+1
adc #>SINUS
sta.z _37+1
// [29] (signed word) main::sin_y#0 ← *((signed word*~) main::$37) -- vwsz1=_deref_pwsz1
ldy #0
lda (sin_y),y
tax

View File

@ -175,10 +175,10 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(signed word~) main::$11 $11 zp ZP_WORD:32 22.0
(word~) main::$16 $16 zp ZP_WORD:23 11.0
(signed word~) main::$17 $17 zp ZP_WORD:23 22.0
(word~) main::$32 $32 zp ZP_WORD:36 22.0
(word~) main::$33 $33 zp ZP_WORD:36 22.0
(signed word*~) main::$34 $34 zp ZP_WORD:36 22.0
(signed word*~) main::$35 $35 zp ZP_WORD:36 22.0
(word~) main::$34 $34 zp ZP_WORD:36 22.0
(word~) main::$35 $35 zp ZP_WORD:36 22.0
(signed word*~) main::$36 $36 zp ZP_WORD:36 22.0
(signed word*~) main::$37 $37 zp ZP_WORD:36 22.0
(label) main::@1
(label) main::@10
(label) main::@11
@ -446,6 +446,6 @@ reg byte a [ bitmap_init::$6 ]
zp ZP_DWORD:28 [ div32u16u::return#2 sin16s_gen2::step#0 div32u16u::return#0 ]
zp ZP_WORD:32 [ sin16s_gen2::$9 main::$10 main::$11 main::x#0 bitmap_plot::x#0 ]
zp ZP_WORD:34 [ sin16s::x1#0 mul16s::$13 mul16s::$17 ]
zp ZP_WORD:36 [ div32u16u::quotient_hi#0 mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 mul16s::b#3 mul16s::b#1 mul16s::b#2 main::cos_x#0 main::sin_y#0 main::$32 main::$34 main::$33 main::$35 ]
zp ZP_WORD:36 [ div32u16u::quotient_hi#0 mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 mul16s::b#3 mul16s::b#1 mul16s::b#2 main::cos_x#0 main::sin_y#0 main::$34 main::$36 main::$35 main::$37 ]
reg byte a [ divr16u::$1 ]
reg byte a [ divr16u::$2 ]

View File

@ -667,8 +667,8 @@ main::@7: scope:[main] from main::@1 main::@8
main::@8: scope:[main] from main::@7
(byte*) bitmap_screen#18 ← phi( main::@7/(byte*) bitmap_screen#13 )
(byte*) bitmap_gfx#19 ← phi( main::@7/(byte*) bitmap_gfx#14 )
(byte*~) main::$18 ← (byte*) SCREEN#0 + (number) $3e7
*((byte*~) main::$18) ← ++ *((byte*~) main::$18)
(byte*~) main::$19 ← (byte*) SCREEN#0 + (number) $3e7
*((byte*~) main::$19) ← ++ *((byte*~) main::$19)
to:main::@7
main::@return: scope:[main] from main::@7
(byte*) bitmap_screen#9 ← phi( main::@7/(byte*) bitmap_screen#13 )
@ -1121,7 +1121,7 @@ SYMBOL TABLE SSA
(number~) main::$12
(number~) main::$13
(word~) main::$14
(byte*~) main::$18
(byte*~) main::$19
(byte~) main::$2
(byte~) main::$3
(number~) main::$4
@ -1313,7 +1313,7 @@ Adding number conversion cast (unumber) main::$12 in (number~) main::$12 ← (wo
Adding number conversion cast (unumber) $20 in (number~) main::$13 ← (byte) main::a#2 + (number) $20
Adding number conversion cast (unumber) main::$13 in (number~) main::$13 ← (byte) main::a#2 + (unumber)(number) $20
Adding number conversion cast (unumber) $20 in (byte) main::a#1 ← (byte) main::a#3 + (number) $20
Adding number conversion cast (unumber) $3e7 in (byte*~) main::$18 ← (byte*) SCREEN#0 + (number) $3e7
Adding number conversion cast (unumber) $3e7 in (byte*~) main::$19 ← (byte*) SCREEN#0 + (number) $3e7
Successful SSA optimization PassNAddNumberTypeConversions
Inlining cast (byte*) D011#0 ← (byte*)(number) $d011
Inlining cast (byte) VIC_BMM#0 ← (unumber)(number) $20
@ -1736,7 +1736,7 @@ Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
Constant right-side identified [31] (byte) bitmap_clear::col#0 ← (const byte) bitmap_clear::fgcol#0 * (byte) $10
Constant right-side identified [112] (byte*) COSTAB#0 ← (const byte[$180]) SINTAB#0 + (byte) $40
Constant right-side identified [115] (byte~) main::$2 ← (const byte) VIC_BMM#0 | (const byte) VIC_DEN#0
Constant right-side identified [145] (byte*~) main::$18 ← (const byte*) SCREEN#0 + (word) $3e7
Constant right-side identified [145] (byte*~) main::$19 ← (const byte*) SCREEN#0 + (word) $3e7
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) bitmap_clear::col#0 = bitmap_clear::fgcol#0*$10
Constant (const void*) memset::str#0 = (void*)bitmap_screen#1
@ -1745,7 +1745,7 @@ Constant (const byte*) COSTAB#0 = SINTAB#0+$40
Constant (const byte) main::$2 = VIC_BMM#0|VIC_DEN#0
Constant (const word) main::toD0181_$0#0 = (word)main::toD0181_screen#0
Constant (const word) main::toD0181_$4#0 = (word)main::toD0181_gfx#0
Constant (const byte*) main::$18 = SCREEN#0+$3e7
Constant (const byte*) main::$19 = SCREEN#0+$3e7
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte) memset::c#0 = bitmap_clear::col#0
Successful SSA optimization Pass2ConstantIdentification
@ -1808,7 +1808,7 @@ Constant inlined memset::num#0 = (word) $3e8
Constant inlined bitmap_init::bits#0 = (byte) $80
Constant inlined bitmap_init::bits#2 = (byte) $80
Constant inlined main::a#0 = (byte) 0
Constant inlined main::$18 = (const byte*) SCREEN#0+(word) $3e7
Constant inlined main::$19 = (const byte*) SCREEN#0+(word) $3e7
Constant inlined sgn_u16::return#3 = (byte) 1
Constant inlined main::i#0 = (byte) 0
Constant inlined sgn_u16::return#2 = (byte) -1

View File

@ -54,8 +54,8 @@ main::@10: scope:[main] from main::@10 main::@6
asm { nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop }
*((byte*) BGCOL#0) ← ++ *((byte*) BGCOL#0)
(byte) main::r#1 ← (byte) main::r#2 + rangenext($31,$ff)
(bool~) main::$3 ← (byte) main::r#1 != rangelast($31,$ff)
if((bool~) main::$3) goto main::@10
(bool~) main::$4 ← (byte) main::r#1 != rangelast($31,$ff)
if((bool~) main::$4) goto main::@10
to:main::@11
main::@11: scope:[main] from main::@10
(byte) main::c#0 ← (byte) 0
@ -65,8 +65,8 @@ main::@12: scope:[main] from main::@11 main::@12
*((byte*) DTV_PALETTE#0 + (byte) main::c#2) ← *((byte[$10]) main::palette#0 + (byte) main::c#2)
*((byte[$10]) main::palette#0 + (byte) main::c#2) ← ++ *((byte[$10]) main::palette#0 + (byte) main::c#2)
(byte) main::c#1 ← (byte) main::c#2 + rangenext(0,$f)
(bool~) main::$4 ← (byte) main::c#1 != rangelast(0,$f)
if((bool~) main::$4) goto main::@12
(bool~) main::$6 ← (byte) main::c#1 != rangelast(0,$f)
if((bool~) main::$6) goto main::@12
to:main::@1
main::@return: scope:[main] from main::@1
return
@ -106,8 +106,8 @@ SYMBOL TABLE SSA
(byte~) main::$0
(byte~) main::$1
(bool~) main::$2
(bool~) main::$3
(bool~) main::$4
(bool~) main::$6
(label) main::@1
(label) main::@10
(label) main::@11
@ -182,8 +182,8 @@ Finalized unsigned number type (byte) $40
Finalized unsigned number type (byte) 0
Successful SSA optimization PassNFinalizeNumberTypeConversions
Simple Condition (bool~) main::$2 [17] if(*((byte*) RASTER#0)!=(byte) $40) goto main::@4
Simple Condition (bool~) main::$3 [25] if((byte) main::r#1!=rangelast($31,$ff)) goto main::@10
Simple Condition (bool~) main::$4 [32] if((byte) main::c#1!=rangelast(0,$f)) goto main::@12
Simple Condition (bool~) main::$4 [25] if((byte) main::r#1!=rangelast($31,$ff)) goto main::@10
Simple Condition (bool~) main::$6 [32] if((byte) main::c#1!=rangelast(0,$f)) goto main::@12
Successful SSA optimization Pass2ConditionalJumpSimplification
Identified constant from value list (byte[$10]) { (byte) 0, (byte) 1, (byte) 2, (byte) 3, (byte) 4, (byte) 5, (byte) 6, (byte) 7, (byte) 8, (byte) 9, (byte) $a, (byte) $b, (byte) $c, (byte) $d, (byte) $e, (byte) $f }
Successful SSA optimization Pass2ConstantInitializerValueLists

View File

@ -37,20 +37,20 @@ main::@1: scope:[main] from main::@2
to:main::@3
main::@3: scope:[main] from main::@1 main::@3
[17] (byte) main::i#2 ← phi( main::@1/(byte) 0 main::@3/(byte) main::i#1 )
[18] (byte) main::$26 ← (byte) main::i#2 << (byte) 1
[19] (byte) main::$27 ← (byte) main::$26 + (byte) main::i#2
[20] (byte) main::$28 ← (byte) main::$27 << (byte) 1
[21] (byte) main::$29 ← (byte) main::$28 + (byte) main::i#2
[22] (byte~) main::$16 ← (byte) main::$29 << (byte) 1
[23] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) main::$16) ← (byte) 0
[24] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$16) ← (byte) 0
[25] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$16) ← (byte) 0
[26] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$16) ← (byte) 0
[27] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$16) ← (byte) 0
[28] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$16) ← (byte) 0
[29] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) main::$16) ← (byte) 0
[30] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$16) ← (const byte) STATUS_FREE
[31] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$16) ← (byte*) 0
[18] (byte) main::$27 ← (byte) main::i#2 << (byte) 1
[19] (byte) main::$28 ← (byte) main::$27 + (byte) main::i#2
[20] (byte) main::$29 ← (byte) main::$28 << (byte) 1
[21] (byte) main::$30 ← (byte) main::$29 + (byte) main::i#2
[22] (byte~) main::$17 ← (byte) main::$30 << (byte) 1
[23] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) main::$17) ← (byte) 0
[24] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$17) ← (byte) 0
[25] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$17) ← (byte) 0
[26] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$17) ← (byte) 0
[27] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$17) ← (byte) 0
[28] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$17) ← (byte) 0
[29] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) main::$17) ← (byte) 0
[30] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$17) ← (const byte) STATUS_FREE
[31] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$17) ← (byte*) 0
[32] (byte) main::i#1 ← ++ (byte) main::i#2
[33] if((byte) main::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto main::@3
to:main::@4

View File

@ -39,15 +39,15 @@ Created struct value member variable (byte) startProcessing::center_y
Created struct value member variable (byte) startProcessing::center_dist
Converted struct value to member variables (struct ProcessingChar) startProcessing::center
Converted procedure struct value parameter to member unwinding (void()) startProcessing((byte) startProcessing::center_x , (byte) startProcessing::center_y , (byte) startProcessing::center_dist)
Adding struct value list initializer *((word*) main::$17 + (byte~) main::$16) ← (number) 0
Adding struct value list initializer *((word*) main::$18 + (byte~) main::$16) ← (number) 0
Adding struct value list initializer *((word*) main::$19 + (byte~) main::$16) ← (number) 0
Adding struct value list initializer *((word*) main::$20 + (byte~) main::$16) ← (number) 0
Adding struct value list initializer *((byte*) main::$21 + (byte~) main::$16) ← (number) 0
Adding struct value list initializer *((byte*) main::$22 + (byte~) main::$16) ← (number) 0
Adding struct value list initializer *((byte*) main::$23 + (byte~) main::$16) ← (number) 0
Adding struct value list initializer *((byte*) main::$24 + (byte~) main::$16) ← (const byte) STATUS_FREE
Adding struct value list initializer *((byte**) main::$25 + (byte~) main::$16) ← (number) 0
Adding struct value list initializer *((word*) main::$18 + (byte~) main::$17) ← (number) 0
Adding struct value list initializer *((word*) main::$19 + (byte~) main::$17) ← (number) 0
Adding struct value list initializer *((word*) main::$20 + (byte~) main::$17) ← (number) 0
Adding struct value list initializer *((word*) main::$21 + (byte~) main::$17) ← (number) 0
Adding struct value list initializer *((byte*) main::$22 + (byte~) main::$17) ← (number) 0
Adding struct value list initializer *((byte*) main::$23 + (byte~) main::$17) ← (number) 0
Adding struct value list initializer *((byte*) main::$24 + (byte~) main::$17) ← (number) 0
Adding struct value list initializer *((byte*) main::$25 + (byte~) main::$17) ← (const byte) STATUS_FREE
Adding struct value list initializer *((byte**) main::$26 + (byte~) main::$17) ← (number) 0
Converted procedure call LValue to member unwinding { (byte) main::$9_x, (byte) main::$9_y, (byte) main::$9_dist } ← call getCharToProcess
Adding struct value member variable copy (byte) main::center_x ← (byte) main::$9_x
Adding struct value member variable copy (byte) main::center_y ← (byte) main::$9_y
@ -537,25 +537,25 @@ main::@7: scope:[main] from main::@3 main::@7
(byte*) SCREEN_DIST#14 ← phi( main::@3/(byte*) SCREEN_DIST#15 main::@7/(byte*) SCREEN_DIST#14 )
(byte*) SCREEN_COPY#21 ← phi( main::@3/(byte*) SCREEN_COPY#24 main::@7/(byte*) SCREEN_COPY#21 )
(byte) main::i#2 ← phi( main::@3/(byte) main::i#0 main::@7/(byte) main::i#1 )
(byte~) main::$16 ← (byte) main::i#2 * (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE
(word*) main::$17 ← (word*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X
*((word*) main::$17 + (byte~) main::$16) ← (number) 0
(word*) main::$18 ← (word*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
*((word*) main::$18 + (byte~) main::$16) ← (number) 0
(word*) main::$19 ← (word*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX
*((word*) main::$19 + (byte~) main::$16) ← (number) 0
(word*) main::$20 ← (word*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY
*((word*) main::$20 + (byte~) main::$16) ← (number) 0
(byte*) main::$21 ← (byte*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID
*((byte*) main::$21 + (byte~) main::$16) ← (number) 0
(byte*) main::$22 ← (byte*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR
*((byte*) main::$22 + (byte~) main::$16) ← (number) 0
(byte*) main::$23 ← (byte*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL
*((byte*) main::$23 + (byte~) main::$16) ← (number) 0
(byte*) main::$24 ← (byte*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
*((byte*) main::$24 + (byte~) main::$16) ← (const byte) STATUS_FREE
(byte**) main::$25 ← (byte**)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR
*((byte**) main::$25 + (byte~) main::$16) ← ((byte*)) (number) 0
(byte~) main::$17 ← (byte) main::i#2 * (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE
(word*) main::$18 ← (word*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X
*((word*) main::$18 + (byte~) main::$17) ← (number) 0
(word*) main::$19 ← (word*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
*((word*) main::$19 + (byte~) main::$17) ← (number) 0
(word*) main::$20 ← (word*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX
*((word*) main::$20 + (byte~) main::$17) ← (number) 0
(word*) main::$21 ← (word*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY
*((word*) main::$21 + (byte~) main::$17) ← (number) 0
(byte*) main::$22 ← (byte*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID
*((byte*) main::$22 + (byte~) main::$17) ← (number) 0
(byte*) main::$23 ← (byte*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR
*((byte*) main::$23 + (byte~) main::$17) ← (number) 0
(byte*) main::$24 ← (byte*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL
*((byte*) main::$24 + (byte~) main::$17) ← (number) 0
(byte*) main::$25 ← (byte*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
*((byte*) main::$25 + (byte~) main::$17) ← (const byte) STATUS_FREE
(byte**) main::$26 ← (byte**)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR
*((byte**) main::$26 + (byte~) main::$17) ← ((byte*)) (number) 0
(byte) main::i#1 ← (byte) main::i#2 + rangenext(0,main::$7)
(bool~) main::$8 ← (byte) main::i#1 != rangelast(0,main::$7)
if((bool~) main::$8) goto main::@7
@ -622,8 +622,8 @@ main::@11: scope:[main] from main::@20 main::@21
*((byte*~) main::$4) ← (byte) '.'
to:main::@15
main::@15: scope:[main] from main::@11 main::@15
(byte*~) main::$15 ← (byte*) COLS#0 + (number) $3e7
*((byte*~) main::$15) ← ++ *((byte*~) main::$15)
(byte*~) main::$16 ← (byte*) COLS#0 + (number) $3e7
*((byte*~) main::$16) ← ++ *((byte*~) main::$16)
if(true) goto main::@15
to:main::@return
main::@return: scope:[main] from main::@15
@ -1974,18 +1974,18 @@ interrupt(HARDWARE_ALL)(void()) irqTop()
(void()) main()
(bool~) main::$10
(bool~) main::$11
(byte*~) main::$15
(byte~) main::$16
(word*) main::$17
(byte*~) main::$16
(byte~) main::$17
(word*) main::$18
(word*) main::$19
(void()*~) main::$2
(word*) main::$20
(byte*) main::$21
(word*) main::$21
(byte*) main::$22
(byte*) main::$23
(byte*) main::$24
(byte**) main::$25
(byte*) main::$25
(byte**) main::$26
(byte*~) main::$4
(byte*~) main::$5
(bool~) main::$6
@ -2384,15 +2384,15 @@ Adding number conversion cast (unumber) $ff in (byte) NOT_FOUND#0 ← (number) $
Adding number conversion cast (unumber) $3e8 in (byte*~) main::$5 ← (byte*) SCREEN#0 + (number) $3e8
Adding number conversion cast (unumber) 1 in (number~) main::$7 ← (byte) NUM_PROCESSING#0 - (number) 1
Adding number conversion cast (unumber) main::$7 in (number~) main::$7 ← (byte) NUM_PROCESSING#0 - (unumber)(number) 1
Adding number conversion cast (unumber) 0 in *((word*) main::$17 + (byte~) main::$16) ← (number) 0
Adding number conversion cast (unumber) 0 in *((word*) main::$18 + (byte~) main::$16) ← (number) 0
Adding number conversion cast (unumber) 0 in *((word*) main::$19 + (byte~) main::$16) ← (number) 0
Adding number conversion cast (unumber) 0 in *((word*) main::$20 + (byte~) main::$16) ← (number) 0
Adding number conversion cast (unumber) 0 in *((byte*) main::$21 + (byte~) main::$16) ← (number) 0
Adding number conversion cast (unumber) 0 in *((byte*) main::$22 + (byte~) main::$16) ← (number) 0
Adding number conversion cast (unumber) 0 in *((byte*) main::$23 + (byte~) main::$16) ← (number) 0
Adding number conversion cast (unumber) 0 in *((word*) main::$18 + (byte~) main::$17) ← (number) 0
Adding number conversion cast (unumber) 0 in *((word*) main::$19 + (byte~) main::$17) ← (number) 0
Adding number conversion cast (unumber) 0 in *((word*) main::$20 + (byte~) main::$17) ← (number) 0
Adding number conversion cast (unumber) 0 in *((word*) main::$21 + (byte~) main::$17) ← (number) 0
Adding number conversion cast (unumber) 0 in *((byte*) main::$22 + (byte~) main::$17) ← (number) 0
Adding number conversion cast (unumber) 0 in *((byte*) main::$23 + (byte~) main::$17) ← (number) 0
Adding number conversion cast (unumber) 0 in *((byte*) main::$24 + (byte~) main::$17) ← (number) 0
Adding number conversion cast (unumber) $3e7 in (byte*~) main::$4 ← (byte*) SCREEN#0 + (number) $3e7
Adding number conversion cast (unumber) $3e7 in (byte*~) main::$15 ← (byte*) COLS#0 + (number) $3e7
Adding number conversion cast (unumber) $3e7 in (byte*~) main::$16 ← (byte*) COLS#0 + (number) $3e7
Adding number conversion cast (unumber) 0 in (byte) getCharToProcess::closest_x#0 ← (number) 0
Adding number conversion cast (unumber) 0 in (byte) getCharToProcess::closest_y#0 ← (number) 0
Adding number conversion cast (unumber) $28 in (byte*) getCharToProcess::screen_line#1 ← (byte*) getCharToProcess::screen_line#3 + (number) $28
@ -2537,14 +2537,14 @@ Inlining cast (word) malloc::size#1 ← (unumber)(number) $3e8
Inlining cast (byte*) SCREEN_DIST#0 ← (byte*)(void*~) $1
Inlining cast (byte) NUM_PROCESSING#0 ← (unumber)(number) 8
Inlining cast (byte) NOT_FOUND#0 ← (unumber)(number) $ff
Inlining cast *((word*) main::$17 + (byte~) main::$16) ← (unumber)(number) 0
Inlining cast *((word*) main::$18 + (byte~) main::$16) ← (unumber)(number) 0
Inlining cast *((word*) main::$19 + (byte~) main::$16) ← (unumber)(number) 0
Inlining cast *((word*) main::$20 + (byte~) main::$16) ← (unumber)(number) 0
Inlining cast *((byte*) main::$21 + (byte~) main::$16) ← (unumber)(number) 0
Inlining cast *((byte*) main::$22 + (byte~) main::$16) ← (unumber)(number) 0
Inlining cast *((byte*) main::$23 + (byte~) main::$16) ← (unumber)(number) 0
Inlining cast *((byte**) main::$25 + (byte~) main::$16) ← (byte*)(number) 0
Inlining cast *((word*) main::$18 + (byte~) main::$17) ← (unumber)(number) 0
Inlining cast *((word*) main::$19 + (byte~) main::$17) ← (unumber)(number) 0
Inlining cast *((word*) main::$20 + (byte~) main::$17) ← (unumber)(number) 0
Inlining cast *((word*) main::$21 + (byte~) main::$17) ← (unumber)(number) 0
Inlining cast *((byte*) main::$22 + (byte~) main::$17) ← (unumber)(number) 0
Inlining cast *((byte*) main::$23 + (byte~) main::$17) ← (unumber)(number) 0
Inlining cast *((byte*) main::$24 + (byte~) main::$17) ← (unumber)(number) 0
Inlining cast *((byte**) main::$26 + (byte~) main::$17) ← (byte*)(number) 0
Inlining cast (byte) getCharToProcess::closest_x#0 ← (unumber)(number) 0
Inlining cast (byte) getCharToProcess::closest_y#0 ← (unumber)(number) 0
Inlining cast (word~) getCharToProcess::$8 ← (word)(byte) getCharToProcess::closest_y#3
@ -3300,7 +3300,7 @@ Converting *(pointer+n) to pointer[n] [487] *((word*) processChars::$65) ← *((
Converting *(pointer+n) to pointer[n] [487] *((word*) processChars::$65) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) + *((word*) processChars::$64) -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_VY)
Converting *(pointer+n) to pointer[n] [487] *((word*) processChars::$65) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_Y)
Successful SSA optimization Pass2InlineDerefIdx
Simplifying expression containing zero (word*)PROCESSING#0 in [171] (word*) main::$17 ← (word*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X
Simplifying expression containing zero (word*)PROCESSING#0 in [171] (word*) main::$18 ← (word*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X
Simplifying expression containing zero (word*)PROCESSING#0 in [351] (word*) startProcessing::$32 ← (word*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X
Simplifying expression containing zero (word*)processChars::processing#0 in [409] (word*) processChars::$43 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X
Simplifying expression containing zero (word*)processChars::processing#0 in [410] (word) processChars::xpos#0 ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X) >> (byte) 4
@ -3417,7 +3417,7 @@ Constant right-side identified [11] (byte~) atan2_16::$16 ← (const byte) CORDI
Constant right-side identified [57] (byte*~) main::$5 ← (const byte*) SCREEN#0 + (word) $3e8
Constant right-side identified [62] (byte~) main::$7 ← (const byte) NUM_PROCESSING#0 - (byte) 1
Constant right-side identified [98] (byte*~) main::$4 ← (const byte*) SCREEN#0 + (word) $3e7
Constant right-side identified [100] (byte*~) main::$15 ← (const byte*) COLS#0 + (word) $3e7
Constant right-side identified [100] (byte*~) main::$16 ← (const byte*) COLS#0 + (word) $3e7
Constant right-side identified [123] (byte~) startProcessing::$24 ← (const byte) NUM_PROCESSING#0 - (byte) 1
Constant right-side identified [163] (byte*~) startProcessing::$19 ← (const byte*) SPRITE_DATA#0 / (byte) $40
Constant right-side identified [188] (byte~) $2 ← (const byte) BORDER_XPOS_LEFT#0 - (byte) 8
@ -3435,7 +3435,7 @@ Constant (const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 = { fill
Constant (const byte*) main::$5 = SCREEN#0+$3e8
Constant (const byte) main::$7 = NUM_PROCESSING#0-1
Constant (const byte*) main::$4 = SCREEN#0+$3e7
Constant (const byte*) main::$15 = COLS#0+$3e7
Constant (const byte*) main::$16 = COLS#0+$3e7
Constant (const byte) startProcessing::$24 = NUM_PROCESSING#0-1
Constant (const byte*) startProcessing::$19 = SPRITE_DATA#0/$40
Constant (const byte) $2 = BORDER_XPOS_LEFT#0-8
@ -3449,15 +3449,15 @@ Constant (const byte) processChars::$31 = BORDER_YPOS_TOP#0/8
Constant (const byte) initSprites::$0 = NUM_PROCESSING#0*$40
Constant (const byte) setupRasterIrq::$1 = <setupRasterIrq::raster#0
Successful SSA optimization Pass2ConstantIdentification
Constant value identified (word*)PROCESSING#0 in [65] (word*) main::$17 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0
Constant value identified (word*)PROCESSING#0 in [67] (word*) main::$18 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
Constant value identified (word*)PROCESSING#0 in [69] (word*) main::$19 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX
Constant value identified (word*)PROCESSING#0 in [71] (word*) main::$20 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY
Constant value identified (byte*)PROCESSING#0 in [73] (byte*) main::$21 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID
Constant value identified (byte*)PROCESSING#0 in [75] (byte*) main::$22 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR
Constant value identified (byte*)PROCESSING#0 in [77] (byte*) main::$23 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL
Constant value identified (byte*)PROCESSING#0 in [79] (byte*) main::$24 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Constant value identified (byte**)PROCESSING#0 in [81] (byte**) main::$25 ← (byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR
Constant value identified (word*)PROCESSING#0 in [65] (word*) main::$18 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0
Constant value identified (word*)PROCESSING#0 in [67] (word*) main::$19 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
Constant value identified (word*)PROCESSING#0 in [69] (word*) main::$20 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX
Constant value identified (word*)PROCESSING#0 in [71] (word*) main::$21 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY
Constant value identified (byte*)PROCESSING#0 in [73] (byte*) main::$22 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID
Constant value identified (byte*)PROCESSING#0 in [75] (byte*) main::$23 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR
Constant value identified (byte*)PROCESSING#0 in [77] (byte*) main::$24 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL
Constant value identified (byte*)PROCESSING#0 in [79] (byte*) main::$25 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Constant value identified (byte**)PROCESSING#0 in [81] (byte**) main::$26 ← (byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR
Constant value identified (byte*)PROCESSING#0 in [126] (byte*) startProcessing::$41 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Constant value identified (byte)startProcessing::$19 in [164] (byte~) startProcessing::$20 ← (byte)(const byte*) startProcessing::$19
Constant value identified (word*)PROCESSING#0 in [169] (word*) startProcessing::$32 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0
@ -3520,14 +3520,14 @@ Alias (byte*) main::dst#0 = (byte*) main::dst#5
Successful SSA optimization Pass2AliasElimination
Identical Phi Values (byte*) main::src#5 (const byte*) main::src#0
Successful SSA optimization Pass2IdenticalPhiElimination
Constant right-side identified [65] (word*) main::$18 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
Constant right-side identified [67] (word*) main::$19 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX
Constant right-side identified [69] (word*) main::$20 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY
Constant right-side identified [71] (byte*) main::$21 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID
Constant right-side identified [73] (byte*) main::$22 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR
Constant right-side identified [75] (byte*) main::$23 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL
Constant right-side identified [77] (byte*) main::$24 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Constant right-side identified [79] (byte**) main::$25 ← (byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR
Constant right-side identified [65] (word*) main::$19 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
Constant right-side identified [67] (word*) main::$20 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX
Constant right-side identified [69] (word*) main::$21 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY
Constant right-side identified [71] (byte*) main::$22 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID
Constant right-side identified [73] (byte*) main::$23 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR
Constant right-side identified [75] (byte*) main::$24 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL
Constant right-side identified [77] (byte*) main::$25 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Constant right-side identified [79] (byte**) main::$26 ← (byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR
Constant right-side identified [121] (byte*) startProcessing::$41 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Constant right-side identified [165] (word*) startProcessing::$33 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
Constant right-side identified [167] (word*) startProcessing::$34 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX
@ -3540,15 +3540,15 @@ Constant right-side identified [179] (byte**) startProcessing::$40 ← (byte**)(
Constant right-side identified [186] (word) YPOS_BOTTOMMOST#0 ← (const word) $10 << (byte) 4
Constant right-side identified [264] (byte*~) initSprites::$1 ← (const byte*) SPRITE_DATA#0 + (const byte) initSprites::$0
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const word*) main::$17 = (word*)PROCESSING#0
Constant (const word*) main::$18 = (word*)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_Y
Constant (const word*) main::$19 = (word*)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_VX
Constant (const word*) main::$20 = (word*)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_VY
Constant (const byte*) main::$21 = (byte*)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_ID
Constant (const byte*) main::$22 = (byte*)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_PTR
Constant (const byte*) main::$23 = (byte*)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_COL
Constant (const byte*) main::$24 = (byte*)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Constant (const byte**) main::$25 = (byte**)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR
Constant (const word*) main::$18 = (word*)PROCESSING#0
Constant (const word*) main::$19 = (word*)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_Y
Constant (const word*) main::$20 = (word*)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_VX
Constant (const word*) main::$21 = (word*)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_VY
Constant (const byte*) main::$22 = (byte*)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_ID
Constant (const byte*) main::$23 = (byte*)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_PTR
Constant (const byte*) main::$24 = (byte*)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_COL
Constant (const byte*) main::$25 = (byte*)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Constant (const byte**) main::$26 = (byte**)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR
Constant (const byte*) startProcessing::$41 = (byte*)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Constant (const byte) startProcessing::$20 = (byte)startProcessing::$19
Constant (const word*) startProcessing::$32 = (word*)PROCESSING#0
@ -3593,7 +3593,7 @@ Successful SSA optimization Pass2NopCastInlining
Rewriting division to use shift [14] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 / (byte) 2
Rewriting multiplication to use shift [28] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 * (const byte) SIZEOF_WORD
Rewriting multiplication to use shift [32] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 * (const byte) SIZEOF_WORD
Rewriting multiplication to use shift and addition[60] (byte~) main::$16 ← (byte) main::i#2 * (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE
Rewriting multiplication to use shift and addition[60] (byte~) main::$17 ← (byte) main::i#2 * (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE
Rewriting multiplication to use shift and addition[103] (word~) getCharToProcess::$9 ← (word~) getCharToProcess::$8 * (byte) $28
Rewriting multiplication to use shift and addition[109] (byte~) startProcessing::$30 ← (byte) startProcessing::i#2 * (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE
Rewriting multiplication to use shift and addition[116] (word~) startProcessing::$1 ← (word~) startProcessing::$0 * (byte) $28
@ -3637,17 +3637,16 @@ Constant inlined processChars::$31 = (const byte) BORDER_YPOS_TOP#0/(byte) 8
Constant inlined startProcessing::$19 = (const byte*) SPRITE_DATA#0/(byte) $40
Constant inlined init_angle_screen::y#0 = (byte) 0
Constant inlined main::src#0 = (const byte*) SCREEN#0
Constant inlined main::$15 = (const byte*) COLS#0+(word) $3e7
Constant inlined atan2_16::angle#0 = (byte) 0
Constant inlined $2 = (const byte) BORDER_XPOS_LEFT#0-(byte) 8
Constant inlined $3 = (word)(const byte) BORDER_XPOS_LEFT#0-(byte) 8
Constant inlined getCharToProcess::y#0 = (byte) 0
Constant inlined setupRasterIrq::raster#0 = (const byte) RASTER_IRQ_TOP#0
Constant inlined $7 = (const byte) BORDER_YPOS_TOP#0-(byte) 8
Constant inlined main::$16 = (const byte*) COLS#0+(word) $3e7
Constant inlined $8 = (word)(const byte) BORDER_YPOS_TOP#0-(byte) 8
Constant inlined main::$17 = (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0
Constant inlined main::$18 = (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
Constant inlined main::$19 = (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX
Constant inlined main::$18 = (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0
Constant inlined main::$19 = (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
Constant inlined processChars::numActive#0 = (byte) 0
Constant inlined getCharToProcess::closest_x#0 = (byte) 0
Constant inlined atan2_16::$16 = (const byte) CORDIC_ITERATIONS_16#0-(byte) 1
@ -3681,16 +3680,17 @@ Constant inlined getCharToProcess::closest_y#0 = (byte) 0
Constant inlined main::i#0 = (byte) 0
Constant inlined startProcessing::$33 = (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
Constant inlined startProcessing::$32 = (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0
Constant inlined main::$23 = (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL
Constant inlined main::$23 = (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR
Constant inlined atan2_16::i#0 = (byte) 0
Constant inlined main::$24 = (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Constant inlined main::$25 = (byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR
Constant inlined main::$24 = (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL
Constant inlined main::$25 = (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Constant inlined main::$26 = (byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR
Constant inlined processChars::$27 = (const byte) BORDER_XPOS_LEFT#0/(byte) 8
Constant inlined malloc::size#1 = (word) $3e8
Constant inlined main::$20 = (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY
Constant inlined main::$20 = (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX
Constant inlined malloc::size#0 = (word) $3e8
Constant inlined main::$21 = (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID
Constant inlined main::$22 = (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR
Constant inlined main::$21 = (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY
Constant inlined main::$22 = (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID
Constant inlined setupRasterIrq::$1 = <(const byte) RASTER_IRQ_TOP#0
Constant inlined startProcessing::i#0 = (byte) 0
Constant inlined ProcessingSprite::$0::STATUS_PROCESSING = (byte) 2
@ -3700,7 +3700,7 @@ Constant inlined main::$4 = (const byte*) SCREEN#0+(word) $3e7
Constant inlined startProcessing::$41 = (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Constant inlined main::$7 = (const byte) NUM_PROCESSING#0-(byte) 1
Successful SSA optimization Pass2ConstantInlining
Alias (byte~) main::$16 = (byte) main::$30
Alias (byte~) main::$17 = (byte) main::$31
Alias (word~) getCharToProcess::$9 = (word) getCharToProcess::$14
Alias (byte~) startProcessing::$30 = (byte) startProcessing::$46
Alias (word~) startProcessing::$1 = (word) startProcessing::$49
@ -4003,20 +4003,20 @@ main::@1: scope:[main] from main::@2
to:main::@3
main::@3: scope:[main] from main::@1 main::@3
[17] (byte) main::i#2 ← phi( main::@1/(byte) 0 main::@3/(byte) main::i#1 )
[18] (byte) main::$26 ← (byte) main::i#2 << (byte) 1
[19] (byte) main::$27 ← (byte) main::$26 + (byte) main::i#2
[20] (byte) main::$28 ← (byte) main::$27 << (byte) 1
[21] (byte) main::$29 ← (byte) main::$28 + (byte) main::i#2
[22] (byte~) main::$16 ← (byte) main::$29 << (byte) 1
[23] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) main::$16) ← (byte) 0
[24] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$16) ← (byte) 0
[25] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$16) ← (byte) 0
[26] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$16) ← (byte) 0
[27] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$16) ← (byte) 0
[28] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$16) ← (byte) 0
[29] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) main::$16) ← (byte) 0
[30] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$16) ← (const byte) STATUS_FREE
[31] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$16) ← (byte*) 0
[18] (byte) main::$27 ← (byte) main::i#2 << (byte) 1
[19] (byte) main::$28 ← (byte) main::$27 + (byte) main::i#2
[20] (byte) main::$29 ← (byte) main::$28 << (byte) 1
[21] (byte) main::$30 ← (byte) main::$29 + (byte) main::i#2
[22] (byte~) main::$17 ← (byte) main::$30 << (byte) 1
[23] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) main::$17) ← (byte) 0
[24] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$17) ← (byte) 0
[25] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$17) ← (byte) 0
[26] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$17) ← (byte) 0
[27] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$17) ← (byte) 0
[28] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$17) ← (byte) 0
[29] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) main::$17) ← (byte) 0
[30] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$17) ← (const byte) STATUS_FREE
[31] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$17) ← (byte*) 0
[32] (byte) main::i#1 ← ++ (byte) main::i#2
[33] if((byte) main::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto main::@3
to:main::@4
@ -4736,11 +4736,11 @@ interrupt(HARDWARE_ALL)(void()) irqTop()
(byte) irqTop::i
(byte) irqTop::i1
(void()) main()
(byte~) main::$16 12.222222222222221
(byte) main::$26 22.0
(byte~) main::$17 12.222222222222221
(byte) main::$27 22.0
(byte) main::$28 22.0
(byte) main::$29 22.0
(byte) main::$30 22.0
(struct ProcessingChar~) main::$9
(byte) main::center_dist
(byte) main::center_dist#0 22.0
@ -4910,11 +4910,11 @@ Initial phi equivalence classes
Added variable SCREEN_COPY#0 to zero page equivalence class [ SCREEN_COPY#0 ]
Added variable SCREEN_DIST#0 to zero page equivalence class [ SCREEN_DIST#0 ]
Added variable init_angle_screen::screen#0 to zero page equivalence class [ init_angle_screen::screen#0 ]
Added variable main::$26 to zero page equivalence class [ main::$26 ]
Added variable main::$27 to zero page equivalence class [ main::$27 ]
Added variable main::$28 to zero page equivalence class [ main::$28 ]
Added variable main::$29 to zero page equivalence class [ main::$29 ]
Added variable main::$16 to zero page equivalence class [ main::$16 ]
Added variable main::$30 to zero page equivalence class [ main::$30 ]
Added variable main::$17 to zero page equivalence class [ main::$17 ]
Added variable getCharToProcess::return_x#0 to zero page equivalence class [ getCharToProcess::return_x#0 ]
Added variable getCharToProcess::return_y#0 to zero page equivalence class [ getCharToProcess::return_y#0 ]
Added variable getCharToProcess::return_dist#0 to zero page equivalence class [ getCharToProcess::return_dist#0 ]
@ -5039,11 +5039,11 @@ Complete equivalence classes
[ SCREEN_COPY#0 ]
[ SCREEN_DIST#0 ]
[ init_angle_screen::screen#0 ]
[ main::$26 ]
[ main::$27 ]
[ main::$28 ]
[ main::$29 ]
[ main::$16 ]
[ main::$30 ]
[ main::$17 ]
[ getCharToProcess::return_x#0 ]
[ getCharToProcess::return_y#0 ]
[ getCharToProcess::return_dist#0 ]
@ -5167,11 +5167,11 @@ Allocated zp ZP_BYTE:51 [ processChars::numActive#10 processChars::numActive#3 p
Allocated zp ZP_WORD:52 [ SCREEN_COPY#0 ]
Allocated zp ZP_WORD:54 [ SCREEN_DIST#0 ]
Allocated zp ZP_WORD:56 [ init_angle_screen::screen#0 ]
Allocated zp ZP_BYTE:58 [ main::$26 ]
Allocated zp ZP_BYTE:59 [ main::$27 ]
Allocated zp ZP_BYTE:60 [ main::$28 ]
Allocated zp ZP_BYTE:61 [ main::$29 ]
Allocated zp ZP_BYTE:62 [ main::$16 ]
Allocated zp ZP_BYTE:58 [ main::$27 ]
Allocated zp ZP_BYTE:59 [ main::$28 ]
Allocated zp ZP_BYTE:60 [ main::$29 ]
Allocated zp ZP_BYTE:61 [ main::$30 ]
Allocated zp ZP_BYTE:62 [ main::$17 ]
Allocated zp ZP_BYTE:63 [ getCharToProcess::return_x#0 ]
Allocated zp ZP_BYTE:64 [ getCharToProcess::return_y#0 ]
Allocated zp ZP_BYTE:65 [ getCharToProcess::return_dist#0 ]
@ -5395,17 +5395,17 @@ bend_from_b2:
bend:
// main
main: {
.label _16 = $3e
.label _17 = $3e
.label dst = 4
.label src = 2
.label i = 6
.label center_x = $42
.label center_y = $43
.label center_dist = $44
.label _26 = $3a
.label _27 = $3b
.label _28 = $3c
.label _29 = $3d
.label _27 = $3a
.label _28 = $3b
.label _29 = $3c
.label _30 = $3d
// [9] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 -- pbuz1=pbuz2
lda.z SCREEN_DIST
sta.z init_angle_screen.screen
@ -5476,70 +5476,70 @@ main: {
jmp b3
// main::@3
b3:
// [18] (byte) main::$26 ← (byte) main::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1
// [18] (byte) main::$27 ← (byte) main::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1
lda.z i
asl
sta.z _26
// [19] (byte) main::$27 ← (byte) main::$26 + (byte) main::i#2 -- vbuz1=vbuz2_plus_vbuz3
lda.z _26
clc
adc.z i
sta.z _27
// [20] (byte) main::$28 ← (byte) main::$27 << (byte) 1 -- vbuz1=vbuz2_rol_1
// [19] (byte) main::$28 ← (byte) main::$27 + (byte) main::i#2 -- vbuz1=vbuz2_plus_vbuz3
lda.z _27
asl
sta.z _28
// [21] (byte) main::$29 ← (byte) main::$28 + (byte) main::i#2 -- vbuz1=vbuz2_plus_vbuz3
lda.z _28
clc
adc.z i
sta.z _29
// [22] (byte~) main::$16 ← (byte) main::$29 << (byte) 1 -- vbuz1=vbuz2_rol_1
lda.z _29
sta.z _28
// [20] (byte) main::$29 ← (byte) main::$28 << (byte) 1 -- vbuz1=vbuz2_rol_1
lda.z _28
asl
sta.z _16
// [23] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuz1=vbuc2
lda.z _16
sta.z _29
// [21] (byte) main::$30 ← (byte) main::$29 + (byte) main::i#2 -- vbuz1=vbuz2_plus_vbuz3
lda.z _29
clc
adc.z i
sta.z _30
// [22] (byte~) main::$17 ← (byte) main::$30 << (byte) 1 -- vbuz1=vbuz2_rol_1
lda.z _30
asl
sta.z _17
// [23] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) main::$17) ← (byte) 0 -- pwuc1_derefidx_vbuz1=vbuc2
lda.z _17
ldx #0
tay
txa
sta PROCESSING,y
// [24] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuz1=vbuc2
lda.z _16
// [24] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$17) ← (byte) 0 -- pwuc1_derefidx_vbuz1=vbuc2
lda.z _17
ldx #0
tay
txa
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y,y
// [25] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuz1=vbuc2
lda.z _16
// [25] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$17) ← (byte) 0 -- pwuc1_derefidx_vbuz1=vbuc2
lda.z _17
ldx #0
tay
txa
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX,y
// [26] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuz1=vbuc2
lda.z _16
// [26] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$17) ← (byte) 0 -- pwuc1_derefidx_vbuz1=vbuc2
lda.z _17
ldx #0
tay
txa
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY,y
// [27] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$16) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2
// [27] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$17) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2
lda #0
ldy.z _16
ldy.z _17
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_ID,y
// [28] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$16) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2
// [28] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$17) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2
lda #0
ldy.z _16
ldy.z _17
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_PTR,y
// [29] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) main::$16) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2
// [29] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) main::$17) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2
lda #0
ldy.z _16
ldy.z _17
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_COL,y
// [30] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$16) ← (const byte) STATUS_FREE -- pbuc1_derefidx_vbuz1=vbuc2
// [30] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$17) ← (const byte) STATUS_FREE -- pbuc1_derefidx_vbuz1=vbuc2
lda #STATUS_FREE
ldy.z _16
ldy.z _17
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS,y
// [31] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$16) ← (byte*) 0 -- pptc1_derefidx_vbuz1=pbuc2
ldy.z _16
// [31] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$17) ← (byte*) 0 -- pptc1_derefidx_vbuz1=pbuc2
ldy.z _17
lda #<0
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR,y
lda #>0
@ -7532,22 +7532,22 @@ Statement [9] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_DIST
Statement [11] (byte*) main::dst#0 ← (byte*)(void*) SCREEN_COPY#0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::dst#0 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::dst#0 ] ) always clobbers reg byte a
Statement [13] *((byte*) main::dst#4) ← *((byte*) main::src#4) [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#4 main::dst#4 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#4 main::dst#4 ] ) always clobbers reg byte a reg byte y
Statement [16] if((byte*) main::src#1!=(const byte*) SCREEN#0+(word) $3e8) goto main::@2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#1 main::dst#1 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#1 main::dst#1 ] ) always clobbers reg byte a
Statement [18] (byte) main::$26 ← (byte) main::i#2 << (byte) 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$26 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$26 ] ) always clobbers reg byte a
Statement [18] (byte) main::$27 ← (byte) main::i#2 << (byte) 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$27 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$27 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ main::i#2 main::i#1 ]
Statement [19] (byte) main::$27 ← (byte) main::$26 + (byte) main::i#2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$27 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$27 ] ) always clobbers reg byte a
Statement [20] (byte) main::$28 ← (byte) main::$27 << (byte) 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$28 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$28 ] ) always clobbers reg byte a
Statement [21] (byte) main::$29 ← (byte) main::$28 + (byte) main::i#2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$29 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$29 ] ) always clobbers reg byte a
Statement [22] (byte~) main::$16 ← (byte) main::$29 << (byte) 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a
Statement [23] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:62 [ main::$16 ]
Statement [24] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a
Statement [25] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a
Statement [26] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a
Statement [27] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a
Statement [28] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a
Statement [29] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a
Statement [30] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$16) ← (const byte) STATUS_FREE [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a
Statement [31] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$16) ← (byte*) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 ] ) always clobbers reg byte a
Statement [19] (byte) main::$28 ← (byte) main::$27 + (byte) main::i#2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$28 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$28 ] ) always clobbers reg byte a
Statement [20] (byte) main::$29 ← (byte) main::$28 << (byte) 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$29 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$29 ] ) always clobbers reg byte a
Statement [21] (byte) main::$30 ← (byte) main::$29 + (byte) main::i#2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$30 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$30 ] ) always clobbers reg byte a
Statement [22] (byte~) main::$17 ← (byte) main::$30 << (byte) 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$17 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$17 ] ) always clobbers reg byte a
Statement [23] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) main::$17) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$17 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$17 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:62 [ main::$17 ]
Statement [24] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$17) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$17 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$17 ] ) always clobbers reg byte a
Statement [25] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$17) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$17 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$17 ] ) always clobbers reg byte a
Statement [26] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$17) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$17 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$17 ] ) always clobbers reg byte a
Statement [27] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$17) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$17 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$17 ] ) always clobbers reg byte a
Statement [28] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$17) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$17 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$17 ] ) always clobbers reg byte a
Statement [29] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) main::$17) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$17 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$17 ] ) always clobbers reg byte a
Statement [30] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$17) ← (const byte) STATUS_FREE [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$17 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$17 ] ) always clobbers reg byte a
Statement [31] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$17) ← (byte*) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 ] ) always clobbers reg byte a
Statement [47] *((const byte*) SCREEN#0+(word) $3e7) ← (byte) '.' [ ] ( main:7 [ ] ) always clobbers reg byte a
Statement [55] (byte) startProcessing::$42 ← (byte) startProcessing::i#2 << (byte) 1 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$42 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$42 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:69 [ startProcessing::center_x#0 ]
@ -7772,20 +7772,20 @@ Statement [9] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_DIST
Statement [11] (byte*) main::dst#0 ← (byte*)(void*) SCREEN_COPY#0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::dst#0 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::dst#0 ] ) always clobbers reg byte a
Statement [13] *((byte*) main::dst#4) ← *((byte*) main::src#4) [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#4 main::dst#4 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#4 main::dst#4 ] ) always clobbers reg byte a reg byte y
Statement [16] if((byte*) main::src#1!=(const byte*) SCREEN#0+(word) $3e8) goto main::@2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#1 main::dst#1 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#1 main::dst#1 ] ) always clobbers reg byte a
Statement [18] (byte) main::$26 ← (byte) main::i#2 << (byte) 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$26 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$26 ] ) always clobbers reg byte a
Statement [19] (byte) main::$27 ← (byte) main::$26 + (byte) main::i#2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$27 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$27 ] ) always clobbers reg byte a
Statement [20] (byte) main::$28 ← (byte) main::$27 << (byte) 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$28 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$28 ] ) always clobbers reg byte a
Statement [21] (byte) main::$29 ← (byte) main::$28 + (byte) main::i#2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$29 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$29 ] ) always clobbers reg byte a
Statement [22] (byte~) main::$16 ← (byte) main::$29 << (byte) 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a
Statement [23] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a
Statement [24] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a
Statement [25] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a
Statement [26] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a
Statement [27] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a
Statement [28] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a
Statement [29] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a
Statement [30] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$16) ← (const byte) STATUS_FREE [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a
Statement [31] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$16) ← (byte*) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 ] ) always clobbers reg byte a
Statement [18] (byte) main::$27 ← (byte) main::i#2 << (byte) 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$27 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$27 ] ) always clobbers reg byte a
Statement [19] (byte) main::$28 ← (byte) main::$27 + (byte) main::i#2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$28 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$28 ] ) always clobbers reg byte a
Statement [20] (byte) main::$29 ← (byte) main::$28 << (byte) 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$29 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$29 ] ) always clobbers reg byte a
Statement [21] (byte) main::$30 ← (byte) main::$29 + (byte) main::i#2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$30 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$30 ] ) always clobbers reg byte a
Statement [22] (byte~) main::$17 ← (byte) main::$30 << (byte) 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$17 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$17 ] ) always clobbers reg byte a
Statement [23] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) main::$17) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$17 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$17 ] ) always clobbers reg byte a
Statement [24] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$17) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$17 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$17 ] ) always clobbers reg byte a
Statement [25] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$17) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$17 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$17 ] ) always clobbers reg byte a
Statement [26] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$17) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$17 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$17 ] ) always clobbers reg byte a
Statement [27] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$17) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$17 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$17 ] ) always clobbers reg byte a
Statement [28] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$17) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$17 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$17 ] ) always clobbers reg byte a
Statement [29] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) main::$17) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$17 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$17 ] ) always clobbers reg byte a
Statement [30] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$17) ← (const byte) STATUS_FREE [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$17 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$17 ] ) always clobbers reg byte a
Statement [31] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$17) ← (byte*) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 ] ) always clobbers reg byte a
Statement [47] *((const byte*) SCREEN#0+(word) $3e7) ← (byte) '.' [ ] ( main:7 [ ] ) always clobbers reg byte a
Statement [55] (byte) startProcessing::$42 ← (byte) startProcessing::i#2 << (byte) 1 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$42 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$42 ] ) always clobbers reg byte a
Statement [56] (byte) startProcessing::$43 ← (byte) startProcessing::$42 + (byte) startProcessing::i#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$43 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$43 ] ) always clobbers reg byte a
@ -7999,11 +7999,11 @@ Potential registers zp ZP_BYTE:51 [ processChars::numActive#10 processChars::num
Potential registers zp ZP_WORD:52 [ SCREEN_COPY#0 ] : zp ZP_WORD:52 ,
Potential registers zp ZP_WORD:54 [ SCREEN_DIST#0 ] : zp ZP_WORD:54 ,
Potential registers zp ZP_WORD:56 [ init_angle_screen::screen#0 ] : zp ZP_WORD:56 ,
Potential registers zp ZP_BYTE:58 [ main::$26 ] : zp ZP_BYTE:58 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:59 [ main::$27 ] : zp ZP_BYTE:59 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:60 [ main::$28 ] : zp ZP_BYTE:60 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:61 [ main::$29 ] : zp ZP_BYTE:61 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:62 [ main::$16 ] : zp ZP_BYTE:62 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:58 [ main::$27 ] : zp ZP_BYTE:58 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:59 [ main::$28 ] : zp ZP_BYTE:59 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:60 [ main::$29 ] : zp ZP_BYTE:60 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:61 [ main::$30 ] : zp ZP_BYTE:61 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:62 [ main::$17 ] : zp ZP_BYTE:62 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:63 [ getCharToProcess::return_x#0 ] : zp ZP_BYTE:63 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:64 [ getCharToProcess::return_y#0 ] : zp ZP_BYTE:64 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:65 [ getCharToProcess::return_dist#0 ] : zp ZP_BYTE:65 , reg byte a , reg byte x , reg byte y ,
@ -8097,7 +8097,7 @@ Uplift Scope [getCharToProcess] 4,983.53: zp ZP_BYTE:23 [ getCharToProcess::retu
Uplift Scope [startProcessing] 2,589.5: zp ZP_BYTE:8 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ] 2,002: zp ZP_BYTE:71 [ startProcessing::$42 ] 2,002: zp ZP_BYTE:72 [ startProcessing::$43 ] 2,002: zp ZP_BYTE:73 [ startProcessing::$44 ] 2,002: zp ZP_BYTE:74 [ startProcessing::$45 ] 2,002: zp ZP_BYTE:75 [ startProcessing::$30 ] 222.2: zp ZP_BYTE:7 [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ] 203.57: zp ZP_WORD:11 [ startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 ] 202: zp ZP_BYTE:13 [ startProcessing::i1#2 startProcessing::i1#1 ] 170.33: zp ZP_WORD:9 [ startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 ] 4: zp ZP_WORD:78 [ startProcessing::$47 ] 4: zp ZP_WORD:80 [ startProcessing::$48 ] 4: zp ZP_WORD:82 [ startProcessing::$1 ] 4: zp ZP_WORD:86 [ startProcessing::colPtr#0 ] 4: zp ZP_WORD:91 [ startProcessing::$5 ] 4: zp ZP_WORD:93 [ startProcessing::$6 ] 4: zp ZP_WORD:96 [ startProcessing::$8 ] 4: zp ZP_WORD:98 [ startProcessing::$9 ] 4: zp ZP_WORD:100 [ startProcessing::$11 ] 4: zp ZP_WORD:102 [ startProcessing::$12 ] 4: zp ZP_WORD:104 [ startProcessing::$13 ] 4: zp ZP_WORD:108 [ startProcessing::$15 ] 4: zp ZP_WORD:110 [ startProcessing::$16 ] 4: zp ZP_WORD:112 [ startProcessing::$17 ] 4: zp ZP_BYTE:120 [ startProcessing::$50 ] 4: zp ZP_BYTE:121 [ startProcessing::$51 ] 4: zp ZP_BYTE:122 [ startProcessing::$52 ] 4: zp ZP_BYTE:123 [ startProcessing::$53 ] 3: zp ZP_WORD:76 [ startProcessing::$0 ] 2.22: zp ZP_BYTE:124 [ startProcessing::$31 ] 2: zp ZP_WORD:84 [ startProcessing::offset#0 ] 2: zp ZP_BYTE:95 [ startProcessing::ch#0 ] 2: zp ZP_BYTE:117 [ startProcessing::$22 ] 0.5: zp ZP_WORD:118 [ startProcessing::$23 ] 0.4: zp ZP_WORD:114 [ startProcessing::spriteY#0 ] 0.31: zp ZP_BYTE:69 [ startProcessing::center_x#0 ] 0.31: zp ZP_WORD:106 [ startProcessing::spriteX#0 ] 0.31: zp ZP_BYTE:116 [ startProcessing::spritePtr#0 ] 0.24: zp ZP_BYTE:70 [ startProcessing::center_y#0 ] 0.14: zp ZP_WORD:89 [ startProcessing::screenPtr#0 ] 0.1: zp ZP_BYTE:88 [ startProcessing::spriteCol#0 ]
Uplift Scope [init_angle_screen] 202: zp ZP_BYTE:135 [ init_angle_screen::$3 ] 202: zp ZP_BYTE:136 [ init_angle_screen::$4 ] 202: zp ZP_BYTE:139 [ init_angle_screen::$7 ] 202: zp ZP_WORD:148 [ init_angle_screen::angle_w#0 ] 202: zp ZP_WORD:150 [ init_angle_screen::$11 ] 202: zp ZP_BYTE:153 [ init_angle_screen::$13 ] 202: zp ZP_BYTE:154 [ init_angle_screen::$14 ] 202: zp ZP_BYTE:155 [ init_angle_screen::$15 ] 126.25: zp ZP_BYTE:32 [ init_angle_screen::x#5 init_angle_screen::x#1 ] 120.24: zp ZP_BYTE:33 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] 84.17: zp ZP_BYTE:152 [ init_angle_screen::ang_w#0 ] 50.5: zp ZP_WORD:140 [ init_angle_screen::yw#0 ] 33.67: zp ZP_WORD:137 [ init_angle_screen::xw#0 ] 21.23: zp ZP_BYTE:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ] 20.37: zp ZP_WORD:30 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] 16.92: zp ZP_WORD:28 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] 3: zp ZP_WORD:56 [ init_angle_screen::screen#0 ]
Uplift Scope [processChars] 33.73: zp ZP_BYTE:51 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ] 22: zp ZP_BYTE:160 [ processChars::$67 ] 22: zp ZP_BYTE:161 [ processChars::$68 ] 22: zp ZP_BYTE:162 [ processChars::$69 ] 22: zp ZP_BYTE:163 [ processChars::$70 ] 22: zp ZP_BYTE:164 [ processChars::$37 ] 22: zp ZP_BYTE:170 [ processChars::$11 ] 22: zp ZP_BYTE:171 [ processChars::$12 ] 22: zp ZP_BYTE:173 [ processChars::$14 ] 22: zp ZP_BYTE:179 [ processChars::$26 ] 22: zp ZP_BYTE:180 [ processChars::xchar#0 ] 22: zp ZP_BYTE:181 [ processChars::$38 ] 22: zp ZP_BYTE:182 [ processChars::$30 ] 22: zp ZP_BYTE:183 [ processChars::ychar#0 ] 22: zp ZP_BYTE:184 [ processChars::$39 ] 22: zp ZP_BYTE:185 [ processChars::$33 ] 17.9: zp ZP_BYTE:50 [ processChars::i#10 processChars::i#1 ] 11: zp ZP_WORD:174 [ processChars::$15 ] 11: zp ZP_WORD:177 [ processChars::$25 ] 6.6: zp ZP_BYTE:172 [ processChars::$17 ] 2.75: zp ZP_BYTE:176 [ processChars::ypos#0 ] 2.2: zp ZP_BYTE:167 [ processChars::bitmask#0 ] 2.06: zp ZP_WORD:168 [ processChars::xpos#0 ] 0.31: zp ZP_WORD:165 [ processChars::processing#0 ]
Uplift Scope [main] 27.5: zp ZP_WORD:2 [ main::src#4 main::src#1 ] 26.67: zp ZP_WORD:4 [ main::dst#4 main::dst#1 main::dst#0 ] 22: zp ZP_BYTE:58 [ main::$26 ] 22: zp ZP_BYTE:59 [ main::$27 ] 22: zp ZP_BYTE:60 [ main::$28 ] 22: zp ZP_BYTE:61 [ main::$29 ] 22: zp ZP_BYTE:68 [ main::center_dist#0 ] 20.17: zp ZP_BYTE:6 [ main::i#2 main::i#1 ] 12.22: zp ZP_BYTE:62 [ main::$16 ] 5.5: zp ZP_BYTE:66 [ main::center_x#0 ] 5.5: zp ZP_BYTE:67 [ main::center_y#0 ]
Uplift Scope [main] 27.5: zp ZP_WORD:2 [ main::src#4 main::src#1 ] 26.67: zp ZP_WORD:4 [ main::dst#4 main::dst#1 main::dst#0 ] 22: zp ZP_BYTE:58 [ main::$27 ] 22: zp ZP_BYTE:59 [ main::$28 ] 22: zp ZP_BYTE:60 [ main::$29 ] 22: zp ZP_BYTE:61 [ main::$30 ] 22: zp ZP_BYTE:68 [ main::center_dist#0 ] 20.17: zp ZP_BYTE:6 [ main::i#2 main::i#1 ] 12.22: zp ZP_BYTE:62 [ main::$17 ] 5.5: zp ZP_BYTE:66 [ main::center_x#0 ] 5.5: zp ZP_BYTE:67 [ main::center_y#0 ]
Uplift Scope [initSprites] 33: zp ZP_WORD:24 [ initSprites::sp#4 initSprites::sp#1 ] 33: zp ZP_BYTE:26 [ initSprites::i#2 initSprites::i#1 ]
Uplift Scope [] 5: zp ZP_WORD:48 [ heap_head#5 heap_head#1 ] 0.03: zp ZP_WORD:54 [ SCREEN_DIST#0 ] 0.03: zp ZP_WORD:52 [ SCREEN_COPY#0 ]
Uplift Scope [malloc] 0.8: zp ZP_WORD:158 [ malloc::mem#0 ]
@ -8115,7 +8115,7 @@ Uplifting [getCharToProcess] best 1267056 combination reg byte x [ getCharToProc
Limited combination testing to 100 combinations of 46656 possible.
Uplifting [init_angle_screen] best 1264856 combination reg byte a [ init_angle_screen::$3 ] reg byte a [ init_angle_screen::$4 ] reg byte a [ init_angle_screen::$7 ] zp ZP_WORD:148 [ init_angle_screen::angle_w#0 ] zp ZP_WORD:150 [ init_angle_screen::$11 ] reg byte a [ init_angle_screen::$13 ] zp ZP_BYTE:154 [ init_angle_screen::$14 ] zp ZP_BYTE:155 [ init_angle_screen::$15 ] zp ZP_BYTE:32 [ init_angle_screen::x#5 init_angle_screen::x#1 ] zp ZP_BYTE:33 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] zp ZP_BYTE:152 [ init_angle_screen::ang_w#0 ] zp ZP_WORD:140 [ init_angle_screen::yw#0 ] zp ZP_WORD:137 [ init_angle_screen::xw#0 ] zp ZP_BYTE:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ] zp ZP_WORD:30 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] zp ZP_WORD:28 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] zp ZP_WORD:56 [ init_angle_screen::screen#0 ]
Limited combination testing to 100 combinations of 65536 possible.
Uplifting [main] best 1264616 combination zp ZP_WORD:2 [ main::src#4 main::src#1 ] zp ZP_WORD:4 [ main::dst#4 main::dst#1 main::dst#0 ] reg byte a [ main::$26 ] reg byte a [ main::$27 ] reg byte a [ main::$28 ] reg byte a [ main::$29 ] zp ZP_BYTE:68 [ main::center_dist#0 ] zp ZP_BYTE:6 [ main::i#2 main::i#1 ] zp ZP_BYTE:62 [ main::$16 ] zp ZP_BYTE:66 [ main::center_x#0 ] zp ZP_BYTE:67 [ main::center_y#0 ]
Uplifting [main] best 1264616 combination zp ZP_WORD:2 [ main::src#4 main::src#1 ] zp ZP_WORD:4 [ main::dst#4 main::dst#1 main::dst#0 ] reg byte a [ main::$27 ] reg byte a [ main::$28 ] reg byte a [ main::$29 ] reg byte a [ main::$30 ] zp ZP_BYTE:68 [ main::center_dist#0 ] zp ZP_BYTE:6 [ main::i#2 main::i#1 ] zp ZP_BYTE:62 [ main::$17 ] zp ZP_BYTE:66 [ main::center_x#0 ] zp ZP_BYTE:67 [ main::center_y#0 ]
Limited combination testing to 100 combinations of 147456 possible.
Uplifting [initSprites] best 1264496 combination zp ZP_WORD:24 [ initSprites::sp#4 initSprites::sp#1 ] reg byte x [ initSprites::i#2 initSprites::i#1 ]
Uplifting [] best 1264496 combination zp ZP_WORD:48 [ heap_head#5 heap_head#1 ] zp ZP_WORD:54 [ SCREEN_DIST#0 ] zp ZP_WORD:52 [ SCREEN_COPY#0 ]
@ -8203,8 +8203,8 @@ Attempting to uplift remaining variables inzp ZP_BYTE:6 [ main::i#2 main::i#1 ]
Uplifting [main] best 1214816 combination zp ZP_BYTE:6 [ main::i#2 main::i#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:50 [ processChars::i#10 processChars::i#1 ]
Uplifting [processChars] best 1214816 combination zp ZP_BYTE:50 [ processChars::i#10 processChars::i#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:62 [ main::$16 ]
Uplifting [main] best 1214656 combination reg byte x [ main::$16 ]
Attempting to uplift remaining variables inzp ZP_BYTE:62 [ main::$17 ]
Uplifting [main] best 1214656 combination reg byte x [ main::$17 ]
Attempting to uplift remaining variables inzp ZP_BYTE:63 [ getCharToProcess::return_x#0 ]
Uplifting [getCharToProcess] best 1214596 combination reg byte y [ getCharToProcess::return_x#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:64 [ getCharToProcess::return_y#0 ]
@ -8524,53 +8524,53 @@ main: {
jmp b3
// main::@3
b3:
// [18] (byte) main::$26 ← (byte) main::i#2 << (byte) 1 -- vbuaa=vbuz1_rol_1
// [18] (byte) main::$27 ← (byte) main::i#2 << (byte) 1 -- vbuaa=vbuz1_rol_1
lda.z i
asl
// [19] (byte) main::$27 ← (byte) main::$26 + (byte) main::i#2 -- vbuaa=vbuaa_plus_vbuz1
// [19] (byte) main::$28 ← (byte) main::$27 + (byte) main::i#2 -- vbuaa=vbuaa_plus_vbuz1
clc
adc.z i
// [20] (byte) main::$28 ← (byte) main::$27 << (byte) 1 -- vbuaa=vbuaa_rol_1
// [20] (byte) main::$29 ← (byte) main::$28 << (byte) 1 -- vbuaa=vbuaa_rol_1
asl
// [21] (byte) main::$29 ← (byte) main::$28 + (byte) main::i#2 -- vbuaa=vbuaa_plus_vbuz1
// [21] (byte) main::$30 ← (byte) main::$29 + (byte) main::i#2 -- vbuaa=vbuaa_plus_vbuz1
clc
adc.z i
// [22] (byte~) main::$16 ← (byte) main::$29 << (byte) 1 -- vbuxx=vbuaa_rol_1
// [22] (byte~) main::$17 ← (byte) main::$30 << (byte) 1 -- vbuxx=vbuaa_rol_1
asl
tax
// [23] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2
// [23] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) main::$17) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2
lda #0
sta PROCESSING,x
lda #0
sta PROCESSING+1,x
// [24] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2
// [24] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$17) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2
lda #0
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y,x
lda #0
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y+1,x
// [25] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2
// [25] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$17) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2
lda #0
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX,x
lda #0
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX+1,x
// [26] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2
// [26] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$17) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2
lda #0
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY,x
lda #0
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY+1,x
// [27] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$16) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2
// [27] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$17) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2
lda #0
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_ID,x
// [28] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$16) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2
// [28] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$17) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2
lda #0
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_PTR,x
// [29] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) main::$16) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2
// [29] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) main::$17) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2
lda #0
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_COL,x
// [30] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$16) ← (const byte) STATUS_FREE -- pbuc1_derefidx_vbuxx=vbuc2
// [30] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$17) ← (const byte) STATUS_FREE -- pbuc1_derefidx_vbuxx=vbuc2
lda #STATUS_FREE
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS,x
// [31] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$16) ← (byte*) 0 -- pptc1_derefidx_vbuxx=pbuc2
// [31] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$17) ← (byte*) 0 -- pptc1_derefidx_vbuxx=pbuc2
lda #<0
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR,x
lda #>0
@ -10970,11 +10970,11 @@ interrupt(HARDWARE_ALL)(void()) irqTop()
(byte) irqTop::i
(byte) irqTop::i1
(void()) main()
(byte~) main::$16 reg byte x 12.222222222222221
(byte) main::$26 reg byte a 22.0
(byte~) main::$17 reg byte x 12.222222222222221
(byte) main::$27 reg byte a 22.0
(byte) main::$28 reg byte a 22.0
(byte) main::$29 reg byte a 22.0
(byte) main::$30 reg byte a 22.0
(struct ProcessingChar~) main::$9
(label) main::@1
(label) main::@10
@ -11160,11 +11160,11 @@ zp ZP_BYTE:5 [ processChars::i#10 processChars::i#1 ]
zp ZP_BYTE:6 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ]
zp ZP_WORD:7 [ SCREEN_COPY#0 ]
zp ZP_WORD:9 [ SCREEN_DIST#0 malloc::mem#0 ]
reg byte a [ main::$26 ]
reg byte a [ main::$27 ]
reg byte a [ main::$28 ]
reg byte a [ main::$29 ]
reg byte x [ main::$16 ]
reg byte a [ main::$30 ]
reg byte x [ main::$17 ]
reg byte y [ getCharToProcess::return_x#0 ]
reg byte a [ getCharToProcess::return_y#0 ]
reg byte x [ getCharToProcess::return_dist#0 ]
@ -11413,43 +11413,43 @@ main: {
// main::@3
b3:
// PROCESSING[i] = { 0, 0, 0, 0, 0, 0, 0, STATUS_FREE, 0}
// [18] (byte) main::$26 ← (byte) main::i#2 << (byte) 1 -- vbuaa=vbuz1_rol_1
// [18] (byte) main::$27 ← (byte) main::i#2 << (byte) 1 -- vbuaa=vbuz1_rol_1
lda.z i
asl
// [19] (byte) main::$27 ← (byte) main::$26 + (byte) main::i#2 -- vbuaa=vbuaa_plus_vbuz1
// [19] (byte) main::$28 ← (byte) main::$27 + (byte) main::i#2 -- vbuaa=vbuaa_plus_vbuz1
clc
adc.z i
// [20] (byte) main::$28 ← (byte) main::$27 << (byte) 1 -- vbuaa=vbuaa_rol_1
// [20] (byte) main::$29 ← (byte) main::$28 << (byte) 1 -- vbuaa=vbuaa_rol_1
asl
// [21] (byte) main::$29 ← (byte) main::$28 + (byte) main::i#2 -- vbuaa=vbuaa_plus_vbuz1
// [21] (byte) main::$30 ← (byte) main::$29 + (byte) main::i#2 -- vbuaa=vbuaa_plus_vbuz1
clc
adc.z i
// [22] (byte~) main::$16 ← (byte) main::$29 << (byte) 1 -- vbuxx=vbuaa_rol_1
// [22] (byte~) main::$17 ← (byte) main::$30 << (byte) 1 -- vbuxx=vbuaa_rol_1
asl
tax
// [23] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2
// [23] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) main::$17) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2
lda #0
sta PROCESSING,x
sta PROCESSING+1,x
// [24] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2
// [24] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$17) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y,x
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y+1,x
// [25] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2
// [25] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$17) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX,x
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX+1,x
// [26] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2
// [26] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$17) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY,x
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY+1,x
// [27] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$16) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2
// [27] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$17) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_ID,x
// [28] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$16) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2
// [28] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$17) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_PTR,x
// [29] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) main::$16) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2
// [29] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) main::$17) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_COL,x
// [30] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$16) ← (const byte) STATUS_FREE -- pbuc1_derefidx_vbuxx=vbuc2
// [30] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$17) ← (const byte) STATUS_FREE -- pbuc1_derefidx_vbuxx=vbuc2
lda #STATUS_FREE
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS,x
// [31] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$16) ← (byte*) 0 -- pptc1_derefidx_vbuxx=pbuc2
// [31] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$17) ← (byte*) 0 -- pptc1_derefidx_vbuxx=pbuc2
lda #<0
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR,x
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR+1,x

View File

@ -342,11 +342,11 @@ interrupt(HARDWARE_ALL)(void()) irqTop()
(byte) irqTop::i
(byte) irqTop::i1
(void()) main()
(byte~) main::$16 reg byte x 12.222222222222221
(byte) main::$26 reg byte a 22.0
(byte~) main::$17 reg byte x 12.222222222222221
(byte) main::$27 reg byte a 22.0
(byte) main::$28 reg byte a 22.0
(byte) main::$29 reg byte a 22.0
(byte) main::$30 reg byte a 22.0
(struct ProcessingChar~) main::$9
(label) main::@1
(label) main::@10
@ -532,11 +532,11 @@ zp ZP_BYTE:5 [ processChars::i#10 processChars::i#1 ]
zp ZP_BYTE:6 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ]
zp ZP_WORD:7 [ SCREEN_COPY#0 ]
zp ZP_WORD:9 [ SCREEN_DIST#0 malloc::mem#0 ]
reg byte a [ main::$26 ]
reg byte a [ main::$27 ]
reg byte a [ main::$28 ]
reg byte a [ main::$29 ]
reg byte x [ main::$16 ]
reg byte a [ main::$30 ]
reg byte x [ main::$17 ]
reg byte y [ getCharToProcess::return_x#0 ]
reg byte a [ getCharToProcess::return_y#0 ]
reg byte x [ getCharToProcess::return_dist#0 ]

View File

@ -1416,8 +1416,8 @@ main::@13: scope:[main] from main::@1 main::@14
main::@14: scope:[main] from main::@13
(byte*) bitmap_screen#20 ← phi( main::@13/(byte*) bitmap_screen#14 )
(byte*) bitmap_gfx#21 ← phi( main::@13/(byte*) bitmap_gfx#14 )
(byte*~) main::$15 ← (byte*) PRINT_SCREEN#0 + (number) $3e7
*((byte*~) main::$15) ← ++ *((byte*~) main::$15)
(byte*~) main::$16 ← (byte*) PRINT_SCREEN#0 + (number) $3e7
*((byte*~) main::$16) ← ++ *((byte*~) main::$16)
to:main::@13
main::@return: scope:[main] from main::@13
(byte*) bitmap_screen#9 ← phi( main::@13/(byte*) bitmap_screen#14 )
@ -2321,7 +2321,7 @@ SYMBOL TABLE SSA
(bool~) main::$10
(bool~) main::$11
(bool~) main::$12
(byte*~) main::$15
(byte*~) main::$16
(byte~) main::$4
(byte~) main::$5
(byte~) main::$6
@ -3123,7 +3123,7 @@ Adding number conversion cast (unumber) 0 in (byte) main::angle#0 ← (number) 0
Adding number conversion cast (unumber) $fe in (bool~) main::$10 ← *((byte*) RASTER#0) != (number) $fe
Adding number conversion cast (unumber) $ff in (bool~) main::$11 ← *((byte*) RASTER#0) != (number) $ff
Adding number conversion cast (unumber) 9 in (byte) main::angle#1 ← (byte) main::angle#3 + (number) 9
Adding number conversion cast (unumber) $3e7 in (byte*~) main::$15 ← (byte*) PRINT_SCREEN#0 + (number) $3e7
Adding number conversion cast (unumber) $3e7 in (byte*~) main::$16 ← (byte*) PRINT_SCREEN#0 + (number) $3e7
Adding number conversion cast (snumber) 0 in (signed word) show_letter::current_x#0 ← (number) 0
Adding number conversion cast (snumber) 0 in (signed word) show_letter::current_y#0 ← (number) 0
Adding number conversion cast (snumber) $32 in (number~) show_letter::$0 ← (signed word) show_letter::to_x#0 - (number) $32
@ -4105,7 +4105,7 @@ Eliminating unused constant (const byte) OFFSET_STRUCT_SEGMENT_TYPE
Eliminating unused constant (const byte*) bitmap_screen#0
Eliminating unused constant (const byte*) bitmap_gfx#0
Successful SSA optimization PassNEliminateUnusedVars
Eliminating variable (byte*~) main::$15 from unused block main::@14
Eliminating variable (byte*~) main::$16 from unused block main::@14
Removing unused block main::@13
Removing unused block main::@14
Removing unused block main::@return

View File

@ -3371,7 +3371,7 @@ main::@38: scope:[main] from main::@11
(byte) current_ypos#27 ← phi( main::@11/(byte) current_ypos#2 )
(byte) current_movedown_counter#15 ← phi( main::@11/(byte) current_movedown_counter#2 )
(byte) play_movement::return#5 ← phi( main::@11/(byte) play_movement::return#3 )
(byte~) main::$15 ← (byte) play_movement::return#5
(byte~) main::$16 ← (byte) play_movement::return#5
(byte) current_movedown_counter#6 ← (byte) current_movedown_counter#15
(byte) current_ypos#10 ← (byte) current_ypos#27
(word) lines_bcd#7 ← (word) lines_bcd#18
@ -3386,7 +3386,7 @@ main::@38: scope:[main] from main::@11
(byte) current_xpos#13 ← (byte) current_xpos#33
(byte) game_over#9 ← (byte) game_over#20
(byte) next_piece_idx#9 ← (byte) next_piece_idx#21
(byte) main::render#1 ← (byte~) main::$15
(byte) main::render#1 ← (byte~) main::$16
to:main::@19
main::@12: scope:[main] from main::@13 main::@37
(byte) level_bcd#65 ← phi( main::@13/(byte) level_bcd#75 main::@37/(byte) level_bcd#53 )
@ -3455,9 +3455,9 @@ main::@19: scope:[main] from main::@12 main::@38
(byte) render_screen_render#37 ← phi( main::@12/(byte) render_screen_render#45 main::@38/(byte) render_screen_render#46 )
(byte) render_screen_show#28 ← phi( main::@12/(byte) render_screen_show#37 main::@38/(byte) render_screen_show#38 )
(byte) main::render#2 ← phi( main::@12/(byte) main::render#3 main::@38/(byte) main::render#1 )
(bool~) main::$16 ← (byte) main::render#2 != (number) 0
(bool~) main::$17 ← ! (bool~) main::$16
if((bool~) main::$17) goto main::@1
(bool~) main::$17 ← (byte) main::render#2 != (number) 0
(bool~) main::$18 ← ! (bool~) main::$17
if((bool~) main::$18) goto main::@1
to:main::@23
main::@23: scope:[main] from main::@19
(byte) level_bcd#94 ← phi( main::@19/(byte) level_bcd#50 )
@ -5496,9 +5496,9 @@ SYMBOL TABLE SSA
(bool~) main::$10
(byte~) main::$13
(bool~) main::$14
(byte~) main::$15
(bool~) main::$16
(byte~) main::$16
(bool~) main::$17
(bool~) main::$18
(label) main::@1
(label) main::@11
(label) main::@12
@ -7280,7 +7280,7 @@ Adding number conversion cast (unumber) 6 in (byte) level_bcd#8 ← (byte) level
Adding number conversion cast (unumber) $ff in (bool~) main::$10 ← *((byte*) RASTER#0) != (number) $ff
Adding number conversion cast (unumber) 0 in (byte) main::render#0 ← (number) 0
Adding number conversion cast (unumber) 0 in (bool~) main::$14 ← (byte) game_over#19 == (number) 0
Adding number conversion cast (unumber) 0 in (bool~) main::$16 ← (byte) main::render#2 != (number) 0
Adding number conversion cast (unumber) 0 in (bool~) main::$17 ← (byte) main::render#2 != (number) 0
Successful SSA optimization PassNAddNumberTypeConversions
Added casts to value list in (byte[8]) keyboard_matrix_row_bitmask#0 ← (byte[8]){ (byte)(number) $fe, (byte)(number) $fd, (byte)(number) $fb, (byte)(number) $f7, (byte)(number) $ef, (byte)(number) $df, (byte)(number) $bf, (byte)(number) $7f }
Added casts to value list in (byte[8]) keyboard_matrix_col_bitmask#0 ← (byte[8]){ (byte)(number) 1, (byte)(number) 2, (byte)(number) 4, (byte)(number) 8, (byte)(number) $10, (byte)(number) $20, (byte)(number) $40, (byte)(number) $80 }
@ -8563,7 +8563,7 @@ Inversing boolean not [1138] (bool~) play_remove_lines::$10 ← (byte) play_remo
Inversing boolean not [1161] (bool~) play_update_score::$1 ← (byte) play_update_score::removed#1 == (byte) 0 from [1160] (bool~) play_update_score::$0 ← (byte) play_update_score::removed#1 != (byte) 0
Inversing boolean not [1177] (bool~) play_update_score::$7 ← (byte) play_update_score::lines_before#0 == (byte) play_update_score::lines_after#0 from [1176] (bool~) play_update_score::$6 ← (byte) play_update_score::lines_before#0 != (byte) play_update_score::lines_after#0
Inversing boolean not [1204] (bool~) play_increase_level::$3 ← (byte~) play_increase_level::$1 != (byte) $a from [1203] (bool~) play_increase_level::$2 ← (byte~) play_increase_level::$1 == (byte) $a
Inversing boolean not [1314] (bool~) main::$17 ← (byte) main::render#2 == (byte) 0 from [1313] (bool~) main::$16 ← (byte) main::render#2 != (byte) 0
Inversing boolean not [1314] (bool~) main::$18 ← (byte) main::render#2 == (byte) 0 from [1313] (bool~) main::$17 ← (byte) main::render#2 != (byte) 0
Successful SSA optimization Pass2UnaryNotSimplification
Alias candidate removed (volatile)(byte) render_screen_showing#1 = (byte) render_screen_show#11 (byte) render_screen_showing#6 (byte) render_screen_showing#2
Alias candidate removed (volatile)(byte) IRQ_RASTER_FIRST#0 = (byte~) $4 (byte) irq_raster_next#0 (byte) irq_raster_next#24 (byte) irq_raster_next#23 (byte) irq_raster_next#22 (byte) irq_raster_next#20 (byte) irq_raster_next#17 (byte) irq_raster_next#10
@ -9056,7 +9056,7 @@ Alias (byte*) current_piece_gfx#12 = (byte*) current_piece_gfx#26
Alias (byte) current_xpos#13 = (byte) current_xpos#33
Alias (byte) game_over#20 = (byte) game_over#9
Alias (byte) next_piece_idx#21 = (byte) next_piece_idx#9
Alias (byte) main::render#1 = (byte~) main::$15
Alias (byte) main::render#1 = (byte~) main::$16
Alias (byte) main::render#3 = (byte) main::render#4
Alias (byte) render_screen_show#37 = (byte) render_screen_show#45
Alias (byte) render_screen_render#45 = (byte) render_screen_render#52
@ -9636,7 +9636,7 @@ Simple Condition (bool~) play_increase_level::$3 [1205] if((byte~) play_increase
Simple Condition (bool~) play_increase_level::$4 [1216] if((byte) play_increase_level::b#1!=rangelast(0,4)) goto play_increase_level::@7
Simple Condition (bool~) main::$10 [1269] if(*((byte*) RASTER#0)!=(byte) $ff) goto main::@4
Simple Condition (bool~) main::$14 [1286] if((byte) game_over#10==(byte) 0) goto main::@11
Simple Condition (bool~) main::$17 [1315] if((byte) main::render#2==(byte) 0) goto main::@1
Simple Condition (bool~) main::$18 [1315] if((byte) main::render#2==(byte) 0) goto main::@1
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant right-side identified [66] (byte[8]) keyboard_events#0 ← { fill( 8, 0) }
Constant right-side identified [73] (byte[8]) keyboard_scan_values#0 ← { fill( 8, 0) }

View File

@ -1128,8 +1128,8 @@ SYMBOL TABLE SSA
(word) print_word::w#1
(word) print_word::w#2
Fixing inline constructor with main::$18 ← (byte)main::$5 w= (byte)0
Fixing inline constructor with main::$19 ← (byte)main::$8 w= (byte)0
Fixing inline constructor with main::$19 ← (byte)main::$5 w= (byte)0
Fixing inline constructor with main::$20 ← (byte)main::$8 w= (byte)0
Successful SSA optimization Pass2FixInlineConstructors
Adding number conversion cast (unumber) 0 in (byte) init_font_hex::idx#0 ← (number) 0
Adding number conversion cast (unumber) 0 in *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#0) ← (number) 0
@ -1438,9 +1438,9 @@ Alias (byte*) print_char_cursor#36 = (byte*) print_char_cursor#39 (byte*) print_
Alias (byte*) main::toD0181_screen#0 = (byte*) main::toD0181_screen#1
Alias (byte*) main::toD0181_gfx#0 = (byte*) main::toD0181_gfx#1
Alias (byte) main::toD0181_return#0 = (byte~) main::toD0181_$8#0 (byte) main::toD0181_return#2 (byte) main::toD0181_return#1 (byte) main::toD0181_return#3 (byte~) main::$1
Alias (word~) main::$6 = (word~) main::$18
Alias (word~) main::$6 = (word~) main::$19
Alias (signed word) main::xw#0 = (signed word~) main::$7
Alias (word~) main::$9 = (word~) main::$19
Alias (word~) main::$9 = (word~) main::$20
Alias (signed word) main::yw#0 = (signed word~) main::$10
Alias (word) atan2_16::return#2 = (word) atan2_16::return#4
Alias (byte*) main::screen_ref#2 = (byte*) main::screen_ref#4 (byte*) main::screen_ref#3

View File

@ -790,8 +790,8 @@ SYMBOL TABLE SSA
(signed word) main::yw
(signed word) main::yw#0
Fixing inline constructor with main::$15 ← (byte)main::$4 w= (byte)0
Fixing inline constructor with main::$16 ← (byte)main::$7 w= (byte)0
Fixing inline constructor with main::$16 ← (byte)main::$4 w= (byte)0
Fixing inline constructor with main::$17 ← (byte)main::$7 w= (byte)0
Successful SSA optimization Pass2FixInlineConstructors
Adding number conversion cast (unumber) 0 in (byte) init_font_hex::idx#0 ← (number) 0
Adding number conversion cast (unumber) 0 in *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#0) ← (number) 0
@ -1075,9 +1075,9 @@ Alias (word) atan2_16::angle#5 = (word~) atan2_16::$15
Alias (byte*) main::toD0181_screen#0 = (byte*) main::toD0181_screen#1
Alias (byte*) main::toD0181_gfx#0 = (byte*) main::toD0181_gfx#1
Alias (byte) main::toD0181_return#0 = (byte~) main::toD0181_$8#0 (byte) main::toD0181_return#2 (byte) main::toD0181_return#1 (byte) main::toD0181_return#3 (byte~) main::$1
Alias (word~) main::$5 = (word~) main::$15
Alias (word~) main::$5 = (word~) main::$16
Alias (signed word) main::xw#0 = (signed word~) main::$6
Alias (word~) main::$8 = (word~) main::$16
Alias (word~) main::$8 = (word~) main::$17
Alias (signed word) main::yw#0 = (signed word~) main::$9
Alias (word) atan2_16::return#2 = (word) atan2_16::return#4
Alias (byte*) main::screen#2 = (byte*) main::screen#3

View File

@ -69,10 +69,10 @@ anim::@9: scope:[anim] from anim::@6
[33] *((const signed byte[8]) xps#0 + (byte) anim::i#2) ← *((const signed byte*) xp#0)
[34] *((const signed byte[8]) yps#0 + (byte) anim::i#2) ← *((const signed byte*) yp#0)
[35] (byte) anim::i2#0 ← (byte) anim::i#2 << (byte) 1
[36] (byte~) anim::$8 ← (byte) $80 + (byte)*((const signed byte*) xp#0)
[37] *((const byte*) SPRITES_XPOS#0 + (byte) anim::i2#0) ← (byte~) anim::$8
[38] (byte~) anim::$10 ← (byte) $80 + (byte)*((const signed byte*) yp#0)
[39] *((const byte*) SPRITES_YPOS#0 + (byte) anim::i2#0) ← (byte~) anim::$10
[36] (byte~) anim::$10 ← (byte) $80 + (byte)*((const signed byte*) xp#0)
[37] *((const byte*) SPRITES_XPOS#0 + (byte) anim::i2#0) ← (byte~) anim::$10
[38] (byte~) anim::$12 ← (byte) $80 + (byte)*((const signed byte*) yp#0)
[39] *((const byte*) SPRITES_YPOS#0 + (byte) anim::i2#0) ← (byte~) anim::$12
[40] (byte) anim::i#1 ← ++ (byte) anim::i#2
[41] if((byte) anim::i#1!=(byte) 8) goto anim::@6
to:anim::@7

View File

@ -549,17 +549,17 @@ anim::@29: scope:[anim] from anim::@22
*((signed byte[8]) pps#0 + (byte) anim::i#3) ← *((signed byte*) pp#0)
*((signed byte[8]) xps#0 + (byte) anim::i#3) ← *((signed byte*) xp#0)
*((signed byte[8]) yps#0 + (byte) anim::i#3) ← *((signed byte*) yp#0)
(number~) anim::$6 ← (byte) anim::i#3 * (number) 2
(byte) anim::i2#0 ← (number~) anim::$6
(byte~) anim::$7 ← ((byte)) *((signed byte*) xp#0)
(number~) anim::$8 ← (number) $80 + (byte~) anim::$7
*((byte*) SPRITES_XPOS#0 + (byte) anim::i2#0) ← (number~) anim::$8
(byte~) anim::$9 ← ((byte)) *((signed byte*) yp#0)
(number~) anim::$8 ← (byte) anim::i#3 * (number) 2
(byte) anim::i2#0 ← (number~) anim::$8
(byte~) anim::$9 ← ((byte)) *((signed byte*) xp#0)
(number~) anim::$10 ← (number) $80 + (byte~) anim::$9
*((byte*) SPRITES_YPOS#0 + (byte) anim::i2#0) ← (number~) anim::$10
*((byte*) SPRITES_XPOS#0 + (byte) anim::i2#0) ← (number~) anim::$10
(byte~) anim::$11 ← ((byte)) *((signed byte*) yp#0)
(number~) anim::$12 ← (number) $80 + (byte~) anim::$11
*((byte*) SPRITES_YPOS#0 + (byte) anim::i2#0) ← (number~) anim::$12
(byte) anim::i#1 ← (byte) anim::i#3 + rangenext(0,7)
(bool~) anim::$11 ← (byte) anim::i#1 != rangelast(0,7)
if((bool~) anim::$11) goto anim::@22
(bool~) anim::$13 ← (byte) anim::i#1 != rangelast(0,7)
if((bool~) anim::$13) goto anim::@22
to:anim::@23
anim::@23: scope:[anim] from anim::@29
(signed byte*) COSQ#10 ← phi( anim::@29/(signed byte*) COSQ#12 )
@ -1373,10 +1373,10 @@ SYMBOL TABLE SSA
(bool~) anim::$0
(bool~) anim::$1
(number~) anim::$10
(bool~) anim::$11
(byte~) anim::$11
(number~) anim::$12
(bool~) anim::$13
(bool~) anim::$2
(number~) anim::$6
(byte~) anim::$7
(number~) anim::$8
(byte~) anim::$9
(label) anim::@1
@ -2261,12 +2261,12 @@ Adding number conversion cast (snumber) 0 in (signed byte) sz#0 ← (number) 0
Adding number conversion cast (unumber) $ff in (bool~) anim::$0 ← *((byte*) RASTER#0) != (number) $ff
Adding number conversion cast (unumber) $fe in (bool~) anim::$1 ← *((byte*) RASTER#0) != (number) $fe
Adding number conversion cast (unumber) $fd in (bool~) anim::$2 ← *((byte*) RASTER#0) != (number) $fd
Adding number conversion cast (unumber) 2 in (number~) anim::$6 ← (byte) anim::i#3 * (number) 2
Adding number conversion cast (unumber) anim::$6 in (number~) anim::$6 ← (byte) anim::i#3 * (unumber)(number) 2
Adding number conversion cast (unumber) $80 in (number~) anim::$8 ← (number) $80 + (byte~) anim::$7
Adding number conversion cast (unumber) anim::$8 in (number~) anim::$8 ← (unumber)(number) $80 + (byte~) anim::$7
Adding number conversion cast (unumber) 2 in (number~) anim::$8 ← (byte) anim::i#3 * (number) 2
Adding number conversion cast (unumber) anim::$8 in (number~) anim::$8 ← (byte) anim::i#3 * (unumber)(number) 2
Adding number conversion cast (unumber) $80 in (number~) anim::$10 ← (number) $80 + (byte~) anim::$9
Adding number conversion cast (unumber) anim::$10 in (number~) anim::$10 ← (unumber)(number) $80 + (byte~) anim::$9
Adding number conversion cast (unumber) $80 in (number~) anim::$12 ← (number) $80 + (byte~) anim::$11
Adding number conversion cast (unumber) anim::$12 in (number~) anim::$12 ← (unumber)(number) $80 + (byte~) anim::$11
Adding number conversion cast (snumber) 2 in (signed byte) sx#3 ← (signed byte) sx#9 + (number) 2
Adding number conversion cast (snumber) 3 in (signed byte) sy#3 ← (signed byte) sy#9 - (number) 3
Adding number conversion cast (unumber) $28*0 in (byte*~) debug_print_init::$1 ← (byte*) SCREEN#0 + (number) $28*(number) 0
@ -2415,8 +2415,8 @@ Inlining cast (word~) main::$2 ← (word)(byte[$200]) mulf_sqr2#0
Inlining cast (signed byte) sx#2 ← (snumber)(number) 0
Inlining cast (signed byte) sy#2 ← (snumber)(number) 0
Inlining cast (signed byte) sz#0 ← (snumber)(number) 0
Inlining cast (byte~) anim::$7 ← (byte)*((signed byte*) xp#0)
Inlining cast (byte~) anim::$9 ← (byte)*((signed byte*) yp#0)
Inlining cast (byte~) anim::$9 ← (byte)*((signed byte*) xp#0)
Inlining cast (byte~) anim::$11 ← (byte)*((signed byte*) yp#0)
Inlining cast (byte) debug_print_init::c#0 ← (unumber)(number) 4
Inlining cast (byte*) debug_print_init::COLS#0 ← (byte*)(number) $d800
Inlining cast (byte) debug_print::print_sbyte_pos1_row#0 ← (unumber)(number) 0
@ -2673,9 +2673,9 @@ Finalized unsigned number type (byte) $40
Finalized unsigned number type (byte) $40
Successful SSA optimization PassNFinalizeNumberTypeConversions
Inferred type updated to byte in (unumber~) print_byte_at::$2 ← (byte) print_byte_at::b#2 & (byte) $f
Inferred type updated to byte in (unumber~) anim::$6 ← (byte) anim::i#3 * (byte) 2
Inferred type updated to byte in (unumber~) anim::$8 ← (byte) $80 + (byte~) anim::$7
Inferred type updated to byte in (unumber~) anim::$8 ← (byte) anim::i#3 * (byte) 2
Inferred type updated to byte in (unumber~) anim::$10 ← (byte) $80 + (byte~) anim::$9
Inferred type updated to byte in (unumber~) anim::$12 ← (byte) $80 + (byte~) anim::$11
Inferred type updated to byte in (unumber~) debug_print_init::$39 ← (byte) 8 + (byte) debug_print_init::i#5
Inferred type updated to byte in (unumber~) debug_print::print_sbyte_pos1_$0#0 ← (byte) debug_print::print_sbyte_pos1_row#1 * (byte) $28
Inferred type updated to byte in (unumber~) debug_print::print_sbyte_pos2_$0#0 ← (byte) debug_print::print_sbyte_pos2_row#1 * (byte) $28
@ -2729,7 +2729,7 @@ Alias (signed byte) sy#15 = (signed byte) sy#22 (signed byte) sy#27 (signed byte
Alias (byte*) print_screen#28 = (byte*) print_screen#41 (byte*) print_screen#43 (byte*) print_screen#56
Alias (signed byte*) COSH#10 = (signed byte*) COSH#12 (signed byte*) COSH#14 (signed byte*) COSH#8
Alias (signed byte*) COSQ#10 = (signed byte*) COSQ#12 (signed byte*) COSQ#14 (signed byte*) COSQ#8
Alias (byte) anim::i2#0 = (byte~) anim::$6
Alias (byte) anim::i2#0 = (byte~) anim::$8
Alias (signed byte) sx#10 = (signed byte) sx#16 (signed byte) sx#4
Alias (signed byte) sy#10 = (signed byte) sy#16 (signed byte) sy#4
Alias (byte*) print_str_at::at#1 = (byte*~) debug_print_init::$2
@ -2914,7 +2914,7 @@ Simple Condition (bool~) print_sbyte_at::$0 [41] if((signed byte) print_sbyte_at
Simple Condition (bool~) anim::$0 [131] if(*((byte*) RASTER#0)!=(byte) $ff) goto anim::@4
Simple Condition (bool~) anim::$1 [134] if(*((byte*) RASTER#0)!=(byte) $fe) goto anim::@10
Simple Condition (bool~) anim::$2 [137] if(*((byte*) RASTER#0)!=(byte) $fd) goto anim::@16
Simple Condition (bool~) anim::$11 [171] if((byte) anim::i#1!=rangelast(0,7)) goto anim::@22
Simple Condition (bool~) anim::$13 [171] if((byte) anim::i#1!=rangelast(0,7)) goto anim::@22
Simple Condition (bool~) debug_print_init::$67 [304] if((byte) debug_print_init::j#1!=rangelast(0,3)) goto debug_print_init::@2
Simple Condition (bool~) debug_print_init::$68 [309] if((byte) debug_print_init::i#1!=rangelast(0,7)) goto debug_print_init::@1
Simple Condition (bool~) debug_print::$31 [498] if((byte) debug_print::i#1!=rangelast(0,7)) goto debug_print::@1
@ -3321,8 +3321,8 @@ Identical Phi Values (byte*) memset::dst#5 (const byte*) memset::dst#0
Successful SSA optimization Pass2IdenticalPhiElimination
if() condition always true - replacing block destination [250] if((const byte*) memset::dst#0!=(const byte*) memset::end#0) goto memset::@5
Successful SSA optimization Pass2ConstantIfs
Inlining Noop Cast [67] (byte~) anim::$7 ← (byte)*((const signed byte*) xp#0) keeping *(xp#0)
Inlining Noop Cast [70] (byte~) anim::$9 ← (byte)*((const signed byte*) yp#0) keeping *(yp#0)
Inlining Noop Cast [67] (byte~) anim::$9 ← (byte)*((const signed byte*) xp#0) keeping *(xp#0)
Inlining Noop Cast [70] (byte~) anim::$11 ← (byte)*((const signed byte*) yp#0) keeping *(yp#0)
Successful SSA optimization Pass2NopCastInlining
Rewriting multiplication to use shift [66] (byte) anim::i2#0 ← (byte) anim::i#2 * (byte) 2
Successful SSA optimization Pass2MultiplyToShiftRewriting
@ -3784,10 +3784,10 @@ anim::@9: scope:[anim] from anim::@6
[33] *((const signed byte[8]) xps#0 + (byte) anim::i#2) ← *((const signed byte*) xp#0)
[34] *((const signed byte[8]) yps#0 + (byte) anim::i#2) ← *((const signed byte*) yp#0)
[35] (byte) anim::i2#0 ← (byte) anim::i#2 << (byte) 1
[36] (byte~) anim::$8 ← (byte) $80 + (byte)*((const signed byte*) xp#0)
[37] *((const byte*) SPRITES_XPOS#0 + (byte) anim::i2#0) ← (byte~) anim::$8
[38] (byte~) anim::$10 ← (byte) $80 + (byte)*((const signed byte*) yp#0)
[39] *((const byte*) SPRITES_YPOS#0 + (byte) anim::i2#0) ← (byte~) anim::$10
[36] (byte~) anim::$10 ← (byte) $80 + (byte)*((const signed byte*) xp#0)
[37] *((const byte*) SPRITES_XPOS#0 + (byte) anim::i2#0) ← (byte~) anim::$10
[38] (byte~) anim::$12 ← (byte) $80 + (byte)*((const signed byte*) yp#0)
[39] *((const byte*) SPRITES_YPOS#0 + (byte) anim::i2#0) ← (byte~) anim::$12
[40] (byte) anim::i#1 ← ++ (byte) anim::i#2
[41] if((byte) anim::i#1!=(byte) 8) goto anim::@6
to:anim::@7
@ -4212,7 +4212,7 @@ VARIABLE REGISTER WEIGHTS
(byte*) SPRITES_YPOS
(void()) anim()
(byte~) anim::$10 202.0
(byte~) anim::$8 202.0
(byte~) anim::$12 202.0
(byte) anim::i
(byte) anim::i#1 151.5
(byte) anim::i#2 71.29411764705881
@ -4525,8 +4525,8 @@ Added variable rotate_matrix::x#0 to zero page equivalence class [ rotate_matrix
Added variable rotate_matrix::y#0 to zero page equivalence class [ rotate_matrix::y#0 ]
Added variable rotate_matrix::z#0 to zero page equivalence class [ rotate_matrix::z#0 ]
Added variable anim::i2#0 to zero page equivalence class [ anim::i2#0 ]
Added variable anim::$8 to zero page equivalence class [ anim::$8 ]
Added variable anim::$10 to zero page equivalence class [ anim::$10 ]
Added variable anim::$12 to zero page equivalence class [ anim::$12 ]
Added variable debug_print::print_sbyte_pos1_sb#0 to zero page equivalence class [ debug_print::print_sbyte_pos1_sb#0 ]
Added variable debug_print::print_sbyte_pos2_sb#0 to zero page equivalence class [ debug_print::print_sbyte_pos2_sb#0 ]
Added variable debug_print::print_sbyte_pos4_sb#0 to zero page equivalence class [ debug_print::print_sbyte_pos4_sb#0 ]
@ -4610,8 +4610,8 @@ Complete equivalence classes
[ rotate_matrix::y#0 ]
[ rotate_matrix::z#0 ]
[ anim::i2#0 ]
[ anim::$8 ]
[ anim::$10 ]
[ anim::$12 ]
[ debug_print::print_sbyte_pos1_sb#0 ]
[ debug_print::print_sbyte_pos2_sb#0 ]
[ debug_print::print_sbyte_pos4_sb#0 ]
@ -4694,8 +4694,8 @@ Allocated zp ZP_BYTE:25 [ rotate_matrix::x#0 ]
Allocated zp ZP_BYTE:26 [ rotate_matrix::y#0 ]
Allocated zp ZP_BYTE:27 [ rotate_matrix::z#0 ]
Allocated zp ZP_BYTE:28 [ anim::i2#0 ]
Allocated zp ZP_BYTE:29 [ anim::$8 ]
Allocated zp ZP_BYTE:30 [ anim::$10 ]
Allocated zp ZP_BYTE:29 [ anim::$10 ]
Allocated zp ZP_BYTE:30 [ anim::$12 ]
Allocated zp ZP_BYTE:31 [ debug_print::print_sbyte_pos1_sb#0 ]
Allocated zp ZP_BYTE:32 [ debug_print::print_sbyte_pos2_sb#0 ]
Allocated zp ZP_BYTE:33 [ debug_print::print_sbyte_pos4_sb#0 ]
@ -4852,8 +4852,8 @@ main: {
}
// anim
anim: {
.label _8 = $1d
.label _10 = $1e
.label _10 = $1d
.label _12 = $1e
.label i2 = $1c
.label i = 4
// [13] phi from anim to anim::@1 [phi:anim->anim::@1]
@ -4971,22 +4971,22 @@ anim: {
lda.z i
asl
sta.z i2
// [36] (byte~) anim::$8 ← (byte) $80 + (byte)*((const signed byte*) xp#0) -- vbuz1=vbuc1_plus__deref_pbuc2
// [36] (byte~) anim::$10 ← (byte) $80 + (byte)*((const signed byte*) xp#0) -- vbuz1=vbuc1_plus__deref_pbuc2
lda #$80
clc
adc xp
sta.z _8
// [37] *((const byte*) SPRITES_XPOS#0 + (byte) anim::i2#0) ← (byte~) anim::$8 -- pbuc1_derefidx_vbuz1=vbuz2
lda.z _8
sta.z _10
// [37] *((const byte*) SPRITES_XPOS#0 + (byte) anim::i2#0) ← (byte~) anim::$10 -- pbuc1_derefidx_vbuz1=vbuz2
lda.z _10
ldy.z i2
sta SPRITES_XPOS,y
// [38] (byte~) anim::$10 ← (byte) $80 + (byte)*((const signed byte*) yp#0) -- vbuz1=vbuc1_plus__deref_pbuc2
// [38] (byte~) anim::$12 ← (byte) $80 + (byte)*((const signed byte*) yp#0) -- vbuz1=vbuc1_plus__deref_pbuc2
lda #$80
clc
adc yp
sta.z _10
// [39] *((const byte*) SPRITES_YPOS#0 + (byte) anim::i2#0) ← (byte~) anim::$10 -- pbuc1_derefidx_vbuz1=vbuz2
lda.z _10
sta.z _12
// [39] *((const byte*) SPRITES_YPOS#0 + (byte) anim::i2#0) ← (byte~) anim::$12 -- pbuc1_derefidx_vbuz1=vbuz2
lda.z _12
ldy.z i2
sta SPRITES_YPOS,y
// [40] (byte) anim::i#1 ← ++ (byte) anim::i#2 -- vbuz1=_inc_vbuz1
@ -6811,9 +6811,9 @@ Statement [32] *((const signed byte[8]) pps#0 + (byte) anim::i#2) ← *((const s
Statement [33] *((const signed byte[8]) xps#0 + (byte) anim::i#2) ← *((const signed byte*) xp#0) [ sx#10 sy#10 anim::i#2 ] ( main:2::anim:10 [ sx#10 sy#10 anim::i#2 ] ) always clobbers reg byte a
Statement [34] *((const signed byte[8]) yps#0 + (byte) anim::i#2) ← *((const signed byte*) yp#0) [ sx#10 sy#10 anim::i#2 ] ( main:2::anim:10 [ sx#10 sy#10 anim::i#2 ] ) always clobbers reg byte a
Statement [35] (byte) anim::i2#0 ← (byte) anim::i#2 << (byte) 1 [ sx#10 sy#10 anim::i#2 anim::i2#0 ] ( main:2::anim:10 [ sx#10 sy#10 anim::i#2 anim::i2#0 ] ) always clobbers reg byte a
Statement [36] (byte~) anim::$8 ← (byte) $80 + (byte)*((const signed byte*) xp#0) [ sx#10 sy#10 anim::i#2 anim::i2#0 anim::$8 ] ( main:2::anim:10 [ sx#10 sy#10 anim::i#2 anim::i2#0 anim::$8 ] ) always clobbers reg byte a
Statement [36] (byte~) anim::$10 ← (byte) $80 + (byte)*((const signed byte*) xp#0) [ sx#10 sy#10 anim::i#2 anim::i2#0 anim::$10 ] ( main:2::anim:10 [ sx#10 sy#10 anim::i#2 anim::i2#0 anim::$10 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:28 [ anim::i2#0 ]
Statement [38] (byte~) anim::$10 ← (byte) $80 + (byte)*((const signed byte*) yp#0) [ sx#10 sy#10 anim::i#2 anim::i2#0 anim::$10 ] ( main:2::anim:10 [ sx#10 sy#10 anim::i#2 anim::i2#0 anim::$10 ] ) always clobbers reg byte a
Statement [38] (byte~) anim::$12 ← (byte) $80 + (byte)*((const signed byte*) yp#0) [ sx#10 sy#10 anim::i#2 anim::i2#0 anim::$12 ] ( main:2::anim:10 [ sx#10 sy#10 anim::i#2 anim::i2#0 anim::$12 ] ) always clobbers reg byte a
Statement [42] *((const byte*) BORDERCOL#0) ← (const byte) LIGHT_GREY#0 [ sx#10 sy#10 ] ( main:2::anim:10 [ sx#10 sy#10 ] ) always clobbers reg byte a
Statement [44] *((const byte*) BORDERCOL#0) ← (const byte) LIGHT_BLUE#0 [ sx#10 sy#10 ] ( main:2::anim:10 [ sx#10 sy#10 ] ) always clobbers reg byte a
Statement [46] (signed byte) sy#3 ← (signed byte) sy#10 - (signed byte) 3 [ sx#3 sy#3 ] ( main:2::anim:10 [ sx#3 sy#3 ] ) always clobbers reg byte a
@ -6950,8 +6950,8 @@ Statement [32] *((const signed byte[8]) pps#0 + (byte) anim::i#2) ← *((const s
Statement [33] *((const signed byte[8]) xps#0 + (byte) anim::i#2) ← *((const signed byte*) xp#0) [ sx#10 sy#10 anim::i#2 ] ( main:2::anim:10 [ sx#10 sy#10 anim::i#2 ] ) always clobbers reg byte a reg byte y
Statement [34] *((const signed byte[8]) yps#0 + (byte) anim::i#2) ← *((const signed byte*) yp#0) [ sx#10 sy#10 anim::i#2 ] ( main:2::anim:10 [ sx#10 sy#10 anim::i#2 ] ) always clobbers reg byte a reg byte y
Statement [35] (byte) anim::i2#0 ← (byte) anim::i#2 << (byte) 1 [ sx#10 sy#10 anim::i#2 anim::i2#0 ] ( main:2::anim:10 [ sx#10 sy#10 anim::i#2 anim::i2#0 ] ) always clobbers reg byte a
Statement [36] (byte~) anim::$8 ← (byte) $80 + (byte)*((const signed byte*) xp#0) [ sx#10 sy#10 anim::i#2 anim::i2#0 anim::$8 ] ( main:2::anim:10 [ sx#10 sy#10 anim::i#2 anim::i2#0 anim::$8 ] ) always clobbers reg byte a
Statement [38] (byte~) anim::$10 ← (byte) $80 + (byte)*((const signed byte*) yp#0) [ sx#10 sy#10 anim::i#2 anim::i2#0 anim::$10 ] ( main:2::anim:10 [ sx#10 sy#10 anim::i#2 anim::i2#0 anim::$10 ] ) always clobbers reg byte a
Statement [36] (byte~) anim::$10 ← (byte) $80 + (byte)*((const signed byte*) xp#0) [ sx#10 sy#10 anim::i#2 anim::i2#0 anim::$10 ] ( main:2::anim:10 [ sx#10 sy#10 anim::i#2 anim::i2#0 anim::$10 ] ) always clobbers reg byte a
Statement [38] (byte~) anim::$12 ← (byte) $80 + (byte)*((const signed byte*) yp#0) [ sx#10 sy#10 anim::i#2 anim::i2#0 anim::$12 ] ( main:2::anim:10 [ sx#10 sy#10 anim::i#2 anim::i2#0 anim::$12 ] ) always clobbers reg byte a
Statement [41] if((byte) anim::i#1!=(byte) 8) goto anim::@6 [ sx#10 sy#10 anim::i#1 ] ( main:2::anim:10 [ sx#10 sy#10 anim::i#1 ] ) always clobbers reg byte a
Statement [42] *((const byte*) BORDERCOL#0) ← (const byte) LIGHT_GREY#0 [ sx#10 sy#10 ] ( main:2::anim:10 [ sx#10 sy#10 ] ) always clobbers reg byte a
Statement [44] *((const byte*) BORDERCOL#0) ← (const byte) LIGHT_BLUE#0 [ sx#10 sy#10 ] ( main:2::anim:10 [ sx#10 sy#10 ] ) always clobbers reg byte a
@ -7056,8 +7056,8 @@ Statement [32] *((const signed byte[8]) pps#0 + (byte) anim::i#2) ← *((const s
Statement [33] *((const signed byte[8]) xps#0 + (byte) anim::i#2) ← *((const signed byte*) xp#0) [ sx#10 sy#10 anim::i#2 ] ( main:2::anim:10 [ sx#10 sy#10 anim::i#2 ] ) always clobbers reg byte a reg byte y
Statement [34] *((const signed byte[8]) yps#0 + (byte) anim::i#2) ← *((const signed byte*) yp#0) [ sx#10 sy#10 anim::i#2 ] ( main:2::anim:10 [ sx#10 sy#10 anim::i#2 ] ) always clobbers reg byte a reg byte y
Statement [35] (byte) anim::i2#0 ← (byte) anim::i#2 << (byte) 1 [ sx#10 sy#10 anim::i#2 anim::i2#0 ] ( main:2::anim:10 [ sx#10 sy#10 anim::i#2 anim::i2#0 ] ) always clobbers reg byte a
Statement [36] (byte~) anim::$8 ← (byte) $80 + (byte)*((const signed byte*) xp#0) [ sx#10 sy#10 anim::i#2 anim::i2#0 anim::$8 ] ( main:2::anim:10 [ sx#10 sy#10 anim::i#2 anim::i2#0 anim::$8 ] ) always clobbers reg byte a
Statement [38] (byte~) anim::$10 ← (byte) $80 + (byte)*((const signed byte*) yp#0) [ sx#10 sy#10 anim::i#2 anim::i2#0 anim::$10 ] ( main:2::anim:10 [ sx#10 sy#10 anim::i#2 anim::i2#0 anim::$10 ] ) always clobbers reg byte a
Statement [36] (byte~) anim::$10 ← (byte) $80 + (byte)*((const signed byte*) xp#0) [ sx#10 sy#10 anim::i#2 anim::i2#0 anim::$10 ] ( main:2::anim:10 [ sx#10 sy#10 anim::i#2 anim::i2#0 anim::$10 ] ) always clobbers reg byte a
Statement [38] (byte~) anim::$12 ← (byte) $80 + (byte)*((const signed byte*) yp#0) [ sx#10 sy#10 anim::i#2 anim::i2#0 anim::$12 ] ( main:2::anim:10 [ sx#10 sy#10 anim::i#2 anim::i2#0 anim::$12 ] ) always clobbers reg byte a
Statement [41] if((byte) anim::i#1!=(byte) 8) goto anim::@6 [ sx#10 sy#10 anim::i#1 ] ( main:2::anim:10 [ sx#10 sy#10 anim::i#1 ] ) always clobbers reg byte a
Statement [42] *((const byte*) BORDERCOL#0) ← (const byte) LIGHT_GREY#0 [ sx#10 sy#10 ] ( main:2::anim:10 [ sx#10 sy#10 ] ) always clobbers reg byte a
Statement [44] *((const byte*) BORDERCOL#0) ← (const byte) LIGHT_BLUE#0 [ sx#10 sy#10 ] ( main:2::anim:10 [ sx#10 sy#10 ] ) always clobbers reg byte a
@ -7174,8 +7174,8 @@ Potential registers zp ZP_BYTE:25 [ rotate_matrix::x#0 ] : zp ZP_BYTE:25 , reg b
Potential registers zp ZP_BYTE:26 [ rotate_matrix::y#0 ] : zp ZP_BYTE:26 , reg byte a , reg byte x ,
Potential registers zp ZP_BYTE:27 [ rotate_matrix::z#0 ] : zp ZP_BYTE:27 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:28 [ anim::i2#0 ] : zp ZP_BYTE:28 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:29 [ anim::$8 ] : zp ZP_BYTE:29 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:30 [ anim::$10 ] : zp ZP_BYTE:30 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:29 [ anim::$10 ] : zp ZP_BYTE:29 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:30 [ anim::$12 ] : zp ZP_BYTE:30 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:31 [ debug_print::print_sbyte_pos1_sb#0 ] : zp ZP_BYTE:31 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:32 [ debug_print::print_sbyte_pos2_sb#0 ] : zp ZP_BYTE:32 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:33 [ debug_print::print_sbyte_pos4_sb#0 ] : zp ZP_BYTE:33 , reg byte a , reg byte x , reg byte y ,
@ -7240,7 +7240,7 @@ Potential registers zp ZP_WORD:99 [ debug_print_init::$65 ] : zp ZP_WORD:99 ,
REGISTER UPLIFT SCOPES
Uplift Scope [print_sbyte_at] 1,441.17: zp ZP_BYTE:9 [ print_sbyte_at::b#24 print_sbyte_at::b#0 print_sbyte_at::b#22 print_sbyte_at::b#16 print_sbyte_at::b#17 print_sbyte_at::b#18 print_sbyte_at::b#19 print_sbyte_at::b#20 print_sbyte_at::b#21 print_sbyte_at::b#4 print_sbyte_at::b#13 print_sbyte_at::b#14 print_sbyte_at::b#15 print_sbyte_at::b#5 print_sbyte_at::b#7 print_sbyte_at::b#8 print_sbyte_at::b#9 print_sbyte_at::b#10 print_sbyte_at::b#11 print_sbyte_at::b#12 print_sbyte_at::b#1 print_sbyte_at::b#2 print_sbyte_at::b#3 ] 710.67: zp ZP_WORD:7 [ print_sbyte_at::at#21 print_sbyte_at::at#15 print_sbyte_at::at#16 print_sbyte_at::at#17 print_sbyte_at::at#18 print_sbyte_at::at#19 print_sbyte_at::at#20 print_sbyte_at::at#0 print_sbyte_at::at#1 print_sbyte_at::at#2 ]
Uplift Scope [debug_print_init] 207.05: zp ZP_BYTE:15 [ debug_print_init::j#2 debug_print_init::j#1 ] 202: zp ZP_WORD:83 [ debug_print_init::$41 ] 202: zp ZP_WORD:85 [ debug_print_init::$44 ] 202: zp ZP_WORD:87 [ debug_print_init::$47 ] 202: zp ZP_WORD:89 [ debug_print_init::$50 ] 202: zp ZP_WORD:91 [ debug_print_init::$53 ] 202: zp ZP_WORD:93 [ debug_print_init::$56 ] 202: zp ZP_WORD:95 [ debug_print_init::$59 ] 202: zp ZP_WORD:97 [ debug_print_init::$62 ] 202: zp ZP_WORD:99 [ debug_print_init::$65 ] 56.11: zp ZP_BYTE:82 [ debug_print_init::col#0 ] 37.46: zp ZP_BYTE:13 [ debug_print_init::c#2 debug_print_init::c#1 ] 21.23: zp ZP_BYTE:14 [ debug_print_init::i#2 debug_print_init::i#1 ]
Uplift Scope [anim] 222.79: zp ZP_BYTE:4 [ anim::i#2 anim::i#1 ] 202: zp ZP_BYTE:29 [ anim::$8 ] 202: zp ZP_BYTE:30 [ anim::$10 ] 75.75: zp ZP_BYTE:28 [ anim::i2#0 ]
Uplift Scope [anim] 222.79: zp ZP_BYTE:4 [ anim::i#2 anim::i#1 ] 202: zp ZP_BYTE:29 [ anim::$10 ] 202: zp ZP_BYTE:30 [ anim::$12 ] 75.75: zp ZP_BYTE:28 [ anim::i2#0 ]
Uplift Scope [debug_print] 191.9: zp ZP_BYTE:6 [ debug_print::i#2 debug_print::i#1 ] 109.86: zp ZP_BYTE:5 [ debug_print::c#2 debug_print::c#1 ] 4: zp ZP_BYTE:31 [ debug_print::print_sbyte_pos1_sb#0 ] 4: zp ZP_BYTE:32 [ debug_print::print_sbyte_pos2_sb#0 ] 4: zp ZP_BYTE:33 [ debug_print::print_sbyte_pos4_sb#0 ] 4: zp ZP_BYTE:34 [ debug_print::print_sbyte_pos5_sb#0 ] 4: zp ZP_BYTE:35 [ debug_print::print_sbyte_pos6_sb#0 ] 4: zp ZP_BYTE:36 [ debug_print::print_sbyte_pos7_sb#0 ] 4: zp ZP_BYTE:37 [ debug_print::print_sbyte_pos8_sb#0 ] 4: zp ZP_BYTE:38 [ debug_print::print_sbyte_pos9_sb#0 ] 4: zp ZP_BYTE:39 [ debug_print::print_sbyte_pos10_sb#0 ] 4: zp ZP_BYTE:40 [ debug_print::print_sbyte_pos11_sb#0 ] 4: zp ZP_BYTE:41 [ debug_print::print_sbyte_pos12_sb#0 ]
Uplift Scope [calculate_matrix] 4: zp ZP_BYTE:57 [ calculate_matrix::$10 ] 4: zp ZP_BYTE:58 [ calculate_matrix::$11 ] 4: zp ZP_BYTE:59 [ calculate_matrix::$12 ] 4: zp ZP_BYTE:60 [ calculate_matrix::$13 ] 4: zp ZP_BYTE:61 [ calculate_matrix::$14 ] 4: zp ZP_BYTE:62 [ calculate_matrix::$15 ] 4: zp ZP_BYTE:63 [ calculate_matrix::$16 ] 4: zp ZP_BYTE:64 [ calculate_matrix::$17 ] 4: zp ZP_BYTE:65 [ calculate_matrix::$18 ] 4: zp ZP_BYTE:66 [ calculate_matrix::$19 ] 4: zp ZP_BYTE:67 [ calculate_matrix::$20 ] 4: zp ZP_BYTE:68 [ calculate_matrix::$21 ] 4: zp ZP_BYTE:69 [ calculate_matrix::$22 ] 4: zp ZP_BYTE:70 [ calculate_matrix::$23 ] 4: zp ZP_BYTE:71 [ calculate_matrix::$24 ] 4: zp ZP_BYTE:72 [ calculate_matrix::$25 ] 4: zp ZP_BYTE:73 [ calculate_matrix::$26 ] 4: zp ZP_BYTE:74 [ calculate_matrix::$27 ] 4: zp ZP_BYTE:75 [ calculate_matrix::$28 ] 4: zp ZP_BYTE:76 [ calculate_matrix::$29 ] 4: zp ZP_BYTE:77 [ calculate_matrix::$30 ] 4: zp ZP_BYTE:78 [ calculate_matrix::$31 ] 4: zp ZP_BYTE:79 [ calculate_matrix::$32 ] 4: zp ZP_BYTE:80 [ calculate_matrix::$33 ] 4: zp ZP_BYTE:81 [ calculate_matrix::$34 ] 2.45: zp ZP_BYTE:23 [ calculate_matrix::sx#0 ] 1.53: zp ZP_BYTE:24 [ calculate_matrix::sy#0 ] 0.91: zp ZP_BYTE:48 [ calculate_matrix::t2#0 ] 0.83: zp ZP_BYTE:47 [ calculate_matrix::t1#0 ] 0.31: zp ZP_BYTE:52 [ calculate_matrix::t6#0 ] 0.3: zp ZP_BYTE:50 [ calculate_matrix::t4#0 ] 0.3: zp ZP_BYTE:53 [ calculate_matrix::t7#0 ] 0.3: zp ZP_BYTE:54 [ calculate_matrix::t8#0 ] 0.29: zp ZP_BYTE:49 [ calculate_matrix::t3#0 ] 0.29: zp ZP_BYTE:51 [ calculate_matrix::t5#0 ] 0.18: zp ZP_BYTE:56 [ calculate_matrix::t10#0 ] 0.18: zp ZP_BYTE:55 [ calculate_matrix::t9#0 ]
Uplift Scope [rotate_matrix] 34.33: zp ZP_BYTE:25 [ rotate_matrix::x#0 ] 34.33: zp ZP_BYTE:26 [ rotate_matrix::y#0 ] 34.33: zp ZP_BYTE:27 [ rotate_matrix::z#0 ]
@ -7257,7 +7257,7 @@ Uplift Scope [store_matrix]
Uplifting [print_sbyte_at] best 79761 combination reg byte x [ print_sbyte_at::b#24 print_sbyte_at::b#0 print_sbyte_at::b#22 print_sbyte_at::b#16 print_sbyte_at::b#17 print_sbyte_at::b#18 print_sbyte_at::b#19 print_sbyte_at::b#20 print_sbyte_at::b#21 print_sbyte_at::b#4 print_sbyte_at::b#13 print_sbyte_at::b#14 print_sbyte_at::b#15 print_sbyte_at::b#5 print_sbyte_at::b#7 print_sbyte_at::b#8 print_sbyte_at::b#9 print_sbyte_at::b#10 print_sbyte_at::b#11 print_sbyte_at::b#12 print_sbyte_at::b#1 print_sbyte_at::b#2 print_sbyte_at::b#3 ] zp ZP_WORD:7 [ print_sbyte_at::at#21 print_sbyte_at::at#15 print_sbyte_at::at#16 print_sbyte_at::at#17 print_sbyte_at::at#18 print_sbyte_at::at#19 print_sbyte_at::at#20 print_sbyte_at::at#0 print_sbyte_at::at#1 print_sbyte_at::at#2 ]
Uplifting [debug_print_init] best 74961 combination reg byte y [ debug_print_init::j#2 debug_print_init::j#1 ] zp ZP_WORD:83 [ debug_print_init::$41 ] zp ZP_WORD:85 [ debug_print_init::$44 ] zp ZP_WORD:87 [ debug_print_init::$47 ] zp ZP_WORD:89 [ debug_print_init::$50 ] zp ZP_WORD:91 [ debug_print_init::$53 ] zp ZP_WORD:93 [ debug_print_init::$56 ] zp ZP_WORD:95 [ debug_print_init::$59 ] zp ZP_WORD:97 [ debug_print_init::$62 ] zp ZP_WORD:99 [ debug_print_init::$65 ] reg byte x [ debug_print_init::col#0 ] zp ZP_BYTE:13 [ debug_print_init::c#2 debug_print_init::c#1 ] zp ZP_BYTE:14 [ debug_print_init::i#2 debug_print_init::i#1 ]
Uplifting [anim] best 73061 combination zp ZP_BYTE:4 [ anim::i#2 anim::i#1 ] reg byte a [ anim::$8 ] reg byte a [ anim::$10 ] reg byte x [ anim::i2#0 ]
Uplifting [anim] best 73061 combination zp ZP_BYTE:4 [ anim::i#2 anim::i#1 ] reg byte a [ anim::$10 ] reg byte a [ anim::$12 ] reg byte x [ anim::i2#0 ]
Uplifting [debug_print] best 73043 combination zp ZP_BYTE:6 [ debug_print::i#2 debug_print::i#1 ] zp ZP_BYTE:5 [ debug_print::c#2 debug_print::c#1 ] reg byte x [ debug_print::print_sbyte_pos1_sb#0 ] reg byte x [ debug_print::print_sbyte_pos2_sb#0 ] reg byte x [ debug_print::print_sbyte_pos4_sb#0 ] zp ZP_BYTE:34 [ debug_print::print_sbyte_pos5_sb#0 ] zp ZP_BYTE:35 [ debug_print::print_sbyte_pos6_sb#0 ] zp ZP_BYTE:36 [ debug_print::print_sbyte_pos7_sb#0 ] zp ZP_BYTE:37 [ debug_print::print_sbyte_pos8_sb#0 ] zp ZP_BYTE:38 [ debug_print::print_sbyte_pos9_sb#0 ] zp ZP_BYTE:39 [ debug_print::print_sbyte_pos10_sb#0 ] zp ZP_BYTE:40 [ debug_print::print_sbyte_pos11_sb#0 ] zp ZP_BYTE:41 [ debug_print::print_sbyte_pos12_sb#0 ]
Limited combination testing to 100 combinations of 8388608 possible.
Uplifting [rotate_matrix] best 72742 combination reg byte x [ rotate_matrix::x#0 ] zp ZP_BYTE:26 [ rotate_matrix::y#0 ] zp ZP_BYTE:27 [ rotate_matrix::z#0 ]
@ -7620,17 +7620,17 @@ anim: {
lda.z i
asl
tax
// [36] (byte~) anim::$8 ← (byte) $80 + (byte)*((const signed byte*) xp#0) -- vbuaa=vbuc1_plus__deref_pbuc2
// [36] (byte~) anim::$10 ← (byte) $80 + (byte)*((const signed byte*) xp#0) -- vbuaa=vbuc1_plus__deref_pbuc2
lda #$80
clc
adc xp
// [37] *((const byte*) SPRITES_XPOS#0 + (byte) anim::i2#0) ← (byte~) anim::$8 -- pbuc1_derefidx_vbuxx=vbuaa
// [37] *((const byte*) SPRITES_XPOS#0 + (byte) anim::i2#0) ← (byte~) anim::$10 -- pbuc1_derefidx_vbuxx=vbuaa
sta SPRITES_XPOS,x
// [38] (byte~) anim::$10 ← (byte) $80 + (byte)*((const signed byte*) yp#0) -- vbuaa=vbuc1_plus__deref_pbuc2
// [38] (byte~) anim::$12 ← (byte) $80 + (byte)*((const signed byte*) yp#0) -- vbuaa=vbuc1_plus__deref_pbuc2
lda #$80
clc
adc yp
// [39] *((const byte*) SPRITES_YPOS#0 + (byte) anim::i2#0) ← (byte~) anim::$10 -- pbuc1_derefidx_vbuxx=vbuaa
// [39] *((const byte*) SPRITES_YPOS#0 + (byte) anim::i2#0) ← (byte~) anim::$12 -- pbuc1_derefidx_vbuxx=vbuaa
sta SPRITES_YPOS,x
// [40] (byte) anim::i#1 ← ++ (byte) anim::i#2 -- vbuz1=_inc_vbuz1
inc.z i
@ -9594,7 +9594,7 @@ FINAL SYMBOL TABLE
(const byte*) SPRITES_YPOS#0 SPRITES_YPOS = (byte*) 53249
(void()) anim()
(byte~) anim::$10 reg byte a 202.0
(byte~) anim::$8 reg byte a 202.0
(byte~) anim::$12 reg byte a 202.0
(label) anim::@1
(label) anim::@10
(label) anim::@2
@ -10052,8 +10052,8 @@ reg byte x [ sprites_init::i#2 sprites_init::i#1 ]
reg byte x [ calculate_matrix::sx#0 ]
reg byte x [ rotate_matrix::x#0 ]
reg byte x [ anim::i2#0 ]
reg byte a [ anim::$8 ]
reg byte a [ anim::$10 ]
reg byte a [ anim::$12 ]
reg byte x [ debug_print::print_sbyte_pos1_sb#0 ]
reg byte x [ debug_print::print_sbyte_pos2_sb#0 ]
reg byte x [ debug_print::print_sbyte_pos4_sb#0 ]
@ -10306,20 +10306,20 @@ anim: {
asl
tax
// $80+(byte)((*xp))
// [36] (byte~) anim::$8 ← (byte) $80 + (byte)*((const signed byte*) xp#0) -- vbuaa=vbuc1_plus__deref_pbuc2
// [36] (byte~) anim::$10 ← (byte) $80 + (byte)*((const signed byte*) xp#0) -- vbuaa=vbuc1_plus__deref_pbuc2
lda #$80
clc
adc xp
// SPRITES_XPOS[i2] = $80+(byte)((*xp))
// [37] *((const byte*) SPRITES_XPOS#0 + (byte) anim::i2#0) ← (byte~) anim::$8 -- pbuc1_derefidx_vbuxx=vbuaa
// [37] *((const byte*) SPRITES_XPOS#0 + (byte) anim::i2#0) ← (byte~) anim::$10 -- pbuc1_derefidx_vbuxx=vbuaa
sta SPRITES_XPOS,x
// $80+(byte)((*yp))
// [38] (byte~) anim::$10 ← (byte) $80 + (byte)*((const signed byte*) yp#0) -- vbuaa=vbuc1_plus__deref_pbuc2
// [38] (byte~) anim::$12 ← (byte) $80 + (byte)*((const signed byte*) yp#0) -- vbuaa=vbuc1_plus__deref_pbuc2
lda #$80
clc
adc yp
// SPRITES_YPOS[i2] = $80+(byte)((*yp))
// [39] *((const byte*) SPRITES_YPOS#0 + (byte) anim::i2#0) ← (byte~) anim::$10 -- pbuc1_derefidx_vbuxx=vbuaa
// [39] *((const byte*) SPRITES_YPOS#0 + (byte) anim::i2#0) ← (byte~) anim::$12 -- pbuc1_derefidx_vbuxx=vbuaa
sta SPRITES_YPOS,x
// for(byte i: 0..7)
// [40] (byte) anim::i#1 ← ++ (byte) anim::i#2 -- vbuz1=_inc_vbuz1

View File

@ -69,7 +69,7 @@
(const byte*) SPRITES_YPOS#0 SPRITES_YPOS = (byte*) 53249
(void()) anim()
(byte~) anim::$10 reg byte a 202.0
(byte~) anim::$8 reg byte a 202.0
(byte~) anim::$12 reg byte a 202.0
(label) anim::@1
(label) anim::@10
(label) anim::@2
@ -527,8 +527,8 @@ reg byte x [ sprites_init::i#2 sprites_init::i#1 ]
reg byte x [ calculate_matrix::sx#0 ]
reg byte x [ rotate_matrix::x#0 ]
reg byte x [ anim::i2#0 ]
reg byte a [ anim::$8 ]
reg byte a [ anim::$10 ]
reg byte a [ anim::$12 ]
reg byte x [ debug_print::print_sbyte_pos1_sb#0 ]
reg byte x [ debug_print::print_sbyte_pos2_sb#0 ]
reg byte x [ debug_print::print_sbyte_pos4_sb#0 ]

View File

@ -55,8 +55,8 @@ loop::@11: scope:[loop] from loop::@5
[23] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0
to:loop::@6
loop::@6: scope:[loop] from loop::@11 loop::@6
[24] (byte~) loop::$4 ← *((const byte*) D011#0) & (const byte) VIC_RST8#0
[25] if((byte~) loop::$4!=(byte) 0) goto loop::@6
[24] (byte~) loop::$6 ← *((const byte*) D011#0) & (const byte) VIC_RST8#0
[25] if((byte~) loop::$6!=(byte) 0) goto loop::@6
to:loop::@7
loop::@7: scope:[loop] from loop::@12 loop::@6
[26] (byte) loop::ss#5 ← phi( loop::@6/(byte) 0 loop::@12/(byte) loop::ss#1 )

View File

@ -7,7 +7,7 @@ Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBa
Inlined call call plexSetScreen (byte*) plexInit::screen
Inlined call call plexFreePrepare
Inlined call call plexFreeAdd (byte) plexShowSprite::ypos
Inlined call (byte~) loop::$7 ← call plexFreeNextYpos
Inlined call (byte~) loop::$9 ← call plexFreeNextYpos
Culled Empty Block (label) @1
Culled Empty Block (label) @2
Culled Empty Block (label) @3
@ -425,7 +425,7 @@ loop::@6: scope:[loop] from loop::@4
(byte) loop::sin_idx#2 ← phi( loop::@4/(byte) loop::sin_idx#4 )
*((byte*) BORDERCOL#0) ← ++ *((byte*) BORDERCOL#0)
(byte) loop::y_idx#0 ← (byte) loop::sin_idx#2
(number~) loop::$1 ← (byte) PLEX_COUNT#0 - (number) 1
(number~) loop::$2 ← (byte) PLEX_COUNT#0 - (number) 1
(byte) loop::sy#0 ← (byte) 0
to:loop::@10
loop::@10: scope:[loop] from loop::@10 loop::@6
@ -439,9 +439,9 @@ loop::@10: scope:[loop] from loop::@10 loop::@6
(byte) loop::y_idx#2 ← phi( loop::@10/(byte) loop::y_idx#1 loop::@6/(byte) loop::y_idx#0 )
*((byte[PLEX_COUNT#0]) PLEX_YPOS#0 + (byte) loop::sy#2) ← *((byte[$100]) YSIN#0 + (byte) loop::y_idx#2)
(byte) loop::y_idx#1 ← (byte) loop::y_idx#2 + (number) 8
(byte) loop::sy#1 ← (byte) loop::sy#2 + rangenext(0,loop::$1)
(bool~) loop::$2 ← (byte) loop::sy#1 != rangelast(0,loop::$1)
if((bool~) loop::$2) goto loop::@10
(byte) loop::sy#1 ← (byte) loop::sy#2 + rangenext(0,loop::$2)
(bool~) loop::$3 ← (byte) loop::sy#1 != rangelast(0,loop::$2)
if((bool~) loop::$3) goto loop::@10
to:loop::@11
loop::@11: scope:[loop] from loop::@10
(byte*) PLEX_SCREEN_PTR#38 ← phi( loop::@10/(byte*) PLEX_SCREEN_PTR#39 )
@ -474,9 +474,9 @@ loop::@12: scope:[loop] from loop::@12 loop::@30
(byte) plex_show_idx#48 ← phi( loop::@12/(byte) plex_show_idx#48 loop::@30/(byte) plex_show_idx#7 )
(byte) plex_sprite_idx#48 ← phi( loop::@12/(byte) plex_sprite_idx#48 loop::@30/(byte) plex_sprite_idx#7 )
(byte) plex_free_next#41 ← phi( loop::@12/(byte) plex_free_next#41 loop::@30/(byte) plex_free_next#7 )
(byte~) loop::$4 ← *((byte*) D011#0) & (byte) VIC_RST8#0
(bool~) loop::$5 ← (byte~) loop::$4 != (number) 0
if((bool~) loop::$5) goto loop::@12
(byte~) loop::$6 ← *((byte*) D011#0) & (byte) VIC_RST8#0
(bool~) loop::$7 ← (byte~) loop::$6 != (number) 0
if((bool~) loop::$7) goto loop::@12
to:loop::@14
loop::@14: scope:[loop] from loop::@12
(byte) loop::sin_idx#15 ← phi( loop::@12/(byte) loop::sin_idx#16 )
@ -485,7 +485,7 @@ loop::@14: scope:[loop] from loop::@12
(byte) plex_show_idx#47 ← phi( loop::@12/(byte) plex_show_idx#48 )
(byte) plex_sprite_idx#47 ← phi( loop::@12/(byte) plex_sprite_idx#48 )
(byte) plex_free_next#36 ← phi( loop::@12/(byte) plex_free_next#41 )
(number~) loop::$6 ← (byte) PLEX_COUNT#0 - (number) 1
(number~) loop::$8 ← (byte) PLEX_COUNT#0 - (number) 1
(byte) loop::ss#0 ← (byte) 0
to:loop::@18
loop::@18: scope:[loop] from loop::@14 loop::@31
@ -528,8 +528,8 @@ loop::@29: scope:[loop] from loop::plexFreeNextYpos1_@return
(byte) plex_show_idx#42 ← phi( loop::plexFreeNextYpos1_@return/(byte) plex_show_idx#44 )
(byte) plex_sprite_idx#42 ← phi( loop::plexFreeNextYpos1_@return/(byte) plex_sprite_idx#44 )
(byte) loop::plexFreeNextYpos1_return#3 ← phi( loop::plexFreeNextYpos1_@return/(byte) loop::plexFreeNextYpos1_return#1 )
(byte~) loop::$7 ← (byte) loop::plexFreeNextYpos1_return#3
(byte) loop::rasterY#0 ← (byte~) loop::$7
(byte~) loop::$9 ← (byte) loop::plexFreeNextYpos1_return#3
(byte) loop::rasterY#0 ← (byte~) loop::$9
to:loop::@19
loop::@19: scope:[loop] from loop::@19 loop::@29
(byte) loop::sin_idx#10 ← phi( loop::@19/(byte) loop::sin_idx#10 loop::@29/(byte) loop::sin_idx#11 )
@ -540,8 +540,8 @@ loop::@19: scope:[loop] from loop::@19 loop::@29
(byte) plex_show_idx#37 ← phi( loop::@19/(byte) plex_show_idx#37 loop::@29/(byte) plex_show_idx#42 )
(byte) plex_sprite_idx#37 ← phi( loop::@19/(byte) plex_sprite_idx#37 loop::@29/(byte) plex_sprite_idx#42 )
(byte) loop::rasterY#1 ← phi( loop::@19/(byte) loop::rasterY#1 loop::@29/(byte) loop::rasterY#0 )
(bool~) loop::$8 ← *((byte*) RASTER#0) < (byte) loop::rasterY#1
if((bool~) loop::$8) goto loop::@19
(bool~) loop::$10 ← *((byte*) RASTER#0) < (byte) loop::rasterY#1
if((bool~) loop::$10) goto loop::@19
to:loop::@21
loop::@21: scope:[loop] from loop::@19
(byte) loop::sin_idx#9 ← phi( loop::@19/(byte) loop::sin_idx#10 )
@ -566,9 +566,9 @@ loop::@31: scope:[loop] from loop::@21
(byte) plex_sprite_idx#8 ← (byte) plex_sprite_idx#19
(byte) plex_show_idx#8 ← (byte) plex_show_idx#19
(byte) plex_sprite_msb#9 ← (byte) plex_sprite_msb#20
(byte) loop::ss#1 ← (byte) loop::ss#2 + rangenext(0,loop::$6)
(bool~) loop::$10 ← (byte) loop::ss#1 != rangelast(0,loop::$6)
if((bool~) loop::$10) goto loop::@18
(byte) loop::ss#1 ← (byte) loop::ss#2 + rangenext(0,loop::$8)
(bool~) loop::$13 ← (byte) loop::ss#1 != rangelast(0,loop::$8)
if((bool~) loop::$13) goto loop::@18
to:loop::@25
loop::@25: scope:[loop] from loop::@31
(byte*) PLEX_SCREEN_PTR#44 ← phi( loop::@31/(byte*) PLEX_SCREEN_PTR#35 )
@ -739,14 +739,14 @@ SYMBOL TABLE SSA
(word) init::xp#2
(void()) loop()
(bool~) loop::$0
(number~) loop::$1
(bool~) loop::$10
(bool~) loop::$2
(byte~) loop::$4
(bool~) loop::$5
(number~) loop::$6
(byte~) loop::$7
(bool~) loop::$8
(bool~) loop::$13
(number~) loop::$2
(bool~) loop::$3
(byte~) loop::$6
(bool~) loop::$7
(number~) loop::$8
(byte~) loop::$9
(label) loop::@1
(label) loop::@10
(label) loop::@11
@ -1167,13 +1167,13 @@ Adding number conversion cast (unumber) 9 in (word) init::xp#1 ← (word) init::
Adding number conversion cast (unumber) $ff in *((byte*) SPRITES_ENABLE#0) ← (number) $ff
Adding number conversion cast (unumber) 0 in (byte) loop::sin_idx#0 ← (number) 0
Adding number conversion cast (unumber) $ff in (bool~) loop::$0 ← *((byte*) RASTER#0) != (number) $ff
Adding number conversion cast (unumber) 1 in (number~) loop::$1 ← (byte) PLEX_COUNT#0 - (number) 1
Adding number conversion cast (unumber) loop::$1 in (number~) loop::$1 ← (byte) PLEX_COUNT#0 - (unumber)(number) 1
Adding number conversion cast (unumber) 1 in (number~) loop::$2 ← (byte) PLEX_COUNT#0 - (number) 1
Adding number conversion cast (unumber) loop::$2 in (number~) loop::$2 ← (byte) PLEX_COUNT#0 - (unumber)(number) 1
Adding number conversion cast (unumber) 8 in (byte) loop::y_idx#1 ← (byte) loop::y_idx#2 + (number) 8
Adding number conversion cast (unumber) 1 in (byte) loop::sin_idx#1 ← (byte) loop::sin_idx#3 + (number) 1
Adding number conversion cast (unumber) 0 in (bool~) loop::$5 ← (byte~) loop::$4 != (number) 0
Adding number conversion cast (unumber) 1 in (number~) loop::$6 ← (byte) PLEX_COUNT#0 - (number) 1
Adding number conversion cast (unumber) loop::$6 in (number~) loop::$6 ← (byte) PLEX_COUNT#0 - (unumber)(number) 1
Adding number conversion cast (unumber) 0 in (bool~) loop::$7 ← (byte~) loop::$6 != (number) 0
Adding number conversion cast (unumber) 1 in (number~) loop::$8 ← (byte) PLEX_COUNT#0 - (number) 1
Adding number conversion cast (unumber) loop::$8 in (number~) loop::$8 ← (byte) PLEX_COUNT#0 - (unumber)(number) 1
Successful SSA optimization PassNAddNumberTypeConversions
Inlining cast (byte*) SPRITES_XPOS#0 ← (byte*)(number) $d000
Inlining cast (byte*) SPRITES_YPOS#0 ← (byte*)(number) $d001
@ -1322,8 +1322,8 @@ Inferred type updated to byte in (unumber~) plexShowSprite::$5 ← (byte) plex_s
Inferred type updated to byte in (unumber~) plexShowSprite::$6 ← (byte~) plexShowSprite::$5 & (byte) 7
Inferred type updated to byte in (unumber~) init::$1 ← (byte~) init::$0 | (byte) 3
Inferred type updated to byte in (unumber~) init::$3 ← (byte) PLEX_COUNT#0 - (byte) 1
Inferred type updated to byte in (unumber~) loop::$1 ← (byte) PLEX_COUNT#0 - (byte) 1
Inferred type updated to byte in (unumber~) loop::$6 ← (byte) PLEX_COUNT#0 - (byte) 1
Inferred type updated to byte in (unumber~) loop::$2 ← (byte) PLEX_COUNT#0 - (byte) 1
Inferred type updated to byte in (unumber~) loop::$8 ← (byte) PLEX_COUNT#0 - (byte) 1
Inversing boolean not [45] (bool~) plexSort::$4 ← (byte) plexSort::nxt_y#0 >= *((byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::m#2)) from [44] (bool~) plexSort::$3 ← (byte) plexSort::nxt_y#0 < *((byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::m#2))
Inversing boolean not [116] (bool~) plexShowSprite::$8 ← (byte) plex_sprite_msb#3 != (byte) 0 from [115] (bool~) plexShowSprite::$7 ← (byte) plex_sprite_msb#3 == (byte) 0
Successful SSA optimization Pass2UnaryNotSimplification
@ -1405,7 +1405,7 @@ Alias (byte) plex_sprite_msb#42 = (byte) plex_sprite_msb#45 (byte) plex_sprite_m
Alias (byte) loop::ss#5 = (byte) loop::ss#7 (byte) loop::ss#8 (byte) loop::ss#6
Alias (byte*) PLEX_SCREEN_PTR#30 = (byte*) PLEX_SCREEN_PTR#32 (byte*) PLEX_SCREEN_PTR#33 (byte*) PLEX_SCREEN_PTR#31
Alias (byte) loop::sin_idx#11 = (byte) loop::sin_idx#13 (byte) loop::sin_idx#14 (byte) loop::sin_idx#12
Alias (byte) loop::plexFreeNextYpos1_return#0 = (byte) loop::plexFreeNextYpos1_return#2 (byte) loop::plexFreeNextYpos1_return#1 (byte) loop::plexFreeNextYpos1_return#3 (byte~) loop::$7 (byte) loop::rasterY#0
Alias (byte) loop::plexFreeNextYpos1_return#0 = (byte) loop::plexFreeNextYpos1_return#2 (byte) loop::plexFreeNextYpos1_return#1 (byte) loop::plexFreeNextYpos1_return#3 (byte~) loop::$9 (byte) loop::rasterY#0
Alias (byte) plex_sprite_idx#23 = (byte) plex_sprite_idx#37
Alias (byte) plex_show_idx#23 = (byte) plex_show_idx#37
Alias (byte) plex_free_next#27 = (byte) plex_free_next#37
@ -1523,10 +1523,10 @@ Simple Condition (bool~) plexShowSprite::$8 [117] if((byte) plex_sprite_msb#3!=(
Simple Condition (bool~) init::$6 [172] if((byte) init::sx#1!=rangelast(0,init::$3)) goto init::@1
Simple Condition (bool~) init::$7 [180] if((byte) init::ss#1!=rangelast(0,7)) goto init::@3
Simple Condition (bool~) loop::$0 [190] if(*((byte*) RASTER#0)!=(byte) $ff) goto loop::@4
Simple Condition (bool~) loop::$2 [201] if((byte) loop::sy#1!=rangelast(0,loop::$1)) goto loop::@10
Simple Condition (bool~) loop::$5 [215] if((byte~) loop::$4!=(byte) 0) goto loop::@12
Simple Condition (bool~) loop::$8 [230] if(*((byte*) RASTER#0)<(byte) loop::plexFreeNextYpos1_return#0) goto loop::@19
Simple Condition (bool~) loop::$10 [241] if((byte) loop::ss#1!=rangelast(0,loop::$6)) goto loop::@18
Simple Condition (bool~) loop::$3 [201] if((byte) loop::sy#1!=rangelast(0,loop::$2)) goto loop::@10
Simple Condition (bool~) loop::$7 [215] if((byte~) loop::$6!=(byte) 0) goto loop::@12
Simple Condition (bool~) loop::$10 [230] if(*((byte*) RASTER#0)<(byte) loop::plexFreeNextYpos1_return#0) goto loop::@19
Simple Condition (bool~) loop::$13 [241] if((byte) loop::ss#1!=rangelast(0,loop::$8)) goto loop::@18
Successful SSA optimization Pass2ConditionalJumpSimplification
Rewriting && if()-condition to two if()s [59] (bool~) plexSort::$8 ← (bool~) plexSort::$6 && (bool~) plexSort::$7
Successful SSA optimization Pass2ConditionalAndOrRewriting
@ -1624,8 +1624,8 @@ Constant right-side identified [11] (byte~) plexSort::$1 ← (const byte) PLEX_C
Constant right-side identified [63] (byte~) init::$0 ← (const byte) VIC_DEN#0 | (const byte) VIC_RSEL#0
Constant right-side identified [67] (byte~) init::$3 ← (const byte) PLEX_COUNT#0 - (byte) 1
Constant right-side identified [69] (byte*~) init::$4 ← (const byte*) SPRITE#0 / (byte) $40
Constant right-side identified [86] (byte~) loop::$1 ← (const byte) PLEX_COUNT#0 - (byte) 1
Constant right-side identified [98] (byte~) loop::$6 ← (const byte) PLEX_COUNT#0 - (byte) 1
Constant right-side identified [86] (byte~) loop::$2 ← (const byte) PLEX_COUNT#0 - (byte) 1
Constant right-side identified [98] (byte~) loop::$8 ← (const byte) PLEX_COUNT#0 - (byte) 1
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const word[PLEX_COUNT#0]) PLEX_XPOS#0 = { fill( PLEX_COUNT#0, 0) }
Constant (const byte[PLEX_COUNT#0]) PLEX_YPOS#0 = { fill( PLEX_COUNT#0, 0) }
@ -1637,8 +1637,8 @@ Constant (const byte) plexSort::$1 = PLEX_COUNT#0-2
Constant (const byte) init::$0 = VIC_DEN#0|VIC_RSEL#0
Constant (const byte) init::$3 = PLEX_COUNT#0-1
Constant (const byte*) init::$4 = SPRITE#0/$40
Constant (const byte) loop::$1 = PLEX_COUNT#0-1
Constant (const byte) loop::$6 = PLEX_COUNT#0-1
Constant (const byte) loop::$2 = PLEX_COUNT#0-1
Constant (const byte) loop::$8 = PLEX_COUNT#0-1
Successful SSA optimization Pass2ConstantIdentification
Constant value identified (byte)init::$4 in [70] (byte~) init::$5 ← (byte)(const byte*) init::$4
Successful SSA optimization Pass2ConstantValues
@ -1649,19 +1649,19 @@ Resolved ranged comparison value [18] if(plexSort::m#1!=rangelast(0,plexSort::$1
Resolved ranged next value [75] init::sx#1 ← ++ init::sx#2 to ++
Resolved ranged comparison value [76] if(init::sx#1!=rangelast(0,init::$3)) goto init::@1 to (const byte) init::$3+(number) 1
Resolved ranged next value [90] loop::sy#1 ← ++ loop::sy#2 to ++
Resolved ranged comparison value [91] if(loop::sy#1!=rangelast(0,loop::$1)) goto loop::@10 to (const byte) loop::$1+(number) 1
Resolved ranged comparison value [91] if(loop::sy#1!=rangelast(0,loop::$2)) goto loop::@10 to (const byte) loop::$2+(number) 1
Resolved ranged next value [105] loop::ss#1 ← ++ loop::ss#5 to ++
Resolved ranged comparison value [106] if(loop::ss#1!=rangelast(0,loop::$6)) goto loop::@18 to (const byte) loop::$6+(number) 1
Resolved ranged comparison value [106] if(loop::ss#1!=rangelast(0,loop::$8)) goto loop::@18 to (const byte) loop::$8+(number) 1
Adding number conversion cast (unumber) plexInit::$1+1 in if((byte) plexInit::i#1!=(const byte) plexInit::$1+(number) 1) goto plexInit::@1
Adding number conversion cast (unumber) 1 in if((byte) plexInit::i#1!=(unumber)(const byte) plexInit::$1+(number) 1) goto plexInit::@1
Adding number conversion cast (unumber) plexSort::$1+1 in if((byte) plexSort::m#1!=(const byte) plexSort::$1+(number) 1) goto plexSort::@1
Adding number conversion cast (unumber) 1 in if((byte) plexSort::m#1!=(unumber)(const byte) plexSort::$1+(number) 1) goto plexSort::@1
Adding number conversion cast (unumber) init::$3+1 in if((byte) init::sx#1!=(const byte) init::$3+(number) 1) goto init::@1
Adding number conversion cast (unumber) 1 in if((byte) init::sx#1!=(unumber)(const byte) init::$3+(number) 1) goto init::@1
Adding number conversion cast (unumber) loop::$1+1 in if((byte) loop::sy#1!=(const byte) loop::$1+(number) 1) goto loop::@10
Adding number conversion cast (unumber) 1 in if((byte) loop::sy#1!=(unumber)(const byte) loop::$1+(number) 1) goto loop::@10
Adding number conversion cast (unumber) loop::$6+1 in if((byte) loop::ss#1!=(const byte) loop::$6+(number) 1) goto loop::@18
Adding number conversion cast (unumber) 1 in if((byte) loop::ss#1!=(unumber)(const byte) loop::$6+(number) 1) goto loop::@18
Adding number conversion cast (unumber) loop::$2+1 in if((byte) loop::sy#1!=(const byte) loop::$2+(number) 1) goto loop::@10
Adding number conversion cast (unumber) 1 in if((byte) loop::sy#1!=(unumber)(const byte) loop::$2+(number) 1) goto loop::@10
Adding number conversion cast (unumber) loop::$8+1 in if((byte) loop::ss#1!=(const byte) loop::$8+(number) 1) goto loop::@18
Adding number conversion cast (unumber) 1 in if((byte) loop::ss#1!=(unumber)(const byte) loop::$8+(number) 1) goto loop::@18
Successful SSA optimization PassNAddNumberTypeConversions
Simplifying constant integer cast (const byte) plexInit::$1+(unumber)(number) 1
Simplifying constant integer cast 1
@ -1669,9 +1669,9 @@ Simplifying constant integer cast (const byte) plexSort::$1+(unumber)(number) 1
Simplifying constant integer cast 1
Simplifying constant integer cast (const byte) init::$3+(unumber)(number) 1
Simplifying constant integer cast 1
Simplifying constant integer cast (const byte) loop::$1+(unumber)(number) 1
Simplifying constant integer cast (const byte) loop::$2+(unumber)(number) 1
Simplifying constant integer cast 1
Simplifying constant integer cast (const byte) loop::$6+(unumber)(number) 1
Simplifying constant integer cast (const byte) loop::$8+(unumber)(number) 1
Simplifying constant integer cast 1
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) 1
@ -1716,18 +1716,18 @@ Constant inlined init::$1 = (const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte
Constant inlined loop::sin_idx#0 = (byte) 0
Constant inlined init::$0 = (const byte) VIC_DEN#0|(const byte) VIC_RSEL#0
Constant inlined plexInit::screen#0 = (const byte*) SCREEN#0
Constant inlined loop::$2 = (const byte) PLEX_COUNT#0-(byte) 1
Constant inlined plex_sprite_msb#4 = (byte) 1
Constant inlined init::$5 = (byte)(const byte*) SPRITE#0/(byte) $40
Constant inlined plex_show_idx#1 = (byte) 0
Constant inlined plex_sprite_idx#1 = (byte) 0
Constant inlined plex_sprite_msb#1 = (byte) 1
Constant inlined init::$4 = (const byte*) SPRITE#0/(byte) $40
Constant inlined loop::$1 = (const byte) PLEX_COUNT#0-(byte) 1
Constant inlined loop::sy#0 = (byte) 0
Constant inlined plex_free_next#0 = (byte) 0
Constant inlined loop::$6 = (const byte) PLEX_COUNT#0-(byte) 1
Constant inlined loop::ss#0 = (byte) 0
Constant inlined init::sx#0 = (byte) 0
Constant inlined loop::$8 = (const byte) PLEX_COUNT#0-(byte) 1
Successful SSA optimization Pass2ConstantInlining
Consolidated array index constant in assignment *(PLEX_SORTED_IDX#0+1 + plexSort::$2)
Consolidated array index constant in assignment *(PLEX_SORTED_IDX#0+1 + plexSort::$5)
@ -1899,8 +1899,8 @@ loop::@11: scope:[loop] from loop::@5
[23] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0
to:loop::@6
loop::@6: scope:[loop] from loop::@11 loop::@6
[24] (byte~) loop::$4 ← *((const byte*) D011#0) & (const byte) VIC_RST8#0
[25] if((byte~) loop::$4!=(byte) 0) goto loop::@6
[24] (byte~) loop::$6 ← *((const byte*) D011#0) & (const byte) VIC_RST8#0
[25] if((byte~) loop::$6!=(byte) 0) goto loop::@6
to:loop::@7
loop::@7: scope:[loop] from loop::@12 loop::@6
[26] (byte) loop::ss#5 ← phi( loop::@6/(byte) 0 loop::@12/(byte) loop::ss#1 )
@ -2088,7 +2088,7 @@ VARIABLE REGISTER WEIGHTS
(word) init::xp#1 7.333333333333333
(word) init::xp#2 8.25
(void()) loop()
(byte~) loop::$4 202.0
(byte~) loop::$6 202.0
(byte) loop::plexFreeNextYpos1_return
(byte) loop::plexFreeNextYpos1_return#0 551.0
(byte) loop::rasterY
@ -2178,7 +2178,7 @@ Initial phi equivalence classes
[ init::xp#2 init::xp#1 ]
[ init::ss#2 init::ss#1 ]
[ plexInit::i#2 plexInit::i#1 ]
Added variable loop::$4 to zero page equivalence class [ loop::$4 ]
Added variable loop::$6 to zero page equivalence class [ loop::$6 ]
Added variable loop::plexFreeNextYpos1_return#0 to zero page equivalence class [ loop::plexFreeNextYpos1_return#0 ]
Added variable plexShowSprite::plex_sprite_idx2#0 to zero page equivalence class [ plexShowSprite::plex_sprite_idx2#0 ]
Added variable plexShowSprite::plexFreeAdd1_ypos#0 to zero page equivalence class [ plexShowSprite::plexFreeAdd1_ypos#0 ]
@ -2210,7 +2210,7 @@ Complete equivalence classes
[ init::xp#2 init::xp#1 ]
[ init::ss#2 init::ss#1 ]
[ plexInit::i#2 plexInit::i#1 ]
[ loop::$4 ]
[ loop::$6 ]
[ loop::plexFreeNextYpos1_return#0 ]
[ plexShowSprite::plex_sprite_idx2#0 ]
[ plexShowSprite::plexFreeAdd1_ypos#0 ]
@ -2241,7 +2241,7 @@ Allocated zp ZP_BYTE:13 [ init::sx#2 init::sx#1 ]
Allocated zp ZP_WORD:14 [ init::xp#2 init::xp#1 ]
Allocated zp ZP_BYTE:16 [ init::ss#2 init::ss#1 ]
Allocated zp ZP_BYTE:17 [ plexInit::i#2 plexInit::i#1 ]
Allocated zp ZP_BYTE:18 [ loop::$4 ]
Allocated zp ZP_BYTE:18 [ loop::$6 ]
Allocated zp ZP_BYTE:19 [ loop::plexFreeNextYpos1_return#0 ]
Allocated zp ZP_BYTE:20 [ plexShowSprite::plex_sprite_idx2#0 ]
Allocated zp ZP_BYTE:21 [ plexShowSprite::plexFreeAdd1_ypos#0 ]
@ -2333,7 +2333,7 @@ main: {
// loop
// The raster loop
loop: {
.label _4 = $12
.label _6 = $12
.label y_idx = 3
.label sy = 4
.label sin_idx = 2
@ -2411,12 +2411,12 @@ loop: {
jmp b6
// loop::@6
b6:
// [24] (byte~) loop::$4 ← *((const byte*) D011#0) & (const byte) VIC_RST8#0 -- vbuz1=_deref_pbuc1_band_vbuc2
// [24] (byte~) loop::$6 ← *((const byte*) D011#0) & (const byte) VIC_RST8#0 -- vbuz1=_deref_pbuc1_band_vbuc2
lda #VIC_RST8
and D011
sta.z _4
// [25] if((byte~) loop::$4!=(byte) 0) goto loop::@6 -- vbuz1_neq_0_then_la1
lda.z _4
sta.z _6
// [25] if((byte~) loop::$6!=(byte) 0) goto loop::@6 -- vbuz1_neq_0_then_la1
lda.z _6
cmp #0
bne b6
// [26] phi from loop::@6 to loop::@7 [phi:loop::@6->loop::@7]
@ -2922,7 +2922,7 @@ Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ lo
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ loop::sy#2 loop::sy#1 ]
Statement [17] (byte) loop::y_idx#1 ← (byte) loop::y_idx#2 + (byte) 8 [ loop::sin_idx#6 loop::sy#2 loop::y_idx#1 ] ( main:3::loop:8 [ loop::sin_idx#6 loop::sy#2 loop::y_idx#1 ] ) always clobbers reg byte a
Statement [23] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 [ loop::sin_idx#1 ] ( main:3::loop:8 [ loop::sin_idx#1 ] ) always clobbers reg byte a
Statement [24] (byte~) loop::$4 ← *((const byte*) D011#0) & (const byte) VIC_RST8#0 [ loop::sin_idx#1 loop::$4 ] ( main:3::loop:8 [ loop::sin_idx#1 loop::$4 ] ) always clobbers reg byte a
Statement [24] (byte~) loop::$6 ← *((const byte*) D011#0) & (const byte) VIC_RST8#0 [ loop::sin_idx#1 loop::$6 ] ( main:3::loop:8 [ loop::sin_idx#1 loop::$6 ] ) always clobbers reg byte a
Statement [27] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 [ loop::sin_idx#1 plex_free_next#17 plex_sprite_idx#42 plex_show_idx#42 plex_sprite_msb#42 loop::ss#5 ] ( main:3::loop:8 [ loop::sin_idx#1 plex_free_next#17 plex_sprite_idx#42 plex_show_idx#42 plex_sprite_msb#42 loop::ss#5 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ plex_free_next#17 plex_free_next#13 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ plex_sprite_idx#42 plex_sprite_idx#15 ]
@ -2962,7 +2962,7 @@ Statement [12] if(*((const byte*) RASTER#0)!=(byte) $ff) goto loop::@2 [ loop::s
Statement [16] *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + (byte) loop::sy#2) ← *((const byte[$100]) YSIN#0 + (byte) loop::y_idx#2) [ loop::sin_idx#6 loop::y_idx#2 loop::sy#2 ] ( main:3::loop:8 [ loop::sin_idx#6 loop::y_idx#2 loop::sy#2 ] ) always clobbers reg byte a
Statement [17] (byte) loop::y_idx#1 ← (byte) loop::y_idx#2 + (byte) 8 [ loop::sin_idx#6 loop::sy#2 loop::y_idx#1 ] ( main:3::loop:8 [ loop::sin_idx#6 loop::sy#2 loop::y_idx#1 ] ) always clobbers reg byte a
Statement [23] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 [ loop::sin_idx#1 ] ( main:3::loop:8 [ loop::sin_idx#1 ] ) always clobbers reg byte a
Statement [24] (byte~) loop::$4 ← *((const byte*) D011#0) & (const byte) VIC_RST8#0 [ loop::sin_idx#1 loop::$4 ] ( main:3::loop:8 [ loop::sin_idx#1 loop::$4 ] ) always clobbers reg byte a
Statement [24] (byte~) loop::$6 ← *((const byte*) D011#0) & (const byte) VIC_RST8#0 [ loop::sin_idx#1 loop::$6 ] ( main:3::loop:8 [ loop::sin_idx#1 loop::$6 ] ) always clobbers reg byte a
Statement [27] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 [ loop::sin_idx#1 plex_free_next#17 plex_sprite_idx#42 plex_show_idx#42 plex_sprite_msb#42 loop::ss#5 ] ( main:3::loop:8 [ loop::sin_idx#1 plex_free_next#17 plex_sprite_idx#42 plex_show_idx#42 plex_sprite_msb#42 loop::ss#5 ] ) always clobbers reg byte a
Statement [34] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 [ loop::sin_idx#1 ] ( main:3::loop:8 [ loop::sin_idx#1 ] ) always clobbers reg byte a
Statement [35] (byte) plexShowSprite::plex_sprite_idx2#0 ← (byte) plex_sprite_idx#42 << (byte) 1 [ plex_free_next#17 plex_sprite_idx#42 plex_show_idx#42 plex_sprite_msb#42 plexShowSprite::plex_sprite_idx2#0 ] ( main:3::loop:8::plexShowSprite:31 [ loop::sin_idx#1 loop::ss#5 plex_free_next#17 plex_sprite_idx#42 plex_show_idx#42 plex_sprite_msb#42 plexShowSprite::plex_sprite_idx2#0 ] ) always clobbers reg byte a
@ -3000,7 +3000,7 @@ Potential registers zp ZP_BYTE:13 [ init::sx#2 init::sx#1 ] : zp ZP_BYTE:13 , re
Potential registers zp ZP_WORD:14 [ init::xp#2 init::xp#1 ] : zp ZP_WORD:14 ,
Potential registers zp ZP_BYTE:16 [ init::ss#2 init::ss#1 ] : zp ZP_BYTE:16 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:17 [ plexInit::i#2 plexInit::i#1 ] : zp ZP_BYTE:17 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:18 [ loop::$4 ] : zp ZP_BYTE:18 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:18 [ loop::$6 ] : zp ZP_BYTE:18 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:19 [ loop::plexFreeNextYpos1_return#0 ] : zp ZP_BYTE:19 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:20 [ plexShowSprite::plex_sprite_idx2#0 ] : zp ZP_BYTE:20 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:21 [ plexShowSprite::plexFreeAdd1_ypos#0 ] : zp ZP_BYTE:21 , reg byte a , reg byte x , reg byte y ,
@ -3019,7 +3019,7 @@ Potential registers zp ZP_BYTE:33 [ init::$8 ] : zp ZP_BYTE:33 , reg byte a , re
REGISTER UPLIFT SCOPES
Uplift Scope [plexSort] 3,622.83: zp ZP_BYTE:11 [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] 303: zp ZP_BYTE:12 [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] 202: zp ZP_BYTE:32 [ plexSort::s#2 ] 193.58: zp ZP_BYTE:10 [ plexSort::m#2 plexSort::m#1 ] 150.38: zp ZP_BYTE:31 [ plexSort::nxt_y#0 ] 30.3: zp ZP_BYTE:30 [ plexSort::nxt_idx#0 ]
Uplift Scope [loop] 551: zp ZP_BYTE:19 [ loop::plexFreeNextYpos1_return#0 ] 252.5: zp ZP_BYTE:4 [ loop::sy#2 loop::sy#1 ] 246.33: zp ZP_BYTE:3 [ loop::y_idx#2 loop::y_idx#1 loop::y_idx#4 ] 202: zp ZP_BYTE:18 [ loop::$4 ] 185.17: zp ZP_BYTE:9 [ loop::ss#5 loop::ss#1 ] 5.13: zp ZP_BYTE:2 [ loop::sin_idx#6 loop::sin_idx#1 ]
Uplift Scope [loop] 551: zp ZP_BYTE:19 [ loop::plexFreeNextYpos1_return#0 ] 252.5: zp ZP_BYTE:4 [ loop::sy#2 loop::sy#1 ] 246.33: zp ZP_BYTE:3 [ loop::y_idx#2 loop::y_idx#1 loop::y_idx#4 ] 202: zp ZP_BYTE:18 [ loop::$6 ] 185.17: zp ZP_BYTE:9 [ loop::ss#5 loop::ss#1 ] 5.13: zp ZP_BYTE:2 [ loop::sin_idx#6 loop::sin_idx#1 ]
Uplift Scope [init] 33: zp ZP_BYTE:16 [ init::ss#2 init::ss#1 ] 25.3: zp ZP_BYTE:13 [ init::sx#2 init::sx#1 ] 22: zp ZP_BYTE:33 [ init::$8 ] 15.58: zp ZP_WORD:14 [ init::xp#2 init::xp#1 ]
Uplift Scope [] 26.88: zp ZP_BYTE:8 [ plex_sprite_msb#42 plex_sprite_msb#16 plex_sprite_msb#3 ] 25.28: zp ZP_BYTE:5 [ plex_free_next#17 plex_free_next#13 ] 15.99: zp ZP_BYTE:7 [ plex_show_idx#42 plex_show_idx#15 ] 15.16: zp ZP_BYTE:6 [ plex_sprite_idx#42 plex_sprite_idx#15 ]
Uplift Scope [plexInit] 38.5: zp ZP_BYTE:17 [ plexInit::i#2 plexInit::i#1 ]
@ -3028,7 +3028,7 @@ Uplift Scope [main]
Uplifting [plexSort] best 84432 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 ZP_BYTE:32 [ plexSort::s#2 ] zp ZP_BYTE:10 [ plexSort::m#2 plexSort::m#1 ] zp ZP_BYTE:31 [ plexSort::nxt_y#0 ] zp ZP_BYTE:30 [ plexSort::nxt_idx#0 ]
Limited combination testing to 10 combinations of 972 possible.
Uplifting [loop] best 83232 combination zp ZP_BYTE:19 [ loop::plexFreeNextYpos1_return#0 ] reg byte y [ loop::sy#2 loop::sy#1 ] zp ZP_BYTE:3 [ loop::y_idx#2 loop::y_idx#1 loop::y_idx#4 ] zp ZP_BYTE:18 [ loop::$4 ] zp ZP_BYTE:9 [ loop::ss#5 loop::ss#1 ] zp ZP_BYTE:2 [ loop::sin_idx#6 loop::sin_idx#1 ]
Uplifting [loop] best 83232 combination zp ZP_BYTE:19 [ loop::plexFreeNextYpos1_return#0 ] reg byte y [ loop::sy#2 loop::sy#1 ] zp ZP_BYTE:3 [ loop::y_idx#2 loop::y_idx#1 loop::y_idx#4 ] zp ZP_BYTE:18 [ loop::$6 ] zp ZP_BYTE:9 [ loop::ss#5 loop::ss#1 ] zp ZP_BYTE:2 [ loop::sin_idx#6 loop::sin_idx#1 ]
Limited combination testing to 10 combinations of 1296 possible.
Uplifting [init] best 82982 combination reg byte x [ init::ss#2 init::ss#1 ] reg byte x [ init::sx#2 init::sx#1 ] zp ZP_BYTE:33 [ init::$8 ] zp ZP_WORD:14 [ init::xp#2 init::xp#1 ]
Limited combination testing to 10 combinations of 36 possible.
@ -3042,8 +3042,8 @@ Attempting to uplift remaining variables inzp ZP_BYTE:19 [ loop::plexFreeNextYpo
Uplifting [loop] best 82852 combination zp ZP_BYTE:19 [ loop::plexFreeNextYpos1_return#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:3 [ loop::y_idx#2 loop::y_idx#1 loop::y_idx#4 ]
Uplifting [loop] best 82122 combination reg byte x [ loop::y_idx#2 loop::y_idx#1 loop::y_idx#4 ]
Attempting to uplift remaining variables inzp ZP_BYTE:18 [ loop::$4 ]
Uplifting [loop] best 81522 combination reg byte a [ loop::$4 ]
Attempting to uplift remaining variables inzp ZP_BYTE:18 [ loop::$6 ]
Uplifting [loop] best 81522 combination reg byte a [ loop::$6 ]
Attempting to uplift remaining variables inzp ZP_BYTE:32 [ plexSort::s#2 ]
Uplifting [plexSort] best 80922 combination reg byte x [ plexSort::s#2 ]
Attempting to uplift remaining variables inzp ZP_BYTE:10 [ plexSort::m#2 plexSort::m#1 ]
@ -3237,10 +3237,10 @@ loop: {
jmp b6
// loop::@6
b6:
// [24] (byte~) loop::$4 ← *((const byte*) D011#0) & (const byte) VIC_RST8#0 -- vbuaa=_deref_pbuc1_band_vbuc2
// [24] (byte~) loop::$6 ← *((const byte*) D011#0) & (const byte) VIC_RST8#0 -- vbuaa=_deref_pbuc1_band_vbuc2
lda #VIC_RST8
and D011
// [25] if((byte~) loop::$4!=(byte) 0) goto loop::@6 -- vbuaa_neq_0_then_la1
// [25] if((byte~) loop::$6!=(byte) 0) goto loop::@6 -- vbuaa_neq_0_then_la1
cmp #0
bne b6
// [26] phi from loop::@6 to loop::@7 [phi:loop::@6->loop::@7]
@ -3888,7 +3888,7 @@ FINAL SYMBOL TABLE
(word) init::xp#1 xp zp ZP_WORD:6 7.333333333333333
(word) init::xp#2 xp zp ZP_WORD:6 8.25
(void()) loop()
(byte~) loop::$4 reg byte a 202.0
(byte~) loop::$6 reg byte a 202.0
(label) loop::@1
(label) loop::@10
(label) loop::@11
@ -4008,7 +4008,7 @@ reg byte x [ init::sx#2 init::sx#1 ]
zp ZP_WORD:6 [ init::xp#2 init::xp#1 ]
reg byte x [ init::ss#2 init::ss#1 ]
reg byte x [ plexInit::i#2 plexInit::i#1 ]
reg byte a [ loop::$4 ]
reg byte a [ loop::$6 ]
zp ZP_BYTE:8 [ plexShowSprite::plex_sprite_idx2#0 loop::plexFreeNextYpos1_return#0 ]
reg byte a [ plexShowSprite::plexFreeAdd1_ypos#0 ]
reg byte a [ plexShowSprite::plexFreeAdd1_$0#0 ]
@ -4153,11 +4153,11 @@ loop: {
// loop::@6
b6:
// *D011&VIC_RST8
// [24] (byte~) loop::$4 ← *((const byte*) D011#0) & (const byte) VIC_RST8#0 -- vbuaa=_deref_pbuc1_band_vbuc2
// [24] (byte~) loop::$6 ← *((const byte*) D011#0) & (const byte) VIC_RST8#0 -- vbuaa=_deref_pbuc1_band_vbuc2
lda #VIC_RST8
and D011
// while((*D011&VIC_RST8)!=0)
// [25] if((byte~) loop::$4!=(byte) 0) goto loop::@6 -- vbuaa_neq_0_then_la1
// [25] if((byte~) loop::$6!=(byte) 0) goto loop::@6 -- vbuaa_neq_0_then_la1
cmp #0
bne b6
// [26] phi from loop::@6 to loop::@7 [phi:loop::@6->loop::@7]

View File

@ -69,7 +69,7 @@
(word) init::xp#1 xp zp ZP_WORD:6 7.333333333333333
(word) init::xp#2 xp zp ZP_WORD:6 8.25
(void()) loop()
(byte~) loop::$4 reg byte a 202.0
(byte~) loop::$6 reg byte a 202.0
(label) loop::@1
(label) loop::@10
(label) loop::@11
@ -189,7 +189,7 @@ reg byte x [ init::sx#2 init::sx#1 ]
zp ZP_WORD:6 [ init::xp#2 init::xp#1 ]
reg byte x [ init::ss#2 init::ss#1 ]
reg byte x [ plexInit::i#2 plexInit::i#1 ]
reg byte a [ loop::$4 ]
reg byte a [ loop::$6 ]
zp ZP_BYTE:8 [ plexShowSprite::plex_sprite_idx2#0 loop::plexFreeNextYpos1_return#0 ]
reg byte a [ plexShowSprite::plexFreeAdd1_ypos#0 ]
reg byte a [ plexShowSprite::plexFreeAdd1_$0#0 ]

View File

@ -26,11 +26,11 @@ main::@return: scope:[main] from main
nmi2: scope:[nmi2] from
[14] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0)
asm { ldaCIA2_INTERRUPT }
[16] (byte~) nmi2::$0 ← *((byte*) sample#0) >> (byte) 4
[17] *((const byte*) SID_VOLUME#0) ← (byte~) nmi2::$0
[16] (byte~) nmi2::$1 ← *((byte*) sample#0) >> (byte) 4
[17] *((const byte*) SID_VOLUME#0) ← (byte~) nmi2::$1
[18] (byte*) sample#1 ← ++ (byte*) sample#0
[19] (byte~) nmi2::$1 ← > (byte*) sample#1
[20] if((byte~) nmi2::$1!=>(const byte[SAMPLE_SIZE#0]) SAMPLE#0+(word) $6100) goto nmi2::@1
[19] (byte~) nmi2::$2 ← > (byte*) sample#1
[20] if((byte~) nmi2::$2!=>(const byte[SAMPLE_SIZE#0]) SAMPLE#0+(word) $6100) goto nmi2::@1
to:nmi2::@2
nmi2::@2: scope:[nmi2] from nmi2
[21] (byte*) sample#2 ← (const byte[SAMPLE_SIZE#0]) SAMPLE#0
@ -46,8 +46,8 @@ nmi2::@return: scope:[nmi2] from nmi2::@1
nmi: scope:[nmi] from
[26] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0)
asm { ldaCIA2_INTERRUPT }
[28] (byte~) nmi::$0 ← *((byte*) sample#0) & (byte) $f
[29] *((const byte*) SID_VOLUME#0) ← (byte~) nmi::$0
[28] (byte~) nmi::$1 ← *((byte*) sample#0) & (byte) $f
[29] *((const byte*) SID_VOLUME#0) ← (byte~) nmi::$1
[30] *((const void()**) KERNEL_NMI#0) ← &interrupt(HARDWARE_ALL)(void()) nmi2()
[31] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0)
to:nmi::@return

View File

@ -40,10 +40,10 @@ nmi: scope:[nmi] from
(byte*) sample#4 ← phi( @7/(byte*) sample#7 )
*((byte*) BORDERCOL#0) ← ++ *((byte*) BORDERCOL#0)
asm { ldaCIA2_INTERRUPT }
(number~) nmi::$0 ← *((byte*) sample#4) & (number) $f
*((byte*) SID_VOLUME#0) ← (number~) nmi::$0
(void()*~) nmi::$1 ← & interrupt(HARDWARE_ALL)(void()) nmi2()
*((void()**) KERNEL_NMI#0) ← (void()*~) nmi::$1
(number~) nmi::$1 ← *((byte*) sample#4) & (number) $f
*((byte*) SID_VOLUME#0) ← (number~) nmi::$1
(void()*~) nmi::$2 ← & interrupt(HARDWARE_ALL)(void()) nmi2()
*((void()**) KERNEL_NMI#0) ← (void()*~) nmi::$2
*((byte*) BORDERCOL#0) ← -- *((byte*) BORDERCOL#0)
to:nmi::@return
nmi::@return: scope:[nmi] from nmi
@ -53,20 +53,20 @@ nmi2: scope:[nmi2] from
(byte*) sample#5 ← phi( @7/(byte*) sample#7 )
*((byte*) BORDERCOL#0) ← ++ *((byte*) BORDERCOL#0)
asm { ldaCIA2_INTERRUPT }
(byte~) nmi2::$0 ← *((byte*) sample#5) >> (number) 4
*((byte*) SID_VOLUME#0) ← (byte~) nmi2::$0
(byte~) nmi2::$1 ← *((byte*) sample#5) >> (number) 4
*((byte*) SID_VOLUME#0) ← (byte~) nmi2::$1
(byte*) sample#1 ← ++ (byte*) sample#5
(byte~) nmi2::$1 ← > (byte*) sample#1
(byte*~) nmi2::$2 ← (byte[SAMPLE_SIZE#0]) SAMPLE#0 + (number) $6100
(byte~) nmi2::$3 ← > (byte*~) nmi2::$2
(bool~) nmi2::$4 ← (byte~) nmi2::$1 == (byte~) nmi2::$3
(bool~) nmi2::$5 ← ! (bool~) nmi2::$4
if((bool~) nmi2::$5) goto nmi2::@1
(byte~) nmi2::$2 ← > (byte*) sample#1
(byte*~) nmi2::$3 ← (byte[SAMPLE_SIZE#0]) SAMPLE#0 + (number) $6100
(byte~) nmi2::$4 ← > (byte*~) nmi2::$3
(bool~) nmi2::$5 ← (byte~) nmi2::$2 == (byte~) nmi2::$4
(bool~) nmi2::$6 ← ! (bool~) nmi2::$5
if((bool~) nmi2::$6) goto nmi2::@1
to:nmi2::@2
nmi2::@1: scope:[nmi2] from nmi2 nmi2::@2
(byte*) sample#8 ← phi( nmi2/(byte*) sample#1 nmi2::@2/(byte*) sample#2 )
(void()*~) nmi2::$6 ← & interrupt(HARDWARE_ALL)(void()) nmi()
*((void()**) KERNEL_NMI#0) ← (void()*~) nmi2::$6
(void()*~) nmi2::$7 ← & interrupt(HARDWARE_ALL)(void()) nmi()
*((void()**) KERNEL_NMI#0) ← (void()*~) nmi2::$7
*((byte*) BORDERCOL#0) ← -- *((byte*) BORDERCOL#0)
to:nmi2::@return
nmi2::@2: scope:[nmi2] from nmi2
@ -113,17 +113,17 @@ SYMBOL TABLE SSA
(void()*~) main::$0
(label) main::@return
interrupt(HARDWARE_ALL)(void()) nmi()
(number~) nmi::$0
(void()*~) nmi::$1
(number~) nmi::$1
(void()*~) nmi::$2
(label) nmi::@return
interrupt(HARDWARE_ALL)(void()) nmi2()
(byte~) nmi2::$0
(byte~) nmi2::$1
(byte*~) nmi2::$2
(byte~) nmi2::$3
(bool~) nmi2::$4
(byte~) nmi2::$2
(byte*~) nmi2::$3
(byte~) nmi2::$4
(bool~) nmi2::$5
(void()*~) nmi2::$6
(bool~) nmi2::$6
(void()*~) nmi2::$7
(label) nmi2::@1
(label) nmi2::@2
(label) nmi2::@return
@ -143,10 +143,10 @@ Adding number conversion cast (unumber) $6100 in (word) SAMPLE_SIZE#0 ← (numbe
Adding number conversion cast (unumber) $88 in *((word*) CIA2_TIMER_A#0) ← (number) $88
Adding number conversion cast (unumber) $81 in *((byte*) CIA2_INTERRUPT#0) ← (number) $81
Adding number conversion cast (unumber) 1 in *((byte*) CIA2_TIMER_A_CONTROL#0) ← (number) 1
Adding number conversion cast (unumber) $f in (number~) nmi::$0 ← *((byte*) sample#4) & (number) $f
Adding number conversion cast (unumber) nmi::$0 in (number~) nmi::$0 ← *((byte*) sample#4) & (unumber)(number) $f
Adding number conversion cast (unumber) 4 in (byte~) nmi2::$0 ← *((byte*) sample#5) >> (number) 4
Adding number conversion cast (unumber) $6100 in (byte*~) nmi2::$2 ← (byte[SAMPLE_SIZE#0]) SAMPLE#0 + (number) $6100
Adding number conversion cast (unumber) $f in (number~) nmi::$1 ← *((byte*) sample#4) & (number) $f
Adding number conversion cast (unumber) nmi::$1 in (number~) nmi::$1 ← *((byte*) sample#4) & (unumber)(number) $f
Adding number conversion cast (unumber) 4 in (byte~) nmi2::$1 ← *((byte*) sample#5) >> (number) 4
Adding number conversion cast (unumber) $6100 in (byte*~) nmi2::$3 ← (byte[SAMPLE_SIZE#0]) SAMPLE#0 + (number) $6100
Successful SSA optimization PassNAddNumberTypeConversions
Inlining cast (byte*) BORDERCOL#0 ← (byte*)(number) $d020
Inlining cast (word*) CIA2_TIMER_A#0 ← (word*)(number) $dd04
@ -184,8 +184,8 @@ Finalized unsigned number type (byte) $f
Finalized unsigned number type (byte) 4
Finalized unsigned number type (word) $6100
Successful SSA optimization PassNFinalizeNumberTypeConversions
Inferred type updated to byte in (unumber~) nmi::$0 ← *((byte*) sample#4) & (byte) $f
Inversing boolean not [39] (bool~) nmi2::$5 ← (byte~) nmi2::$1 != (byte~) nmi2::$3 from [38] (bool~) nmi2::$4 ← (byte~) nmi2::$1 == (byte~) nmi2::$3
Inferred type updated to byte in (unumber~) nmi::$1 ← *((byte*) sample#4) & (byte) $f
Inversing boolean not [39] (bool~) nmi2::$6 ← (byte~) nmi2::$2 != (byte~) nmi2::$4 from [38] (bool~) nmi2::$5 ← (byte~) nmi2::$2 == (byte~) nmi2::$4
Successful SSA optimization Pass2UnaryNotSimplification
Alias candidate removed (volatile)(byte[SAMPLE_SIZE#0]) SAMPLE#0 = (byte*) sample#0 (byte*) sample#7
Alias (byte*) sample#3 = (byte*) sample#6 (byte*) sample#8
@ -195,11 +195,11 @@ Identical Phi Values (byte*) sample#4 (byte*) sample#7
Identical Phi Values (byte*) sample#5 (byte*) sample#7
Identical Phi Values (byte*) sample#7 (byte*) sample#0
Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition (bool~) nmi2::$5 [40] if((byte~) nmi2::$1!=(byte~) nmi2::$3) goto nmi2::@1
Simple Condition (bool~) nmi2::$6 [40] if((byte~) nmi2::$2!=(byte~) nmi2::$4) goto nmi2::@1
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant right-side identified [13] (void()*~) main::$0 ← & interrupt(HARDWARE_ALL)(void()) nmi()
Constant right-side identified [25] (void()*~) nmi::$1 ← & interrupt(HARDWARE_ALL)(void()) nmi2()
Constant right-side identified [42] (void()*~) nmi2::$6 ← & interrupt(HARDWARE_ALL)(void()) nmi()
Constant right-side identified [25] (void()*~) nmi::$2 ← & interrupt(HARDWARE_ALL)(void()) nmi2()
Constant right-side identified [42] (void()*~) nmi2::$7 ← & interrupt(HARDWARE_ALL)(void()) nmi()
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) BORDERCOL#0 = (byte*) 53280
Constant (const word*) CIA2_TIMER_A#0 = (word*) 56580
@ -211,22 +211,22 @@ Constant (const byte*) SID_VOLUME#0 = (byte*) 54296
Constant (const word) SAMPLE_SIZE#0 = $6100
Constant (const byte[SAMPLE_SIZE#0]) SAMPLE#0 = kickasm {{ .import binary "moments_sample.bin" }}
Constant (const void()*) main::$0 = &nmi
Constant (const void()*) nmi::$1 = &nmi2
Constant (const void()*) nmi2::$6 = &nmi
Constant (const void()*) nmi::$2 = &nmi2
Constant (const void()*) nmi2::$7 = &nmi
Successful SSA optimization Pass2ConstantIdentification
Constant right-side identified [23] (byte*~) nmi2::$2 ← (const byte[SAMPLE_SIZE#0]) SAMPLE#0 + (word) $6100
Constant right-side identified [23] (byte*~) nmi2::$3 ← (const byte[SAMPLE_SIZE#0]) SAMPLE#0 + (word) $6100
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) nmi2::$2 = SAMPLE#0+$6100
Constant (const byte*) nmi2::$3 = SAMPLE#0+$6100
Successful SSA optimization Pass2ConstantIdentification
Constant right-side identified [23] (byte~) nmi2::$3 ← > (const byte*) nmi2::$2
Constant right-side identified [23] (byte~) nmi2::$4 ← > (const byte*) nmi2::$3
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) nmi2::$3 = >nmi2::$2
Constant (const byte) nmi2::$4 = >nmi2::$3
Successful SSA optimization Pass2ConstantIdentification
Constant inlined nmi2::$6 = &interrupt(HARDWARE_ALL)(void()) nmi()
Constant inlined nmi2::$3 = >(const byte[SAMPLE_SIZE#0]) SAMPLE#0+(word) $6100
Constant inlined nmi::$2 = &interrupt(HARDWARE_ALL)(void()) nmi2()
Constant inlined nmi2::$4 = >(const byte[SAMPLE_SIZE#0]) SAMPLE#0+(word) $6100
Constant inlined nmi2::$7 = &interrupt(HARDWARE_ALL)(void()) nmi()
Constant inlined nmi2::$3 = (const byte[SAMPLE_SIZE#0]) SAMPLE#0+(word) $6100
Constant inlined main::$0 = &interrupt(HARDWARE_ALL)(void()) nmi()
Constant inlined nmi::$1 = &interrupt(HARDWARE_ALL)(void()) nmi2()
Constant inlined nmi2::$2 = (const byte[SAMPLE_SIZE#0]) SAMPLE#0+(word) $6100
Successful SSA optimization Pass2ConstantInlining
Added new block during phi lifting nmi2::@3(between nmi2 and nmi2::@1)
Adding NOP phi() at start of @begin
@ -277,11 +277,11 @@ main::@return: scope:[main] from main
nmi2: scope:[nmi2] from
[14] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0)
asm { ldaCIA2_INTERRUPT }
[16] (byte~) nmi2::$0 ← *((byte*) sample#0) >> (byte) 4
[17] *((const byte*) SID_VOLUME#0) ← (byte~) nmi2::$0
[16] (byte~) nmi2::$1 ← *((byte*) sample#0) >> (byte) 4
[17] *((const byte*) SID_VOLUME#0) ← (byte~) nmi2::$1
[18] (byte*) sample#1 ← ++ (byte*) sample#0
[19] (byte~) nmi2::$1 ← > (byte*) sample#1
[20] if((byte~) nmi2::$1!=>(const byte[SAMPLE_SIZE#0]) SAMPLE#0+(word) $6100) goto nmi2::@1
[19] (byte~) nmi2::$2 ← > (byte*) sample#1
[20] if((byte~) nmi2::$2!=>(const byte[SAMPLE_SIZE#0]) SAMPLE#0+(word) $6100) goto nmi2::@1
to:nmi2::@2
nmi2::@2: scope:[nmi2] from nmi2
[21] (byte*) sample#2 ← (const byte[SAMPLE_SIZE#0]) SAMPLE#0
@ -297,8 +297,8 @@ nmi2::@return: scope:[nmi2] from nmi2::@1
nmi: scope:[nmi] from
[26] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0)
asm { ldaCIA2_INTERRUPT }
[28] (byte~) nmi::$0 ← *((byte*) sample#0) & (byte) $f
[29] *((const byte*) SID_VOLUME#0) ← (byte~) nmi::$0
[28] (byte~) nmi::$1 ← *((byte*) sample#0) & (byte) $f
[29] *((const byte*) SID_VOLUME#0) ← (byte~) nmi::$1
[30] *((const void()**) KERNEL_NMI#0) ← &interrupt(HARDWARE_ALL)(void()) nmi2()
[31] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0)
to:nmi::@return
@ -319,10 +319,10 @@ VARIABLE REGISTER WEIGHTS
(byte*) SID_VOLUME
(void()) main()
interrupt(HARDWARE_ALL)(void()) nmi()
(byte~) nmi::$0 4.0
(byte~) nmi::$1 4.0
interrupt(HARDWARE_ALL)(void()) nmi2()
(byte~) nmi2::$0 4.0
(byte~) nmi2::$1 4.0
(byte~) nmi2::$2 4.0
(byte*) sample
(byte*) sample#0 1.3333333333333333
(byte*) sample#1 2.0
@ -332,18 +332,18 @@ interrupt(HARDWARE_ALL)(void()) nmi2()
Initial phi equivalence classes
[ sample#3 sample#1 sample#2 ]
Coalescing volatile variable equivalence classes [ sample#0 ] and [ sample#3 sample#1 sample#2 ]
Added variable nmi2::$0 to zero page equivalence class [ nmi2::$0 ]
Added variable nmi2::$1 to zero page equivalence class [ nmi2::$1 ]
Added variable nmi::$0 to zero page equivalence class [ nmi::$0 ]
Added variable nmi2::$2 to zero page equivalence class [ nmi2::$2 ]
Added variable nmi::$1 to zero page equivalence class [ nmi::$1 ]
Complete equivalence classes
[ sample#0 sample#3 sample#1 sample#2 ]
[ nmi2::$0 ]
[ nmi2::$1 ]
[ nmi::$0 ]
[ nmi2::$2 ]
[ nmi::$1 ]
Allocated zp ZP_WORD:2 [ sample#0 sample#3 sample#1 sample#2 ]
Allocated zp ZP_BYTE:4 [ nmi2::$0 ]
Allocated zp ZP_BYTE:5 [ nmi2::$1 ]
Allocated zp ZP_BYTE:6 [ nmi::$0 ]
Allocated zp ZP_BYTE:4 [ nmi2::$1 ]
Allocated zp ZP_BYTE:5 [ nmi2::$2 ]
Allocated zp ZP_BYTE:6 [ nmi::$1 ]
INITIAL ASM
Target platform is c64basic
@ -438,8 +438,8 @@ main: {
}
// nmi2
nmi2: {
.label _0 = 4
.label _1 = 5
.label _1 = 4
.label _2 = 5
// entry interrupt(HARDWARE_ALL)
sta rega+1
stx regx+1
@ -448,28 +448,28 @@ nmi2: {
inc BORDERCOL
// asm { ldaCIA2_INTERRUPT }
lda CIA2_INTERRUPT
// [16] (byte~) nmi2::$0 ← *((byte*) sample#0) >> (byte) 4 -- vbuz1=_deref_pbuz2_ror_4
// [16] (byte~) nmi2::$1 ← *((byte*) sample#0) >> (byte) 4 -- vbuz1=_deref_pbuz2_ror_4
ldy #0
lda (sample),y
lsr
lsr
lsr
lsr
sta.z _0
// [17] *((const byte*) SID_VOLUME#0) ← (byte~) nmi2::$0 -- _deref_pbuc1=vbuz1
lda.z _0
sta.z _1
// [17] *((const byte*) SID_VOLUME#0) ← (byte~) nmi2::$1 -- _deref_pbuc1=vbuz1
lda.z _1
sta SID_VOLUME
// [18] (byte*) sample#1 ← ++ (byte*) sample#0 -- pbuz1=_inc_pbuz1
inc.z sample
bne !+
inc.z sample+1
!:
// [19] (byte~) nmi2::$1 ← > (byte*) sample#1 -- vbuz1=_hi_pbuz2
// [19] (byte~) nmi2::$2 ← > (byte*) sample#1 -- vbuz1=_hi_pbuz2
lda.z sample+1
sta.z _1
// [20] if((byte~) nmi2::$1!=>(const byte[SAMPLE_SIZE#0]) SAMPLE#0+(word) $6100) goto nmi2::@1 -- vbuz1_neq_vbuc1_then_la1
sta.z _2
// [20] if((byte~) nmi2::$2!=>(const byte[SAMPLE_SIZE#0]) SAMPLE#0+(word) $6100) goto nmi2::@1 -- vbuz1_neq_vbuc1_then_la1
lda #>SAMPLE+$6100
cmp.z _1
cmp.z _2
bne b1_from_nmi2
jmp b2
// nmi2::@2
@ -507,7 +507,7 @@ nmi2: {
}
// nmi
nmi: {
.label _0 = 6
.label _1 = 6
// entry interrupt(HARDWARE_ALL)
sta rega+1
stx regx+1
@ -516,13 +516,13 @@ nmi: {
inc BORDERCOL
// asm { ldaCIA2_INTERRUPT }
lda CIA2_INTERRUPT
// [28] (byte~) nmi::$0 ← *((byte*) sample#0) & (byte) $f -- vbuz1=_deref_pbuz2_band_vbuc1
// [28] (byte~) nmi::$1 ← *((byte*) sample#0) & (byte) $f -- vbuz1=_deref_pbuz2_band_vbuc1
lda #$f
ldy #0
and (sample),y
sta.z _0
// [29] *((const byte*) SID_VOLUME#0) ← (byte~) nmi::$0 -- _deref_pbuc1=vbuz1
lda.z _0
sta.z _1
// [29] *((const byte*) SID_VOLUME#0) ← (byte~) nmi::$1 -- _deref_pbuc1=vbuz1
lda.z _1
sta SID_VOLUME
// [30] *((const void()**) KERNEL_NMI#0) ← &interrupt(HARDWARE_ALL)(void()) nmi2() -- _deref_pptc1=pprc2
lda #<nmi2
@ -556,28 +556,28 @@ Statement [9] *((const word*) CIA2_TIMER_A#0) ← (byte) $88 [ ] ( main:3 [ ] )
Statement [10] *((const byte*) CIA2_INTERRUPT#0) ← (byte) $81 [ ] ( main:3 [ ] ) always clobbers reg byte a
Statement [11] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (byte) 1 [ ] ( main:3 [ ] ) always clobbers reg byte a
Statement asm { ldaCIA2_INTERRUPT } always clobbers reg byte a
Statement [16] (byte~) nmi2::$0 ← *((byte*) sample#0) >> (byte) 4 [ sample#0 nmi2::$0 ] ( [ sample#0 nmi2::$0 ] ) always clobbers reg byte a reg byte y
Statement [16] (byte~) nmi2::$1 ← *((byte*) sample#0) >> (byte) 4 [ sample#0 nmi2::$1 ] ( [ sample#0 nmi2::$1 ] ) always clobbers reg byte a reg byte y
Statement [21] (byte*) sample#2 ← (const byte[SAMPLE_SIZE#0]) SAMPLE#0 [ sample#2 ] ( [ sample#2 ] ) always clobbers reg byte a
Statement [23] *((const void()**) KERNEL_NMI#0) ← &interrupt(HARDWARE_ALL)(void()) nmi() [ ] ( [ ] ) always clobbers reg byte a
Statement [25] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y
Statement asm { ldaCIA2_INTERRUPT } always clobbers reg byte a
Statement [28] (byte~) nmi::$0 ← *((byte*) sample#0) & (byte) $f [ nmi::$0 ] ( [ nmi::$0 ] ) always clobbers reg byte a reg byte y
Statement [28] (byte~) nmi::$1 ← *((byte*) sample#0) & (byte) $f [ nmi::$1 ] ( [ nmi::$1 ] ) always clobbers reg byte a reg byte y
Statement [30] *((const void()**) KERNEL_NMI#0) ← &interrupt(HARDWARE_ALL)(void()) nmi2() [ ] ( [ ] ) always clobbers reg byte a
Statement [32] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y
Potential registers zp ZP_WORD:2 [ sample#0 sample#3 sample#1 sample#2 ] : zp ZP_WORD:2 ,
Potential registers zp ZP_BYTE:4 [ nmi2::$0 ] : zp ZP_BYTE:4 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:5 [ nmi2::$1 ] : zp ZP_BYTE:5 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:6 [ nmi::$0 ] : zp ZP_BYTE:6 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:4 [ nmi2::$1 ] : zp ZP_BYTE:4 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:5 [ nmi2::$2 ] : zp ZP_BYTE:5 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:6 [ nmi::$1 ] : zp ZP_BYTE:6 , reg byte a , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [] 47.33: zp ZP_WORD:2 [ sample#0 sample#3 sample#1 sample#2 ]
Uplift Scope [nmi2] 4: zp ZP_BYTE:4 [ nmi2::$0 ] 4: zp ZP_BYTE:5 [ nmi2::$1 ]
Uplift Scope [nmi] 4: zp ZP_BYTE:6 [ nmi::$0 ]
Uplift Scope [nmi2] 4: zp ZP_BYTE:4 [ nmi2::$1 ] 4: zp ZP_BYTE:5 [ nmi2::$2 ]
Uplift Scope [nmi] 4: zp ZP_BYTE:6 [ nmi::$1 ]
Uplift Scope [main]
Uplifting [] best 546 combination zp ZP_WORD:2 [ sample#0 sample#3 sample#1 sample#2 ]
Uplifting [nmi2] best 534 combination reg byte a [ nmi2::$0 ] reg byte a [ nmi2::$1 ]
Uplifting [nmi] best 528 combination reg byte a [ nmi::$0 ]
Uplifting [nmi2] best 534 combination reg byte a [ nmi2::$1 ] reg byte a [ nmi2::$2 ]
Uplifting [nmi] best 528 combination reg byte a [ nmi::$1 ]
Uplifting [main] best 528 combination
ASSEMBLER BEFORE OPTIMIZATION
@ -680,23 +680,23 @@ nmi2: {
inc BORDERCOL
// asm { ldaCIA2_INTERRUPT }
lda CIA2_INTERRUPT
// [16] (byte~) nmi2::$0 ← *((byte*) sample#0) >> (byte) 4 -- vbuaa=_deref_pbuz1_ror_4
// [16] (byte~) nmi2::$1 ← *((byte*) sample#0) >> (byte) 4 -- vbuaa=_deref_pbuz1_ror_4
ldy #0
lda (sample),y
lsr
lsr
lsr
lsr
// [17] *((const byte*) SID_VOLUME#0) ← (byte~) nmi2::$0 -- _deref_pbuc1=vbuaa
// [17] *((const byte*) SID_VOLUME#0) ← (byte~) nmi2::$1 -- _deref_pbuc1=vbuaa
sta SID_VOLUME
// [18] (byte*) sample#1 ← ++ (byte*) sample#0 -- pbuz1=_inc_pbuz1
inc.z sample
bne !+
inc.z sample+1
!:
// [19] (byte~) nmi2::$1 ← > (byte*) sample#1 -- vbuaa=_hi_pbuz1
// [19] (byte~) nmi2::$2 ← > (byte*) sample#1 -- vbuaa=_hi_pbuz1
lda.z sample+1
// [20] if((byte~) nmi2::$1!=>(const byte[SAMPLE_SIZE#0]) SAMPLE#0+(word) $6100) goto nmi2::@1 -- vbuaa_neq_vbuc1_then_la1
// [20] if((byte~) nmi2::$2!=>(const byte[SAMPLE_SIZE#0]) SAMPLE#0+(word) $6100) goto nmi2::@1 -- vbuaa_neq_vbuc1_then_la1
cmp #>SAMPLE+$6100
bne b1_from_nmi2
jmp b2
@ -743,11 +743,11 @@ nmi: {
inc BORDERCOL
// asm { ldaCIA2_INTERRUPT }
lda CIA2_INTERRUPT
// [28] (byte~) nmi::$0 ← *((byte*) sample#0) & (byte) $f -- vbuaa=_deref_pbuz1_band_vbuc1
// [28] (byte~) nmi::$1 ← *((byte*) sample#0) & (byte) $f -- vbuaa=_deref_pbuz1_band_vbuc1
lda #$f
ldy #0
and (sample),y
// [29] *((const byte*) SID_VOLUME#0) ← (byte~) nmi::$0 -- _deref_pbuc1=vbuaa
// [29] *((const byte*) SID_VOLUME#0) ← (byte~) nmi::$1 -- _deref_pbuc1=vbuaa
sta SID_VOLUME
// [30] *((const void()**) KERNEL_NMI#0) ← &interrupt(HARDWARE_ALL)(void()) nmi2() -- _deref_pptc1=pprc2
lda #<nmi2
@ -825,11 +825,11 @@ FINAL SYMBOL TABLE
(void()) main()
(label) main::@return
interrupt(HARDWARE_ALL)(void()) nmi()
(byte~) nmi::$0 reg byte a 4.0
(byte~) nmi::$1 reg byte a 4.0
(label) nmi::@return
interrupt(HARDWARE_ALL)(void()) nmi2()
(byte~) nmi2::$0 reg byte a 4.0
(byte~) nmi2::$1 reg byte a 4.0
(byte~) nmi2::$2 reg byte a 4.0
(label) nmi2::@1
(label) nmi2::@2
(label) nmi2::@return
@ -840,9 +840,9 @@ interrupt(HARDWARE_ALL)(void()) nmi2()
(byte*) sample#3 sample zp ZP_WORD:2 40.0
zp ZP_WORD:2 [ sample#0 sample#3 sample#1 sample#2 ]
reg byte a [ nmi2::$0 ]
reg byte a [ nmi2::$1 ]
reg byte a [ nmi::$0 ]
reg byte a [ nmi2::$2 ]
reg byte a [ nmi::$1 ]
FINAL ASSEMBLER
@ -950,7 +950,7 @@ nmi2: {
// asm { ldaCIA2_INTERRUPT }
lda CIA2_INTERRUPT
// *sample >> 4
// [16] (byte~) nmi2::$0 ← *((byte*) sample#0) >> (byte) 4 -- vbuaa=_deref_pbuz1_ror_4
// [16] (byte~) nmi2::$1 ← *((byte*) sample#0) >> (byte) 4 -- vbuaa=_deref_pbuz1_ror_4
ldy #0
lda (sample),y
lsr
@ -958,7 +958,7 @@ nmi2: {
lsr
lsr
// *SID_VOLUME = *sample >> 4
// [17] *((const byte*) SID_VOLUME#0) ← (byte~) nmi2::$0 -- _deref_pbuc1=vbuaa
// [17] *((const byte*) SID_VOLUME#0) ← (byte~) nmi2::$1 -- _deref_pbuc1=vbuaa
sta SID_VOLUME
// sample++;
// [18] (byte*) sample#1 ← ++ (byte*) sample#0 -- pbuz1=_inc_pbuz1
@ -967,10 +967,10 @@ nmi2: {
inc.z sample+1
!:
// >sample
// [19] (byte~) nmi2::$1 ← > (byte*) sample#1 -- vbuaa=_hi_pbuz1
// [19] (byte~) nmi2::$2 ← > (byte*) sample#1 -- vbuaa=_hi_pbuz1
lda.z sample+1
// if (>sample == >(SAMPLE+$6100))
// [20] if((byte~) nmi2::$1!=>(const byte[SAMPLE_SIZE#0]) SAMPLE#0+(word) $6100) goto nmi2::@1 -- vbuaa_neq_vbuc1_then_la1
// [20] if((byte~) nmi2::$2!=>(const byte[SAMPLE_SIZE#0]) SAMPLE#0+(word) $6100) goto nmi2::@1 -- vbuaa_neq_vbuc1_then_la1
cmp #>SAMPLE+$6100
bne b1
// nmi2::@2
@ -1017,12 +1017,12 @@ nmi: {
// asm { ldaCIA2_INTERRUPT }
lda CIA2_INTERRUPT
// *sample & $0f
// [28] (byte~) nmi::$0 ← *((byte*) sample#0) & (byte) $f -- vbuaa=_deref_pbuz1_band_vbuc1
// [28] (byte~) nmi::$1 ← *((byte*) sample#0) & (byte) $f -- vbuaa=_deref_pbuz1_band_vbuc1
lda #$f
ldy #0
and (sample),y
// *SID_VOLUME = *sample & $0f
// [29] *((const byte*) SID_VOLUME#0) ← (byte~) nmi::$0 -- _deref_pbuc1=vbuaa
// [29] *((const byte*) SID_VOLUME#0) ← (byte~) nmi::$1 -- _deref_pbuc1=vbuaa
sta SID_VOLUME
// *KERNEL_NMI = &nmi2
// [30] *((const void()**) KERNEL_NMI#0) ← &interrupt(HARDWARE_ALL)(void()) nmi2() -- _deref_pptc1=pprc2

View File

@ -23,11 +23,11 @@
(void()) main()
(label) main::@return
interrupt(HARDWARE_ALL)(void()) nmi()
(byte~) nmi::$0 reg byte a 4.0
(byte~) nmi::$1 reg byte a 4.0
(label) nmi::@return
interrupt(HARDWARE_ALL)(void()) nmi2()
(byte~) nmi2::$0 reg byte a 4.0
(byte~) nmi2::$1 reg byte a 4.0
(byte~) nmi2::$2 reg byte a 4.0
(label) nmi2::@1
(label) nmi2::@2
(label) nmi2::@return
@ -38,6 +38,6 @@ interrupt(HARDWARE_ALL)(void()) nmi2()
(byte*) sample#3 sample zp ZP_WORD:2 40.0
zp ZP_WORD:2 [ sample#0 sample#3 sample#1 sample#2 ]
reg byte a [ nmi2::$0 ]
reg byte a [ nmi2::$1 ]
reg byte a [ nmi::$0 ]
reg byte a [ nmi2::$2 ]
reg byte a [ nmi::$1 ]

View File

@ -38,13 +38,13 @@ main: {
rts
}
anim: {
.label _5 = 3
.label _7 = 3
.label _10 = 3
.label _6 = 3
.label _8 = 3
.label _11 = 3
.label _12 = 3
.label _13 = 3
.label _28 = $13
.label _14 = 3
.label _29 = $13
.label x = $b
.label y = $c
.label xr = $d
@ -77,18 +77,18 @@ anim: {
jsr mulf8u_prepare
ldy.z x
jsr mulf8s_prepared
lda.z _5
lda.z _6
asl
sta.z xr
lda.z _5+1
lda.z _6+1
rol
sta.z xr+1
ldy.z y
jsr mulf8s_prepared
lda.z _7
lda.z _8
asl
sta.z yr
lda.z _7+1
lda.z _8+1
rol
sta.z yr+1
ldy.z angle
@ -96,26 +96,26 @@ anim: {
jsr mulf8u_prepare
ldy.z y
jsr mulf8s_prepared
asl.z _11
rol.z _11+1
asl.z _12
rol.z _12+1
lda.z xr
sec
sbc.z _11
sbc.z _12
sta.z xr
lda.z xr+1
sbc.z _11+1
sbc.z _12+1
sta.z xr+1
ldy.z x
jsr mulf8s_prepared
asl.z _13
rol.z _13+1
asl.z _14
rol.z _14+1
// signed fixed[8.8]
lda.z yr
clc
adc.z _13
adc.z _14
sta.z yr
lda.z yr+1
adc.z _13+1
adc.z _14+1
sta.z yr+1
lda.z xr+1
tax

View File

@ -50,14 +50,14 @@ anim::@8: scope:[anim] from anim::mulf8s_prepare1
[20] call mulf8s_prepared
to:anim::@10
anim::@10: scope:[anim] from anim::@8
[21] (signed word~) anim::$5 ← (signed word)(word) mulf8s_prepared::m#4
[22] (signed word) anim::xr#0 ← (signed word~) anim::$5 << (byte) 1
[21] (signed word~) anim::$6 ← (signed word)(word) mulf8s_prepared::m#4
[22] (signed word) anim::xr#0 ← (signed word~) anim::$6 << (byte) 1
[23] (signed byte) mulf8s_prepared::b#1 ← (signed byte) anim::y#0
[24] call mulf8s_prepared
to:anim::@11
anim::@11: scope:[anim] from anim::@10
[25] (signed word~) anim::$7 ← (signed word)(word) mulf8s_prepared::m#4
[26] (signed word) anim::yr#0 ← (signed word~) anim::$7 << (byte) 1
[25] (signed word~) anim::$8 ← (signed word)(word) mulf8s_prepared::m#4
[26] (signed word) anim::yr#0 ← (signed word~) anim::$8 << (byte) 1
to:anim::mulf8s_prepare2
anim::mulf8s_prepare2: scope:[anim] from anim::@11
[27] (byte~) mulf8u_prepare::a#4 ← (byte)(signed byte)*((const byte[$140]) SIN#0 + (byte) anim::angle#9)
@ -68,32 +68,32 @@ anim::@9: scope:[anim] from anim::mulf8s_prepare2
[30] call mulf8s_prepared
to:anim::@12
anim::@12: scope:[anim] from anim::@9
[31] (signed word~) anim::$10 ← (signed word)(word) mulf8s_prepared::m#4
[32] (signed word~) anim::$11 ← (signed word~) anim::$10 << (byte) 1
[33] (signed word) anim::xr#1 ← (signed word) anim::xr#0 - (signed word~) anim::$11
[31] (signed word~) anim::$11 ← (signed word)(word) mulf8s_prepared::m#4
[32] (signed word~) anim::$12 ← (signed word~) anim::$11 << (byte) 1
[33] (signed word) anim::xr#1 ← (signed word) anim::xr#0 - (signed word~) anim::$12
[34] (signed byte) mulf8s_prepared::b#3 ← (signed byte) anim::x#0
[35] call mulf8s_prepared
to:anim::@13
anim::@13: scope:[anim] from anim::@12
[36] (signed word~) anim::$12 ← (signed word)(word) mulf8s_prepared::m#4
[37] (signed word~) anim::$13 ← (signed word~) anim::$12 << (byte) 1
[38] (signed word) anim::yr#1 ← (signed word) anim::yr#0 + (signed word~) anim::$13
[39] (byte~) anim::$16 ← > (signed word) anim::xr#1
[40] (signed word) anim::xpos#0 ← (signed byte)(byte~) anim::$16 + (signed byte) $18+(signed word) $95
[36] (signed word~) anim::$13 ← (signed word)(word) mulf8s_prepared::m#4
[37] (signed word~) anim::$14 ← (signed word~) anim::$13 << (byte) 1
[38] (signed word) anim::yr#1 ← (signed word) anim::yr#0 + (signed word~) anim::$14
[39] (byte~) anim::$17 ← > (signed word) anim::xr#1
[40] (signed word) anim::xpos#0 ← (signed byte)(byte~) anim::$17 + (signed byte) $18+(signed word) $95
[41] (byte) anim::sprite_msb#1 ← (byte) anim::sprite_msb#10 >> (byte) 1
[42] (byte~) anim::$19 ← > (signed word) anim::xpos#0
[43] if((byte~) anim::$19==(byte) 0) goto anim::@5
[42] (byte~) anim::$20 ← > (signed word) anim::xpos#0
[43] if((byte~) anim::$20==(byte) 0) goto anim::@5
to:anim::@6
anim::@6: scope:[anim] from anim::@13
[44] (byte) anim::sprite_msb#2 ← (byte) anim::sprite_msb#1 | (byte) $80
to:anim::@5
anim::@5: scope:[anim] from anim::@13 anim::@6
[45] (byte) anim::sprite_msb#5 ← phi( anim::@6/(byte) anim::sprite_msb#2 anim::@13/(byte) anim::sprite_msb#1 )
[46] (byte~) anim::$23 ← > (signed word) anim::yr#1
[47] (byte) anim::ypos#0 ← (byte~) anim::$23 + (byte) $59+(byte) $33
[46] (byte~) anim::$24 ← > (signed word) anim::yr#1
[47] (byte) anim::ypos#0 ← (byte~) anim::$24 + (byte) $59+(byte) $33
[48] (byte) anim::i2#0 ← (byte) anim::i#10 << (byte) 1
[49] (byte~) anim::$26 ← < (signed word) anim::xpos#0
[50] *((const byte*) SPRITES_XPOS#0 + (byte) anim::i2#0) ← (byte~) anim::$26
[49] (byte~) anim::$27 ← < (signed word) anim::xpos#0
[50] *((const byte*) SPRITES_XPOS#0 + (byte) anim::i2#0) ← (byte~) anim::$27
[51] *((const byte*) SPRITES_YPOS#0 + (byte) anim::i2#0) ← (byte) anim::ypos#0
[52] (byte) anim::i#1 ← ++ (byte) anim::i#10
[53] if((byte) anim::i#1!=(byte) 8) goto anim::@4
@ -105,8 +105,8 @@ anim::@7: scope:[anim] from anim::@5
[57] (dword) clock::return#2 ← (dword) clock::return#0
to:anim::@14
anim::@14: scope:[anim] from anim::@7
[58] (dword~) anim::$28 ← (dword) clock::return#2
[59] (dword) anim::cyclecount#0 ← (dword~) anim::$28 - (const dword) CLOCKS_PER_INIT#0
[58] (dword~) anim::$29 ← (dword) clock::return#2
[59] (dword) anim::cyclecount#0 ← (dword~) anim::$29 - (const dword) CLOCKS_PER_INIT#0
[60] (dword) print_dword_at::dw#0 ← (dword) anim::cyclecount#0
[61] call print_dword_at
to:anim::@15

File diff suppressed because it is too large Load Diff

View File

@ -50,17 +50,17 @@
(byte*) SPRITES_YPOS
(const byte*) SPRITES_YPOS#0 SPRITES_YPOS = (byte*) 53249
(void()) anim()
(signed word~) anim::$10 $10 zp ZP_WORD:3 202.0
(signed word~) anim::$11 $11 zp ZP_WORD:3 202.0
(signed word~) anim::$12 $12 zp ZP_WORD:3 202.0
(signed word~) anim::$13 $13 zp ZP_WORD:3 202.0
(byte~) anim::$16 reg byte a 101.0
(byte~) anim::$19 reg byte a 202.0
(byte~) anim::$23 reg byte a 202.0
(byte~) anim::$26 reg byte a 202.0
(dword~) anim::$28 $28 zp ZP_DWORD:19 22.0
(signed word~) anim::$5 $5 zp ZP_WORD:3 202.0
(signed word~) anim::$7 $7 zp ZP_WORD:3 202.0
(signed word~) anim::$14 $14 zp ZP_WORD:3 202.0
(byte~) anim::$17 reg byte a 101.0
(byte~) anim::$20 reg byte a 202.0
(byte~) anim::$24 reg byte a 202.0
(byte~) anim::$27 reg byte a 202.0
(dword~) anim::$29 $29 zp ZP_DWORD:19 22.0
(signed word~) anim::$6 $6 zp ZP_WORD:3 202.0
(signed word~) anim::$8 $8 zp ZP_WORD:3 202.0
(label) anim::@1
(label) anim::@10
(label) anim::@11
@ -277,7 +277,7 @@
zp ZP_BYTE:2 [ print_byte_at::b#2 print_byte_at::b#0 print_byte_at::b#1 anim::i#10 anim::i#1 ]
reg byte x [ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ]
reg byte y [ mulf8s_prepared::b#4 mulf8s_prepared::b#0 mulf8s_prepared::b#2 mulf8s_prepared::b#1 mulf8s_prepared::b#3 ]
zp ZP_WORD:3 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 anim::$5 anim::$7 anim::$10 anim::$12 mulf8u_prepared::return#2 anim::$11 anim::$13 mulf8u_prepared::return#0 print_word_at::w#2 print_word_at::w#0 print_word_at::w#1 ]
zp ZP_WORD:3 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 anim::$6 anim::$8 anim::$11 anim::$13 mulf8u_prepared::return#2 anim::$12 anim::$14 mulf8u_prepared::return#0 print_word_at::w#2 print_word_at::w#0 print_word_at::w#1 ]
reg byte a [ mulf8u_prepare::a#2 mulf8u_prepare::a#3 mulf8u_prepare::a#4 ]
reg byte x [ init::i#2 init::i#1 ]
zp ZP_WORD:5 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 print_word_at::at#2 print_byte_at::at#2 print_byte_at::at#0 print_byte_at::at#1 ]
@ -290,14 +290,14 @@ zp ZP_BYTE:11 [ anim::x#0 ]
zp ZP_BYTE:12 [ anim::y#0 ]
zp ZP_WORD:13 [ anim::xr#0 anim::xr#1 mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ]
zp ZP_WORD:15 [ anim::yr#0 anim::yr#1 mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ]
reg byte a [ anim::$16 ]
reg byte a [ anim::$17 ]
zp ZP_WORD:17 [ anim::xpos#0 mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ]
reg byte a [ anim::$19 ]
reg byte a [ anim::$23 ]
reg byte a [ anim::$20 ]
reg byte a [ anim::$24 ]
reg byte y [ anim::ypos#0 ]
reg byte x [ anim::i2#0 ]
reg byte a [ anim::$26 ]
zp ZP_DWORD:19 [ clock::return#2 anim::$28 clock::return#0 anim::cyclecount#0 print_dword_at::dw#0 ]
reg byte a [ anim::$27 ]
zp ZP_DWORD:19 [ clock::return#2 anim::$29 clock::return#0 anim::cyclecount#0 print_dword_at::dw#0 ]
reg byte a [ print_byte_at::$0 ]
reg byte y [ print_byte_at::$2 ]
reg byte a [ mulf8u_prepared::b#0 ]

View File

@ -51,9 +51,9 @@ main::@5: scope:[main] from main::@4
(byte) main::scroll#3 ← phi( main::@4/(byte) main::scroll#5 )
*((byte*) BGCOL#0) ← ++ *((byte*) BGCOL#0)
(byte) main::scroll#1 ← -- (byte) main::scroll#3
(bool~) main::$4 ← (byte) main::scroll#1 == (number) $ff
(bool~) main::$5 ← ! (bool~) main::$4
if((bool~) main::$5) goto main::@7
(bool~) main::$5 ← (byte) main::scroll#1 == (number) $ff
(bool~) main::$6 ← ! (bool~) main::$5
if((bool~) main::$6) goto main::@7
to:main::@6
main::@7: scope:[main] from main::@15 main::@5
(byte*) main::nxt#11 ← phi( main::@15/(byte*) main::nxt#1 main::@5/(byte*) main::nxt#8 )
@ -71,24 +71,24 @@ main::@8: scope:[main] from main::@6 main::@9
(byte) main::scroll#10 ← phi( main::@6/(byte) main::scroll#2 main::@9/(byte) main::scroll#11 )
(byte*) main::nxt#5 ← phi( main::@6/(byte*) main::nxt#6 main::@9/(byte*) main::nxt#7 )
(byte) main::i#2 ← phi( main::@6/(byte) main::i#0 main::@9/(byte) main::i#1 )
(bool~) main::$6 ← (byte) main::i#2 != (number) $27
if((bool~) main::$6) goto main::@9
(bool~) main::$7 ← (byte) main::i#2 != (number) $27
if((bool~) main::$7) goto main::@9
to:main::@10
main::@9: scope:[main] from main::@8
(byte) main::scroll#11 ← phi( main::@8/(byte) main::scroll#10 )
(byte*) main::nxt#7 ← phi( main::@8/(byte*) main::nxt#5 )
(byte) main::i#3 ← phi( main::@8/(byte) main::i#2 )
(number~) main::$7 ← (byte) main::i#3 + (number) 1
*((byte[]) main::line#0 + (byte) main::i#3) ← *((byte[]) main::line#0 + (number~) main::$7)
(number~) main::$8 ← (byte) main::i#3 + (number) 1
*((byte[]) main::line#0 + (byte) main::i#3) ← *((byte[]) main::line#0 + (number~) main::$8)
(byte) main::i#1 ← ++ (byte) main::i#3
to:main::@8
main::@10: scope:[main] from main::@8
(byte) main::scroll#8 ← phi( main::@8/(byte) main::scroll#10 )
(byte*) main::nxt#3 ← phi( main::@8/(byte*) main::nxt#5 )
(byte) main::c#0 ← *((byte*) main::nxt#3)
(bool~) main::$8 ← (byte) main::c#0 == (number) 0
(bool~) main::$9 ← ! (bool~) main::$8
if((bool~) main::$9) goto main::@15
(bool~) main::$9 ← (byte) main::c#0 == (number) 0
(bool~) main::$10 ← ! (bool~) main::$9
if((bool~) main::$10) goto main::@15
to:main::@14
main::@15: scope:[main] from main::@10 main::@14
(byte) main::scroll#6 ← phi( main::@10/(byte) main::scroll#8 main::@14/(byte) main::scroll#9 )
@ -174,13 +174,13 @@ SYMBOL TABLE SSA
(byte*) fillscreen::screen#3
(void()) main()
(byte*~) main::$1
(bool~) main::$10
(bool~) main::$2
(bool~) main::$3
(bool~) main::$4
(bool~) main::$5
(bool~) main::$6
(number~) main::$7
(bool~) main::$8
(bool~) main::$7
(number~) main::$8
(bool~) main::$9
(label) main::@10
(label) main::@14
@ -237,13 +237,13 @@ Adding number conversion cast (unumber) 7 in (byte) main::scroll#0 ← (number)
Adding number conversion cast (unumber) $28 in (byte*~) main::$1 ← (byte*) SCREEN#0 + (number) $28
Adding number conversion cast (unumber) $fe in (bool~) main::$2 ← *((byte*) RASTER#0) != (number) $fe
Adding number conversion cast (unumber) $ff in (bool~) main::$3 ← *((byte*) RASTER#0) != (number) $ff
Adding number conversion cast (unumber) $ff in (bool~) main::$4 ← (byte) main::scroll#1 == (number) $ff
Adding number conversion cast (unumber) $ff in (bool~) main::$5 ← (byte) main::scroll#1 == (number) $ff
Adding number conversion cast (unumber) 7 in (byte) main::scroll#2 ← (number) 7
Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0
Adding number conversion cast (unumber) $27 in (bool~) main::$6 ← (byte) main::i#2 != (number) $27
Adding number conversion cast (unumber) 1 in (number~) main::$7 ← (byte) main::i#3 + (number) 1
Adding number conversion cast (unumber) main::$7 in (number~) main::$7 ← (byte) main::i#3 + (unumber)(number) 1
Adding number conversion cast (unumber) 0 in (bool~) main::$8 ← (byte) main::c#0 == (number) 0
Adding number conversion cast (unumber) $27 in (bool~) main::$7 ← (byte) main::i#2 != (number) $27
Adding number conversion cast (unumber) 1 in (number~) main::$8 ← (byte) main::i#3 + (number) 1
Adding number conversion cast (unumber) main::$8 in (number~) main::$8 ← (byte) main::i#3 + (unumber)(number) 1
Adding number conversion cast (unumber) 0 in (bool~) main::$9 ← (byte) main::c#0 == (number) 0
Adding number conversion cast (unumber) $27 in *((byte[]) main::line#0 + (number) $27) ← (byte) main::c#2
Adding number conversion cast (unumber) $3e8 in (byte*~) fillscreen::$0 ← (byte*) fillscreen::screen#2 + (number) $3e8
Successful SSA optimization PassNAddNumberTypeConversions
@ -288,9 +288,9 @@ Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $27
Finalized unsigned number type (word) $3e8
Successful SSA optimization PassNFinalizeNumberTypeConversions
Inferred type updated to byte in (unumber~) main::$7 ← (byte) main::i#3 + (byte) 1
Inversing boolean not [22] (bool~) main::$5 ← (byte) main::scroll#1 != (byte) $ff from [21] (bool~) main::$4 ← (byte) main::scroll#1 == (byte) $ff
Inversing boolean not [41] (bool~) main::$9 ← (byte) main::c#0 != (byte) 0 from [40] (bool~) main::$8 ← (byte) main::c#0 == (byte) 0
Inferred type updated to byte in (unumber~) main::$8 ← (byte) main::i#3 + (byte) 1
Inversing boolean not [22] (bool~) main::$6 ← (byte) main::scroll#1 != (byte) $ff from [21] (bool~) main::$5 ← (byte) main::scroll#1 == (byte) $ff
Inversing boolean not [41] (bool~) main::$10 ← (byte) main::c#0 != (byte) 0 from [40] (bool~) main::$9 ← (byte) main::c#0 == (byte) 0
Successful SSA optimization Pass2UnaryNotSimplification
Alias (byte[]) main::line#0 = (byte*~) main::$1
Alias (byte) main::scroll#3 = (byte) main::scroll#5
@ -316,9 +316,9 @@ Identical Phi Values (byte) fillscreen::fill#1 (byte) fillscreen::fill#3
Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition (bool~) main::$2 [14] if(*((byte*) RASTER#0)!=(byte) $fe) goto main::@2
Simple Condition (bool~) main::$3 [17] if(*((byte*) RASTER#0)!=(byte) $ff) goto main::@4
Simple Condition (bool~) main::$5 [23] if((byte) main::scroll#1!=(byte) $ff) goto main::@7
Simple Condition (bool~) main::$6 [33] if((byte) main::i#2!=(byte) $27) goto main::@9
Simple Condition (bool~) main::$9 [42] if((byte) main::c#0!=(byte) 0) goto main::@15
Simple Condition (bool~) main::$6 [23] if((byte) main::scroll#1!=(byte) $ff) goto main::@7
Simple Condition (bool~) main::$7 [33] if((byte) main::i#2!=(byte) $27) goto main::@9
Simple Condition (bool~) main::$10 [42] if((byte) main::c#0!=(byte) 0) goto main::@15
Simple Condition (bool~) fillscreen::$1 [55] if((byte*) fillscreen::cursor#2<(byte*~) fillscreen::$0) goto fillscreen::@2
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte*) SCREEN#0 = (byte*) 1024
@ -373,10 +373,10 @@ Constant inlined main::i#0 = (byte) 0
Constant inlined $0 = (const byte*) TEXT#0
Constant inlined main::nxt#2 = (const byte*) TEXT#0
Successful SSA optimization Pass2ConstantInlining
Consolidated array index constant in assignment *(main::line#0+1 + main::$7)
Consolidated array index constant in assignment *(main::line#0+1 + main::$8)
Consolidated array index constant in *(main::line#0+$27)
Successful SSA optimization Pass2ConstantAdditionElimination
Alias (byte) main::i#4 = (byte~) main::$7
Alias (byte) main::i#4 = (byte~) main::$8
Successful SSA optimization Pass2AliasElimination
Added new block during phi lifting main::@18(between main::@2 and main::@2)
Added new block during phi lifting main::@19(between main::@5 and main::@7)

View File

@ -65,8 +65,8 @@ main: {
rts
}
loop: {
.label _1 = $16
.label _5 = $16
.label _2 = $16
.label _7 = $16
.label xpos = $16
lda #<0
sta.z xsin_idx
@ -80,17 +80,17 @@ loop: {
inc BORDERCOL
lda.z xsin_idx
asl
sta.z _5
sta.z _7
lda.z xsin_idx+1
rol
sta.z _5+1
sta.z _7+1
clc
lda.z _1
lda.z _2
adc #<xsin
sta.z _1
lda.z _1+1
sta.z _2
lda.z _2+1
adc #>xsin
sta.z _1+1
sta.z _2+1
ldy #0
lda (xpos),y
tax

View File

@ -62,9 +62,9 @@ loop::@2: scope:[loop] from loop::@1 loop::@2
to:loop::@3
loop::@3: scope:[loop] from loop::@2
[28] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0)
[29] (word~) loop::$5 ← (word) xsin_idx#11 << (byte) 1
[30] (signed word*~) loop::$1 ← (const signed word[XSIN_SIZE#0]) xsin#0 + (word~) loop::$5
[31] (signed word) loop::xpos#0 ← *((signed word*~) loop::$1)
[29] (word~) loop::$7 ← (word) xsin_idx#11 << (byte) 1
[30] (signed word*~) loop::$2 ← (const signed word[XSIN_SIZE#0]) xsin#0 + (word~) loop::$7
[31] (signed word) loop::xpos#0 ← *((signed word*~) loop::$2)
[32] (signed word) render_logo::xpos#0 ← (signed word) loop::xpos#0
[33] call render_logo
to:loop::@5

View File

@ -1,6 +1,6 @@
Fixing pointer increment (signed word*) sin16s_gen::sintab ← ++ (signed word*) sin16s_gen::sintab
Fixing pointer increment (signed word*) sin16s_gen2::sintab ← ++ (signed word*) sin16s_gen2::sintab
Fixing pointer addition (signed word*~) loop::$1 ← (signed word[XSIN_SIZE]) xsin + (word) xsin_idx
Fixing pointer addition (signed word*~) loop::$2 ← (signed word[XSIN_SIZE]) xsin + (word) xsin_idx
Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src)
Identified constant variable (byte*) SCREEN
Identified constant variable (byte*) LOGO
@ -735,18 +735,18 @@ loop::@4: scope:[loop] from loop::@1 loop::@4
loop::@6: scope:[loop] from loop::@4
(word) xsin_idx#9 ← phi( loop::@4/(word) xsin_idx#14 )
*((byte*) BORDERCOL#0) ← ++ *((byte*) BORDERCOL#0)
(word~) loop::$5 ← (word) xsin_idx#9 * (const byte) SIZEOF_SIGNED_WORD
(signed word*~) loop::$1 ← (signed word[XSIN_SIZE#0]) xsin#0 + (word~) loop::$5
(signed word) loop::xpos#0 ← *((signed word*~) loop::$1)
(word~) loop::$7 ← (word) xsin_idx#9 * (const byte) SIZEOF_SIGNED_WORD
(signed word*~) loop::$2 ← (signed word[XSIN_SIZE#0]) xsin#0 + (word~) loop::$7
(signed word) loop::xpos#0 ← *((signed word*~) loop::$2)
(signed word) render_logo::xpos#0 ← (signed word) loop::xpos#0
call render_logo
to:loop::@15
loop::@15: scope:[loop] from loop::@6
(word) xsin_idx#10 ← phi( loop::@6/(word) xsin_idx#9 )
(word) xsin_idx#3 ← ++ (word) xsin_idx#10
(bool~) loop::$3 ← (word) xsin_idx#3 == (word) XSIN_SIZE#0
(bool~) loop::$4 ← ! (bool~) loop::$3
if((bool~) loop::$4) goto loop::@11
(bool~) loop::$4 ← (word) xsin_idx#3 == (word) XSIN_SIZE#0
(bool~) loop::$5 ← ! (bool~) loop::$4
if((bool~) loop::$5) goto loop::@11
to:loop::@10
loop::@11: scope:[loop] from loop::@10 loop::@15
(word) xsin_idx#19 ← phi( loop::@10/(word) xsin_idx#4 loop::@15/(word) xsin_idx#3 )
@ -1073,10 +1073,10 @@ SYMBOL TABLE SSA
(word) divr16u::return#6
(void()) loop()
(bool~) loop::$0
(signed word*~) loop::$1
(bool~) loop::$3
(signed word*~) loop::$2
(bool~) loop::$4
(word~) loop::$5
(bool~) loop::$5
(word~) loop::$7
(label) loop::@1
(label) loop::@10
(label) loop::@11
@ -2025,7 +2025,7 @@ Inversing boolean not [186] (bool~) sin16s::$1 ← (dword) sin16s::x#3 < (dword)
Inversing boolean not [190] (bool~) sin16s::$3 ← (dword) sin16s::x#4 < (dword) PI_HALF_u4f28#0 from [189] (bool~) sin16s::$2 ← (dword) sin16s::x#4 >= (dword) PI_HALF_u4f28#0
Inversing boolean not [249] (bool~) sin16s::$16 ← (byte) sin16s::isUpper#2 == (byte) 0 from [248] (bool~) sin16s::$15 ← (byte) sin16s::isUpper#2 != (byte) 0
Inversing boolean not [278] (bool~) memset::$1 ← (word) memset::num#2 <= (byte) 0 from [277] (bool~) memset::$0 ← (word) memset::num#2 > (byte) 0
Inversing boolean not [379] (bool~) loop::$4 ← (word) xsin_idx#3 != (word) XSIN_SIZE#0 from [378] (bool~) loop::$3 ← (word) xsin_idx#3 == (word) XSIN_SIZE#0
Inversing boolean not [379] (bool~) loop::$5 ← (word) xsin_idx#3 != (word) XSIN_SIZE#0 from [378] (bool~) loop::$4 ← (word) xsin_idx#3 == (word) XSIN_SIZE#0
Successful SSA optimization Pass2UnaryNotSimplification
Alias (word) divr16u::rem#0 = (word~) divr16u::$0 (word) divr16u::rem#7
Alias (word) divr16u::dividend#0 = (word~) divr16u::$6 (word) divr16u::dividend#8
@ -2233,7 +2233,7 @@ Simple Condition (bool~) memset::$1 [279] if((word) memset::num#2<=(byte) 0) got
Simple Condition (bool~) memset::$4 [289] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@5
Simple Condition (bool~) main::$6 [345] if((byte) main::ch#1!=rangelast(0,$ef)) goto main::@1
Simple Condition (bool~) loop::$0 [368] if(*((byte*) RASTER#0)!=(byte) $ff) goto loop::@4
Simple Condition (bool~) loop::$4 [380] if((word) xsin_idx#3!=(word) XSIN_SIZE#0) goto loop::@11
Simple Condition (bool~) loop::$5 [380] if((word) xsin_idx#3!=(word) XSIN_SIZE#0) goto loop::@11
Simple Condition (bool~) render_logo::$5 [399] if((signed word) render_logo::xpos#0<(signed byte) 0) goto render_logo::@1
Simple Condition (bool~) render_logo::$7 [411] if((byte) render_logo::screen_idx#18!=(byte) render_logo::logo_start#0) goto render_logo::@5
Simple Condition (bool~) render_logo::$10 [422] unroll if((byte) render_logo::line#2!=rangelast(0,5)) goto render_logo::@7
@ -2943,7 +2943,7 @@ Successful SSA optimization Pass2NopCastInlining
Inlining Noop Cast [64] (byte) render_logo::logo_idx#1 ← (byte)(signed byte~) render_logo::$17 keeping render_logo::logo_idx#1
Inlining Noop Cast [101] (signed word~) sin16s_gen2::$9 ← (signed word)(word~) sin16s_gen2::$7 keeping sin16s_gen2::$9
Successful SSA optimization Pass2NopCastInlining
Rewriting multiplication to use shift [21] (word~) loop::$5 ← (word) xsin_idx#11 * (const byte) SIZEOF_SIGNED_WORD
Rewriting multiplication to use shift [21] (word~) loop::$7 ← (word) xsin_idx#11 * (const byte) SIZEOF_SIGNED_WORD
Rewriting division to use shift [34] (signed word~) render_logo::$3 ← (signed word) render_logo::xpos#0 / (signed byte) 8
Successful SSA optimization Pass2MultiplyToShiftRewriting
Inlining constant with var siblings (const word) divr16u::quotient#0
@ -3408,9 +3408,9 @@ loop::@2: scope:[loop] from loop::@1 loop::@2
to:loop::@3
loop::@3: scope:[loop] from loop::@2
[28] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0)
[29] (word~) loop::$5 ← (word) xsin_idx#11 << (byte) 1
[30] (signed word*~) loop::$1 ← (const signed word[XSIN_SIZE#0]) xsin#0 + (word~) loop::$5
[31] (signed word) loop::xpos#0 ← *((signed word*~) loop::$1)
[29] (word~) loop::$7 ← (word) xsin_idx#11 << (byte) 1
[30] (signed word*~) loop::$2 ← (const signed word[XSIN_SIZE#0]) xsin#0 + (word~) loop::$7
[31] (signed word) loop::xpos#0 ← *((signed word*~) loop::$2)
[32] (signed word) render_logo::xpos#0 ← (signed word) loop::xpos#0
[33] call render_logo
to:loop::@5
@ -3861,8 +3861,8 @@ VARIABLE REGISTER WEIGHTS
(word) divr16u::return#2 4.0
(word) divr16u::return#3 4.0
(void()) loop()
(signed word*~) loop::$1 22.0
(word~) loop::$5 22.0
(signed word*~) loop::$2 22.0
(word~) loop::$7 22.0
(signed word) loop::xpos
(signed word) loop::xpos#0 22.0
(void()) main()
@ -4079,8 +4079,8 @@ Initial phi equivalence classes
[ memset::str#3 ]
[ memset::c#4 ]
[ memset::dst#2 memset::dst#4 memset::dst#1 ]
Added variable loop::$5 to zero page equivalence class [ loop::$5 ]
Added variable loop::$1 to zero page equivalence class [ loop::$1 ]
Added variable loop::$7 to zero page equivalence class [ loop::$7 ]
Added variable loop::$2 to zero page equivalence class [ loop::$2 ]
Added variable loop::xpos#0 to zero page equivalence class [ loop::xpos#0 ]
Added variable render_logo::xpos#0 to zero page equivalence class [ render_logo::xpos#0 ]
Added variable render_logo::$0 to zero page equivalence class [ render_logo::$0 ]
@ -4167,8 +4167,8 @@ Complete equivalence classes
[ memset::str#3 ]
[ memset::c#4 ]
[ memset::dst#2 memset::dst#4 memset::dst#1 ]
[ loop::$5 ]
[ loop::$1 ]
[ loop::$7 ]
[ loop::$2 ]
[ loop::xpos#0 ]
[ render_logo::xpos#0 ]
[ render_logo::$0 ]
@ -4254,8 +4254,8 @@ Allocated zp ZP_BYTE:51 [ divr16u::i#2 divr16u::i#1 ]
Allocated zp ZP_WORD:52 [ memset::str#3 ]
Allocated zp ZP_BYTE:54 [ memset::c#4 ]
Allocated zp ZP_WORD:55 [ memset::dst#2 memset::dst#4 memset::dst#1 ]
Allocated zp ZP_WORD:57 [ loop::$5 ]
Allocated zp ZP_WORD:59 [ loop::$1 ]
Allocated zp ZP_WORD:57 [ loop::$7 ]
Allocated zp ZP_WORD:59 [ loop::$2 ]
Allocated zp ZP_WORD:61 [ loop::xpos#0 ]
Allocated zp ZP_WORD:63 [ render_logo::xpos#0 ]
Allocated zp ZP_BYTE:65 [ render_logo::$0 ]
@ -4476,8 +4476,8 @@ main: {
}
// loop
loop: {
.label _1 = $3b
.label _5 = $39
.label _2 = $3b
.label _7 = $39
.label xpos = $3d
// [26] phi from loop to loop::@1 [phi:loop->loop::@1]
b1_from_loop:
@ -4502,27 +4502,27 @@ loop: {
b3:
// [28] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_inc__deref_pbuc1
inc BORDERCOL
// [29] (word~) loop::$5 ← (word) xsin_idx#11 << (byte) 1 -- vwuz1=vwuz2_rol_1
// [29] (word~) loop::$7 ← (word) xsin_idx#11 << (byte) 1 -- vwuz1=vwuz2_rol_1
lda.z xsin_idx
asl
sta.z _5
sta.z _7
lda.z xsin_idx+1
rol
sta.z _5+1
// [30] (signed word*~) loop::$1 ← (const signed word[XSIN_SIZE#0]) xsin#0 + (word~) loop::$5 -- pwsz1=pwsc1_plus_vwuz2
lda.z _5
sta.z _7+1
// [30] (signed word*~) loop::$2 ← (const signed word[XSIN_SIZE#0]) xsin#0 + (word~) loop::$7 -- pwsz1=pwsc1_plus_vwuz2
lda.z _7
clc
adc #<xsin
sta.z _1
lda.z _5+1
sta.z _2
lda.z _7+1
adc #>xsin
sta.z _1+1
// [31] (signed word) loop::xpos#0 ← *((signed word*~) loop::$1) -- vwsz1=_deref_pwsz2
sta.z _2+1
// [31] (signed word) loop::xpos#0 ← *((signed word*~) loop::$2) -- vwsz1=_deref_pwsz2
ldy #0
lda (_1),y
lda (_2),y
sta.z xpos
iny
lda (_1),y
lda (_2),y
sta.z xpos+1
// [32] (signed word) render_logo::xpos#0 ← (signed word) loop::xpos#0 -- vwsz1=vwsz2
lda.z xpos
@ -6032,9 +6032,9 @@ Statement [9] *((const byte*) BGCOL3#0) ← (const byte) BLACK#0 [ ] ( main:3 [
Statement [11] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 [ ] ( main:3 [ ] ) always clobbers reg byte a
Statement [12] *((const byte*) D016#0) ← (const byte) VIC_MCM#0 [ ] ( main:3 [ ] ) always clobbers reg byte a
Statement [27] if(*((const byte*) RASTER#0)!=(byte) $ff) goto loop::@2 [ xsin_idx#11 ] ( main:3::loop:23 [ xsin_idx#11 ] ) always clobbers reg byte a
Statement [29] (word~) loop::$5 ← (word) xsin_idx#11 << (byte) 1 [ xsin_idx#11 loop::$5 ] ( main:3::loop:23 [ xsin_idx#11 loop::$5 ] ) always clobbers reg byte a
Statement [30] (signed word*~) loop::$1 ← (const signed word[XSIN_SIZE#0]) xsin#0 + (word~) loop::$5 [ xsin_idx#11 loop::$1 ] ( main:3::loop:23 [ xsin_idx#11 loop::$1 ] ) always clobbers reg byte a
Statement [31] (signed word) loop::xpos#0 ← *((signed word*~) loop::$1) [ xsin_idx#11 loop::xpos#0 ] ( main:3::loop:23 [ xsin_idx#11 loop::xpos#0 ] ) always clobbers reg byte a reg byte y
Statement [29] (word~) loop::$7 ← (word) xsin_idx#11 << (byte) 1 [ xsin_idx#11 loop::$7 ] ( main:3::loop:23 [ xsin_idx#11 loop::$7 ] ) always clobbers reg byte a
Statement [30] (signed word*~) loop::$2 ← (const signed word[XSIN_SIZE#0]) xsin#0 + (word~) loop::$7 [ xsin_idx#11 loop::$2 ] ( main:3::loop:23 [ xsin_idx#11 loop::$2 ] ) always clobbers reg byte a
Statement [31] (signed word) loop::xpos#0 ← *((signed word*~) loop::$2) [ xsin_idx#11 loop::xpos#0 ] ( main:3::loop:23 [ xsin_idx#11 loop::xpos#0 ] ) always clobbers reg byte a reg byte y
Statement [32] (signed word) render_logo::xpos#0 ← (signed word) loop::xpos#0 [ xsin_idx#11 render_logo::xpos#0 ] ( main:3::loop:23 [ xsin_idx#11 render_logo::xpos#0 ] ) always clobbers reg byte a
Statement [35] if((word) xsin_idx#3!=(const word) XSIN_SIZE#0) goto loop::@6 [ xsin_idx#3 ] ( main:3::loop:23 [ xsin_idx#3 ] ) always clobbers reg byte a
Statement [39] (byte~) render_logo::$0 ← (byte)(signed word) render_logo::xpos#0 [ render_logo::xpos#0 render_logo::$0 ] ( main:3::loop:23::render_logo:33 [ xsin_idx#11 render_logo::xpos#0 render_logo::$0 ] ) always clobbers reg byte a
@ -6145,9 +6145,9 @@ Statement [9] *((const byte*) BGCOL3#0) ← (const byte) BLACK#0 [ ] ( main:3 [
Statement [11] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 [ ] ( main:3 [ ] ) always clobbers reg byte a
Statement [12] *((const byte*) D016#0) ← (const byte) VIC_MCM#0 [ ] ( main:3 [ ] ) always clobbers reg byte a
Statement [27] if(*((const byte*) RASTER#0)!=(byte) $ff) goto loop::@2 [ xsin_idx#11 ] ( main:3::loop:23 [ xsin_idx#11 ] ) always clobbers reg byte a
Statement [29] (word~) loop::$5 ← (word) xsin_idx#11 << (byte) 1 [ xsin_idx#11 loop::$5 ] ( main:3::loop:23 [ xsin_idx#11 loop::$5 ] ) always clobbers reg byte a
Statement [30] (signed word*~) loop::$1 ← (const signed word[XSIN_SIZE#0]) xsin#0 + (word~) loop::$5 [ xsin_idx#11 loop::$1 ] ( main:3::loop:23 [ xsin_idx#11 loop::$1 ] ) always clobbers reg byte a
Statement [31] (signed word) loop::xpos#0 ← *((signed word*~) loop::$1) [ xsin_idx#11 loop::xpos#0 ] ( main:3::loop:23 [ xsin_idx#11 loop::xpos#0 ] ) always clobbers reg byte a reg byte y
Statement [29] (word~) loop::$7 ← (word) xsin_idx#11 << (byte) 1 [ xsin_idx#11 loop::$7 ] ( main:3::loop:23 [ xsin_idx#11 loop::$7 ] ) always clobbers reg byte a
Statement [30] (signed word*~) loop::$2 ← (const signed word[XSIN_SIZE#0]) xsin#0 + (word~) loop::$7 [ xsin_idx#11 loop::$2 ] ( main:3::loop:23 [ xsin_idx#11 loop::$2 ] ) always clobbers reg byte a
Statement [31] (signed word) loop::xpos#0 ← *((signed word*~) loop::$2) [ xsin_idx#11 loop::xpos#0 ] ( main:3::loop:23 [ xsin_idx#11 loop::xpos#0 ] ) always clobbers reg byte a reg byte y
Statement [32] (signed word) render_logo::xpos#0 ← (signed word) loop::xpos#0 [ xsin_idx#11 render_logo::xpos#0 ] ( main:3::loop:23 [ xsin_idx#11 render_logo::xpos#0 ] ) always clobbers reg byte a
Statement [35] if((word) xsin_idx#3!=(const word) XSIN_SIZE#0) goto loop::@6 [ xsin_idx#3 ] ( main:3::loop:23 [ xsin_idx#3 ] ) always clobbers reg byte a
Statement [39] (byte~) render_logo::$0 ← (byte)(signed word) render_logo::xpos#0 [ render_logo::xpos#0 render_logo::$0 ] ( main:3::loop:23::render_logo:33 [ xsin_idx#11 render_logo::xpos#0 render_logo::$0 ] ) always clobbers reg byte a
@ -6269,8 +6269,8 @@ Potential registers zp ZP_BYTE:51 [ divr16u::i#2 divr16u::i#1 ] : zp ZP_BYTE:51
Potential registers zp ZP_WORD:52 [ memset::str#3 ] : zp ZP_WORD:52 ,
Potential registers zp ZP_BYTE:54 [ memset::c#4 ] : zp ZP_BYTE:54 , reg byte x ,
Potential registers zp ZP_WORD:55 [ memset::dst#2 memset::dst#4 memset::dst#1 ] : zp ZP_WORD:55 ,
Potential registers zp ZP_WORD:57 [ loop::$5 ] : zp ZP_WORD:57 ,
Potential registers zp ZP_WORD:59 [ loop::$1 ] : zp ZP_WORD:59 ,
Potential registers zp ZP_WORD:57 [ loop::$7 ] : zp ZP_WORD:57 ,
Potential registers zp ZP_WORD:59 [ loop::$2 ] : zp ZP_WORD:59 ,
Potential registers zp ZP_WORD:61 [ loop::xpos#0 ] : zp ZP_WORD:61 ,
Potential registers zp ZP_WORD:63 [ render_logo::xpos#0 ] : zp ZP_WORD:63 ,
Potential registers zp ZP_BYTE:65 [ render_logo::$0 ] : zp ZP_BYTE:65 , reg byte a , reg byte x , reg byte y ,
@ -6337,7 +6337,7 @@ Uplift Scope [divr16u] 106.92: zp ZP_WORD:45 [ divr16u::rem#5 divr16u::rem#10 di
Uplift Scope [sin16s] 27.5: zp ZP_DWORD:34 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] 22: zp ZP_WORD:90 [ sin16s::return#0 ] 13: zp ZP_WORD:38 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] 4: zp ZP_DWORD:117 [ sin16s::$4 ] 4: zp ZP_WORD:125 [ sin16s::x2#0 ] 4: zp ZP_WORD:133 [ sin16s::x3_6#0 ] 4: zp ZP_WORD:139 [ sin16s::x4#0 ] 4: zp ZP_WORD:143 [ sin16s::x5#0 ] 4: zp ZP_WORD:145 [ sin16s::x5_128#0 ] 1: zp ZP_WORD:129 [ sin16s::x3#0 ] 1: zp ZP_WORD:147 [ sin16s::usinx#1 ] 0.64: zp ZP_WORD:121 [ sin16s::x1#0 ] 0.33: zp ZP_WORD:135 [ sin16s::usinx#0 ] 0.06: zp ZP_BYTE:33 [ sin16s::isUpper#2 ]
Uplift Scope [mulu16_sel] 24: zp ZP_WORD:40 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] 21: zp ZP_WORD:42 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] 4: zp ZP_WORD:123 [ mulu16_sel::return#0 ] 4: zp ZP_WORD:127 [ mulu16_sel::return#1 ] 4: zp ZP_WORD:131 [ mulu16_sel::return#2 ] 4: zp ZP_WORD:137 [ mulu16_sel::return#10 ] 4: zp ZP_WORD:141 [ mulu16_sel::return#11 ] 4: zp ZP_DWORD:153 [ mulu16_sel::$0 ] 4: zp ZP_DWORD:157 [ mulu16_sel::$1 ] 1.71: zp ZP_WORD:161 [ mulu16_sel::return#12 ] 0.33: zp ZP_BYTE:44 [ mulu16_sel::select#5 ]
Uplift Scope [sin16s_gen2] 22: zp ZP_DWORD:98 [ sin16s_gen2::$6 ] 18.33: zp ZP_WORD:9 [ sin16s_gen2::i#6 sin16s_gen2::i#1 ] 11: zp ZP_WORD:102 [ sin16s_gen2::$9 ] 10.33: zp ZP_DWORD:11 [ sin16s_gen2::x#6 sin16s_gen2::x#1 ] 8.8: zp ZP_WORD:15 [ sin16s_gen2::sintab#10 sin16s_gen2::sintab#0 ] 0.87: zp ZP_DWORD:86 [ sin16s_gen2::step#0 ]
Uplift Scope [loop] 22: zp ZP_WORD:57 [ loop::$5 ] 22: zp ZP_WORD:59 [ loop::$1 ] 22: zp ZP_WORD:61 [ loop::xpos#0 ]
Uplift Scope [loop] 22: zp ZP_WORD:57 [ loop::$7 ] 22: zp ZP_WORD:59 [ loop::$2 ] 22: zp ZP_WORD:61 [ loop::xpos#0 ]
Uplift Scope [mul16s] 22: zp ZP_DWORD:94 [ mul16s::return#2 ] 10: zp ZP_DWORD:17 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 ] 4.33: zp ZP_DWORD:112 [ mul16s::return#0 ] 4: zp ZP_WORD:108 [ mul16s::$9 ] 4: zp ZP_WORD:110 [ mul16s::$16 ] 2.6: zp ZP_WORD:92 [ mul16s::a#0 ]
Uplift Scope [memset] 41.33: zp ZP_WORD:55 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 2.17: zp ZP_WORD:179 [ memset::end#0 ] 1.57: zp ZP_BYTE:54 [ memset::c#4 ] 0: zp ZP_WORD:52 [ memset::str#3 ]
Uplift Scope [main] 38.5: zp ZP_BYTE:2 [ main::ch#2 main::ch#1 ]
@ -6349,7 +6349,7 @@ Uplifting [divr16u] best 74872 combination zp ZP_WORD:45 [ divr16u::rem#5 divr16
Uplifting [sin16s] best 74872 combination zp ZP_DWORD:34 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp ZP_WORD:90 [ sin16s::return#0 ] zp ZP_WORD:38 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp ZP_DWORD:117 [ sin16s::$4 ] zp ZP_WORD:125 [ sin16s::x2#0 ] zp ZP_WORD:133 [ sin16s::x3_6#0 ] zp ZP_WORD:139 [ sin16s::x4#0 ] zp ZP_WORD:143 [ sin16s::x5#0 ] zp ZP_WORD:145 [ sin16s::x5_128#0 ] zp ZP_WORD:129 [ sin16s::x3#0 ] zp ZP_WORD:147 [ sin16s::usinx#1 ] zp ZP_WORD:121 [ sin16s::x1#0 ] zp ZP_WORD:135 [ sin16s::usinx#0 ] zp ZP_BYTE:33 [ sin16s::isUpper#2 ]
Uplifting [mulu16_sel] best 74856 combination zp ZP_WORD:40 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] zp ZP_WORD:42 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] zp ZP_WORD:123 [ mulu16_sel::return#0 ] zp ZP_WORD:127 [ mulu16_sel::return#1 ] zp ZP_WORD:131 [ mulu16_sel::return#2 ] zp ZP_WORD:137 [ mulu16_sel::return#10 ] zp ZP_WORD:141 [ mulu16_sel::return#11 ] zp ZP_DWORD:153 [ mulu16_sel::$0 ] zp ZP_DWORD:157 [ mulu16_sel::$1 ] zp ZP_WORD:161 [ mulu16_sel::return#12 ] reg byte x [ mulu16_sel::select#5 ]
Uplifting [sin16s_gen2] best 74856 combination zp ZP_DWORD:98 [ sin16s_gen2::$6 ] zp ZP_WORD:9 [ sin16s_gen2::i#6 sin16s_gen2::i#1 ] zp ZP_WORD:102 [ sin16s_gen2::$9 ] zp ZP_DWORD:11 [ sin16s_gen2::x#6 sin16s_gen2::x#1 ] zp ZP_WORD:15 [ sin16s_gen2::sintab#10 sin16s_gen2::sintab#0 ] zp ZP_DWORD:86 [ sin16s_gen2::step#0 ]
Uplifting [loop] best 74856 combination zp ZP_WORD:57 [ loop::$5 ] zp ZP_WORD:59 [ loop::$1 ] zp ZP_WORD:61 [ loop::xpos#0 ]
Uplifting [loop] best 74856 combination zp ZP_WORD:57 [ loop::$7 ] zp ZP_WORD:59 [ loop::$2 ] zp ZP_WORD:61 [ loop::xpos#0 ]
Uplifting [mul16s] best 74856 combination zp ZP_DWORD:94 [ mul16s::return#2 ] zp ZP_DWORD:17 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 ] zp ZP_DWORD:112 [ mul16s::return#0 ] zp ZP_WORD:108 [ mul16s::$9 ] zp ZP_WORD:110 [ mul16s::$16 ] zp ZP_WORD:92 [ mul16s::a#0 ]
Uplifting [memset] best 74840 combination zp ZP_WORD:55 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp ZP_WORD:179 [ memset::end#0 ] reg byte x [ memset::c#4 ] zp ZP_WORD:52 [ memset::str#3 ]
Uplifting [main] best 74720 combination reg byte x [ main::ch#2 main::ch#1 ]
@ -6409,7 +6409,7 @@ Coalescing zero page register [ zp ZP_WORD:40 [ mulu16_sel::v1#5 mulu16_sel::v1#
Coalescing zero page register [ zp ZP_WORD:49 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] ] with [ zp ZP_WORD:163 [ divr16u::return#2 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:49 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 ] ] with [ zp ZP_WORD:167 [ divr16u::return#3 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:52 [ memset::str#3 ] ] with [ zp ZP_WORD:55 [ memset::dst#2 memset::dst#4 memset::dst#1 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:57 [ loop::$5 ] ] with [ zp ZP_WORD:59 [ loop::$1 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:57 [ loop::$7 ] ] with [ zp ZP_WORD:59 [ loop::$2 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:61 [ loop::xpos#0 ] ] with [ zp ZP_WORD:63 [ render_logo::xpos#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_DWORD:82 [ div32u16u::return#2 ] ] with [ zp ZP_DWORD:86 [ sin16s_gen2::step#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_DWORD:82 [ div32u16u::return#2 sin16s_gen2::step#0 ] ] with [ zp ZP_DWORD:171 [ div32u16u::return#0 ] ] - score: 1
@ -6426,7 +6426,7 @@ Coalescing zero page register [ zp ZP_WORD:38 [ sin16s::return#1 sin16s::return#
Coalescing zero page register [ zp ZP_WORD:40 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 ] ] with [ zp ZP_WORD:127 [ mulu16_sel::return#1 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:40 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 ] ] with [ zp ZP_WORD:137 [ mulu16_sel::return#10 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:49 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 ] ] with [ zp ZP_WORD:169 [ div32u16u::quotient_lo#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:57 [ loop::$5 loop::$1 ] ] with [ zp ZP_WORD:61 [ loop::xpos#0 render_logo::xpos#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:57 [ loop::$7 loop::$2 ] ] with [ zp ZP_WORD:61 [ loop::xpos#0 render_logo::xpos#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:123 [ mulu16_sel::return#0 mulu16_sel::return#12 ] ] with [ zp ZP_WORD:131 [ mulu16_sel::return#2 sin16s::x3_6#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:123 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 ] ] with [ zp ZP_WORD:141 [ mulu16_sel::return#11 sin16s::x5#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_DWORD:17 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#2 sin16s_gen2::$6 ] ] with [ zp ZP_DWORD:153 [ mulu16_sel::$0 mulu16_sel::$1 ] ] - score: 1
@ -6438,7 +6438,7 @@ Coalescing zero page register [ zp ZP_WORD:45 [ divr16u::rem#5 divr16u::rem#10 d
Coalescing zero page register [ zp ZP_WORD:47 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] ] with [ zp ZP_WORD:21 [ mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] ]
Coalescing zero page register [ zp ZP_WORD:49 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 ] ] with [ zp ZP_WORD:23 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] ]
Coalescing zero page register [ zp ZP_WORD:52 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] ] with [ zp ZP_WORD:38 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 mul16s::a#0 sin16s::usinx#0 ] ]
Coalescing zero page register [ zp ZP_WORD:57 [ loop::$5 loop::$1 loop::xpos#0 render_logo::xpos#0 ] ] with [ zp ZP_WORD:40 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ] ]
Coalescing zero page register [ zp ZP_WORD:57 [ loop::$7 loop::$2 loop::xpos#0 render_logo::xpos#0 ] ] with [ zp ZP_WORD:40 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ] ]
Coalescing zero page register [ zp ZP_WORD:102 [ sin16s_gen2::$9 ] ] with [ zp ZP_WORD:68 [ render_logo::$3 ] ]
Coalescing zero page register [ zp ZP_WORD:121 [ sin16s::x1#0 ] ] with [ zp ZP_WORD:108 [ mul16s::$9 mul16s::$16 ] ]
Coalescing zero page register [ zp ZP_WORD:165 [ div32u16u::quotient_hi#0 ] ] with [ zp ZP_WORD:123 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 ] ]
@ -6452,7 +6452,7 @@ Allocated (was zp ZP_DWORD:34) zp ZP_DWORD:12 [ sin16s::x#6 sin16s::x#4 sin16s::
Allocated (was zp ZP_WORD:45) zp ZP_WORD:16 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 sin16s_gen2::sintab#10 sin16s_gen2::sintab#0 ]
Allocated (was zp ZP_WORD:49) zp ZP_WORD:18 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ]
Allocated (was zp ZP_WORD:52) zp ZP_WORD:20 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 mul16s::a#0 sin16s::usinx#0 ]
Allocated (was zp ZP_WORD:57) zp ZP_WORD:22 [ loop::$5 loop::$1 loop::xpos#0 render_logo::xpos#0 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ]
Allocated (was zp ZP_WORD:57) zp ZP_WORD:22 [ loop::$7 loop::$2 loop::xpos#0 render_logo::xpos#0 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ]
Allocated (was zp ZP_BYTE:70) zp ZP_BYTE:24 [ render_logo::x_char#0 ]
Allocated (was zp ZP_DWORD:82) zp ZP_DWORD:25 [ div32u16u::return#2 sin16s_gen2::step#0 div32u16u::return#0 ]
Allocated (was zp ZP_WORD:102) zp ZP_WORD:29 [ sin16s_gen2::$9 render_logo::$3 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ]
@ -6614,8 +6614,8 @@ main: {
}
// loop
loop: {
.label _1 = $16
.label _5 = $16
.label _2 = $16
.label _7 = $16
.label xpos = $16
// [26] phi from loop to loop::@1 [phi:loop->loop::@1]
b1_from_loop:
@ -6640,22 +6640,22 @@ loop: {
b3:
// [28] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_inc__deref_pbuc1
inc BORDERCOL
// [29] (word~) loop::$5 ← (word) xsin_idx#11 << (byte) 1 -- vwuz1=vwuz2_rol_1
// [29] (word~) loop::$7 ← (word) xsin_idx#11 << (byte) 1 -- vwuz1=vwuz2_rol_1
lda.z xsin_idx
asl
sta.z _5
sta.z _7
lda.z xsin_idx+1
rol
sta.z _5+1
// [30] (signed word*~) loop::$1 ← (const signed word[XSIN_SIZE#0]) xsin#0 + (word~) loop::$5 -- pwsz1=pwsc1_plus_vwuz1
sta.z _7+1
// [30] (signed word*~) loop::$2 ← (const signed word[XSIN_SIZE#0]) xsin#0 + (word~) loop::$7 -- pwsz1=pwsc1_plus_vwuz1
clc
lda.z _1
lda.z _2
adc #<xsin
sta.z _1
lda.z _1+1
sta.z _2
lda.z _2+1
adc #>xsin
sta.z _1+1
// [31] (signed word) loop::xpos#0 ← *((signed word*~) loop::$1) -- vwsz1=_deref_pwsz1
sta.z _2+1
// [31] (signed word) loop::xpos#0 ← *((signed word*~) loop::$2) -- vwsz1=_deref_pwsz1
ldy #0
lda (xpos),y
tax
@ -8253,8 +8253,8 @@ FINAL SYMBOL TABLE
(word) divr16u::return#2 return zp ZP_WORD:18 4.0
(word) divr16u::return#3 return zp ZP_WORD:18 4.0
(void()) loop()
(signed word*~) loop::$1 $1 zp ZP_WORD:22 22.0
(word~) loop::$5 $5 zp ZP_WORD:22 22.0
(signed word*~) loop::$2 $2 zp ZP_WORD:22 22.0
(word~) loop::$7 $7 zp ZP_WORD:22 22.0
(label) loop::@1
(label) loop::@2
(label) loop::@3
@ -8543,7 +8543,7 @@ zp ZP_WORD:18 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16
reg byte x [ divr16u::i#2 divr16u::i#1 ]
zp ZP_WORD:20 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 mul16s::a#0 sin16s::usinx#0 ]
reg byte x [ memset::c#4 ]
zp ZP_WORD:22 [ loop::$5 loop::$1 loop::xpos#0 render_logo::xpos#0 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ]
zp ZP_WORD:22 [ loop::$7 loop::$2 loop::xpos#0 render_logo::xpos#0 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ]
reg byte a [ render_logo::$0 ]
reg byte a [ render_logo::$1 ]
reg byte a [ render_logo::$2 ]
@ -8705,8 +8705,8 @@ main: {
}
// loop
loop: {
.label _1 = $16
.label _5 = $16
.label _2 = $16
.label _7 = $16
.label xpos = $16
// [26] phi from loop to loop::@1 [phi:loop->loop::@1]
// [26] phi (word) xsin_idx#11 = (byte) 0 [phi:loop->loop::@1#0] -- vwuz1=vbuc1
@ -8728,23 +8728,23 @@ loop: {
// [28] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_inc__deref_pbuc1
inc BORDERCOL
// xsin+xsin_idx
// [29] (word~) loop::$5 ← (word) xsin_idx#11 << (byte) 1 -- vwuz1=vwuz2_rol_1
// [29] (word~) loop::$7 ← (word) xsin_idx#11 << (byte) 1 -- vwuz1=vwuz2_rol_1
lda.z xsin_idx
asl
sta.z _5
sta.z _7
lda.z xsin_idx+1
rol
sta.z _5+1
// [30] (signed word*~) loop::$1 ← (const signed word[XSIN_SIZE#0]) xsin#0 + (word~) loop::$5 -- pwsz1=pwsc1_plus_vwuz1
sta.z _7+1
// [30] (signed word*~) loop::$2 ← (const signed word[XSIN_SIZE#0]) xsin#0 + (word~) loop::$7 -- pwsz1=pwsc1_plus_vwuz1
clc
lda.z _1
lda.z _2
adc #<xsin
sta.z _1
lda.z _1+1
sta.z _2
lda.z _2+1
adc #>xsin
sta.z _1+1
sta.z _2+1
// xpos = *(xsin+xsin_idx)
// [31] (signed word) loop::xpos#0 ← *((signed word*~) loop::$1) -- vwsz1=_deref_pwsz1
// [31] (signed word) loop::xpos#0 ← *((signed word*~) loop::$2) -- vwsz1=_deref_pwsz1
ldy #0
lda (xpos),y
tax

View File

@ -89,8 +89,8 @@
(word) divr16u::return#2 return zp ZP_WORD:18 4.0
(word) divr16u::return#3 return zp ZP_WORD:18 4.0
(void()) loop()
(signed word*~) loop::$1 $1 zp ZP_WORD:22 22.0
(word~) loop::$5 $5 zp ZP_WORD:22 22.0
(signed word*~) loop::$2 $2 zp ZP_WORD:22 22.0
(word~) loop::$7 $7 zp ZP_WORD:22 22.0
(label) loop::@1
(label) loop::@2
(label) loop::@3
@ -379,7 +379,7 @@ zp ZP_WORD:18 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16
reg byte x [ divr16u::i#2 divr16u::i#1 ]
zp ZP_WORD:20 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 mul16s::a#0 sin16s::usinx#0 ]
reg byte x [ memset::c#4 ]
zp ZP_WORD:22 [ loop::$5 loop::$1 loop::xpos#0 render_logo::xpos#0 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ]
zp ZP_WORD:22 [ loop::$7 loop::$2 loop::xpos#0 render_logo::xpos#0 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ]
reg byte a [ render_logo::$0 ]
reg byte a [ render_logo::$1 ]
reg byte a [ render_logo::$2 ]

View File

@ -149,8 +149,8 @@ main::@3: scope:[main] from main::@1 main::@4
if(true) goto main::@4
to:main::@return
main::@4: scope:[main] from main::@3
(byte*~) main::$8 ← (byte*) SCREEN#0 + (number) $3e7
*((byte*~) main::$8) ← ++ *((byte*~) main::$8)
(byte*~) main::$9 ← (byte*) SCREEN#0 + (number) $3e7
*((byte*~) main::$9) ← ++ *((byte*~) main::$9)
kickasm() {{ inc $d020 }}
to:main::@3
main::@return: scope:[main] from main::@3
@ -202,7 +202,7 @@ SYMBOL TABLE SSA
(byte~) main::$1
(number~) main::$3
(bool~) main::$5
(byte*~) main::$8
(byte*~) main::$9
(label) main::@1
(label) main::@10
(label) main::@11
@ -312,7 +312,7 @@ Adding number conversion cast (unumber) $28*$19 in (word) memset::num#0 ← (num
Adding number conversion cast (unumber) 8 in (number~) main::$3 ← (byte) WHITE#0 | (number) 8
Adding number conversion cast (unumber) main::$3 in (number~) main::$3 ← (byte) WHITE#0 | (unumber)(number) 8
Adding number conversion cast (unumber) $28*$19 in (word) memset::num#1 ← (number) $28*(number) $19
Adding number conversion cast (unumber) $3e7 in (byte*~) main::$8 ← (byte*) SCREEN#0 + (number) $3e7
Adding number conversion cast (unumber) $3e7 in (byte*~) main::$9 ← (byte*) SCREEN#0 + (number) $3e7
Successful SSA optimization PassNAddNumberTypeConversions
Inlining cast (byte*) BORDERCOL#0 ← (byte*)(number) $d020
Inlining cast (byte*) BGCOL#0 ← (byte*)(number) $d021
@ -450,7 +450,7 @@ Finalized unsigned number type (byte) $f0
Successful SSA optimization PassNFinalizeNumberTypeConversions
Constant right-side identified [25] (byte~) main::$1 ← (const byte) VIC_MCM#0 | (const byte) VIC_CSEL#0
Constant right-side identified [29] (byte) memset::c#1 ← (const byte) WHITE#0 | (byte) 8
Constant right-side identified [36] (byte*~) main::$8 ← (const byte*) SCREEN#0 + (word) $3e7
Constant right-side identified [36] (byte*~) main::$9 ← (const byte*) SCREEN#0 + (word) $3e7
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const word) main::toD0181_$0#0 = (word)main::toD0181_screen#0
Constant (const word) main::toD0181_$4#0 = (word)main::toD0181_gfx#0
@ -458,7 +458,7 @@ Constant (const byte) main::$1 = VIC_MCM#0|VIC_CSEL#0
Constant (const void*) memset::str#0 = (void*)SCREEN#0
Constant (const byte) memset::c#1 = WHITE#0|8
Constant (const void*) memset::str#1 = (void*)COLS#0
Constant (const byte*) main::$8 = SCREEN#0+$3e7
Constant (const byte*) main::$9 = SCREEN#0+$3e7
Successful SSA optimization Pass2ConstantIdentification
Constant right-side identified [15] (word~) main::toD0181_$1#0 ← (const word) main::toD0181_$0#0 & (word) $3fff
Constant right-side identified [18] (byte~) main::toD0181_$5#0 ← > (const word) main::toD0181_$4#0
@ -508,9 +508,9 @@ Constant inlined main::toD0181_$3#0 = >(word)(const byte*) SCREEN#0&(word) $3fff
Constant inlined main::toD0181_$4#0 = (word)(const byte*) LOGO#0
Constant inlined main::toD0181_$5#0 = >(word)(const byte*) LOGO#0
Constant inlined memset::c#0 = (const byte) BLACK#0
Constant inlined main::$9 = (const byte*) SCREEN#0+(word) $3e7
Constant inlined memset::c#1 = (const byte) WHITE#0|(byte) 8
Constant inlined main::ch#0 = (byte) 0
Constant inlined main::$8 = (const byte*) SCREEN#0+(word) $3e7
Successful SSA optimization Pass2ConstantInlining
Added new block during phi lifting main::@12(between main::@1 and main::@1)
Adding NOP phi() at start of @begin

View File

@ -40,7 +40,7 @@ main: {
jmp b1
}
anim: {
.label _6 = $a
.label _8 = $a
.label xidx = 9
.label yidx = 4
.label x = $f
@ -67,7 +67,7 @@ anim: {
lda #>$1e
adc #0
sta.z x+1
asl.z _6
asl.z _8
ora.z x_msb
sta.z x_msb
lda.z x

View File

@ -32,11 +32,11 @@ anim::@3: scope:[anim] from anim anim::@5
[13] (byte) anim::x_msb#2 ← phi( anim/(byte) 0 anim::@5/(byte) anim::x_msb#1 )
[13] (byte) anim::xidx#3 ← phi( anim/(byte) anim::xidx#0 anim::@5/(byte) anim::xidx#5 )
[14] (word) anim::x#0 ← (word) $1e + *((const byte[$dd]) sintab_x#0 + (byte) anim::xidx#3)
[15] (byte~) anim::$6 ← (byte) anim::x_msb#2 << (byte) 1
[16] (byte~) anim::$7 ← > (word) anim::x#0
[17] (byte) anim::x_msb#1 ← (byte~) anim::$6 | (byte~) anim::$7
[18] (byte~) anim::$9 ← < (word) anim::x#0
[19] *((const byte*) SPRITES_XPOS#0 + (byte) anim::j2#2) ← (byte~) anim::$9
[15] (byte~) anim::$8 ← (byte) anim::x_msb#2 << (byte) 1
[16] (byte~) anim::$9 ← > (word) anim::x#0
[17] (byte) anim::x_msb#1 ← (byte~) anim::$8 | (byte~) anim::$9
[18] (byte~) anim::$11 ← < (word) anim::x#0
[19] *((const byte*) SPRITES_XPOS#0 + (byte) anim::j2#2) ← (byte~) anim::$11
[20] *((const byte*) SPRITES_YPOS#0 + (byte) anim::j2#2) ← *((const byte[$c5]) sintab_y#0 + (byte) anim::yidx#3)
[21] (byte) anim::xidx#1 ← (byte) anim::xidx#3 + (byte) $a
[22] if((byte) anim::xidx#1<(const byte) sinlen_x#0) goto anim::@4

View File

@ -476,21 +476,21 @@ anim::@4: scope:[anim] from anim anim::@6
(byte) anim::j2#2 ← phi( anim/(byte) anim::j2#0 anim::@6/(byte) anim::j2#1 )
(byte) anim::x_msb#2 ← phi( anim/(byte) anim::x_msb#0 anim::@6/(byte) anim::x_msb#4 )
(byte) anim::xidx#3 ← phi( anim/(byte) anim::xidx#0 anim::@6/(byte) anim::xidx#5 )
(word~) anim::$4 ← ((word)) (number) $1e
(word~) anim::$5 ← (word~) anim::$4 + *((byte[$dd]) sintab_x#0 + (byte) anim::xidx#3)
(word) anim::x#0 ← (word~) anim::$5
(number~) anim::$6 ← (byte) anim::x_msb#2 * (number) 2
(byte~) anim::$7 ← > (word) anim::x#0
(number~) anim::$8 ← (number~) anim::$6 | (byte~) anim::$7
(byte) anim::x_msb#1 ← (number~) anim::$8
(byte~) anim::$9 ← < (word) anim::x#0
*((byte*) SPRITES_XPOS#0 + (byte) anim::j2#2) ← (byte~) anim::$9
(word~) anim::$6 ← ((word)) (number) $1e
(word~) anim::$7 ← (word~) anim::$6 + *((byte[$dd]) sintab_x#0 + (byte) anim::xidx#3)
(word) anim::x#0 ← (word~) anim::$7
(number~) anim::$8 ← (byte) anim::x_msb#2 * (number) 2
(byte~) anim::$9 ← > (word) anim::x#0
(number~) anim::$10 ← (number~) anim::$8 | (byte~) anim::$9
(byte) anim::x_msb#1 ← (number~) anim::$10
(byte~) anim::$11 ← < (word) anim::x#0
*((byte*) SPRITES_XPOS#0 + (byte) anim::j2#2) ← (byte~) anim::$11
*((byte*) SPRITES_YPOS#0 + (byte) anim::j2#2) ← *((byte[$c5]) sintab_y#0 + (byte) anim::yidx#3)
(number~) anim::$10 ← (byte) anim::xidx#3 + (number) $a
(byte) anim::xidx#1 ← (number~) anim::$10
(bool~) anim::$11 ← (byte) anim::xidx#1 >= (byte) sinlen_x#0
(bool~) anim::$12 ← ! (bool~) anim::$11
if((bool~) anim::$12) goto anim::@5
(number~) anim::$12 ← (byte) anim::xidx#3 + (number) $a
(byte) anim::xidx#1 ← (number~) anim::$12
(bool~) anim::$13 ← (byte) anim::xidx#1 >= (byte) sinlen_x#0
(bool~) anim::$14 ← ! (bool~) anim::$13
if((bool~) anim::$14) goto anim::@5
to:anim::@7
anim::@5: scope:[anim] from anim::@4 anim::@7
(byte) sin_idx_y#21 ← phi( anim::@4/(byte) sin_idx_y#24 anim::@7/(byte) sin_idx_y#25 )
@ -500,11 +500,11 @@ anim::@5: scope:[anim] from anim::@4 anim::@7
(byte) anim::j#3 ← phi( anim::@4/(byte) anim::j#5 anim::@7/(byte) anim::j#6 )
(byte) anim::j2#4 ← phi( anim::@4/(byte) anim::j2#2 anim::@7/(byte) anim::j2#6 )
(byte) anim::yidx#4 ← phi( anim::@4/(byte) anim::yidx#3 anim::@7/(byte) anim::yidx#7 )
(number~) anim::$14 ← (byte) anim::yidx#4 + (number) 8
(byte) anim::yidx#1 ← (number~) anim::$14
(bool~) anim::$15 ← (byte) anim::yidx#1 >= (byte) sinlen_y#0
(bool~) anim::$16 ← ! (bool~) anim::$15
if((bool~) anim::$16) goto anim::@6
(number~) anim::$16 ← (byte) anim::yidx#4 + (number) 8
(byte) anim::yidx#1 ← (number~) anim::$16
(bool~) anim::$17 ← (byte) anim::yidx#1 >= (byte) sinlen_y#0
(bool~) anim::$18 ← ! (bool~) anim::$17
if((bool~) anim::$18) goto anim::@6
to:anim::@8
anim::@7: scope:[anim] from anim::@4
(byte) sin_idx_y#25 ← phi( anim::@4/(byte) sin_idx_y#24 )
@ -514,8 +514,8 @@ anim::@7: scope:[anim] from anim::@4
(byte) anim::j2#6 ← phi( anim::@4/(byte) anim::j2#2 )
(byte) anim::yidx#7 ← phi( anim::@4/(byte) anim::yidx#3 )
(byte) anim::xidx#4 ← phi( anim::@4/(byte) anim::xidx#1 )
(byte~) anim::$13 ← (byte) anim::xidx#4 - (byte) sinlen_x#0
(byte) anim::xidx#2 ← (byte~) anim::$13
(byte~) anim::$15 ← (byte) anim::xidx#4 - (byte) sinlen_x#0
(byte) anim::xidx#2 ← (byte~) anim::$15
to:anim::@5
anim::@6: scope:[anim] from anim::@5 anim::@8
(byte) sin_idx_y#19 ← phi( anim::@5/(byte) sin_idx_y#21 anim::@8/(byte) sin_idx_y#22 )
@ -525,11 +525,11 @@ anim::@6: scope:[anim] from anim::@5 anim::@8
(byte) anim::xidx#5 ← phi( anim::@5/(byte) anim::xidx#6 anim::@8/(byte) anim::xidx#7 )
(byte) anim::j#2 ← phi( anim::@5/(byte) anim::j#3 anim::@8/(byte) anim::j#4 )
(byte) anim::j2#3 ← phi( anim::@5/(byte) anim::j2#4 anim::@8/(byte) anim::j2#5 )
(number~) anim::$18 ← (byte) anim::j2#3 - (number) 2
(byte) anim::j2#1 ← (number~) anim::$18
(number~) anim::$20 ← (byte) anim::j2#3 - (number) 2
(byte) anim::j2#1 ← (number~) anim::$20
(byte) anim::j#1 ← (byte) anim::j#2 + rangenext(0,6)
(bool~) anim::$19 ← (byte) anim::j#1 != rangelast(0,6)
if((bool~) anim::$19) goto anim::@4
(bool~) anim::$21 ← (byte) anim::j#1 != rangelast(0,6)
if((bool~) anim::$21) goto anim::@4
to:anim::@9
anim::@8: scope:[anim] from anim::@5
(byte) sin_idx_y#22 ← phi( anim::@5/(byte) sin_idx_y#21 )
@ -539,8 +539,8 @@ anim::@8: scope:[anim] from anim::@5
(byte) anim::j#4 ← phi( anim::@5/(byte) anim::j#3 )
(byte) anim::j2#5 ← phi( anim::@5/(byte) anim::j2#4 )
(byte) anim::yidx#5 ← phi( anim::@5/(byte) anim::yidx#1 )
(byte~) anim::$17 ← (byte) anim::yidx#5 - (byte) sinlen_y#0
(byte) anim::yidx#2 ← (byte~) anim::$17
(byte~) anim::$19 ← (byte) anim::yidx#5 - (byte) sinlen_y#0
(byte) anim::yidx#2 ← (byte~) anim::$19
to:anim::@6
anim::@9: scope:[anim] from anim::@6
(byte) sin_idx_y#15 ← phi( anim::@6/(byte) sin_idx_y#19 )
@ -548,17 +548,17 @@ anim::@9: scope:[anim] from anim::@6
(byte) anim::x_msb#3 ← phi( anim::@6/(byte) anim::x_msb#4 )
*((byte*) SPRITES_XMSB#0) ← (byte) anim::x_msb#3
(byte) sin_idx_x#3 ← ++ (byte) sin_idx_x#10
(bool~) anim::$0 ← (byte) sin_idx_x#3 >= (byte) sinlen_x#0
(bool~) anim::$1 ← ! (bool~) anim::$0
if((bool~) anim::$1) goto anim::@1
(bool~) anim::$1 ← (byte) sin_idx_x#3 >= (byte) sinlen_x#0
(bool~) anim::$2 ← ! (bool~) anim::$1
if((bool~) anim::$2) goto anim::@1
to:anim::@10
anim::@1: scope:[anim] from anim::@10 anim::@9
(byte) sin_idx_x#20 ← phi( anim::@10/(byte) sin_idx_x#4 anim::@9/(byte) sin_idx_x#3 )
(byte) sin_idx_y#10 ← phi( anim::@10/(byte) sin_idx_y#14 anim::@9/(byte) sin_idx_y#15 )
(byte) sin_idx_y#3 ← ++ (byte) sin_idx_y#10
(bool~) anim::$2 ← (byte) sin_idx_y#3 >= (byte) sinlen_y#0
(bool~) anim::$3 ← ! (bool~) anim::$2
if((bool~) anim::$3) goto anim::@2
(bool~) anim::$3 ← (byte) sin_idx_y#3 >= (byte) sinlen_y#0
(bool~) anim::$4 ← ! (bool~) anim::$3
if((bool~) anim::$4) goto anim::@2
to:anim::@3
anim::@10: scope:[anim] from anim::@9
(byte) sin_idx_y#14 ← phi( anim::@9/(byte) sin_idx_y#15 )
@ -1076,24 +1076,24 @@ SYMBOL TABLE SSA
(word) addMEMtoFAC::prepareMEM1_mem#0
(word) addMEMtoFAC::prepareMEM1_mem#1
(void()) anim()
(bool~) anim::$0
(bool~) anim::$1
(number~) anim::$10
(bool~) anim::$11
(bool~) anim::$12
(byte~) anim::$13
(number~) anim::$14
(bool~) anim::$15
(bool~) anim::$16
(byte~) anim::$17
(number~) anim::$18
(bool~) anim::$19
(byte~) anim::$11
(number~) anim::$12
(bool~) anim::$13
(bool~) anim::$14
(byte~) anim::$15
(number~) anim::$16
(bool~) anim::$17
(bool~) anim::$18
(byte~) anim::$19
(bool~) anim::$2
(number~) anim::$20
(bool~) anim::$21
(bool~) anim::$3
(word~) anim::$4
(word~) anim::$5
(number~) anim::$6
(byte~) anim::$7
(bool~) anim::$4
(word~) anim::$6
(word~) anim::$7
(number~) anim::$8
(byte~) anim::$9
(label) anim::@1
@ -1808,15 +1808,15 @@ Adding number conversion cast (unumber) 0 in (byte) sin_idx_x#2 ← (number) 0
Adding number conversion cast (unumber) 0 in (byte) sin_idx_y#2 ← (number) 0
Adding number conversion cast (unumber) $c in (byte) anim::j2#0 ← (number) $c
Adding number conversion cast (unumber) 0 in (byte) anim::x_msb#0 ← (number) 0
Adding number conversion cast (unumber) 2 in (number~) anim::$6 ← (byte) anim::x_msb#2 * (number) 2
Adding number conversion cast (unumber) anim::$6 in (number~) anim::$6 ← (byte) anim::x_msb#2 * (unumber)(number) 2
Adding number conversion cast (unumber) anim::$8 in (number~) anim::$8 ← (unumber~) anim::$6 | (byte~) anim::$7
Adding number conversion cast (unumber) $a in (number~) anim::$10 ← (byte) anim::xidx#3 + (number) $a
Adding number conversion cast (unumber) anim::$10 in (number~) anim::$10 ← (byte) anim::xidx#3 + (unumber)(number) $a
Adding number conversion cast (unumber) 8 in (number~) anim::$14 ← (byte) anim::yidx#4 + (number) 8
Adding number conversion cast (unumber) anim::$14 in (number~) anim::$14 ← (byte) anim::yidx#4 + (unumber)(number) 8
Adding number conversion cast (unumber) 2 in (number~) anim::$18 ← (byte) anim::j2#3 - (number) 2
Adding number conversion cast (unumber) anim::$18 in (number~) anim::$18 ← (byte) anim::j2#3 - (unumber)(number) 2
Adding number conversion cast (unumber) 2 in (number~) anim::$8 ← (byte) anim::x_msb#2 * (number) 2
Adding number conversion cast (unumber) anim::$8 in (number~) anim::$8 ← (byte) anim::x_msb#2 * (unumber)(number) 2
Adding number conversion cast (unumber) anim::$10 in (number~) anim::$10 ← (unumber~) anim::$8 | (byte~) anim::$9
Adding number conversion cast (unumber) $a in (number~) anim::$12 ← (byte) anim::xidx#3 + (number) $a
Adding number conversion cast (unumber) anim::$12 in (number~) anim::$12 ← (byte) anim::xidx#3 + (unumber)(number) $a
Adding number conversion cast (unumber) 8 in (number~) anim::$16 ← (byte) anim::yidx#4 + (number) 8
Adding number conversion cast (unumber) anim::$16 in (number~) anim::$16 ← (byte) anim::yidx#4 + (unumber)(number) 8
Adding number conversion cast (unumber) 2 in (number~) anim::$20 ← (byte) anim::j2#3 - (number) 2
Adding number conversion cast (unumber) anim::$20 in (number~) anim::$20 ← (byte) anim::j2#3 - (unumber)(number) 2
Adding number conversion cast (unumber) 0 in (byte) sin_idx_x#4 ← (number) 0
Adding number conversion cast (unumber) 0 in (byte) sin_idx_y#4 ← (number) 0
Adding number conversion cast (unumber) $7f in *((byte*) SPRITES_ENABLE#0) ← (number) $7f
@ -1900,7 +1900,7 @@ Inlining cast (byte) sin_idx_x#2 ← (unumber)(number) 0
Inlining cast (byte) sin_idx_y#2 ← (unumber)(number) 0
Inlining cast (byte) anim::j2#0 ← (unumber)(number) $c
Inlining cast (byte) anim::x_msb#0 ← (unumber)(number) 0
Inlining cast (word~) anim::$4 ← (word)(number) $1e
Inlining cast (word~) anim::$6 ← (word)(number) $1e
Inlining cast (byte) sin_idx_x#4 ← (unumber)(number) 0
Inlining cast (byte) sin_idx_y#4 ← (unumber)(number) 0
Inlining cast *((byte*) SPRITES_ENABLE#0) ← (unumber)(number) $7f
@ -2093,11 +2093,11 @@ Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) 0
Successful SSA optimization PassNFinalizeNumberTypeConversions
Inferred type updated to byte in (unumber~) init::$9 ← (byte) $28 + (byte) init::i#2
Inferred type updated to byte in (unumber~) anim::$6 ← (byte) anim::x_msb#2 * (byte) 2
Inferred type updated to byte in (unumber~) anim::$8 ← (byte~) anim::$6 | (byte~) anim::$7
Inferred type updated to byte in (unumber~) anim::$10 ← (byte) anim::xidx#3 + (byte) $a
Inferred type updated to byte in (unumber~) anim::$14 ← (byte) anim::yidx#4 + (byte) 8
Inferred type updated to byte in (unumber~) anim::$18 ← (byte) anim::j2#3 - (byte) 2
Inferred type updated to byte in (unumber~) anim::$8 ← (byte) anim::x_msb#2 * (byte) 2
Inferred type updated to byte in (unumber~) anim::$10 ← (byte~) anim::$8 | (byte~) anim::$9
Inferred type updated to byte in (unumber~) anim::$12 ← (byte) anim::xidx#3 + (byte) $a
Inferred type updated to byte in (unumber~) anim::$16 ← (byte) anim::yidx#4 + (byte) 8
Inferred type updated to byte in (unumber~) anim::$20 ← (byte) anim::j2#3 - (byte) 2
Inferred type updated to word in (unumber~) place_sprites::$2 ← (word~) place_sprites::$1 / (byte) $40
Inferred type updated to byte in (unumber~) place_sprites::$4 ← (byte) place_sprites::spr_x#2 + (byte) $20
Inferred type updated to byte in (unumber~) place_sprites::$5 ← (byte) place_sprites::col#2 ^ (byte)(number) 7^(number) 5
@ -2107,10 +2107,10 @@ Inferred type updated to byte in (unumber~) gen_chargen_sprite::$6 ← (byte) ge
Inferred type updated to byte in (unumber~) gen_chargen_sprite::$7 ← (byte~) gen_chargen_sprite::$6 | (byte) gen_chargen_sprite::c#2
Inferred type updated to byte in (unumber~) gen_chargen_sprite::$11 ← (byte) gen_chargen_sprite::bits#3 * (byte) 2
Inversing boolean not [173] (bool~) progress_inc::$1 ← (byte) progress_idx#10 != (byte) 8 from [172] (bool~) progress_inc::$0 ← (byte) progress_idx#10 == (byte) 8
Inversing boolean not [209] (bool~) anim::$12 ← (byte) anim::xidx#1 < (byte) sinlen_x#0 from [208] (bool~) anim::$11 ← (byte) anim::xidx#1 >= (byte) sinlen_x#0
Inversing boolean not [215] (bool~) anim::$16 ← (byte) anim::yidx#1 < (byte) sinlen_y#0 from [214] (bool~) anim::$15 ← (byte) anim::yidx#1 >= (byte) sinlen_y#0
Inversing boolean not [233] (bool~) anim::$1 ← (byte) sin_idx_x#3 < (byte) sinlen_x#0 from [232] (bool~) anim::$0 ← (byte) sin_idx_x#3 >= (byte) sinlen_x#0
Inversing boolean not [238] (bool~) anim::$3 ← (byte) sin_idx_y#3 < (byte) sinlen_y#0 from [237] (bool~) anim::$2 ← (byte) sin_idx_y#3 >= (byte) sinlen_y#0
Inversing boolean not [209] (bool~) anim::$14 ← (byte) anim::xidx#1 < (byte) sinlen_x#0 from [208] (bool~) anim::$13 ← (byte) anim::xidx#1 >= (byte) sinlen_x#0
Inversing boolean not [215] (bool~) anim::$18 ← (byte) anim::yidx#1 < (byte) sinlen_y#0 from [214] (bool~) anim::$17 ← (byte) anim::yidx#1 >= (byte) sinlen_y#0
Inversing boolean not [233] (bool~) anim::$2 ← (byte) sin_idx_x#3 < (byte) sinlen_x#0 from [232] (bool~) anim::$1 ← (byte) sin_idx_x#3 >= (byte) sinlen_x#0
Inversing boolean not [238] (bool~) anim::$4 ← (byte) sin_idx_y#3 < (byte) sinlen_y#0 from [237] (bool~) anim::$3 ← (byte) sin_idx_y#3 >= (byte) sinlen_y#0
Inversing boolean not [310] (bool~) gen_chargen_sprite::$5 ← (byte~) gen_chargen_sprite::$3 == (byte) 0 from [309] (bool~) gen_chargen_sprite::$4 ← (byte~) gen_chargen_sprite::$3 != (byte) 0
Inversing boolean not [322] (bool~) gen_chargen_sprite::$9 ← (byte) gen_chargen_sprite::s_gen_cnt#1 != (byte) 8 from [321] (bool~) gen_chargen_sprite::$8 ← (byte) gen_chargen_sprite::s_gen_cnt#1 == (byte) 8
Successful SSA optimization Pass2UnaryNotSimplification
@ -2151,24 +2151,24 @@ Alias (byte*) progress_cursor#24 = (byte*) progress_cursor#33
Alias (byte) progress_idx#12 = (byte) progress_idx#26 (byte) progress_idx#25
Alias (byte*) progress_cursor#11 = (byte*) progress_cursor#25 (byte*) progress_cursor#23
Alias (byte) progress_idx#36 = (byte) progress_idx#41 (byte) progress_idx#7
Alias (word) anim::x#0 = (word~) anim::$5
Alias (byte) anim::x_msb#1 = (byte~) anim::$8 (byte) anim::x_msb#7
Alias (byte) anim::xidx#1 = (byte~) anim::$10 (byte) anim::xidx#4
Alias (byte) anim::yidx#1 = (byte~) anim::$14 (byte) anim::yidx#5
Alias (word) anim::x#0 = (word~) anim::$7
Alias (byte) anim::x_msb#1 = (byte~) anim::$10 (byte) anim::x_msb#7
Alias (byte) anim::xidx#1 = (byte~) anim::$12 (byte) anim::xidx#4
Alias (byte) anim::yidx#1 = (byte~) anim::$16 (byte) anim::yidx#5
Alias (byte) anim::yidx#3 = (byte) anim::yidx#7
Alias (byte) anim::j2#2 = (byte) anim::j2#6
Alias (byte) anim::j#5 = (byte) anim::j#6
Alias (byte) sin_idx_x#23 = (byte) sin_idx_x#24
Alias (byte) sin_idx_y#24 = (byte) sin_idx_y#25
Alias (byte) anim::xidx#2 = (byte~) anim::$13
Alias (byte) anim::j2#1 = (byte~) anim::$18
Alias (byte) anim::xidx#2 = (byte~) anim::$15
Alias (byte) anim::j2#1 = (byte~) anim::$20
Alias (byte) anim::j2#4 = (byte) anim::j2#5
Alias (byte) anim::j#3 = (byte) anim::j#4
Alias (byte) anim::xidx#6 = (byte) anim::xidx#7
Alias (byte) anim::x_msb#5 = (byte) anim::x_msb#6
Alias (byte) sin_idx_x#18 = (byte) sin_idx_x#19
Alias (byte) sin_idx_y#21 = (byte) sin_idx_y#22
Alias (byte) anim::yidx#2 = (byte~) anim::$17
Alias (byte) anim::yidx#2 = (byte~) anim::$19
Alias (byte) anim::x_msb#3 = (byte) anim::x_msb#4
Alias (byte) sin_idx_x#10 = (byte) sin_idx_x#14
Alias (byte) sin_idx_y#14 = (byte) sin_idx_y#15 (byte) sin_idx_y#19
@ -2309,11 +2309,11 @@ Simple Condition (bool~) main::$1 [89] if(*((byte*) RASTER#0)!=(byte) $ff) goto
Simple Condition (bool~) init::$10 [112] if((byte) init::i#1!=rangelast(0,$27)) goto init::@1
Simple Condition (bool~) clear_screen::$1 [155] if((byte*) clear_screen::sc#2<(byte*~) clear_screen::$0) goto clear_screen::@2
Simple Condition (bool~) progress_inc::$1 [174] if((byte) progress_idx#10!=(byte) 8) goto progress_inc::@1
Simple Condition (bool~) anim::$12 [210] if((byte) anim::xidx#1<(byte) sinlen_x#0) goto anim::@5
Simple Condition (bool~) anim::$16 [216] if((byte) anim::yidx#1<(byte) sinlen_y#0) goto anim::@6
Simple Condition (bool~) anim::$19 [225] if((byte) anim::j#1!=rangelast(0,6)) goto anim::@4
Simple Condition (bool~) anim::$1 [234] if((byte) sin_idx_x#3<(byte) sinlen_x#0) goto anim::@1
Simple Condition (bool~) anim::$3 [239] if((byte) sin_idx_y#3<(byte) sinlen_y#0) goto anim::@2
Simple Condition (bool~) anim::$14 [210] if((byte) anim::xidx#1<(byte) sinlen_x#0) goto anim::@5
Simple Condition (bool~) anim::$18 [216] if((byte) anim::yidx#1<(byte) sinlen_y#0) goto anim::@6
Simple Condition (bool~) anim::$21 [225] if((byte) anim::j#1!=rangelast(0,6)) goto anim::@4
Simple Condition (bool~) anim::$2 [234] if((byte) sin_idx_x#3<(byte) sinlen_x#0) goto anim::@1
Simple Condition (bool~) anim::$4 [239] if((byte) sin_idx_y#3<(byte) sinlen_y#0) goto anim::@2
Simple Condition (bool~) place_sprites::$6 [277] if((byte) place_sprites::j#1!=rangelast(0,6)) goto place_sprites::@1
Simple Condition (bool~) gen_sprites::$2 [291] if((byte) gen_sprites::i#1!=rangelast(0,6)) goto gen_sprites::@1
Simple Condition (bool~) gen_chargen_sprite::$5 [311] if((byte~) gen_chargen_sprite::$3==(byte) 0) goto gen_chargen_sprite::@3
@ -2365,7 +2365,7 @@ Constant (const byte) sin_idx_y#17 = 0
Constant (const byte) anim::j2#0 = $c
Constant (const byte) anim::x_msb#0 = 0
Constant (const byte) anim::j#0 = 0
Constant (const word) anim::$4 = $1e
Constant (const word) anim::$6 = $1e
Constant (const byte) sin_idx_x#4 = 0
Constant (const byte) sin_idx_y#4 = 0
Constant (const byte) place_sprites::spr_x#0 = $3c
@ -2486,7 +2486,7 @@ Inlining Noop Cast [21] (word) addMEMtoFAC::prepareMEM1_mem#0 ← (word)(byte*)
Inlining Noop Cast [31] (word) divMEMbyFAC::prepareMEM1_mem#0 ← (word)(byte*) divMEMbyFAC::mem#2 keeping divMEMbyFAC::mem#2
Inlining Noop Cast [39] (word) mulFACbyMEM::prepareMEM1_mem#0 ← (word)(byte*) mulFACbyMEM::mem#2 keeping mulFACbyMEM::mem#2
Successful SSA optimization Pass2NopCastInlining
Rewriting multiplication to use shift [87] (byte~) anim::$6 ← (byte) anim::x_msb#2 * (byte) 2
Rewriting multiplication to use shift [87] (byte~) anim::$8 ← (byte) anim::x_msb#2 * (byte) 2
Rewriting multiplication to use shift [138] (word~) gen_chargen_sprite::$1 ← (word~) gen_chargen_sprite::$0 * (byte) 8
Rewriting multiplication to use shift [149] (byte~) gen_chargen_sprite::$6 ← (byte) gen_chargen_sprite::s_gen#3 * (byte) 2
Rewriting multiplication to use shift [160] (byte) gen_chargen_sprite::bits#1 ← (byte) gen_chargen_sprite::bits#2 * (byte) 2
@ -2590,7 +2590,7 @@ Constant inlined gen_chargen_sprite::s_gen#0 = (byte) 0
Constant inlined anim::x_msb#0 = (byte) 0
Constant inlined gen_sprites::i#0 = (byte) 0
Constant inlined place_sprites::col#0 = (byte) 5
Constant inlined anim::$4 = (word) $1e
Constant inlined anim::$6 = (word) $1e
Constant inlined gen_chargen_sprite::y#0 = (byte) 0
Constant inlined sin_idx_y#4 = (byte) 0
Constant inlined progress_idx#11 = (byte) 0
@ -2875,11 +2875,11 @@ anim::@3: scope:[anim] from anim anim::@5
[13] (byte) anim::x_msb#2 ← phi( anim/(byte) 0 anim::@5/(byte) anim::x_msb#1 )
[13] (byte) anim::xidx#3 ← phi( anim/(byte) anim::xidx#0 anim::@5/(byte) anim::xidx#5 )
[14] (word) anim::x#0 ← (word) $1e + *((const byte[$dd]) sintab_x#0 + (byte) anim::xidx#3)
[15] (byte~) anim::$6 ← (byte) anim::x_msb#2 << (byte) 1
[16] (byte~) anim::$7 ← > (word) anim::x#0
[17] (byte) anim::x_msb#1 ← (byte~) anim::$6 | (byte~) anim::$7
[18] (byte~) anim::$9 ← < (word) anim::x#0
[19] *((const byte*) SPRITES_XPOS#0 + (byte) anim::j2#2) ← (byte~) anim::$9
[15] (byte~) anim::$8 ← (byte) anim::x_msb#2 << (byte) 1
[16] (byte~) anim::$9 ← > (word) anim::x#0
[17] (byte) anim::x_msb#1 ← (byte~) anim::$8 | (byte~) anim::$9
[18] (byte~) anim::$11 ← < (word) anim::x#0
[19] *((const byte*) SPRITES_XPOS#0 + (byte) anim::j2#2) ← (byte~) anim::$11
[20] *((const byte*) SPRITES_YPOS#0 + (byte) anim::j2#2) ← *((const byte[$c5]) sintab_y#0 + (byte) anim::yidx#3)
[21] (byte) anim::xidx#1 ← (byte) anim::xidx#3 + (byte) $a
[22] if((byte) anim::xidx#1<(const byte) sinlen_x#0) goto anim::@4
@ -3336,8 +3336,8 @@ VARIABLE REGISTER WEIGHTS
(byte~) addMEMtoFAC::prepareMEM1_$1
(word) addMEMtoFAC::prepareMEM1_mem
(void()) anim()
(byte~) anim::$6 101.0
(byte~) anim::$7 202.0
(byte~) anim::$11 202.0
(byte~) anim::$8 101.0
(byte~) anim::$9 202.0
(byte) anim::j
(byte) anim::j#1 151.5
@ -3567,9 +3567,9 @@ Initial phi equivalence classes
[ place_sprites::j2#3 place_sprites::j2#2 ]
[ place_sprites::col#2 place_sprites::col#1 ]
Added variable anim::x#0 to zero page equivalence class [ anim::x#0 ]
Added variable anim::$6 to zero page equivalence class [ anim::$6 ]
Added variable anim::$7 to zero page equivalence class [ anim::$7 ]
Added variable anim::$8 to zero page equivalence class [ anim::$8 ]
Added variable anim::$9 to zero page equivalence class [ anim::$9 ]
Added variable anim::$11 to zero page equivalence class [ anim::$11 ]
Added variable getFAC::return#2 to zero page equivalence class [ getFAC::return#2 ]
Added variable gen_sintab::$24 to zero page equivalence class [ gen_sintab::$24 ]
Added variable gen_sintab::$25 to zero page equivalence class [ gen_sintab::$25 ]
@ -3626,9 +3626,9 @@ Complete equivalence classes
[ place_sprites::j2#3 place_sprites::j2#2 ]
[ place_sprites::col#2 place_sprites::col#1 ]
[ anim::x#0 ]
[ anim::$6 ]
[ anim::$7 ]
[ anim::$8 ]
[ anim::$9 ]
[ anim::$11 ]
[ getFAC::return#2 ]
[ gen_sintab::$24 ]
[ gen_sintab::$25 ]
@ -3684,9 +3684,9 @@ Allocated zp ZP_BYTE:47 [ place_sprites::spr_x#2 place_sprites::spr_x#1 ]
Allocated zp ZP_BYTE:48 [ place_sprites::j2#3 place_sprites::j2#2 ]
Allocated zp ZP_BYTE:49 [ place_sprites::col#2 place_sprites::col#1 ]
Allocated zp ZP_WORD:50 [ anim::x#0 ]
Allocated zp ZP_BYTE:52 [ anim::$6 ]
Allocated zp ZP_BYTE:53 [ anim::$7 ]
Allocated zp ZP_BYTE:54 [ anim::$9 ]
Allocated zp ZP_BYTE:52 [ anim::$8 ]
Allocated zp ZP_BYTE:53 [ anim::$9 ]
Allocated zp ZP_BYTE:54 [ anim::$11 ]
Allocated zp ZP_WORD:55 [ getFAC::return#2 ]
Allocated zp ZP_WORD:57 [ gen_sintab::$24 ]
Allocated zp ZP_BYTE:59 [ gen_sintab::$25 ]
@ -3795,9 +3795,9 @@ main: {
}
// anim
anim: {
.label _6 = $34
.label _7 = $35
.label _9 = $36
.label _8 = $34
.label _9 = $35
.label _11 = $36
.label xidx = 4
.label yidx = 8
.label x = $32
@ -3845,22 +3845,22 @@ anim: {
lda #>$1e
adc #0
sta.z x+1
// [15] (byte~) anim::$6 ← (byte) anim::x_msb#2 << (byte) 1 -- vbuz1=vbuz2_rol_1
// [15] (byte~) anim::$8 ← (byte) anim::x_msb#2 << (byte) 1 -- vbuz1=vbuz2_rol_1
lda.z x_msb
asl
sta.z _6
// [16] (byte~) anim::$7 ← > (word) anim::x#0 -- vbuz1=_hi_vwuz2
sta.z _8
// [16] (byte~) anim::$9 ← > (word) anim::x#0 -- vbuz1=_hi_vwuz2
lda.z x+1
sta.z _7
// [17] (byte) anim::x_msb#1 ← (byte~) anim::$6 | (byte~) anim::$7 -- vbuz1=vbuz2_bor_vbuz3
lda.z _6
ora.z _7
sta.z x_msb
// [18] (byte~) anim::$9 ← < (word) anim::x#0 -- vbuz1=_lo_vwuz2
lda.z x
sta.z _9
// [19] *((const byte*) SPRITES_XPOS#0 + (byte) anim::j2#2) ← (byte~) anim::$9 -- pbuc1_derefidx_vbuz1=vbuz2
lda.z _9
// [17] (byte) anim::x_msb#1 ← (byte~) anim::$8 | (byte~) anim::$9 -- vbuz1=vbuz2_bor_vbuz3
lda.z _8
ora.z _9
sta.z x_msb
// [18] (byte~) anim::$11 ← < (word) anim::x#0 -- vbuz1=_lo_vwuz2
lda.z x
sta.z _11
// [19] *((const byte*) SPRITES_XPOS#0 + (byte) anim::j2#2) ← (byte~) anim::$11 -- pbuc1_derefidx_vbuz1=vbuz2
lda.z _11
ldy.z j2
sta SPRITES_XPOS,y
// [20] *((const byte*) SPRITES_YPOS#0 + (byte) anim::j2#2) ← *((const byte[$c5]) sintab_y#0 + (byte) anim::yidx#3) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz2
@ -5166,7 +5166,7 @@ place_sprites: {
sintab_y: .fill $c5, 0
REGISTER UPLIFT POTENTIAL REGISTERS
Equivalence Class zp ZP_BYTE:53 [ anim::$7 ] has ALU potential.
Equivalence Class zp ZP_BYTE:53 [ anim::$9 ] has ALU potential.
Statement [7] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@1 [ sin_idx_x#13 sin_idx_y#13 ] ( main:2 [ sin_idx_x#13 sin_idx_y#13 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ sin_idx_x#13 sin_idx_x#11 sin_idx_x#3 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ sin_idx_y#13 sin_idx_y#11 sin_idx_y#3 ]
@ -5176,8 +5176,8 @@ Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ an
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ anim::j2#2 anim::j2#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:8 [ anim::yidx#3 anim::yidx#0 anim::yidx#6 anim::yidx#1 anim::yidx#2 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 [ anim::j#2 anim::j#1 ]
Statement [15] (byte~) anim::$6 ← (byte) anim::x_msb#2 << (byte) 1 [ sin_idx_x#13 sin_idx_y#13 anim::xidx#3 anim::j2#2 anim::yidx#3 anim::j#2 anim::x#0 anim::$6 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::xidx#3 anim::j2#2 anim::yidx#3 anim::j#2 anim::x#0 anim::$6 ] ) always clobbers reg byte a
Statement [18] (byte~) anim::$9 ← < (word) anim::x#0 [ sin_idx_x#13 sin_idx_y#13 anim::xidx#3 anim::j2#2 anim::yidx#3 anim::j#2 anim::x_msb#1 anim::$9 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::xidx#3 anim::j2#2 anim::yidx#3 anim::j#2 anim::x_msb#1 anim::$9 ] ) always clobbers reg byte a
Statement [15] (byte~) anim::$8 ← (byte) anim::x_msb#2 << (byte) 1 [ sin_idx_x#13 sin_idx_y#13 anim::xidx#3 anim::j2#2 anim::yidx#3 anim::j#2 anim::x#0 anim::$8 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::xidx#3 anim::j2#2 anim::yidx#3 anim::j#2 anim::x#0 anim::$8 ] ) always clobbers reg byte a
Statement [18] (byte~) anim::$11 ← < (word) anim::x#0 [ sin_idx_x#13 sin_idx_y#13 anim::xidx#3 anim::j2#2 anim::yidx#3 anim::j#2 anim::x_msb#1 anim::$11 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::xidx#3 anim::j2#2 anim::yidx#3 anim::j#2 anim::x_msb#1 anim::$11 ] ) always clobbers reg byte a
Statement [20] *((const byte*) SPRITES_YPOS#0 + (byte) anim::j2#2) ← *((const byte[$c5]) sintab_y#0 + (byte) anim::yidx#3) [ sin_idx_x#13 sin_idx_y#13 anim::xidx#3 anim::j2#2 anim::yidx#3 anim::j#2 anim::x_msb#1 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::xidx#3 anim::j2#2 anim::yidx#3 anim::j#2 anim::x_msb#1 ] ) always clobbers reg byte a
Statement [21] (byte) anim::xidx#1 ← (byte) anim::xidx#3 + (byte) $a [ sin_idx_x#13 sin_idx_y#13 anim::j2#2 anim::yidx#3 anim::j#2 anim::x_msb#1 anim::xidx#1 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::j2#2 anim::yidx#3 anim::j#2 anim::x_msb#1 anim::xidx#1 ] ) always clobbers reg byte a
Statement [23] (byte) anim::xidx#2 ← (byte) anim::xidx#1 - (const byte) sinlen_x#0 [ sin_idx_x#13 sin_idx_y#13 anim::j2#2 anim::yidx#3 anim::j#2 anim::x_msb#1 anim::xidx#2 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::j2#2 anim::yidx#3 anim::j#2 anim::x_msb#1 anim::xidx#2 ] ) always clobbers reg byte a
@ -5271,8 +5271,8 @@ Statement [223] (byte) place_sprites::spr_x#1 ← (byte) place_sprites::spr_x#2
Statement [224] (byte) place_sprites::col#1 ← (byte) place_sprites::col#2 ^ (byte)(number) 7^(number) 5 [ place_sprites::j#2 place_sprites::j2#3 place_sprites::spr_id#1 place_sprites::spr_x#1 place_sprites::col#1 ] ( main:2::init:5::place_sprites:51 [ place_sprites::j#2 place_sprites::j2#3 place_sprites::spr_id#1 place_sprites::spr_x#1 place_sprites::col#1 ] ) always clobbers reg byte a
Statement [7] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@1 [ sin_idx_x#13 sin_idx_y#13 ] ( main:2 [ sin_idx_x#13 sin_idx_y#13 ] ) always clobbers reg byte a
Statement [14] (word) anim::x#0 ← (word) $1e + *((const byte[$dd]) sintab_x#0 + (byte) anim::xidx#3) [ sin_idx_x#13 sin_idx_y#13 anim::xidx#3 anim::x_msb#2 anim::j2#2 anim::yidx#3 anim::j#2 anim::x#0 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::xidx#3 anim::x_msb#2 anim::j2#2 anim::yidx#3 anim::j#2 anim::x#0 ] ) always clobbers reg byte a
Statement [15] (byte~) anim::$6 ← (byte) anim::x_msb#2 << (byte) 1 [ sin_idx_x#13 sin_idx_y#13 anim::xidx#3 anim::j2#2 anim::yidx#3 anim::j#2 anim::x#0 anim::$6 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::xidx#3 anim::j2#2 anim::yidx#3 anim::j#2 anim::x#0 anim::$6 ] ) always clobbers reg byte a
Statement [18] (byte~) anim::$9 ← < (word) anim::x#0 [ sin_idx_x#13 sin_idx_y#13 anim::xidx#3 anim::j2#2 anim::yidx#3 anim::j#2 anim::x_msb#1 anim::$9 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::xidx#3 anim::j2#2 anim::yidx#3 anim::j#2 anim::x_msb#1 anim::$9 ] ) always clobbers reg byte a
Statement [15] (byte~) anim::$8 ← (byte) anim::x_msb#2 << (byte) 1 [ sin_idx_x#13 sin_idx_y#13 anim::xidx#3 anim::j2#2 anim::yidx#3 anim::j#2 anim::x#0 anim::$8 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::xidx#3 anim::j2#2 anim::yidx#3 anim::j#2 anim::x#0 anim::$8 ] ) always clobbers reg byte a
Statement [18] (byte~) anim::$11 ← < (word) anim::x#0 [ sin_idx_x#13 sin_idx_y#13 anim::xidx#3 anim::j2#2 anim::yidx#3 anim::j#2 anim::x_msb#1 anim::$11 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::xidx#3 anim::j2#2 anim::yidx#3 anim::j#2 anim::x_msb#1 anim::$11 ] ) always clobbers reg byte a
Statement [20] *((const byte*) SPRITES_YPOS#0 + (byte) anim::j2#2) ← *((const byte[$c5]) sintab_y#0 + (byte) anim::yidx#3) [ sin_idx_x#13 sin_idx_y#13 anim::xidx#3 anim::j2#2 anim::yidx#3 anim::j#2 anim::x_msb#1 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::xidx#3 anim::j2#2 anim::yidx#3 anim::j#2 anim::x_msb#1 ] ) always clobbers reg byte a
Statement [21] (byte) anim::xidx#1 ← (byte) anim::xidx#3 + (byte) $a [ sin_idx_x#13 sin_idx_y#13 anim::j2#2 anim::yidx#3 anim::j#2 anim::x_msb#1 anim::xidx#1 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::j2#2 anim::yidx#3 anim::j#2 anim::x_msb#1 anim::xidx#1 ] ) always clobbers reg byte a
Statement [23] (byte) anim::xidx#2 ← (byte) anim::xidx#1 - (const byte) sinlen_x#0 [ sin_idx_x#13 sin_idx_y#13 anim::j2#2 anim::yidx#3 anim::j#2 anim::x_msb#1 anim::xidx#2 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::j2#2 anim::yidx#3 anim::j#2 anim::x_msb#1 anim::xidx#2 ] ) always clobbers reg byte a
@ -5340,8 +5340,8 @@ Statement [223] (byte) place_sprites::spr_x#1 ← (byte) place_sprites::spr_x#2
Statement [224] (byte) place_sprites::col#1 ← (byte) place_sprites::col#2 ^ (byte)(number) 7^(number) 5 [ place_sprites::j#2 place_sprites::j2#3 place_sprites::spr_id#1 place_sprites::spr_x#1 place_sprites::col#1 ] ( main:2::init:5::place_sprites:51 [ place_sprites::j#2 place_sprites::j2#3 place_sprites::spr_id#1 place_sprites::spr_x#1 place_sprites::col#1 ] ) always clobbers reg byte a
Statement [7] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@1 [ sin_idx_x#13 sin_idx_y#13 ] ( main:2 [ sin_idx_x#13 sin_idx_y#13 ] ) always clobbers reg byte a
Statement [14] (word) anim::x#0 ← (word) $1e + *((const byte[$dd]) sintab_x#0 + (byte) anim::xidx#3) [ sin_idx_x#13 sin_idx_y#13 anim::xidx#3 anim::x_msb#2 anim::j2#2 anim::yidx#3 anim::j#2 anim::x#0 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::xidx#3 anim::x_msb#2 anim::j2#2 anim::yidx#3 anim::j#2 anim::x#0 ] ) always clobbers reg byte a
Statement [15] (byte~) anim::$6 ← (byte) anim::x_msb#2 << (byte) 1 [ sin_idx_x#13 sin_idx_y#13 anim::xidx#3 anim::j2#2 anim::yidx#3 anim::j#2 anim::x#0 anim::$6 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::xidx#3 anim::j2#2 anim::yidx#3 anim::j#2 anim::x#0 anim::$6 ] ) always clobbers reg byte a
Statement [18] (byte~) anim::$9 ← < (word) anim::x#0 [ sin_idx_x#13 sin_idx_y#13 anim::xidx#3 anim::j2#2 anim::yidx#3 anim::j#2 anim::x_msb#1 anim::$9 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::xidx#3 anim::j2#2 anim::yidx#3 anim::j#2 anim::x_msb#1 anim::$9 ] ) always clobbers reg byte a
Statement [15] (byte~) anim::$8 ← (byte) anim::x_msb#2 << (byte) 1 [ sin_idx_x#13 sin_idx_y#13 anim::xidx#3 anim::j2#2 anim::yidx#3 anim::j#2 anim::x#0 anim::$8 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::xidx#3 anim::j2#2 anim::yidx#3 anim::j#2 anim::x#0 anim::$8 ] ) always clobbers reg byte a
Statement [18] (byte~) anim::$11 ← < (word) anim::x#0 [ sin_idx_x#13 sin_idx_y#13 anim::xidx#3 anim::j2#2 anim::yidx#3 anim::j#2 anim::x_msb#1 anim::$11 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::xidx#3 anim::j2#2 anim::yidx#3 anim::j#2 anim::x_msb#1 anim::$11 ] ) always clobbers reg byte a
Statement [20] *((const byte*) SPRITES_YPOS#0 + (byte) anim::j2#2) ← *((const byte[$c5]) sintab_y#0 + (byte) anim::yidx#3) [ sin_idx_x#13 sin_idx_y#13 anim::xidx#3 anim::j2#2 anim::yidx#3 anim::j#2 anim::x_msb#1 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::xidx#3 anim::j2#2 anim::yidx#3 anim::j#2 anim::x_msb#1 ] ) always clobbers reg byte a
Statement [21] (byte) anim::xidx#1 ← (byte) anim::xidx#3 + (byte) $a [ sin_idx_x#13 sin_idx_y#13 anim::j2#2 anim::yidx#3 anim::j#2 anim::x_msb#1 anim::xidx#1 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::j2#2 anim::yidx#3 anim::j#2 anim::x_msb#1 anim::xidx#1 ] ) always clobbers reg byte a
Statement [23] (byte) anim::xidx#2 ← (byte) anim::xidx#1 - (const byte) sinlen_x#0 [ sin_idx_x#13 sin_idx_y#13 anim::j2#2 anim::yidx#3 anim::j#2 anim::x_msb#1 anim::xidx#2 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::j2#2 anim::yidx#3 anim::j#2 anim::x_msb#1 anim::xidx#2 ] ) always clobbers reg byte a
@ -5442,9 +5442,9 @@ Potential registers zp ZP_BYTE:47 [ place_sprites::spr_x#2 place_sprites::spr_x#
Potential registers zp ZP_BYTE:48 [ place_sprites::j2#3 place_sprites::j2#2 ] : zp ZP_BYTE:48 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:49 [ place_sprites::col#2 place_sprites::col#1 ] : zp ZP_BYTE:49 , reg byte x , reg byte y ,
Potential registers zp ZP_WORD:50 [ anim::x#0 ] : zp ZP_WORD:50 ,
Potential registers zp ZP_BYTE:52 [ anim::$6 ] : zp ZP_BYTE:52 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:53 [ anim::$7 ] : zp ZP_BYTE:53 , reg byte a , reg byte x , reg byte y , reg byte alu ,
Potential registers zp ZP_BYTE:54 [ anim::$9 ] : zp ZP_BYTE:54 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:52 [ anim::$8 ] : zp ZP_BYTE:52 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:53 [ anim::$9 ] : zp ZP_BYTE:53 , reg byte a , reg byte x , reg byte y , reg byte alu ,
Potential registers zp ZP_BYTE:54 [ anim::$11 ] : zp ZP_BYTE:54 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_WORD:55 [ getFAC::return#2 ] : zp ZP_WORD:55 ,
Potential registers zp ZP_WORD:57 [ gen_sintab::$24 ] : zp ZP_WORD:57 ,
Potential registers zp ZP_BYTE:59 [ gen_sintab::$25 ] : zp ZP_BYTE:59 , reg byte a , reg byte x , reg byte y ,
@ -5467,7 +5467,7 @@ Potential registers zp ZP_BYTE:79 [ place_sprites::j2#1 ] : zp ZP_BYTE:79 , reg
REGISTER UPLIFT SCOPES
Uplift Scope [gen_chargen_sprite] 34,904.9: zp ZP_BYTE:40 [ gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 ] 33,404.14: zp ZP_WORD:43 [ gen_chargen_sprite::sprite#3 gen_chargen_sprite::sprite#10 gen_chargen_sprite::sprite#11 gen_chargen_sprite::sprite#0 gen_chargen_sprite::sprite#2 gen_chargen_sprite::sprite#4 gen_chargen_sprite::sprite#1 ] 25,903.4: zp ZP_BYTE:41 [ gen_chargen_sprite::s_gen_cnt#3 gen_chargen_sprite::s_gen_cnt#4 gen_chargen_sprite::s_gen_cnt#5 gen_chargen_sprite::s_gen_cnt#1 ] 20,002: zp ZP_BYTE:78 [ gen_chargen_sprite::$6 ] 17,001.7: zp ZP_BYTE:42 [ gen_chargen_sprite::b#2 gen_chargen_sprite::b#1 ] 2,002: zp ZP_BYTE:77 [ gen_chargen_sprite::$3 ] 1,612.72: zp ZP_BYTE:38 [ gen_chargen_sprite::x#6 gen_chargen_sprite::x#1 ] 1,051.92: zp ZP_BYTE:37 [ gen_chargen_sprite::bits#2 gen_chargen_sprite::bits#0 gen_chargen_sprite::bits#1 ] 769.31: zp ZP_BYTE:39 [ gen_chargen_sprite::c#3 ] 164.67: zp ZP_BYTE:36 [ gen_chargen_sprite::y#2 gen_chargen_sprite::y#1 ] 5.5: zp ZP_BYTE:70 [ gen_chargen_sprite::ch#0 ] 4: zp ZP_WORD:71 [ gen_chargen_sprite::$0 ] 4: zp ZP_WORD:73 [ gen_chargen_sprite::$1 ] 3.68: zp ZP_WORD:75 [ gen_chargen_sprite::chargen#0 ]
Uplift Scope [anim] 509.17: zp ZP_BYTE:8 [ anim::yidx#3 anim::yidx#0 anim::yidx#6 anim::yidx#1 anim::yidx#2 ] 482: zp ZP_BYTE:4 [ anim::xidx#3 anim::xidx#0 anim::xidx#5 anim::xidx#1 anim::xidx#2 ] 202: zp ZP_BYTE:53 [ anim::$7 ] 202: zp ZP_BYTE:54 [ anim::$9 ] 163.38: zp ZP_BYTE:9 [ anim::j#2 anim::j#1 ] 114.6: zp ZP_BYTE:5 [ anim::x_msb#2 anim::x_msb#1 ] 101: zp ZP_BYTE:52 [ anim::$6 ] 92.58: zp ZP_BYTE:6 [ anim::j2#2 anim::j2#1 ] 75.75: zp ZP_WORD:50 [ anim::x#0 ]
Uplift Scope [anim] 509.17: zp ZP_BYTE:8 [ anim::yidx#3 anim::yidx#0 anim::yidx#6 anim::yidx#1 anim::yidx#2 ] 482: zp ZP_BYTE:4 [ anim::xidx#3 anim::xidx#0 anim::xidx#5 anim::xidx#1 anim::xidx#2 ] 202: zp ZP_BYTE:53 [ anim::$9 ] 202: zp ZP_BYTE:54 [ anim::$11 ] 163.38: zp ZP_BYTE:9 [ anim::j#2 anim::j#1 ] 114.6: zp ZP_BYTE:5 [ anim::x_msb#2 anim::x_msb#1 ] 101: zp ZP_BYTE:52 [ anim::$8 ] 92.58: zp ZP_BYTE:6 [ anim::j2#2 anim::j2#1 ] 75.75: zp ZP_WORD:50 [ anim::x#0 ]
Uplift Scope [place_sprites] 22: zp ZP_BYTE:79 [ place_sprites::j2#1 ] 20.9: zp ZP_BYTE:46 [ place_sprites::j#2 place_sprites::j#1 ] 18.7: zp ZP_BYTE:45 [ place_sprites::spr_id#2 place_sprites::spr_id#1 ] 12.83: zp ZP_BYTE:48 [ place_sprites::j2#3 place_sprites::j2#2 ] 9.17: zp ZP_BYTE:47 [ place_sprites::spr_x#2 place_sprites::spr_x#1 ] 9.11: zp ZP_BYTE:49 [ place_sprites::col#2 place_sprites::col#1 ]
Uplift Scope [setFAC] 62: zp ZP_WORD:29 [ setFAC::prepareMEM1_mem#0 setFAC::w#0 setFAC::w#3 setFAC::w#4 setFAC::w#1 ] 4: zp ZP_BYTE:66 [ setFAC::prepareMEM1_$0#0 ] 4: zp ZP_BYTE:67 [ setFAC::prepareMEM1_$1#0 ]
Uplift Scope [gen_sintab] 23.76: zp ZP_BYTE:21 [ gen_sintab::i#10 gen_sintab::i#1 ] 22: zp ZP_BYTE:59 [ gen_sintab::$25 ] 11: zp ZP_WORD:57 [ gen_sintab::$24 ] 0.22: zp ZP_BYTE:17 [ gen_sintab::length#10 ] 0.22: zp ZP_WORD:19 [ gen_sintab::sintab#13 ] 0: zp ZP_BYTE:15 [ gen_sintab::max#2 ] 0: zp ZP_BYTE:16 [ gen_sintab::min#2 ]
@ -5490,7 +5490,7 @@ Uplift Scope [progress_inc]
Uplifting [gen_chargen_sprite] best 1064201 combination zp ZP_BYTE:40 [ gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 ] zp ZP_WORD:43 [ gen_chargen_sprite::sprite#3 gen_chargen_sprite::sprite#10 gen_chargen_sprite::sprite#11 gen_chargen_sprite::sprite#0 gen_chargen_sprite::sprite#2 gen_chargen_sprite::sprite#4 gen_chargen_sprite::sprite#1 ] reg byte y [ gen_chargen_sprite::s_gen_cnt#3 gen_chargen_sprite::s_gen_cnt#4 gen_chargen_sprite::s_gen_cnt#5 gen_chargen_sprite::s_gen_cnt#1 ] reg byte a [ gen_chargen_sprite::$6 ] reg byte x [ gen_chargen_sprite::b#2 gen_chargen_sprite::b#1 ] reg byte a [ gen_chargen_sprite::$3 ] zp ZP_BYTE:38 [ gen_chargen_sprite::x#6 gen_chargen_sprite::x#1 ] zp ZP_BYTE:37 [ gen_chargen_sprite::bits#2 gen_chargen_sprite::bits#0 gen_chargen_sprite::bits#1 ] zp ZP_BYTE:39 [ gen_chargen_sprite::c#3 ] zp ZP_BYTE:36 [ gen_chargen_sprite::y#2 gen_chargen_sprite::y#1 ] zp ZP_BYTE:70 [ gen_chargen_sprite::ch#0 ] zp ZP_WORD:71 [ gen_chargen_sprite::$0 ] zp ZP_WORD:73 [ gen_chargen_sprite::$1 ] zp ZP_WORD:75 [ gen_chargen_sprite::chargen#0 ]
Limited combination testing to 100 combinations of 9216 possible.
Uplifting [anim] best 1063001 combination zp ZP_BYTE:8 [ anim::yidx#3 anim::yidx#0 anim::yidx#6 anim::yidx#1 anim::yidx#2 ] zp ZP_BYTE:4 [ anim::xidx#3 anim::xidx#0 anim::xidx#5 anim::xidx#1 anim::xidx#2 ] reg byte a [ anim::$7 ] reg byte a [ anim::$9 ] zp ZP_BYTE:9 [ anim::j#2 anim::j#1 ] zp ZP_BYTE:5 [ anim::x_msb#2 anim::x_msb#1 ] zp ZP_BYTE:52 [ anim::$6 ] zp ZP_BYTE:6 [ anim::j2#2 anim::j2#1 ] zp ZP_WORD:50 [ anim::x#0 ]
Uplifting [anim] best 1063001 combination zp ZP_BYTE:8 [ anim::yidx#3 anim::yidx#0 anim::yidx#6 anim::yidx#1 anim::yidx#2 ] zp ZP_BYTE:4 [ anim::xidx#3 anim::xidx#0 anim::xidx#5 anim::xidx#1 anim::xidx#2 ] reg byte a [ anim::$9 ] reg byte a [ anim::$11 ] zp ZP_BYTE:9 [ anim::j#2 anim::j#1 ] zp ZP_BYTE:5 [ anim::x_msb#2 anim::x_msb#1 ] zp ZP_BYTE:52 [ anim::$8 ] zp ZP_BYTE:6 [ anim::j2#2 anim::j2#1 ] zp ZP_WORD:50 [ anim::x#0 ]
Limited combination testing to 100 combinations of 19440 possible.
Uplifting [place_sprites] best 1062941 combination reg byte x [ place_sprites::j2#1 ] zp ZP_BYTE:46 [ place_sprites::j#2 place_sprites::j#1 ] zp ZP_BYTE:45 [ place_sprites::spr_id#2 place_sprites::spr_id#1 ] zp ZP_BYTE:48 [ place_sprites::j2#3 place_sprites::j2#2 ] zp ZP_BYTE:47 [ place_sprites::spr_x#2 place_sprites::spr_x#1 ] zp ZP_BYTE:49 [ place_sprites::col#2 place_sprites::col#1 ]
Limited combination testing to 100 combinations of 972 possible.
@ -5530,8 +5530,8 @@ Attempting to uplift remaining variables inzp ZP_BYTE:9 [ anim::j#2 anim::j#1 ]
Uplifting [anim] best 1062676 combination zp ZP_BYTE:9 [ anim::j#2 anim::j#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:5 [ anim::x_msb#2 anim::x_msb#1 ]
Uplifting [anim] best 1062676 combination zp ZP_BYTE:5 [ anim::x_msb#2 anim::x_msb#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:52 [ anim::$6 ]
Uplifting [anim] best 1062676 combination zp ZP_BYTE:52 [ anim::$6 ]
Attempting to uplift remaining variables inzp ZP_BYTE:52 [ anim::$8 ]
Uplifting [anim] best 1062676 combination zp ZP_BYTE:52 [ anim::$8 ]
Attempting to uplift remaining variables inzp ZP_BYTE:6 [ anim::j2#2 anim::j2#1 ]
Uplifting [anim] best 1062676 combination zp ZP_BYTE:6 [ anim::j2#2 anim::j2#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:21 [ gen_sintab::i#10 gen_sintab::i#1 ]
@ -5560,7 +5560,7 @@ Attempting to uplift remaining variables inzp ZP_BYTE:17 [ gen_sintab::length#10
Uplifting [gen_sintab] best 1062645 combination zp ZP_BYTE:17 [ gen_sintab::length#10 ]
Attempting to uplift remaining variables inzp ZP_BYTE:16 [ gen_sintab::min#2 ]
Uplifting [gen_sintab] best 1062645 combination zp ZP_BYTE:16 [ gen_sintab::min#2 ]
Coalescing zero page register [ zp ZP_BYTE:5 [ anim::x_msb#2 anim::x_msb#1 ] ] with [ zp ZP_BYTE:52 [ anim::$6 ] ] - score: 2
Coalescing zero page register [ zp ZP_BYTE:5 [ anim::x_msb#2 anim::x_msb#1 ] ] with [ zp ZP_BYTE:52 [ anim::$8 ] ] - score: 2
Coalescing zero page register [ zp ZP_WORD:55 [ getFAC::return#2 ] ] with [ zp ZP_WORD:57 [ gen_sintab::$24 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:55 [ getFAC::return#2 gen_sintab::$24 ] ] with [ zp ZP_WORD:60 [ getFAC::return#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:71 [ gen_chargen_sprite::$0 ] ] with [ zp ZP_WORD:73 [ gen_chargen_sprite::$1 ] ] - score: 1
@ -5569,7 +5569,7 @@ Coalescing zero page register [ zp ZP_BYTE:16 [ gen_sintab::min#2 ] ] with [ zp
Coalescing zero page register [ zp ZP_BYTE:17 [ gen_sintab::length#10 ] ] with [ zp ZP_BYTE:3 [ sin_idx_y#13 sin_idx_y#11 sin_idx_y#3 ] ]
Coalescing zero page register [ zp ZP_WORD:19 [ gen_sintab::sintab#13 ] ] with [ zp ZP_WORD:11 [ clear_screen::sc#4 clear_screen::sc#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:21 [ gen_sintab::i#10 gen_sintab::i#1 ] ] with [ zp ZP_BYTE:4 [ anim::xidx#3 anim::xidx#0 anim::xidx#5 anim::xidx#1 anim::xidx#2 ] ]
Coalescing zero page register [ zp ZP_BYTE:22 [ progress_idx#14 progress_idx#12 progress_idx#10 ] ] with [ zp ZP_BYTE:5 [ anim::x_msb#2 anim::x_msb#1 anim::$6 ] ]
Coalescing zero page register [ zp ZP_BYTE:22 [ progress_idx#14 progress_idx#12 progress_idx#10 ] ] with [ zp ZP_BYTE:5 [ anim::x_msb#2 anim::x_msb#1 anim::$8 ] ]
Coalescing zero page register [ zp ZP_WORD:27 [ divMEMbyFAC::mem#2 ] ] with [ zp ZP_WORD:25 [ mulFACbyMEM::mem#2 ] ]
Coalescing zero page register [ zp ZP_WORD:31 [ setMEMtoFAC::mem#5 ] ] with [ zp ZP_WORD:29 [ setFAC::prepareMEM1_mem#0 setFAC::w#0 setFAC::w#3 setFAC::w#4 setFAC::w#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:33 [ gen_sprites::i#2 gen_sprites::i#1 ] ] with [ zp ZP_BYTE:6 [ anim::j2#2 anim::j2#1 ] ]
@ -5585,7 +5585,7 @@ Coalescing zero page register [ zp ZP_WORD:31 [ setMEMtoFAC::mem#5 setFAC::prepa
Coalescing zero page register [ zp ZP_BYTE:45 [ place_sprites::spr_id#2 place_sprites::spr_id#1 gen_chargen_sprite::x#6 gen_chargen_sprite::x#1 ] ] with [ zp ZP_BYTE:16 [ gen_sintab::min#2 sin_idx_x#13 sin_idx_x#11 sin_idx_x#3 ] ]
Coalescing zero page register [ zp ZP_BYTE:46 [ place_sprites::j#2 place_sprites::j#1 gen_chargen_sprite::c#3 ] ] with [ zp ZP_BYTE:17 [ gen_sintab::length#10 sin_idx_y#13 sin_idx_y#11 sin_idx_y#3 ] ]
Coalescing zero page register [ zp ZP_BYTE:47 [ place_sprites::spr_x#2 place_sprites::spr_x#1 gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 ] ] with [ zp ZP_BYTE:21 [ gen_sintab::i#10 gen_sintab::i#1 anim::xidx#3 anim::xidx#0 anim::xidx#5 anim::xidx#1 anim::xidx#2 ] ]
Coalescing zero page register [ zp ZP_BYTE:48 [ place_sprites::j2#3 place_sprites::j2#2 ] ] with [ zp ZP_BYTE:22 [ progress_idx#14 progress_idx#12 progress_idx#10 anim::x_msb#2 anim::x_msb#1 anim::$6 ] ]
Coalescing zero page register [ zp ZP_BYTE:48 [ place_sprites::j2#3 place_sprites::j2#2 ] ] with [ zp ZP_BYTE:22 [ progress_idx#14 progress_idx#12 progress_idx#10 anim::x_msb#2 anim::x_msb#1 anim::$8 ] ]
Coalescing zero page register [ zp ZP_BYTE:49 [ place_sprites::col#2 place_sprites::col#1 ] ] with [ zp ZP_BYTE:33 [ gen_sprites::i#2 gen_sprites::i#1 anim::j2#2 anim::j2#1 ] ]
Coalescing zero page register [ zp ZP_WORD:50 [ anim::x#0 gen_chargen_sprite::sprite#3 gen_chargen_sprite::sprite#10 gen_chargen_sprite::sprite#11 gen_chargen_sprite::sprite#0 gen_chargen_sprite::sprite#2 gen_chargen_sprite::sprite#4 gen_chargen_sprite::sprite#1 ] ] with [ zp ZP_WORD:19 [ gen_sintab::sintab#13 clear_screen::sc#4 clear_screen::sc#1 ] ]
Coalescing zero page register [ zp ZP_WORD:71 [ gen_chargen_sprite::$0 gen_chargen_sprite::$1 gen_chargen_sprite::chargen#0 getFAC::return#2 gen_sintab::$24 getFAC::return#0 ] ] with [ zp ZP_WORD:31 [ setMEMtoFAC::mem#5 setFAC::prepareMEM1_mem#0 setFAC::w#0 setFAC::w#3 setFAC::w#4 setFAC::w#1 divMEMbyFAC::mem#2 mulFACbyMEM::mem#2 ] ]
@ -5595,7 +5595,7 @@ Allocated (was zp ZP_BYTE:37) zp ZP_BYTE:5 [ gen_chargen_sprite::bits#2 gen_char
Allocated (was zp ZP_BYTE:45) zp ZP_BYTE:6 [ place_sprites::spr_id#2 place_sprites::spr_id#1 gen_chargen_sprite::x#6 gen_chargen_sprite::x#1 gen_sintab::min#2 sin_idx_x#13 sin_idx_x#11 sin_idx_x#3 ]
Allocated (was zp ZP_BYTE:46) zp ZP_BYTE:8 [ place_sprites::j#2 place_sprites::j#1 gen_chargen_sprite::c#3 gen_sintab::length#10 sin_idx_y#13 sin_idx_y#11 sin_idx_y#3 ]
Allocated (was zp ZP_BYTE:47) zp ZP_BYTE:9 [ place_sprites::spr_x#2 place_sprites::spr_x#1 gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 gen_sintab::i#10 gen_sintab::i#1 anim::xidx#3 anim::xidx#0 anim::xidx#5 anim::xidx#1 anim::xidx#2 ]
Allocated (was zp ZP_BYTE:48) zp ZP_BYTE:10 [ place_sprites::j2#3 place_sprites::j2#2 progress_idx#14 progress_idx#12 progress_idx#10 anim::x_msb#2 anim::x_msb#1 anim::$6 ]
Allocated (was zp ZP_BYTE:48) zp ZP_BYTE:10 [ place_sprites::j2#3 place_sprites::j2#2 progress_idx#14 progress_idx#12 progress_idx#10 anim::x_msb#2 anim::x_msb#1 anim::$8 ]
Allocated (was zp ZP_BYTE:49) zp ZP_BYTE:11 [ place_sprites::col#2 place_sprites::col#1 gen_sprites::i#2 gen_sprites::i#1 anim::j2#2 anim::j2#1 ]
Allocated (was zp ZP_WORD:50) zp ZP_WORD:15 [ anim::x#0 gen_chargen_sprite::sprite#3 gen_chargen_sprite::sprite#10 gen_chargen_sprite::sprite#11 gen_chargen_sprite::sprite#0 gen_chargen_sprite::sprite#2 gen_chargen_sprite::sprite#4 gen_chargen_sprite::sprite#1 gen_sintab::sintab#13 clear_screen::sc#4 clear_screen::sc#1 ]
Allocated (was zp ZP_WORD:71) zp ZP_WORD:19 [ gen_chargen_sprite::$0 gen_chargen_sprite::$1 gen_chargen_sprite::chargen#0 getFAC::return#2 gen_sintab::$24 getFAC::return#0 setMEMtoFAC::mem#5 setFAC::prepareMEM1_mem#0 setFAC::w#0 setFAC::w#3 setFAC::w#4 setFAC::w#1 divMEMbyFAC::mem#2 mulFACbyMEM::mem#2 ]
@ -5687,7 +5687,7 @@ main: {
}
// anim
anim: {
.label _6 = $a
.label _8 = $a
.label xidx = 9
.label yidx = 4
.label x = $f
@ -5735,16 +5735,16 @@ anim: {
lda #>$1e
adc #0
sta.z x+1
// [15] (byte~) anim::$6 ← (byte) anim::x_msb#2 << (byte) 1 -- vbuz1=vbuz1_rol_1
asl.z _6
// [16] (byte~) anim::$7 ← > (word) anim::x#0 -- vbuaa=_hi_vwuz1
// [15] (byte~) anim::$8 ← (byte) anim::x_msb#2 << (byte) 1 -- vbuz1=vbuz1_rol_1
asl.z _8
// [16] (byte~) anim::$9 ← > (word) anim::x#0 -- vbuaa=_hi_vwuz1
lda.z x+1
// [17] (byte) anim::x_msb#1 ← (byte~) anim::$6 | (byte~) anim::$7 -- vbuz1=vbuz1_bor_vbuaa
// [17] (byte) anim::x_msb#1 ← (byte~) anim::$8 | (byte~) anim::$9 -- vbuz1=vbuz1_bor_vbuaa
ora.z x_msb
sta.z x_msb
// [18] (byte~) anim::$9 ← < (word) anim::x#0 -- vbuaa=_lo_vwuz1
// [18] (byte~) anim::$11 ← < (word) anim::x#0 -- vbuaa=_lo_vwuz1
lda.z x
// [19] *((const byte*) SPRITES_XPOS#0 + (byte) anim::j2#2) ← (byte~) anim::$9 -- pbuc1_derefidx_vbuz1=vbuaa
// [19] *((const byte*) SPRITES_XPOS#0 + (byte) anim::j2#2) ← (byte~) anim::$11 -- pbuc1_derefidx_vbuz1=vbuaa
ldy.z j2
sta SPRITES_XPOS,y
// [20] *((const byte*) SPRITES_YPOS#0 + (byte) anim::j2#2) ← *((const byte[$c5]) sintab_y#0 + (byte) anim::yidx#3) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz2
@ -7334,8 +7334,8 @@ FINAL SYMBOL TABLE
(byte~) addMEMtoFAC::prepareMEM1_$1
(word) addMEMtoFAC::prepareMEM1_mem
(void()) anim()
(byte~) anim::$6 $6 zp ZP_BYTE:10 101.0
(byte~) anim::$7 reg byte a 202.0
(byte~) anim::$11 reg byte a 202.0
(byte~) anim::$8 $8 zp ZP_BYTE:10 101.0
(byte~) anim::$9 reg byte a 202.0
(label) anim::@1
(label) anim::@10
@ -7636,11 +7636,11 @@ reg byte x [ gen_chargen_sprite::b#2 gen_chargen_sprite::b#1 ]
zp ZP_BYTE:6 [ place_sprites::spr_id#2 place_sprites::spr_id#1 gen_chargen_sprite::x#6 gen_chargen_sprite::x#1 gen_sintab::min#2 sin_idx_x#13 sin_idx_x#11 sin_idx_x#3 ]
zp ZP_BYTE:8 [ place_sprites::j#2 place_sprites::j#1 gen_chargen_sprite::c#3 gen_sintab::length#10 sin_idx_y#13 sin_idx_y#11 sin_idx_y#3 ]
zp ZP_BYTE:9 [ place_sprites::spr_x#2 place_sprites::spr_x#1 gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 gen_sintab::i#10 gen_sintab::i#1 anim::xidx#3 anim::xidx#0 anim::xidx#5 anim::xidx#1 anim::xidx#2 ]
zp ZP_BYTE:10 [ place_sprites::j2#3 place_sprites::j2#2 progress_idx#14 progress_idx#12 progress_idx#10 anim::x_msb#2 anim::x_msb#1 anim::$6 ]
zp ZP_BYTE:10 [ place_sprites::j2#3 place_sprites::j2#2 progress_idx#14 progress_idx#12 progress_idx#10 anim::x_msb#2 anim::x_msb#1 anim::$8 ]
zp ZP_BYTE:11 [ place_sprites::col#2 place_sprites::col#1 gen_sprites::i#2 gen_sprites::i#1 anim::j2#2 anim::j2#1 ]
zp ZP_WORD:15 [ anim::x#0 gen_chargen_sprite::sprite#3 gen_chargen_sprite::sprite#10 gen_chargen_sprite::sprite#11 gen_chargen_sprite::sprite#0 gen_chargen_sprite::sprite#2 gen_chargen_sprite::sprite#4 gen_chargen_sprite::sprite#1 gen_sintab::sintab#13 clear_screen::sc#4 clear_screen::sc#1 ]
reg byte a [ anim::$7 ]
reg byte a [ anim::$9 ]
reg byte a [ anim::$11 ]
reg byte a [ gen_sintab::$25 ]
reg byte a [ mulFACbyMEM::prepareMEM1_$0#0 ]
reg byte a [ mulFACbyMEM::prepareMEM1_$1#0 ]
@ -7730,7 +7730,7 @@ main: {
}
// anim
anim: {
.label _6 = $a
.label _8 = $a
.label xidx = 9
.label yidx = 4
.label x = $f
@ -7779,19 +7779,19 @@ anim: {
adc #0
sta.z x+1
// x_msb*2
// [15] (byte~) anim::$6 ← (byte) anim::x_msb#2 << (byte) 1 -- vbuz1=vbuz1_rol_1
asl.z _6
// [15] (byte~) anim::$8 ← (byte) anim::x_msb#2 << (byte) 1 -- vbuz1=vbuz1_rol_1
asl.z _8
// >x
// [16] (byte~) anim::$7 ← > (word) anim::x#0 -- vbuaa=_hi_vwuz1
// [16] (byte~) anim::$9 ← > (word) anim::x#0 -- vbuaa=_hi_vwuz1
// x_msb = x_msb*2 | >x
// [17] (byte) anim::x_msb#1 ← (byte~) anim::$6 | (byte~) anim::$7 -- vbuz1=vbuz1_bor_vbuaa
// [17] (byte) anim::x_msb#1 ← (byte~) anim::$8 | (byte~) anim::$9 -- vbuz1=vbuz1_bor_vbuaa
ora.z x_msb
sta.z x_msb
// <x
// [18] (byte~) anim::$9 ← < (word) anim::x#0 -- vbuaa=_lo_vwuz1
// [18] (byte~) anim::$11 ← < (word) anim::x#0 -- vbuaa=_lo_vwuz1
lda.z x
// SPRITES_XPOS[j2] = <x
// [19] *((const byte*) SPRITES_XPOS#0 + (byte) anim::j2#2) ← (byte~) anim::$9 -- pbuc1_derefidx_vbuz1=vbuaa
// [19] *((const byte*) SPRITES_XPOS#0 + (byte) anim::j2#2) ← (byte~) anim::$11 -- pbuc1_derefidx_vbuz1=vbuaa
ldy.z j2
sta SPRITES_XPOS,y
// SPRITES_YPOS[j2] = sintab_y[yidx]

View File

@ -40,8 +40,8 @@
(byte~) addMEMtoFAC::prepareMEM1_$1
(word) addMEMtoFAC::prepareMEM1_mem
(void()) anim()
(byte~) anim::$6 $6 zp ZP_BYTE:10 101.0
(byte~) anim::$7 reg byte a 202.0
(byte~) anim::$11 reg byte a 202.0
(byte~) anim::$8 $8 zp ZP_BYTE:10 101.0
(byte~) anim::$9 reg byte a 202.0
(label) anim::@1
(label) anim::@10
@ -342,11 +342,11 @@ reg byte x [ gen_chargen_sprite::b#2 gen_chargen_sprite::b#1 ]
zp ZP_BYTE:6 [ place_sprites::spr_id#2 place_sprites::spr_id#1 gen_chargen_sprite::x#6 gen_chargen_sprite::x#1 gen_sintab::min#2 sin_idx_x#13 sin_idx_x#11 sin_idx_x#3 ]
zp ZP_BYTE:8 [ place_sprites::j#2 place_sprites::j#1 gen_chargen_sprite::c#3 gen_sintab::length#10 sin_idx_y#13 sin_idx_y#11 sin_idx_y#3 ]
zp ZP_BYTE:9 [ place_sprites::spr_x#2 place_sprites::spr_x#1 gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 gen_sintab::i#10 gen_sintab::i#1 anim::xidx#3 anim::xidx#0 anim::xidx#5 anim::xidx#1 anim::xidx#2 ]
zp ZP_BYTE:10 [ place_sprites::j2#3 place_sprites::j2#2 progress_idx#14 progress_idx#12 progress_idx#10 anim::x_msb#2 anim::x_msb#1 anim::$6 ]
zp ZP_BYTE:10 [ place_sprites::j2#3 place_sprites::j2#2 progress_idx#14 progress_idx#12 progress_idx#10 anim::x_msb#2 anim::x_msb#1 anim::$8 ]
zp ZP_BYTE:11 [ place_sprites::col#2 place_sprites::col#1 gen_sprites::i#2 gen_sprites::i#1 anim::j2#2 anim::j2#1 ]
zp ZP_WORD:15 [ anim::x#0 gen_chargen_sprite::sprite#3 gen_chargen_sprite::sprite#10 gen_chargen_sprite::sprite#11 gen_chargen_sprite::sprite#0 gen_chargen_sprite::sprite#2 gen_chargen_sprite::sprite#4 gen_chargen_sprite::sprite#1 gen_sintab::sintab#13 clear_screen::sc#4 clear_screen::sc#1 ]
reg byte a [ anim::$7 ]
reg byte a [ anim::$9 ]
reg byte a [ anim::$11 ]
reg byte a [ gen_sintab::$25 ]
reg byte a [ mulFACbyMEM::prepareMEM1_$0#0 ]
reg byte a [ mulFACbyMEM::prepareMEM1_$1#0 ]

View File

@ -21,7 +21,7 @@ main::@2: scope:[main] from main::@1
to:main::@3
main::@3: scope:[main] from main::@2
[10] (void()*~) main::$1 ← (void()*) getfn::return#0
[11] call (void()*~) main::$1
[11] call *((void()*~) main::$1)
to:main::@1
getfn: scope:[getfn] from main::@2
[12] (byte~) getfn::$0 ← (byte) getfn::b#0 & (byte) 1

View File

@ -33,7 +33,7 @@ main::@7: scope:[main] from main::@2
(byte) main::i#4 ← phi( main::@2/(byte) main::i#1 )
(void()*) getfn::return#4 ← phi( main::@2/(void()*) getfn::return#0 )
(void()*~) main::$1 ← (void()*) getfn::return#4
call (void()*~) main::$1
call *((void()*~) main::$1)
to:main::@1
main::@return: scope:[main] from main::@1
return
@ -221,7 +221,7 @@ main::@2: scope:[main] from main::@1
to:main::@3
main::@3: scope:[main] from main::@2
[10] (void()*~) main::$1 ← (void()*) getfn::return#0
[11] call (void()*~) main::$1
[11] call *((void()*~) main::$1)
to:main::@1
getfn: scope:[getfn] from main::@2
[12] (byte~) getfn::$0 ← (byte) getfn::b#0 & (byte) 1
@ -347,7 +347,7 @@ main: {
sta.z _1
lda.z getfn.return+1
sta.z _1+1
// [11] call (void()*~) main::$1
// [11] call *((void()*~) main::$1)
jsr bi__1
// [5] phi from main::@3 to main::@1 [phi:main::@3->main::@1]
b1_from_b3:
@ -425,12 +425,12 @@ REGISTER UPLIFT POTENTIAL REGISTERS
Statement [9] (void()*) getfn::return#0 ← (void()*) getfn::return#3 [ main::i#1 getfn::return#0 ] ( main:2 [ main::i#1 getfn::return#0 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
Statement [10] (void()*~) main::$1 ← (void()*) getfn::return#0 [ main::i#1 main::$1 ] ( main:2 [ main::i#1 main::$1 ] ) always clobbers reg byte a
Statement [11] call (void()*~) main::$1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) always clobbers reg byte a reg byte x reg byte y
Statement [11] call *((void()*~) main::$1) [ main::i#1 ] ( main:2 [ main::i#1 ] ) always clobbers reg byte a reg byte x reg byte y
Removing always clobbered register reg byte x as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
Statement [9] (void()*) getfn::return#0 ← (void()*) getfn::return#3 [ main::i#1 getfn::return#0 ] ( main:2 [ main::i#1 getfn::return#0 ] ) always clobbers reg byte a
Statement [10] (void()*~) main::$1 ← (void()*) getfn::return#0 [ main::i#1 main::$1 ] ( main:2 [ main::i#1 main::$1 ] ) always clobbers reg byte a
Statement [11] call (void()*~) main::$1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) always clobbers reg byte a reg byte x reg byte y
Statement [11] call *((void()*~) main::$1) [ main::i#1 ] ( main:2 [ main::i#1 ] ) always clobbers reg byte a reg byte x reg byte y
Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 ,
Potential registers zp ZP_WORD:3 [ getfn::return#3 ] : zp ZP_WORD:3 ,
Potential registers zp ZP_BYTE:5 [ getfn::b#0 ] : zp ZP_BYTE:5 , reg byte a , reg byte x , reg byte y ,
@ -505,7 +505,7 @@ main: {
// main::@3
b3:
// [10] (void()*~) main::$1 ← (void()*) getfn::return#0
// [11] call (void()*~) main::$1
// [11] call *((void()*~) main::$1)
jsr bi__1
// [5] phi from main::@3 to main::@1 [phi:main::@3->main::@1]
b1_from_b3:
@ -675,7 +675,7 @@ main: {
// main::@1
// main::@2
b2:
// *(getfn(++i))();
// (*getfn(++i))();
// [6] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1
inc.z i
// getfn(++i)
@ -686,8 +686,8 @@ main: {
// [9] (void()*) getfn::return#0 ← (void()*) getfn::return#3
// main::@3
// [10] (void()*~) main::$1 ← (void()*) getfn::return#0
// (getfn(++i))()
// [11] call (void()*~) main::$1
// (*getfn(++i))()
// [11] call *((void()*~) main::$1)
jsr bi__1
// [5] phi from main::@3 to main::@1 [phi:main::@3->main::@1]
// [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@3->main::@1#0] -- register_copy

View File

@ -28,7 +28,7 @@ main::@7: scope:[main] from main::@2
(byte) main::i#4 ← phi( main::@2/(byte) main::i#1 )
(void()*) getfn::return#3 ← phi( main::@2/(void()*) getfn::return#0 )
(void()*~) main::$1 ← (void()*) getfn::return#3
call (void()*~) main::$1
call *((void()*~) main::$1)
to:main::@1
main::@return: scope:[main] from main::@1
return
@ -455,7 +455,7 @@ main: {
// main::@1
// main::@2
b2:
// *(getfn(++i))();
// (*getfn(++i))();
// [6] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx
inx
// getfn(++i)
@ -464,7 +464,7 @@ main: {
jsr getfn
// [8] phi from main::@2 to main::@3 [phi:main::@2->main::@3]
// main::@3
// (getfn(++i))()
// (*getfn(++i))()
// [9] call fn1
jsr fn1
// [5] phi from main::@3 to main::@1 [phi:main::@3->main::@1]

View File

@ -96,31 +96,31 @@ main::@20: scope:[main] from main::@19
(byte) main::time_start#1 ← phi( main::@19/(byte) main::time_start#2 )
(byte) main::time_end#0 ← *((byte*) raster#0)
*((byte*) bordercol#0) ← (number) 0
(byte~) main::$10 ← (byte) main::time_end#0 - (byte) main::time_start#1
(byte) main::time#0 ← (byte~) main::$10
(word~) main::$11 ← ((word)) (byte) main::time#0
(byte*~) main::$12 ← (byte*) main::screen#9 + (number) $50
(word) utoa10w::value#0 ← (word~) main::$11
(byte*) utoa10w::dst#0 ← (byte*~) main::$12
(byte~) main::$14 ← (byte) main::time_end#0 - (byte) main::time_start#1
(byte) main::time#0 ← (byte~) main::$14
(word~) main::$15 ← ((word)) (byte) main::time#0
(byte*~) main::$16 ← (byte*) main::screen#9 + (number) $50
(word) utoa10w::value#0 ← (word~) main::$15
(byte*) utoa10w::dst#0 ← (byte*~) main::$16
call utoa10w
to:main::@21
main::@21: scope:[main] from main::@20
(byte*) main::screen#12 ← phi( main::@20/(byte*) main::screen#9 )
(byte[]) main::msg#0 ← (const string) main::$17
(byte[]) main::msg#0 ← (const string) main::$21
(byte) main::i#0 ← (number) 0
to:main::@6
main::@6: scope:[main] from main::@21 main::@7
(byte*) main::screen#11 ← phi( main::@21/(byte*) main::screen#12 main::@7/(byte*) main::screen#10 )
(byte) main::i#2 ← phi( main::@21/(byte) main::i#0 main::@7/(byte) main::i#1 )
(bool~) main::$14 ← *((byte[]) main::msg#0 + (byte) main::i#2) != (number) 0
if((bool~) main::$14) goto main::@7
(bool~) main::$18 ← *((byte[]) main::msg#0 + (byte) main::i#2) != (number) 0
if((bool~) main::$18) goto main::@7
to:main::@1
main::@7: scope:[main] from main::@6
(byte) main::i#3 ← phi( main::@6/(byte) main::i#2 )
(byte*) main::screen#10 ← phi( main::@6/(byte*) main::screen#11 )
(byte*~) main::$15 ← (byte*) main::screen#10 + (number) $50
(byte*~) main::$16 ← (byte*~) main::$15 + (number) 3
*((byte*~) main::$16 + (byte) main::i#3) ← *((byte[]) main::msg#0 + (byte) main::i#3)
(byte*~) main::$19 ← (byte*) main::screen#10 + (number) $50
(byte*~) main::$20 ← (byte*~) main::$19 + (number) 3
*((byte*~) main::$20 + (byte) main::i#3) ← *((byte[]) main::msg#0 + (byte) main::i#3)
(byte) main::i#1 ← ++ (byte) main::i#3
to:main::@6
main::@return: scope:[main] from main::@1
@ -371,14 +371,14 @@ SYMBOL TABLE SSA
(byte*) control#0
(void()) main()
(number~) main::$1
(byte~) main::$10
(word~) main::$11
(byte*~) main::$12
(bool~) main::$14
(byte*~) main::$15
(byte~) main::$14
(word~) main::$15
(byte*~) main::$16
(const string) main::$17 = (string) "raster lines"
(bool~) main::$18
(byte*~) main::$19
(byte~) main::$2
(byte*~) main::$20
(const string) main::$21 = (string) "raster lines"
(number~) main::$3
(bool~) main::$4
(label) main::@1
@ -617,11 +617,11 @@ Adding number conversion cast (unumber) $270f in (word) utoa16w::value#3 ← (nu
Adding number conversion cast (unumber) $28 in (byte*) main::screen#4 ← (byte*) main::screen#8 + (number) $28
Adding number conversion cast (unumber) $e608 in (word) utoa16w::value#4 ← (number) $e608
Adding number conversion cast (unumber) 0 in *((byte*) bordercol#0) ← (number) 0
Adding number conversion cast (unumber) $50 in (byte*~) main::$12 ← (byte*) main::screen#9 + (number) $50
Adding number conversion cast (unumber) $50 in (byte*~) main::$16 ← (byte*) main::screen#9 + (number) $50
Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0
Adding number conversion cast (unumber) 0 in (bool~) main::$14 ← *((byte[]) main::msg#0 + (byte) main::i#2) != (number) 0
Adding number conversion cast (unumber) $50 in (byte*~) main::$15 ← (byte*) main::screen#10 + (number) $50
Adding number conversion cast (unumber) 3 in (byte*~) main::$16 ← (byte*~) main::$15 + (number) 3
Adding number conversion cast (unumber) 0 in (bool~) main::$18 ← *((byte[]) main::msg#0 + (byte) main::i#2) != (number) 0
Adding number conversion cast (unumber) $50 in (byte*~) main::$19 ← (byte*) main::screen#10 + (number) $50
Adding number conversion cast (unumber) 3 in (byte*~) main::$20 ← (byte*~) main::$19 + (number) 3
Adding number conversion cast (unumber) $3e7 in (byte*~) cls::$0 ← (byte*) cls::screen#0 + (number) $3e7
Adding number conversion cast (unumber) 0 in (byte) utoa10w::bStarted#0 ← (number) 0
Adding number conversion cast (unumber) 0 in (byte) utoa10w::digit#0 ← (number) 0
@ -659,7 +659,7 @@ Inlining cast (word) utoa16w::value#2 ← (unumber)(number) $162e
Inlining cast (word) utoa16w::value#3 ← (unumber)(number) $270f
Inlining cast (word) utoa16w::value#4 ← (unumber)(number) $e608
Inlining cast *((byte*) bordercol#0) ← (unumber)(number) 0
Inlining cast (word~) main::$11 ← (word)(byte) main::time#0
Inlining cast (word~) main::$15 ← (word)(byte) main::time#0
Inlining cast (byte) main::i#0 ← (unumber)(number) 0
Inlining cast (byte*) cls::screen#0 ← (byte*)(number) $400
Inlining cast (byte) utoa10w::bStarted#0 ← (unumber)(number) 0
@ -789,9 +789,9 @@ Alias (byte*) main::screen#1 = (byte*) main::screen#6
Alias (byte*) main::screen#2 = (byte*) main::screen#7
Alias (byte*) main::screen#3 = (byte*) main::screen#8
Alias (byte*) main::screen#12 = (byte*) main::screen#9 (byte*) main::screen#4
Alias (byte) main::time#0 = (byte~) main::$10
Alias (word) utoa10w::value#0 = (word~) main::$11
Alias (byte*) utoa10w::dst#0 = (byte*~) main::$12
Alias (byte) main::time#0 = (byte~) main::$14
Alias (word) utoa10w::value#0 = (word~) main::$15
Alias (byte*) utoa10w::dst#0 = (byte*~) main::$16
Alias (byte*) main::screen#10 = (byte*) main::screen#11
Alias (byte) main::i#2 = (byte) main::i#3
Alias (byte*) cls::screen#0 = (byte*) cls::sc#0
@ -841,7 +841,7 @@ Identical Phi Values (word) utoa10w::value#5 (word) utoa10w::value#0
Identical Phi Values (byte*) utoa10w::dst#10 (byte*) utoa10w::dst#0
Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition (bool~) main::$4 [11] if((byte) main::rst#0!=(byte) $30) goto main::@4
Simple Condition (bool~) main::$14 [57] if(*((byte[]) main::msg#0 + (byte) main::i#2)!=(byte) 0) goto main::@7
Simple Condition (bool~) main::$18 [57] if(*((byte[]) main::msg#0 + (byte) main::i#2)!=(byte) 0) goto main::@7
Simple Condition (bool~) cls::$1 [71] if((byte*) cls::sc#1!=rangelast(cls::screen#0,cls::$0)) goto cls::@1
Simple Condition (bool~) utoa10w::$1 [83] if((word) utoa10w::value#10>=*((word[]) UTOA10_SUB#0 + (byte~) utoa10w::$8)) goto utoa10w::@3
Simple Condition (bool~) utoa10w::$4 [93] if((byte~) utoa10w::$2==(byte) 0) goto utoa10w::@10
@ -867,7 +867,7 @@ Constant (const word) utoa16w::value#1 = $4d2
Constant (const word) utoa16w::value#2 = $162e
Constant (const word) utoa16w::value#3 = $270f
Constant (const word) utoa16w::value#4 = $e608
Constant (const byte[]) main::msg#0 = main::$17
Constant (const byte[]) main::msg#0 = main::$21
Constant (const byte) main::i#0 = 0
Constant (const byte*) cls::screen#0 = (byte*) 1024
Constant (const byte[]) DIGITS#0 = $0
@ -933,14 +933,14 @@ Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) main::screen#12 = main::screen#3+$28
Successful SSA optimization Pass2ConstantIdentification
Constant right-side identified [26] (byte*) utoa10w::dst#0 ← (const byte*) main::screen#12 + (byte) $50
Constant right-side identified [30] (byte*~) main::$15 ← (const byte*) main::screen#12 + (byte) $50
Constant right-side identified [30] (byte*~) main::$19 ← (const byte*) main::screen#12 + (byte) $50
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) utoa10w::dst#0 = main::screen#12+$50
Constant (const byte*) main::$15 = main::screen#12+$50
Constant (const byte*) main::$19 = main::screen#12+$50
Successful SSA optimization Pass2ConstantIdentification
Constant right-side identified [29] (byte*~) main::$16 ← (const byte*) main::$15 + (byte) 3
Constant right-side identified [29] (byte*~) main::$20 ← (const byte*) main::$19 + (byte) 3
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) main::$16 = main::$15+3
Constant (const byte*) main::$20 = main::$19+3
Successful SSA optimization Pass2ConstantIdentification
Rewriting multiplication to use shift [37] (byte~) utoa10w::$8 ← (byte) utoa10w::i#2 * (const byte) SIZEOF_WORD
Rewriting multiplication to use shift [40] (byte~) utoa10w::$9 ← (byte) utoa10w::i#2 * (const byte) SIZEOF_WORD
@ -977,14 +977,12 @@ Constant inlined utoa16w::value#1 = (word) $4d2
Constant inlined main::screen#2 = (byte*) 1024+(byte) $28+(byte) $28
Constant inlined utoa16w::value#0 = (byte) 0
Constant inlined main::screen#3 = (byte*) 1024+(byte) $28+(byte) $28+(byte) $28
Constant inlined main::$15 = (byte*) 1024+(byte) $28+(byte) $28+(byte) $28+(byte) $28+(byte) $50
Constant inlined utoa10w::bStarted#1 = (byte) 1
Constant inlined $0 = (const byte[]) DIGITS#0
Constant inlined utoa10w::bStarted#0 = (byte) 0
Constant inlined main::screen#12 = (byte*) 1024+(byte) $28+(byte) $28+(byte) $28+(byte) $28
Constant inlined utoa16n::started#0 = (byte) 0
Constant inlined main::$16 = (byte*) 1024+(byte) $28+(byte) $28+(byte) $28+(byte) $28+(byte) $50+(byte) 3
Constant inlined main::$17 = (const byte[]) main::msg#0
Constant inlined main::$19 = (byte*) 1024+(byte) $28+(byte) $28+(byte) $28+(byte) $28+(byte) $50
Constant inlined main::i#0 = (byte) 0
Constant inlined utoa16n::dst#1 = &(byte*) utoa16w::dst#5
Constant inlined utoa16n::dst#0 = &(byte*) utoa16w::dst#5
@ -992,6 +990,8 @@ Constant inlined utoa16n::started#3 = (byte) 1
Constant inlined utoa16n::dst#3 = &(byte*) utoa16w::dst#5
Constant inlined utoa16n::started#4 = (byte) 1
Constant inlined utoa16n::dst#2 = &(byte*) utoa16w::dst#5
Constant inlined main::$20 = (byte*) 1024+(byte) $28+(byte) $28+(byte) $28+(byte) $28+(byte) $50+(byte) 3
Constant inlined main::$21 = (const byte[]) main::msg#0
Constant inlined utoa16w::started#0 = (byte) 0
Constant inlined cls::$0 = (const byte*) cls::screen#0+(word) $3e7
Constant inlined utoa10w::i#0 = (byte) 0

View File

@ -211,8 +211,8 @@ main::@5: scope:[main] from main::@4
(byte*) print_char_cursor#9 ← (byte*) print_char_cursor#19
*((byte[]) txt#0 + (number) 1) ← ++ *((byte[]) txt#0 + (number) 1)
(byte) main::i#1 ← (byte) main::i#2 + rangenext(0,$a)
(bool~) main::$3 ← (byte) main::i#1 != rangelast(0,$a)
if((bool~) main::$3) goto main::@1
(bool~) main::$4 ← (byte) main::i#1 != rangelast(0,$a)
if((bool~) main::$4) goto main::@1
to:main::@return
main::@return: scope:[main] from main::@5
(byte*) print_char_cursor#20 ← phi( main::@5/(byte*) print_char_cursor#9 )
@ -248,7 +248,7 @@ SYMBOL TABLE SSA
(const byte) RADIX::HEXADECIMAL = (number) $10
(const byte) RADIX::OCTAL = (number) 8
(void()) main()
(bool~) main::$3
(bool~) main::$4
(label) main::@1
(label) main::@3
(label) main::@4
@ -468,7 +468,7 @@ Simple Condition (bool~) memset::$1 [3] if((word) memset::num#0<=(byte) 0) goto
Simple Condition (bool~) memset::$4 [13] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@5
Simple Condition (bool~) print_str::$0 [26] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2
Simple Condition (bool~) print_ln::$1 [39] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#12) goto print_ln::@1
Simple Condition (bool~) main::$3 [79] if((byte) main::i#1!=rangelast(0,$a)) goto main::@1
Simple Condition (bool~) main::$4 [79] if((byte) main::i#1!=rangelast(0,$a)) goto main::@1
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte*) print_line_cursor#0 = (byte*) 1024
Constant (const byte) memset::c#0 = ' '

View File

@ -17,9 +17,17 @@ main: {
lda (screen),y
asl
tax
inc CHAR_COUNTS,x
lda (screen),y
asl
tay
clc
lda CHAR_COUNTS,x
adc #1
sta CHAR_COUNTS,y
bne !+
inc CHAR_COUNTS+1,x
lda CHAR_COUNTS+1,x
adc #0
sta CHAR_COUNTS+1,y
!:
inc.z screen
bne !+

View File

@ -13,12 +13,13 @@ main: scope:[main] from @1
main::@1: scope:[main] from main main::@1
[5] (word) main::i#2 ← phi( main/(word) 0 main::@1/(word) main::i#1 )
[5] (byte*) main::screen#2 ← phi( main/(byte*) 1024 main::@1/(byte*) main::screen#1 )
[6] (byte~) main::$1 ← *((byte*) main::screen#2) << (byte) 1
[7] *((const word[$100]) CHAR_COUNTS#0 + (byte~) main::$1) ← ++ *((const word[$100]) CHAR_COUNTS#0 + (byte~) main::$1)
[8] (byte*) main::screen#1 ← ++ (byte*) main::screen#2
[9] (word) main::i#1 ← ++ (word) main::i#2
[10] if((word) main::i#1!=(word) $3e8) goto main::@1
[6] (byte~) main::$3 ← *((byte*) main::screen#2) << (byte) 1
[7] (byte~) main::$4 ← *((byte*) main::screen#2) << (byte) 1
[8] *((const word[$100]) CHAR_COUNTS#0 + (byte~) main::$4) ← ++ *((const word[$100]) CHAR_COUNTS#0 + (byte~) main::$3)
[9] (byte*) main::screen#1 ← ++ (byte*) main::screen#2
[10] (word) main::i#1 ← ++ (word) main::i#2
[11] if((word) main::i#1!=(word) $3e8) goto main::@1
to:main::@return
main::@return: scope:[main] from main::@1
[11] return
[12] return
to:@return

View File

@ -1,5 +1,6 @@
Fixing pointer array-indexing *((word[$100]) CHAR_COUNTS + *((byte*) main::screen))
Fixing pointer array-indexing *((word[$100]) CHAR_COUNTS + *((byte*) main::screen))
Fixing pointer array-indexing *((word[$100]) CHAR_COUNTS + *((byte*) main::screen))
Culled Empty Block (label) main::@2
CONTROL FLOW GRAPH SSA
@ -13,12 +14,13 @@ main: scope:[main] from @1
main::@1: scope:[main] from main main::@1
(word) main::i#2 ← phi( main/(word) main::i#0 main::@1/(word) main::i#1 )
(byte*) main::screen#2 ← phi( main/(byte*) main::screen#0 main::@1/(byte*) main::screen#1 )
(byte~) main::$1 ← *((byte*) main::screen#2) * (const byte) SIZEOF_WORD
*((word[$100]) CHAR_COUNTS#0 + (byte~) main::$1) ← ++ *((word[$100]) CHAR_COUNTS#0 + (byte~) main::$1)
(byte~) main::$3 ← *((byte*) main::screen#2) * (const byte) SIZEOF_WORD
(byte~) main::$4 ← *((byte*) main::screen#2) * (const byte) SIZEOF_WORD
*((word[$100]) CHAR_COUNTS#0 + (byte~) main::$4) ← ++ *((word[$100]) CHAR_COUNTS#0 + (byte~) main::$3)
(byte*) main::screen#1 ← ++ (byte*) main::screen#2
(word) main::i#1 ← (word) main::i#2 + rangenext(0,$3e7)
(bool~) main::$0 ← (word) main::i#1 != rangelast(0,$3e7)
if((bool~) main::$0) goto main::@1
(bool~) main::$1 ← (word) main::i#1 != rangelast(0,$3e7)
if((bool~) main::$1) goto main::@1
to:main::@return
main::@return: scope:[main] from main::@1
return
@ -39,8 +41,9 @@ SYMBOL TABLE SSA
(word[$100]) CHAR_COUNTS#0
(const byte) SIZEOF_WORD = (byte) 2
(void()) main()
(bool~) main::$0
(byte~) main::$1
(bool~) main::$1
(byte~) main::$3
(byte~) main::$4
(label) main::@1
(label) main::@return
(word) main::i
@ -56,7 +59,7 @@ Inlining cast (byte*) main::screen#0 ← (byte*)(number) $400
Successful SSA optimization Pass2InlineCast
Simplifying constant pointer cast (byte*) 1024
Successful SSA optimization PassNCastSimplification
Simple Condition (bool~) main::$0 [9] if((word) main::i#1!=rangelast(0,$3e7)) goto main::@1
Simple Condition (bool~) main::$1 [10] if((word) main::i#1!=rangelast(0,$3e7)) goto main::@1
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant right-side identified [0] (word[$100]) CHAR_COUNTS#0 ← { fill( $100, 0) }
Successful SSA optimization Pass2ConstantRValueConsolidation
@ -64,15 +67,16 @@ Constant (const word[$100]) CHAR_COUNTS#0 = { fill( $100, 0) }
Constant (const byte*) main::screen#0 = (byte*) 1024
Constant (const word) main::i#0 = 0
Successful SSA optimization Pass2ConstantIdentification
Resolved ranged next value [7] main::i#1 ← ++ main::i#2 to ++
Resolved ranged comparison value [9] if(main::i#1!=rangelast(0,$3e7)) goto main::@1 to (number) $3e8
Resolved ranged next value [8] main::i#1 ← ++ main::i#2 to ++
Resolved ranged comparison value [10] if(main::i#1!=rangelast(0,$3e7)) goto main::@1 to (number) $3e8
Adding number conversion cast (unumber) $3e8 in if((word) main::i#1!=(number) $3e8) goto main::@1
Successful SSA optimization PassNAddNumberTypeConversions
Simplifying constant integer cast $3e8
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (word) $3e8
Successful SSA optimization PassNFinalizeNumberTypeConversions
Rewriting multiplication to use shift [1] (byte~) main::$1 ← *((byte*) main::screen#2) * (const byte) SIZEOF_WORD
Rewriting multiplication to use shift [1] (byte~) main::$3 ← *((byte*) main::screen#2) * (const byte) SIZEOF_WORD
Rewriting multiplication to use shift [2] (byte~) main::$4 ← *((byte*) main::screen#2) * (const byte) SIZEOF_WORD
Successful SSA optimization Pass2MultiplyToShiftRewriting
Inlining constant with var siblings (const byte*) main::screen#0
Inlining constant with var siblings (const word) main::i#0
@ -91,8 +95,8 @@ CALL GRAPH
Calls in [] to main:2
Created 2 initial phi equivalence classes
Coalesced [13] main::screen#3 ← main::screen#1
Coalesced [14] main::i#3 ← main::i#1
Coalesced [14] main::screen#3 ← main::screen#1
Coalesced [15] main::i#3 ← main::i#1
Coalesced down to 2 phi equivalence classes
Culled Empty Block (label) @2
Culled Empty Block (label) main::@3
@ -117,24 +121,26 @@ main: scope:[main] from @1
main::@1: scope:[main] from main main::@1
[5] (word) main::i#2 ← phi( main/(word) 0 main::@1/(word) main::i#1 )
[5] (byte*) main::screen#2 ← phi( main/(byte*) 1024 main::@1/(byte*) main::screen#1 )
[6] (byte~) main::$1 ← *((byte*) main::screen#2) << (byte) 1
[7] *((const word[$100]) CHAR_COUNTS#0 + (byte~) main::$1) ← ++ *((const word[$100]) CHAR_COUNTS#0 + (byte~) main::$1)
[8] (byte*) main::screen#1 ← ++ (byte*) main::screen#2
[9] (word) main::i#1 ← ++ (word) main::i#2
[10] if((word) main::i#1!=(word) $3e8) goto main::@1
[6] (byte~) main::$3 ← *((byte*) main::screen#2) << (byte) 1
[7] (byte~) main::$4 ← *((byte*) main::screen#2) << (byte) 1
[8] *((const word[$100]) CHAR_COUNTS#0 + (byte~) main::$4) ← ++ *((const word[$100]) CHAR_COUNTS#0 + (byte~) main::$3)
[9] (byte*) main::screen#1 ← ++ (byte*) main::screen#2
[10] (word) main::i#1 ← ++ (word) main::i#2
[11] if((word) main::i#1!=(word) $3e8) goto main::@1
to:main::@return
main::@return: scope:[main] from main::@1
[11] return
[12] return
to:@return
VARIABLE REGISTER WEIGHTS
(word[$100]) CHAR_COUNTS
(void()) main()
(byte~) main::$1 33.0
(byte~) main::$3 11.0
(byte~) main::$4 22.0
(word) main::i
(word) main::i#1 16.5
(word) main::i#2 5.5
(word) main::i#2 4.4
(byte*) main::screen
(byte*) main::screen#1 7.333333333333333
(byte*) main::screen#2 11.0
@ -142,14 +148,17 @@ VARIABLE REGISTER WEIGHTS
Initial phi equivalence classes
[ main::screen#2 main::screen#1 ]
[ main::i#2 main::i#1 ]
Added variable main::$1 to zero page equivalence class [ main::$1 ]
Added variable main::$3 to zero page equivalence class [ main::$3 ]
Added variable main::$4 to zero page equivalence class [ main::$4 ]
Complete equivalence classes
[ main::screen#2 main::screen#1 ]
[ main::i#2 main::i#1 ]
[ main::$1 ]
[ main::$3 ]
[ main::$4 ]
Allocated zp ZP_WORD:2 [ main::screen#2 main::screen#1 ]
Allocated zp ZP_WORD:4 [ main::i#2 main::i#1 ]
Allocated zp ZP_BYTE:6 [ main::$1 ]
Allocated zp ZP_BYTE:6 [ main::$3 ]
Allocated zp ZP_BYTE:7 [ main::$4 ]
INITIAL ASM
Target platform is c64basic
@ -178,7 +187,8 @@ bend_from_b1:
bend:
// main
main: {
.label _1 = 6
.label _3 = 6
.label _4 = 7
.label screen = 2
.label i = 4
// [5] phi from main to main::@1 [phi:main->main::@1]
@ -201,28 +211,39 @@ main: {
jmp b1
// main::@1
b1:
// [6] (byte~) main::$1 ← *((byte*) main::screen#2) << (byte) 1 -- vbuz1=_deref_pbuz2_rol_1
// [6] (byte~) main::$3 ← *((byte*) main::screen#2) << (byte) 1 -- vbuz1=_deref_pbuz2_rol_1
ldy #0
lda (screen),y
asl
sta.z _1
// [7] *((const word[$100]) CHAR_COUNTS#0 + (byte~) main::$1) ← ++ *((const word[$100]) CHAR_COUNTS#0 + (byte~) main::$1) -- pwuc1_derefidx_vbuz1=_inc_pwuc1_derefidx_vbuz1
ldx.z _1
inc CHAR_COUNTS,x
sta.z _3
// [7] (byte~) main::$4 ← *((byte*) main::screen#2) << (byte) 1 -- vbuz1=_deref_pbuz2_rol_1
ldy #0
lda (screen),y
asl
sta.z _4
// [8] *((const word[$100]) CHAR_COUNTS#0 + (byte~) main::$4) ← ++ *((const word[$100]) CHAR_COUNTS#0 + (byte~) main::$3) -- pwuc1_derefidx_vbuz1=_inc_pwuc1_derefidx_vbuz2
ldx.z _4
ldy.z _3
clc
lda CHAR_COUNTS,y
adc #1
sta CHAR_COUNTS,x
bne !+
inc CHAR_COUNTS+1,x
lda CHAR_COUNTS+1,y
adc #0
sta CHAR_COUNTS+1,x
!:
// [8] (byte*) main::screen#1 ← ++ (byte*) main::screen#2 -- pbuz1=_inc_pbuz1
// [9] (byte*) main::screen#1 ← ++ (byte*) main::screen#2 -- pbuz1=_inc_pbuz1
inc.z screen
bne !+
inc.z screen+1
!:
// [9] (word) main::i#1 ← ++ (word) main::i#2 -- vwuz1=_inc_vwuz1
// [10] (word) main::i#1 ← ++ (word) main::i#2 -- vwuz1=_inc_vwuz1
inc.z i
bne !+
inc.z i+1
!:
// [10] if((word) main::i#1!=(word) $3e8) goto main::@1 -- vwuz1_neq_vwuc1_then_la1
// [11] if((word) main::i#1!=(word) $3e8) goto main::@1 -- vwuz1_neq_vwuc1_then_la1
lda.z i+1
cmp #>$3e8
bne b1_from_b1
@ -232,25 +253,32 @@ main: {
jmp breturn
// main::@return
breturn:
// [11] return
// [12] return
rts
}
// File Data
CHAR_COUNTS: .fill 2*$100, 0
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [6] (byte~) main::$1 ← *((byte*) main::screen#2) << (byte) 1 [ main::screen#2 main::i#2 main::$1 ] ( main:2 [ main::screen#2 main::i#2 main::$1 ] ) always clobbers reg byte a reg byte y
Statement [10] if((word) main::i#1!=(word) $3e8) goto main::@1 [ main::screen#1 main::i#1 ] ( main:2 [ main::screen#1 main::i#1 ] ) always clobbers reg byte a
Statement [6] (byte~) main::$3 ← *((byte*) main::screen#2) << (byte) 1 [ main::screen#2 main::i#2 main::$3 ] ( main:2 [ main::screen#2 main::i#2 main::$3 ] ) always clobbers reg byte a reg byte y
Statement [7] (byte~) main::$4 ← *((byte*) main::screen#2) << (byte) 1 [ main::screen#2 main::i#2 main::$3 main::$4 ] ( main:2 [ main::screen#2 main::i#2 main::$3 main::$4 ] ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ main::$3 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:6 [ main::$3 ]
Statement [11] if((word) main::i#1!=(word) $3e8) goto main::@1 [ main::screen#1 main::i#1 ] ( main:2 [ main::screen#1 main::i#1 ] ) always clobbers reg byte a
Statement [6] (byte~) main::$3 ← *((byte*) main::screen#2) << (byte) 1 [ main::screen#2 main::i#2 main::$3 ] ( main:2 [ main::screen#2 main::i#2 main::$3 ] ) always clobbers reg byte a reg byte y
Statement [7] (byte~) main::$4 ← *((byte*) main::screen#2) << (byte) 1 [ main::screen#2 main::i#2 main::$3 main::$4 ] ( main:2 [ main::screen#2 main::i#2 main::$3 main::$4 ] ) always clobbers reg byte a reg byte y
Statement [11] if((word) main::i#1!=(word) $3e8) goto main::@1 [ main::screen#1 main::i#1 ] ( main:2 [ main::screen#1 main::i#1 ] ) always clobbers reg byte a
Potential registers zp ZP_WORD:2 [ main::screen#2 main::screen#1 ] : zp ZP_WORD:2 ,
Potential registers zp ZP_WORD:4 [ main::i#2 main::i#1 ] : zp ZP_WORD:4 ,
Potential registers zp ZP_BYTE:6 [ main::$1 ] : zp ZP_BYTE:6 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:6 [ main::$3 ] : zp ZP_BYTE:6 , reg byte x ,
Potential registers zp ZP_BYTE:7 [ main::$4 ] : zp ZP_BYTE:7 , reg byte a , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [main] 33: zp ZP_BYTE:6 [ main::$1 ] 22: zp ZP_WORD:4 [ main::i#2 main::i#1 ] 18.33: zp ZP_WORD:2 [ main::screen#2 main::screen#1 ]
Uplift Scope [main] 22: zp ZP_BYTE:7 [ main::$4 ] 20.9: zp ZP_WORD:4 [ main::i#2 main::i#1 ] 18.33: zp ZP_WORD:2 [ main::screen#2 main::screen#1 ] 11: zp ZP_BYTE:6 [ main::$3 ]
Uplift Scope []
Uplifting [main] best 988 combination reg byte a [ main::$1 ] zp ZP_WORD:4 [ main::i#2 main::i#1 ] zp ZP_WORD:2 [ main::screen#2 main::screen#1 ]
Uplifting [] best 988 combination
Uplifting [main] best 1213 combination reg byte a [ main::$4 ] zp ZP_WORD:4 [ main::i#2 main::i#1 ] zp ZP_WORD:2 [ main::screen#2 main::screen#1 ] reg byte x [ main::$3 ]
Uplifting [] best 1213 combination
ASSEMBLER BEFORE OPTIMIZATION
// File Comments
@ -300,27 +328,37 @@ main: {
jmp b1
// main::@1
b1:
// [6] (byte~) main::$1 ← *((byte*) main::screen#2) << (byte) 1 -- vbuaa=_deref_pbuz1_rol_1
// [6] (byte~) main::$3 ← *((byte*) main::screen#2) << (byte) 1 -- vbuxx=_deref_pbuz1_rol_1
ldy #0
lda (screen),y
asl
// [7] *((const word[$100]) CHAR_COUNTS#0 + (byte~) main::$1) ← ++ *((const word[$100]) CHAR_COUNTS#0 + (byte~) main::$1) -- pwuc1_derefidx_vbuaa=_inc_pwuc1_derefidx_vbuaa
tax
inc CHAR_COUNTS,x
// [7] (byte~) main::$4 ← *((byte*) main::screen#2) << (byte) 1 -- vbuaa=_deref_pbuz1_rol_1
ldy #0
lda (screen),y
asl
// [8] *((const word[$100]) CHAR_COUNTS#0 + (byte~) main::$4) ← ++ *((const word[$100]) CHAR_COUNTS#0 + (byte~) main::$3) -- pwuc1_derefidx_vbuaa=_inc_pwuc1_derefidx_vbuxx
tay
clc
lda CHAR_COUNTS,x
adc #1
sta CHAR_COUNTS,y
bne !+
inc CHAR_COUNTS+1,x
lda CHAR_COUNTS+1,x
adc #0
sta CHAR_COUNTS+1,y
!:
// [8] (byte*) main::screen#1 ← ++ (byte*) main::screen#2 -- pbuz1=_inc_pbuz1
// [9] (byte*) main::screen#1 ← ++ (byte*) main::screen#2 -- pbuz1=_inc_pbuz1
inc.z screen
bne !+
inc.z screen+1
!:
// [9] (word) main::i#1 ← ++ (word) main::i#2 -- vwuz1=_inc_vwuz1
// [10] (word) main::i#1 ← ++ (word) main::i#2 -- vwuz1=_inc_vwuz1
inc.z i
bne !+
inc.z i+1
!:
// [10] if((word) main::i#1!=(word) $3e8) goto main::@1 -- vwuz1_neq_vwuc1_then_la1
// [11] if((word) main::i#1!=(word) $3e8) goto main::@1 -- vwuz1_neq_vwuc1_then_la1
lda.z i+1
cmp #>$3e8
bne b1_from_b1
@ -330,7 +368,7 @@ main: {
jmp breturn
// main::@return
breturn:
// [11] return
// [12] return
rts
}
// File Data
@ -343,6 +381,7 @@ Removing instruction jmp b1
Removing instruction jmp breturn
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction lda #>0
Removing instruction ldy #0
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Replacing label b1_from_b1 with b1
Replacing label b1_from_b1 with b1
@ -371,23 +410,25 @@ FINAL SYMBOL TABLE
(word[$100]) CHAR_COUNTS
(const word[$100]) CHAR_COUNTS#0 CHAR_COUNTS = { fill( $100, 0) }
(void()) main()
(byte~) main::$1 reg byte a 33.0
(byte~) main::$3 reg byte x 11.0
(byte~) main::$4 reg byte a 22.0
(label) main::@1
(label) main::@return
(word) main::i
(word) main::i#1 i zp ZP_WORD:4 16.5
(word) main::i#2 i zp ZP_WORD:4 5.5
(word) main::i#2 i zp ZP_WORD:4 4.4
(byte*) main::screen
(byte*) main::screen#1 screen zp ZP_WORD:2 7.333333333333333
(byte*) main::screen#2 screen zp ZP_WORD:2 11.0
zp ZP_WORD:2 [ main::screen#2 main::screen#1 ]
zp ZP_WORD:4 [ main::i#2 main::i#1 ]
reg byte a [ main::$1 ]
reg byte x [ main::$3 ]
reg byte a [ main::$4 ]
FINAL ASSEMBLER
Score: 866
Score: 1071
// File Comments
// Inner increment is not being done properly (screen++)
@ -423,28 +464,37 @@ main: {
// main::@1
b1:
// CHAR_COUNTS[*screen++]++;
// [6] (byte~) main::$1 ← *((byte*) main::screen#2) << (byte) 1 -- vbuaa=_deref_pbuz1_rol_1
// [6] (byte~) main::$3 ← *((byte*) main::screen#2) << (byte) 1 -- vbuxx=_deref_pbuz1_rol_1
ldy #0
lda (screen),y
asl
// [7] *((const word[$100]) CHAR_COUNTS#0 + (byte~) main::$1) ← ++ *((const word[$100]) CHAR_COUNTS#0 + (byte~) main::$1) -- pwuc1_derefidx_vbuaa=_inc_pwuc1_derefidx_vbuaa
tax
inc CHAR_COUNTS,x
// [7] (byte~) main::$4 ← *((byte*) main::screen#2) << (byte) 1 -- vbuaa=_deref_pbuz1_rol_1
lda (screen),y
asl
// [8] *((const word[$100]) CHAR_COUNTS#0 + (byte~) main::$4) ← ++ *((const word[$100]) CHAR_COUNTS#0 + (byte~) main::$3) -- pwuc1_derefidx_vbuaa=_inc_pwuc1_derefidx_vbuxx
tay
clc
lda CHAR_COUNTS,x
adc #1
sta CHAR_COUNTS,y
bne !+
inc CHAR_COUNTS+1,x
lda CHAR_COUNTS+1,x
adc #0
sta CHAR_COUNTS+1,y
!:
// [8] (byte*) main::screen#1 ← ++ (byte*) main::screen#2 -- pbuz1=_inc_pbuz1
// [9] (byte*) main::screen#1 ← ++ (byte*) main::screen#2 -- pbuz1=_inc_pbuz1
inc.z screen
bne !+
inc.z screen+1
!:
// for( word i:0..999)
// [9] (word) main::i#1 ← ++ (word) main::i#2 -- vwuz1=_inc_vwuz1
// [10] (word) main::i#1 ← ++ (word) main::i#2 -- vwuz1=_inc_vwuz1
inc.z i
bne !+
inc.z i+1
!:
// [10] if((word) main::i#1!=(word) $3e8) goto main::@1 -- vwuz1_neq_vwuc1_then_la1
// [11] if((word) main::i#1!=(word) $3e8) goto main::@1 -- vwuz1_neq_vwuc1_then_la1
lda.z i+1
cmp #>$3e8
bne b1
@ -453,7 +503,7 @@ main: {
bne b1
// main::@return
// }
// [11] return
// [12] return
rts
}
// File Data

View File

@ -4,16 +4,18 @@
(word[$100]) CHAR_COUNTS
(const word[$100]) CHAR_COUNTS#0 CHAR_COUNTS = { fill( $100, 0) }
(void()) main()
(byte~) main::$1 reg byte a 33.0
(byte~) main::$3 reg byte x 11.0
(byte~) main::$4 reg byte a 22.0
(label) main::@1
(label) main::@return
(word) main::i
(word) main::i#1 i zp ZP_WORD:4 16.5
(word) main::i#2 i zp ZP_WORD:4 5.5
(word) main::i#2 i zp ZP_WORD:4 4.4
(byte*) main::screen
(byte*) main::screen#1 screen zp ZP_WORD:2 7.333333333333333
(byte*) main::screen#2 screen zp ZP_WORD:2 11.0
zp ZP_WORD:2 [ main::screen#2 main::screen#1 ]
zp ZP_WORD:4 [ main::i#2 main::i#1 ]
reg byte a [ main::$1 ]
reg byte x [ main::$3 ]
reg byte a [ main::$4 ]

View File

@ -83,9 +83,9 @@ irq::@2: scope:[irq] from irq::@1 irq::@4
to:irq::@3
irq::@3: scope:[irq] from irq::@2 irq::@7
[42] (byte) irq::k#2 ← phi( irq::@2/(byte) 0 irq::@7/(byte) irq::k#1 )
[43] (byte~) irq::$0 ← (byte) irq::i#7 + (byte) irq::j#4
[44] (byte~) irq::$1 ← (byte~) irq::$0 + (byte) irq::k#2
[45] *((const byte*) FGCOL#0) ← (byte~) irq::$1
[43] (byte~) irq::$2 ← (byte) irq::i#7 + (byte) irq::j#4
[44] (byte~) irq::$3 ← (byte~) irq::$2 + (byte) irq::k#2
[45] *((const byte*) FGCOL#0) ← (byte~) irq::$3
[46] call sub_irq
to:irq::@7
irq::@7: scope:[irq] from irq::@3

View File

@ -98,9 +98,9 @@ irq::@3: scope:[irq] from irq::@2 irq::@7
(byte) irq::k#2 ← phi( irq::@2/(byte) irq::k#0 irq::@7/(byte) irq::k#1 )
(byte) irq::j#2 ← phi( irq::@2/(byte) irq::j#4 irq::@7/(byte) irq::j#5 )
(byte) irq::i#2 ← phi( irq::@2/(byte) irq::i#4 irq::@7/(byte) irq::i#5 )
(byte~) irq::$0 ← (byte) irq::i#2 + (byte) irq::j#2
(byte~) irq::$1 ← (byte~) irq::$0 + (byte) irq::k#2
*((byte*) FGCOL#0) ← (byte~) irq::$1
(byte~) irq::$2 ← (byte) irq::i#2 + (byte) irq::j#2
(byte~) irq::$3 ← (byte~) irq::$2 + (byte) irq::k#2
*((byte*) FGCOL#0) ← (byte~) irq::$3
call sub_irq
to:irq::@7
irq::@7: scope:[irq] from irq::@3
@ -108,21 +108,21 @@ irq::@7: scope:[irq] from irq::@3
(byte) irq::i#5 ← phi( irq::@3/(byte) irq::i#2 )
(byte) irq::k#3 ← phi( irq::@3/(byte) irq::k#2 )
(byte) irq::k#1 ← (byte) irq::k#3 + rangenext(0,$a)
(bool~) irq::$3 ← (byte) irq::k#1 != rangelast(0,$a)
if((bool~) irq::$3) goto irq::@3
(bool~) irq::$5 ← (byte) irq::k#1 != rangelast(0,$a)
if((bool~) irq::$5) goto irq::@3
to:irq::@4
irq::@4: scope:[irq] from irq::@7
(byte) irq::i#6 ← phi( irq::@7/(byte) irq::i#5 )
(byte) irq::j#3 ← phi( irq::@7/(byte) irq::j#5 )
(byte) irq::j#1 ← (byte) irq::j#3 + rangenext(0,$a)
(bool~) irq::$4 ← (byte) irq::j#1 != rangelast(0,$a)
if((bool~) irq::$4) goto irq::@2
(bool~) irq::$6 ← (byte) irq::j#1 != rangelast(0,$a)
if((bool~) irq::$6) goto irq::@2
to:irq::@5
irq::@5: scope:[irq] from irq::@4
(byte) irq::i#3 ← phi( irq::@4/(byte) irq::i#6 )
(byte) irq::i#1 ← (byte) irq::i#3 + rangenext(0,$a)
(bool~) irq::$5 ← (byte) irq::i#1 != rangelast(0,$a)
if((bool~) irq::$5) goto irq::@1
(bool~) irq::$7 ← (byte) irq::i#1 != rangelast(0,$a)
if((bool~) irq::$7) goto irq::@1
to:irq::@6
irq::@6: scope:[irq] from irq::@5
*((byte*) IRQ_STATUS#0) ← (byte) IRQ_RASTER#0
@ -242,11 +242,11 @@ SYMBOL TABLE SSA
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL#0
interrupt(KERNEL_MIN)(void()) irq()
(byte~) irq::$0
(byte~) irq::$1
(bool~) irq::$3
(bool~) irq::$4
(byte~) irq::$2
(byte~) irq::$3
(bool~) irq::$5
(bool~) irq::$6
(bool~) irq::$7
(label) irq::@1
(label) irq::@2
(label) irq::@3
@ -437,9 +437,9 @@ Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition (bool~) main::$4 [32] if((byte) main::k#1!=rangelast(0,$a)) goto main::@6
Simple Condition (bool~) main::$5 [36] if((byte) main::j#1!=rangelast(0,$a)) goto main::@5
Simple Condition (bool~) main::$6 [40] if((byte) main::i#1!=rangelast(0,$a)) goto main::@4
Simple Condition (bool~) irq::$3 [56] if((byte) irq::k#1!=rangelast(0,$a)) goto irq::@3
Simple Condition (bool~) irq::$4 [60] if((byte) irq::j#1!=rangelast(0,$a)) goto irq::@2
Simple Condition (bool~) irq::$5 [64] if((byte) irq::i#1!=rangelast(0,$a)) goto irq::@1
Simple Condition (bool~) irq::$5 [56] if((byte) irq::k#1!=rangelast(0,$a)) goto irq::@3
Simple Condition (bool~) irq::$6 [60] if((byte) irq::j#1!=rangelast(0,$a)) goto irq::@2
Simple Condition (bool~) irq::$7 [64] if((byte) irq::i#1!=rangelast(0,$a)) goto irq::@1
Simple Condition (bool~) sub_main::$2 [79] if((byte) sub_main::k#1!=rangelast(0,$a)) goto sub_main::@3
Simple Condition (bool~) sub_main::$3 [83] if((byte) sub_main::j#1!=rangelast(0,$a)) goto sub_main::@2
Simple Condition (bool~) sub_main::$4 [87] if((byte) sub_main::i#1!=rangelast(0,$a)) goto sub_main::@1
@ -720,9 +720,9 @@ irq::@2: scope:[irq] from irq::@1 irq::@4
to:irq::@3
irq::@3: scope:[irq] from irq::@2 irq::@7
[42] (byte) irq::k#2 ← phi( irq::@2/(byte) 0 irq::@7/(byte) irq::k#1 )
[43] (byte~) irq::$0 ← (byte) irq::i#7 + (byte) irq::j#4
[44] (byte~) irq::$1 ← (byte~) irq::$0 + (byte) irq::k#2
[45] *((const byte*) FGCOL#0) ← (byte~) irq::$1
[43] (byte~) irq::$2 ← (byte) irq::i#7 + (byte) irq::j#4
[44] (byte~) irq::$3 ← (byte~) irq::$2 + (byte) irq::k#2
[45] *((const byte*) FGCOL#0) ← (byte~) irq::$3
[46] call sub_irq
to:irq::@7
irq::@7: scope:[irq] from irq::@3
@ -786,8 +786,8 @@ VARIABLE REGISTER WEIGHTS
(byte*) RASTER
(byte*) VIC_CONTROL
interrupt(KERNEL_MIN)(void()) irq()
(byte~) irq::$0 2002.0
(byte~) irq::$1 2002.0
(byte~) irq::$2 2002.0
(byte~) irq::$3 2002.0
(byte) irq::i
(byte) irq::i#1 16.5
(byte) irq::i#7 93.0
@ -851,8 +851,8 @@ Added variable main::$1 to zero page equivalence class [ main::$1 ]
Added variable main::$2 to zero page equivalence class [ main::$2 ]
Added variable sub_main::$0 to zero page equivalence class [ sub_main::$0 ]
Added variable sub_main::$1 to zero page equivalence class [ sub_main::$1 ]
Added variable irq::$0 to zero page equivalence class [ irq::$0 ]
Added variable irq::$1 to zero page equivalence class [ irq::$1 ]
Added variable irq::$2 to zero page equivalence class [ irq::$2 ]
Added variable irq::$3 to zero page equivalence class [ irq::$3 ]
Added variable sub_irq::$0 to zero page equivalence class [ sub_irq::$0 ]
Added variable sub_irq::$1 to zero page equivalence class [ sub_irq::$1 ]
Complete equivalence classes
@ -872,8 +872,8 @@ Complete equivalence classes
[ main::$2 ]
[ sub_main::$0 ]
[ sub_main::$1 ]
[ irq::$0 ]
[ irq::$1 ]
[ irq::$2 ]
[ irq::$3 ]
[ sub_irq::$0 ]
[ sub_irq::$1 ]
Allocated zp ZP_BYTE:2 [ main::i#7 main::i#1 ]
@ -892,8 +892,8 @@ Allocated zp ZP_BYTE:14 [ main::$1 ]
Allocated zp ZP_BYTE:15 [ main::$2 ]
Allocated zp ZP_BYTE:16 [ sub_main::$0 ]
Allocated zp ZP_BYTE:17 [ sub_main::$1 ]
Allocated zp ZP_BYTE:18 [ irq::$0 ]
Allocated zp ZP_BYTE:19 [ irq::$1 ]
Allocated zp ZP_BYTE:18 [ irq::$2 ]
Allocated zp ZP_BYTE:19 [ irq::$3 ]
Allocated zp ZP_BYTE:20 [ sub_irq::$0 ]
Allocated zp ZP_BYTE:21 [ sub_irq::$1 ]
@ -1139,8 +1139,8 @@ sub_main: {
}
// irq
irq: {
.label _0 = $12
.label _1 = $13
.label _2 = $12
.label _3 = $13
.label k = $a
.label j = 9
.label i = 8
@ -1183,18 +1183,18 @@ irq: {
jmp b3
// irq::@3
b3:
// [43] (byte~) irq::$0 ← (byte) irq::i#7 + (byte) irq::j#4 -- vbuz1=vbuz2_plus_vbuz3
// [43] (byte~) irq::$2 ← (byte) irq::i#7 + (byte) irq::j#4 -- vbuz1=vbuz2_plus_vbuz3
lda.z i
clc
adc.z j
sta.z _0
// [44] (byte~) irq::$1 ← (byte~) irq::$0 + (byte) irq::k#2 -- vbuz1=vbuz2_plus_vbuz3
lda.z _0
sta.z _2
// [44] (byte~) irq::$3 ← (byte~) irq::$2 + (byte) irq::k#2 -- vbuz1=vbuz2_plus_vbuz3
lda.z _2
clc
adc.z k
sta.z _1
// [45] *((const byte*) FGCOL#0) ← (byte~) irq::$1 -- _deref_pbuc1=vbuz1
lda.z _1
sta.z _3
// [45] *((const byte*) FGCOL#0) ← (byte~) irq::$3 -- _deref_pbuc1=vbuz1
lda.z _3
sta FGCOL
// [46] call sub_irq
// [56] phi from irq::@3 to sub_irq [phi:irq::@3->sub_irq]
@ -1345,11 +1345,11 @@ Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ su
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ sub_main::j#4 sub_main::j#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:7 [ sub_main::k#2 sub_main::k#1 ]
Statement [30] (byte~) sub_main::$1 ← (byte~) sub_main::$0 + (byte) sub_main::k#2 [ sub_main::i#6 sub_main::j#4 sub_main::k#2 sub_main::$1 ] ( main:2::sub_main:17 [ main::i#7 main::j#5 main::k#2 sub_main::i#6 sub_main::j#4 sub_main::k#2 sub_main::$1 ] ) always clobbers reg byte a
Statement [43] (byte~) irq::$0 ← (byte) irq::i#7 + (byte) irq::j#4 [ irq::i#7 irq::j#4 irq::k#2 irq::$0 ] ( [ irq::i#7 irq::j#4 irq::k#2 irq::$0 ] ) always clobbers reg byte a
Statement [43] (byte~) irq::$2 ← (byte) irq::i#7 + (byte) irq::j#4 [ irq::i#7 irq::j#4 irq::k#2 irq::$2 ] ( [ irq::i#7 irq::j#4 irq::k#2 irq::$2 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:8 [ irq::i#7 irq::i#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 [ irq::j#4 irq::j#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:10 [ irq::k#2 irq::k#1 ]
Statement [44] (byte~) irq::$1 ← (byte~) irq::$0 + (byte) irq::k#2 [ irq::i#7 irq::j#4 irq::k#2 irq::$1 ] ( [ irq::i#7 irq::j#4 irq::k#2 irq::$1 ] ) always clobbers reg byte a
Statement [44] (byte~) irq::$3 ← (byte~) irq::$2 + (byte) irq::k#2 [ irq::i#7 irq::j#4 irq::k#2 irq::$3 ] ( [ irq::i#7 irq::j#4 irq::k#2 irq::$3 ] ) always clobbers reg byte a
Statement [53] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] ( [ ] ) always clobbers reg byte a
Statement [60] (byte~) sub_irq::$0 ← (byte) sub_irq::i#6 + (byte) sub_irq::j#4 [ sub_irq::i#6 sub_irq::j#4 sub_irq::k#2 sub_irq::$0 ] ( sub_irq:46 [ irq::i#7 irq::j#4 irq::k#2 sub_irq::i#6 sub_irq::j#4 sub_irq::k#2 sub_irq::$0 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:11 [ sub_irq::i#6 sub_irq::i#1 ]
@ -1365,8 +1365,8 @@ Statement [14] (byte~) main::$1 ← (byte) main::i#7 + (byte) main::j#5 [ main::
Statement [15] (byte~) main::$2 ← (byte~) main::$1 + (byte) main::k#2 [ main::i#7 main::j#5 main::k#2 main::$2 ] ( main:2 [ main::i#7 main::j#5 main::k#2 main::$2 ] ) always clobbers reg byte a
Statement [29] (byte~) sub_main::$0 ← (byte) sub_main::i#6 + (byte) sub_main::j#4 [ sub_main::i#6 sub_main::j#4 sub_main::k#2 sub_main::$0 ] ( main:2::sub_main:17 [ main::i#7 main::j#5 main::k#2 sub_main::i#6 sub_main::j#4 sub_main::k#2 sub_main::$0 ] ) always clobbers reg byte a
Statement [30] (byte~) sub_main::$1 ← (byte~) sub_main::$0 + (byte) sub_main::k#2 [ sub_main::i#6 sub_main::j#4 sub_main::k#2 sub_main::$1 ] ( main:2::sub_main:17 [ main::i#7 main::j#5 main::k#2 sub_main::i#6 sub_main::j#4 sub_main::k#2 sub_main::$1 ] ) always clobbers reg byte a
Statement [43] (byte~) irq::$0 ← (byte) irq::i#7 + (byte) irq::j#4 [ irq::i#7 irq::j#4 irq::k#2 irq::$0 ] ( [ irq::i#7 irq::j#4 irq::k#2 irq::$0 ] ) always clobbers reg byte a
Statement [44] (byte~) irq::$1 ← (byte~) irq::$0 + (byte) irq::k#2 [ irq::i#7 irq::j#4 irq::k#2 irq::$1 ] ( [ irq::i#7 irq::j#4 irq::k#2 irq::$1 ] ) always clobbers reg byte a
Statement [43] (byte~) irq::$2 ← (byte) irq::i#7 + (byte) irq::j#4 [ irq::i#7 irq::j#4 irq::k#2 irq::$2 ] ( [ irq::i#7 irq::j#4 irq::k#2 irq::$2 ] ) always clobbers reg byte a
Statement [44] (byte~) irq::$3 ← (byte~) irq::$2 + (byte) irq::k#2 [ irq::i#7 irq::j#4 irq::k#2 irq::$3 ] ( [ irq::i#7 irq::j#4 irq::k#2 irq::$3 ] ) always clobbers reg byte a
Statement [53] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] ( [ ] ) always clobbers reg byte a
Statement [60] (byte~) sub_irq::$0 ← (byte) sub_irq::i#6 + (byte) sub_irq::j#4 [ sub_irq::i#6 sub_irq::j#4 sub_irq::k#2 sub_irq::$0 ] ( sub_irq:46 [ irq::i#7 irq::j#4 irq::k#2 sub_irq::i#6 sub_irq::j#4 sub_irq::k#2 sub_irq::$0 ] ) always clobbers reg byte a
Statement [61] (byte~) sub_irq::$1 ← (byte~) sub_irq::$0 + (byte) sub_irq::k#2 [ sub_irq::i#6 sub_irq::j#4 sub_irq::k#2 sub_irq::$1 ] ( sub_irq:46 [ irq::i#7 irq::j#4 irq::k#2 sub_irq::i#6 sub_irq::j#4 sub_irq::k#2 sub_irq::$1 ] ) always clobbers reg byte a
@ -1386,8 +1386,8 @@ Potential registers zp ZP_BYTE:14 [ main::$1 ] : zp ZP_BYTE:14 , reg byte a , re
Potential registers zp ZP_BYTE:15 [ main::$2 ] : zp ZP_BYTE:15 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:16 [ sub_main::$0 ] : zp ZP_BYTE:16 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:17 [ sub_main::$1 ] : zp ZP_BYTE:17 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:18 [ irq::$0 ] : zp ZP_BYTE:18 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:19 [ irq::$1 ] : zp ZP_BYTE:19 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:18 [ irq::$2 ] : zp ZP_BYTE:18 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:19 [ irq::$3 ] : zp ZP_BYTE:19 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:20 [ sub_irq::$0 ] : zp ZP_BYTE:20 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:21 [ sub_irq::$1 ] : zp ZP_BYTE:21 , reg byte a , reg byte x , reg byte y ,
@ -1395,7 +1395,7 @@ REGISTER UPLIFT SCOPES
Uplift Scope [sub_main] 22,500,002.25: zp ZP_BYTE:7 [ sub_main::k#2 sub_main::k#1 ] 20,000,002: zp ZP_BYTE:16 [ sub_main::$0 ] 20,000,002: zp ZP_BYTE:17 [ sub_main::$1 ] 3,214,287.64: zp ZP_BYTE:6 [ sub_main::j#4 sub_main::j#1 ] 1,170,001.8: zp ZP_BYTE:5 [ sub_main::i#6 sub_main::i#1 ]
Uplift Scope [sub_irq] 2,250,002.25: zp ZP_BYTE:13 [ sub_irq::k#2 sub_irq::k#1 ] 2,000,002: zp ZP_BYTE:20 [ sub_irq::$0 ] 2,000,002: zp ZP_BYTE:21 [ sub_irq::$1 ] 321,430.5: zp ZP_BYTE:12 [ sub_irq::j#4 sub_irq::j#1 ] 117,001.8: zp ZP_BYTE:11 [ sub_irq::i#6 sub_irq::i#1 ]
Uplift Scope [main] 21,002.1: zp ZP_BYTE:4 [ main::k#2 main::k#1 ] 20,002: zp ZP_BYTE:14 [ main::$1 ] 20,002: zp ZP_BYTE:15 [ main::$2 ] 3,001.88: zp ZP_BYTE:3 [ main::j#5 main::j#1 ] 990.36: zp ZP_BYTE:2 [ main::i#7 main::i#1 ]
Uplift Scope [irq] 2,102.1: zp ZP_BYTE:10 [ irq::k#2 irq::k#1 ] 2,002: zp ZP_BYTE:18 [ irq::$0 ] 2,002: zp ZP_BYTE:19 [ irq::$1 ] 301.88: zp ZP_BYTE:9 [ irq::j#4 irq::j#1 ] 109.5: zp ZP_BYTE:8 [ irq::i#7 irq::i#1 ]
Uplift Scope [irq] 2,102.1: zp ZP_BYTE:10 [ irq::k#2 irq::k#1 ] 2,002: zp ZP_BYTE:18 [ irq::$2 ] 2,002: zp ZP_BYTE:19 [ irq::$3 ] 301.88: zp ZP_BYTE:9 [ irq::j#4 irq::j#1 ] 109.5: zp ZP_BYTE:8 [ irq::i#7 irq::i#1 ]
Uplift Scope []
Uplifting [sub_main] best 444207705 combination reg byte y [ sub_main::k#2 sub_main::k#1 ] reg byte a [ sub_main::$0 ] reg byte a [ sub_main::$1 ] reg byte x [ sub_main::j#4 sub_main::j#1 ] zp ZP_BYTE:5 [ sub_main::i#6 sub_main::i#1 ]
@ -1404,7 +1404,7 @@ Uplifting [sub_irq] best 424307705 combination reg byte y [ sub_irq::k#2 sub_irq
Limited combination testing to 100 combinations of 432 possible.
Uplifting [main] best 424187705 combination zp ZP_BYTE:4 [ main::k#2 main::k#1 ] reg byte a [ main::$1 ] reg byte a [ main::$2 ] zp ZP_BYTE:3 [ main::j#5 main::j#1 ] zp ZP_BYTE:2 [ main::i#7 main::i#1 ]
Limited combination testing to 100 combinations of 432 possible.
Uplifting [irq] best 424175705 combination zp ZP_BYTE:10 [ irq::k#2 irq::k#1 ] reg byte a [ irq::$0 ] reg byte a [ irq::$1 ] zp ZP_BYTE:9 [ irq::j#4 irq::j#1 ] zp ZP_BYTE:8 [ irq::i#7 irq::i#1 ]
Uplifting [irq] best 424175705 combination zp ZP_BYTE:10 [ irq::k#2 irq::k#1 ] reg byte a [ irq::$2 ] reg byte a [ irq::$3 ] zp ZP_BYTE:9 [ irq::j#4 irq::j#1 ] zp ZP_BYTE:8 [ irq::i#7 irq::i#1 ]
Limited combination testing to 100 combinations of 432 possible.
Uplifting [] best 424175705 combination
Attempting to uplift remaining variables inzp ZP_BYTE:5 [ sub_main::i#6 sub_main::i#1 ]
@ -1694,14 +1694,14 @@ irq: {
jmp b3
// irq::@3
b3:
// [43] (byte~) irq::$0 ← (byte) irq::i#7 + (byte) irq::j#4 -- vbuaa=vbuz1_plus_vbuz2
// [43] (byte~) irq::$2 ← (byte) irq::i#7 + (byte) irq::j#4 -- vbuaa=vbuz1_plus_vbuz2
lda.z i
clc
adc.z j
// [44] (byte~) irq::$1 ← (byte~) irq::$0 + (byte) irq::k#2 -- vbuaa=vbuaa_plus_vbuz1
// [44] (byte~) irq::$3 ← (byte~) irq::$2 + (byte) irq::k#2 -- vbuaa=vbuaa_plus_vbuz1
clc
adc.z k
// [45] *((const byte*) FGCOL#0) ← (byte~) irq::$1 -- _deref_pbuc1=vbuaa
// [45] *((const byte*) FGCOL#0) ← (byte~) irq::$3 -- _deref_pbuc1=vbuaa
sta FGCOL
// [46] call sub_irq
// [56] phi from irq::@3 to sub_irq [phi:irq::@3->sub_irq]
@ -1970,8 +1970,8 @@ FINAL SYMBOL TABLE
(byte*) VIC_CONTROL
(const byte*) VIC_CONTROL#0 VIC_CONTROL = (byte*) 53265
interrupt(KERNEL_MIN)(void()) irq()
(byte~) irq::$0 reg byte a 2002.0
(byte~) irq::$1 reg byte a 2002.0
(byte~) irq::$2 reg byte a 2002.0
(byte~) irq::$3 reg byte a 2002.0
(label) irq::@1
(label) irq::@2
(label) irq::@3
@ -2061,8 +2061,8 @@ reg byte a [ main::$1 ]
reg byte a [ main::$2 ]
reg byte a [ sub_main::$0 ]
reg byte a [ sub_main::$1 ]
reg byte a [ irq::$0 ]
reg byte a [ irq::$1 ]
reg byte a [ irq::$2 ]
reg byte a [ irq::$3 ]
reg byte a [ sub_irq::$0 ]
reg byte a [ sub_irq::$1 ]
@ -2296,16 +2296,16 @@ irq: {
// irq::@3
b3:
// i+j
// [43] (byte~) irq::$0 ← (byte) irq::i#7 + (byte) irq::j#4 -- vbuaa=vbuz1_plus_vbuz2
// [43] (byte~) irq::$2 ← (byte) irq::i#7 + (byte) irq::j#4 -- vbuaa=vbuz1_plus_vbuz2
lda.z i
clc
adc.z j
// i+j+k
// [44] (byte~) irq::$1 ← (byte~) irq::$0 + (byte) irq::k#2 -- vbuaa=vbuaa_plus_vbuz1
// [44] (byte~) irq::$3 ← (byte~) irq::$2 + (byte) irq::k#2 -- vbuaa=vbuaa_plus_vbuz1
clc
adc.z k
// *FGCOL = i+j+k
// [45] *((const byte*) FGCOL#0) ← (byte~) irq::$1 -- _deref_pbuc1=vbuaa
// [45] *((const byte*) FGCOL#0) ← (byte~) irq::$3 -- _deref_pbuc1=vbuaa
sta FGCOL
// sub_irq()
// [46] call sub_irq

View File

@ -22,8 +22,8 @@
(byte*) VIC_CONTROL
(const byte*) VIC_CONTROL#0 VIC_CONTROL = (byte*) 53265
interrupt(KERNEL_MIN)(void()) irq()
(byte~) irq::$0 reg byte a 2002.0
(byte~) irq::$1 reg byte a 2002.0
(byte~) irq::$2 reg byte a 2002.0
(byte~) irq::$3 reg byte a 2002.0
(label) irq::@1
(label) irq::@2
(label) irq::@3
@ -113,7 +113,7 @@ reg byte a [ main::$1 ]
reg byte a [ main::$2 ]
reg byte a [ sub_main::$0 ]
reg byte a [ sub_main::$1 ]
reg byte a [ irq::$0 ]
reg byte a [ irq::$1 ]
reg byte a [ irq::$2 ]
reg byte a [ irq::$3 ]
reg byte a [ sub_irq::$0 ]
reg byte a [ sub_irq::$1 ]

View File

@ -54,9 +54,9 @@ irq: scope:[irq] from
(bool) framedone#14 ← phi( @2/(bool) framedone#11 )
*((byte*) BGCOL#0) ← ++ *((byte*) BGCOL#0)
*((byte*) IRQ_STATUS#0) ← (byte) IRQ_RASTER#0
(bool~) irq::$0 ← *((byte*) RASTER#0) > (number) $32
(bool~) irq::$1 ← ! (bool~) irq::$0
if((bool~) irq::$1) goto irq::@1
(bool~) irq::$1 ← *((byte*) RASTER#0) > (number) $32
(bool~) irq::$2 ← ! (bool~) irq::$1
if((bool~) irq::$2) goto irq::@1
to:irq::@2
irq::@1: scope:[irq] from irq irq::@2
(bool) framedone#10 ← phi( irq/(bool) framedone#14 irq::@2/(bool) framedone#3 )
@ -121,8 +121,8 @@ SYMBOL TABLE SSA
(bool) framedone#8
(bool) framedone#9
interrupt(KERNEL_MIN)(void()) irq()
(bool~) irq::$0
(bool~) irq::$1
(bool~) irq::$2
(label) irq::@1
(label) irq::@2
(label) irq::@return
@ -140,7 +140,7 @@ Adding number conversion cast (unumber) $7f in (byte) CIA_INTERRUPT_CLEAR#0 ←
Adding number conversion cast (unumber) $7f in *((byte*) VIC_CONTROL#0) ← *((byte*) VIC_CONTROL#0) & (number) $7f
Adding number conversion cast (unumber) $fd in *((byte*) RASTER#0) ← (number) $fd
Adding number conversion cast (unumber) $14 in (bool~) main::$1 ← *((byte*) RASTER#0) < (number) $14
Adding number conversion cast (unumber) $32 in (bool~) irq::$0 ← *((byte*) RASTER#0) > (number) $32
Adding number conversion cast (unumber) $32 in (bool~) irq::$1 ← *((byte*) RASTER#0) > (number) $32
Successful SSA optimization PassNAddNumberTypeConversions
Inlining cast (void()**) KERNEL_IRQ#0 ← (void()**)(number) $314
Inlining cast (byte*) RASTER#0 ← (byte*)(number) $d012
@ -175,7 +175,7 @@ Finalized unsigned number type (byte) $14
Finalized unsigned number type (byte) $32
Successful SSA optimization PassNFinalizeNumberTypeConversions
Inversing boolean not [22] (bool~) main::$2 ← *((byte*) RASTER#0) >= (byte) $14 from [21] (bool~) main::$1 ← *((byte*) RASTER#0) < (byte) $14
Inversing boolean not [33] (bool~) irq::$1 ← *((byte*) RASTER#0) <= (byte) $32 from [32] (bool~) irq::$0 ← *((byte*) RASTER#0) > (byte) $32
Inversing boolean not [33] (bool~) irq::$2 ← *((byte*) RASTER#0) <= (byte) $32 from [32] (bool~) irq::$1 ← *((byte*) RASTER#0) > (byte) $32
Successful SSA optimization Pass2UnaryNotSimplification
Alias (bool) framedone#1 = (bool) framedone#13 (bool) framedone#9 (bool) framedone#6
Alias (bool) framedone#10 = (bool) framedone#7 (bool) framedone#4
@ -187,7 +187,7 @@ Identical Phi Values (bool) framedone#14 (bool) framedone#11
Identical Phi Values (bool) framedone#5 (bool) framedone#1
Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition (bool~) main::$2 [23] if(*((byte*) RASTER#0)>=(byte) $14) goto main::@1
Simple Condition (bool~) irq::$1 [34] if(*((byte*) RASTER#0)<=(byte) $32) goto irq::@1
Simple Condition (bool~) irq::$2 [34] if(*((byte*) RASTER#0)<=(byte) $32) goto irq::@1
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant right-side identified [15] (void()*~) main::$0 ← & interrupt(KERNEL_MIN)(void()) irq()
Successful SSA optimization Pass2ConstantRValueConsolidation

View File

@ -93,8 +93,8 @@ pressed::@1: scope:[pressed] from pressed pressed::@2
[46] (byte) keyboard_key_pressed::return#10 ← (byte) keyboard_key_pressed::return#0
to:pressed::@2
pressed::@2: scope:[pressed] from pressed::@1
[47] (byte~) pressed::$0 ← (byte) keyboard_key_pressed::return#10
[48] if((byte~) pressed::$0!=(byte) 0) goto pressed::@return
[47] (byte~) pressed::$1 ← (byte) keyboard_key_pressed::return#10
[48] if((byte~) pressed::$1!=(byte) 0) goto pressed::@return
to:pressed::@1
pressed::@return: scope:[pressed] from pressed::@2
[49] return

View File

@ -173,10 +173,10 @@ pressed::@2: scope:[pressed] from pressed::@1
to:pressed::@10
pressed::@10: scope:[pressed] from pressed::@2
(byte) keyboard_key_pressed::return#10 ← phi( pressed::@2/(byte) keyboard_key_pressed::return#5 )
(byte~) pressed::$0 ← (byte) keyboard_key_pressed::return#10
(bool~) pressed::$1 ← (byte~) pressed::$0 != (number) 0
(bool~) pressed::$2 ← ! (bool~) pressed::$1
if((bool~) pressed::$2) goto pressed::@1
(byte~) pressed::$1 ← (byte) keyboard_key_pressed::return#10
(bool~) pressed::$2 ← (byte~) pressed::$1 != (number) 0
(bool~) pressed::$3 ← ! (bool~) pressed::$2
if((bool~) pressed::$3) goto pressed::@1
to:pressed::@return
pressed::@return: scope:[pressed] from pressed::@1 pressed::@10
return
@ -294,9 +294,9 @@ SYMBOL TABLE SSA
(label) menu::@9
(label) menu::@return
(void()) pressed()
(byte~) pressed::$0
(bool~) pressed::$1
(byte~) pressed::$1
(bool~) pressed::$2
(bool~) pressed::$3
(label) pressed::@1
(label) pressed::@10
(label) pressed::@2
@ -314,7 +314,7 @@ Adding number conversion cast (unumber) 3 in (byte~) keyboard_key_pressed::$1
Adding number conversion cast (unumber) 0 in (bool~) menu::$1 ← (byte~) menu::$0 != (number) 0
Adding number conversion cast (unumber) 0 in (bool~) menu::$5 ← (byte~) menu::$4 != (number) 0
Adding number conversion cast (unumber) 0 in (bool~) menu::$8 ← (byte~) menu::$7 != (number) 0
Adding number conversion cast (unumber) 0 in (bool~) pressed::$1 ← (byte~) pressed::$0 != (number) 0
Adding number conversion cast (unumber) 0 in (bool~) pressed::$2 ← (byte~) pressed::$1 != (number) 0
Successful SSA optimization PassNAddNumberTypeConversions
Added casts to value list in (byte[8]) keyboard_matrix_row_bitmask#0 ← (byte[8]){ (byte)(number) $fe, (byte)(number) $fd, (byte)(number) $fb, (byte)(number) $f7, (byte)(number) $ef, (byte)(number) $df, (byte)(number) $bf, (byte)(number) $7f }
Added casts to value list in (byte[8]) keyboard_matrix_col_bitmask#0 ← (byte[8]){ (byte)(number) 1, (byte)(number) 2, (byte)(number) 4, (byte)(number) 8, (byte)(number) $10, (byte)(number) $20, (byte)(number) $40, (byte)(number) $80 }
@ -382,7 +382,7 @@ Inferred type updated to byte in (unumber~) keyboard_key_pressed::$0 ← (byte)
Inversing boolean not [47] (bool~) menu::$2 ← (byte~) menu::$0 == (byte) 0 from [46] (bool~) menu::$1 ← (byte~) menu::$0 != (byte) 0
Inversing boolean not [55] (bool~) menu::$6 ← (byte~) menu::$4 == (byte) 0 from [54] (bool~) menu::$5 ← (byte~) menu::$4 != (byte) 0
Inversing boolean not [65] (bool~) menu::$9 ← (byte~) menu::$7 == (byte) 0 from [64] (bool~) menu::$8 ← (byte~) menu::$7 != (byte) 0
Inversing boolean not [80] (bool~) pressed::$2 ← (byte~) pressed::$0 == (byte) 0 from [79] (bool~) pressed::$1 ← (byte~) pressed::$0 != (byte) 0
Inversing boolean not [80] (bool~) pressed::$3 ← (byte~) pressed::$1 == (byte) 0 from [79] (bool~) pressed::$2 ← (byte~) pressed::$1 != (byte) 0
Successful SSA optimization Pass2UnaryNotSimplification
Alias (byte) keyboard_matrix_read::return#0 = (byte) keyboard_matrix_read::row_pressed_bits#0 (byte~) keyboard_matrix_read::$0 (byte) keyboard_matrix_read::return#3 (byte) keyboard_matrix_read::return#1
Alias (byte) keyboard_key_pressed::colidx#0 = (byte~) keyboard_key_pressed::$0 (byte) keyboard_key_pressed::colidx#1
@ -399,9 +399,9 @@ Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition (bool~) menu::$2 [48] if((byte~) menu::$0==(byte) 0) goto menu::@4
Simple Condition (bool~) menu::$6 [56] if((byte~) menu::$4==(byte) 0) goto menu::@5
Simple Condition (bool~) menu::$9 [66] if((byte~) menu::$7==(byte) 0) goto menu::@6
Simple Condition (bool~) pressed::$2 [81] if((byte~) pressed::$0==(byte) 0) goto pressed::@1
Simple Condition (bool~) pressed::$3 [81] if((byte~) pressed::$1==(byte) 0) goto pressed::@1
Successful SSA optimization Pass2ConditionalJumpSimplification
Negating conditional jump and destination [81] if((byte~) pressed::$0!=(byte) 0) goto pressed::@return
Negating conditional jump and destination [81] if((byte~) pressed::$1!=(byte) 0) goto pressed::@return
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
Identified constant from value list (byte[8]) { (byte) $fe, (byte) $fd, (byte) $fb, (byte) $f7, (byte) $ef, (byte) $df, (byte) $bf, (byte) $7f }
Identified constant from value list (byte[8]) { (byte) 1, (byte) 2, (byte) 4, (byte) 8, (byte) $10, (byte) $20, (byte) $40, (byte) $80 }
@ -597,8 +597,8 @@ pressed::@1: scope:[pressed] from pressed pressed::@2
[46] (byte) keyboard_key_pressed::return#10 ← (byte) keyboard_key_pressed::return#0
to:pressed::@2
pressed::@2: scope:[pressed] from pressed::@1
[47] (byte~) pressed::$0 ← (byte) keyboard_key_pressed::return#10
[48] if((byte~) pressed::$0!=(byte) 0) goto pressed::@return
[47] (byte~) pressed::$1 ← (byte) keyboard_key_pressed::return#10
[48] if((byte~) pressed::$1!=(byte) 0) goto pressed::@return
to:pressed::@1
pressed::@return: scope:[pressed] from pressed::@2
[49] return
@ -647,7 +647,7 @@ VARIABLE REGISTER WEIGHTS
(byte~) menu::$4 202.0
(byte~) menu::$7 202.0
(void()) pressed()
(byte~) pressed::$0 202.0
(byte~) pressed::$1 202.0
Initial phi equivalence classes
[ keyboard_key_pressed::key#4 ]
@ -665,7 +665,7 @@ Added variable keyboard_key_pressed::$2 to zero page equivalence class [ keyboar
Added variable keyboard_key_pressed::return#0 to zero page equivalence class [ keyboard_key_pressed::return#0 ]
Added variable keyboard_matrix_read::return#0 to zero page equivalence class [ keyboard_matrix_read::return#0 ]
Added variable keyboard_key_pressed::return#10 to zero page equivalence class [ keyboard_key_pressed::return#10 ]
Added variable pressed::$0 to zero page equivalence class [ pressed::$0 ]
Added variable pressed::$1 to zero page equivalence class [ pressed::$1 ]
Complete equivalence classes
[ keyboard_key_pressed::key#4 ]
[ keyboard_key_pressed::return#2 ]
@ -682,7 +682,7 @@ Complete equivalence classes
[ keyboard_key_pressed::return#0 ]
[ keyboard_matrix_read::return#0 ]
[ keyboard_key_pressed::return#10 ]
[ pressed::$0 ]
[ pressed::$1 ]
Allocated zp ZP_BYTE:2 [ keyboard_key_pressed::key#4 ]
Allocated zp ZP_BYTE:3 [ keyboard_key_pressed::return#2 ]
Allocated zp ZP_BYTE:4 [ menu::$0 ]
@ -698,7 +698,7 @@ Allocated zp ZP_BYTE:13 [ keyboard_key_pressed::$2 ]
Allocated zp ZP_BYTE:14 [ keyboard_key_pressed::return#0 ]
Allocated zp ZP_BYTE:15 [ keyboard_matrix_read::return#0 ]
Allocated zp ZP_BYTE:16 [ keyboard_key_pressed::return#10 ]
Allocated zp ZP_BYTE:17 [ pressed::$0 ]
Allocated zp ZP_BYTE:17 [ pressed::$1 ]
INITIAL ASM
Target platform is c64basic
@ -954,7 +954,7 @@ keyboard_matrix_read: {
}
// pressed
pressed: {
.label _0 = $11
.label _1 = $11
// [43] *((const byte*) BGCOL#0) ← ++ *((const byte*) BGCOL#0) -- _deref_pbuc1=_inc__deref_pbuc1
inc BGCOL
// [44] phi from pressed pressed::@2 to pressed::@1 [phi:pressed/pressed::@2->pressed::@1]
@ -976,11 +976,11 @@ pressed: {
jmp b2
// pressed::@2
b2:
// [47] (byte~) pressed::$0 ← (byte) keyboard_key_pressed::return#10 -- vbuz1=vbuz2
// [47] (byte~) pressed::$1 ← (byte) keyboard_key_pressed::return#10 -- vbuz1=vbuz2
lda.z keyboard_key_pressed.return_10
sta.z _0
// [48] if((byte~) pressed::$0!=(byte) 0) goto pressed::@return -- vbuz1_neq_0_then_la1
lda.z _0
sta.z _1
// [48] if((byte~) pressed::$1!=(byte) 0) goto pressed::@return -- vbuz1_neq_0_then_la1
lda.z _1
cmp #0
bne breturn
jmp b1_from_b2
@ -1024,12 +1024,12 @@ Potential registers zp ZP_BYTE:13 [ keyboard_key_pressed::$2 ] : zp ZP_BYTE:13 ,
Potential registers zp ZP_BYTE:14 [ keyboard_key_pressed::return#0 ] : zp ZP_BYTE:14 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:15 [ keyboard_matrix_read::return#0 ] : zp ZP_BYTE:15 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:16 [ keyboard_key_pressed::return#10 ] : zp ZP_BYTE:16 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:17 [ pressed::$0 ] : zp ZP_BYTE:17 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:17 [ pressed::$1 ] : zp ZP_BYTE:17 , reg byte a , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [keyboard_key_pressed] 202: zp ZP_BYTE:3 [ keyboard_key_pressed::return#2 ] 202: zp ZP_BYTE:5 [ keyboard_key_pressed::return#3 ] 202: zp ZP_BYTE:7 [ keyboard_key_pressed::return#4 ] 202: zp ZP_BYTE:16 [ keyboard_key_pressed::return#10 ] 67.67: zp ZP_BYTE:14 [ keyboard_key_pressed::return#0 ] 4: zp ZP_BYTE:10 [ keyboard_key_pressed::rowidx#0 ] 4: zp ZP_BYTE:13 [ keyboard_key_pressed::$2 ] 2: zp ZP_BYTE:2 [ keyboard_key_pressed::key#4 ] 0.67: zp ZP_BYTE:9 [ keyboard_key_pressed::colidx#0 ]
Uplift Scope [menu] 202: zp ZP_BYTE:4 [ menu::$0 ] 202: zp ZP_BYTE:6 [ menu::$4 ] 202: zp ZP_BYTE:8 [ menu::$7 ]
Uplift Scope [pressed] 202: zp ZP_BYTE:17 [ pressed::$0 ]
Uplift Scope [pressed] 202: zp ZP_BYTE:17 [ pressed::$1 ]
Uplift Scope [keyboard_matrix_read] 4: zp ZP_BYTE:11 [ keyboard_matrix_read::rowid#0 ] 4: zp ZP_BYTE:12 [ keyboard_matrix_read::return#2 ] 1.33: zp ZP_BYTE:15 [ keyboard_matrix_read::return#0 ]
Uplift Scope [main]
Uplift Scope []
@ -1037,7 +1037,7 @@ Uplift Scope []
Uplifting [keyboard_key_pressed] best 9851 combination reg byte a [ keyboard_key_pressed::return#2 ] reg byte a [ keyboard_key_pressed::return#3 ] reg byte a [ keyboard_key_pressed::return#4 ] reg byte a [ keyboard_key_pressed::return#10 ] zp ZP_BYTE:14 [ keyboard_key_pressed::return#0 ] zp ZP_BYTE:10 [ keyboard_key_pressed::rowidx#0 ] zp ZP_BYTE:13 [ keyboard_key_pressed::$2 ] zp ZP_BYTE:2 [ keyboard_key_pressed::key#4 ] zp ZP_BYTE:9 [ keyboard_key_pressed::colidx#0 ]
Limited combination testing to 100 combinations of 196608 possible.
Uplifting [menu] best 8051 combination reg byte a [ menu::$0 ] reg byte a [ menu::$4 ] reg byte a [ menu::$7 ]
Uplifting [pressed] best 7451 combination reg byte a [ pressed::$0 ]
Uplifting [pressed] best 7451 combination reg byte a [ pressed::$1 ]
Uplifting [keyboard_matrix_read] best 7433 combination reg byte x [ keyboard_matrix_read::rowid#0 ] reg byte a [ keyboard_matrix_read::return#2 ] reg byte a [ keyboard_matrix_read::return#0 ]
Uplifting [main] best 7433 combination
Uplifting [] best 7433 combination
@ -1279,8 +1279,8 @@ pressed: {
jmp b2
// pressed::@2
b2:
// [47] (byte~) pressed::$0 ← (byte) keyboard_key_pressed::return#10
// [48] if((byte~) pressed::$0!=(byte) 0) goto pressed::@return -- vbuaa_neq_0_then_la1
// [47] (byte~) pressed::$1 ← (byte) keyboard_key_pressed::return#10
// [48] if((byte~) pressed::$1!=(byte) 0) goto pressed::@return -- vbuaa_neq_0_then_la1
cmp #0
bne breturn
jmp b1_from_b2
@ -1432,7 +1432,7 @@ FINAL SYMBOL TABLE
(label) menu::@9
(label) menu::@return
(void()) pressed()
(byte~) pressed::$0 reg byte a 202.0
(byte~) pressed::$1 reg byte a 202.0
(label) pressed::@1
(label) pressed::@2
(label) pressed::@return
@ -1452,7 +1452,7 @@ reg byte a [ keyboard_key_pressed::$2 ]
reg byte a [ keyboard_key_pressed::return#0 ]
reg byte a [ keyboard_matrix_read::return#0 ]
reg byte a [ keyboard_key_pressed::return#10 ]
reg byte a [ pressed::$0 ]
reg byte a [ pressed::$1 ]
FINAL ASSEMBLER
@ -1664,9 +1664,9 @@ pressed: {
// keyboard_key_pressed(KEY_SPACE)
// [46] (byte) keyboard_key_pressed::return#10 ← (byte) keyboard_key_pressed::return#0
// pressed::@2
// [47] (byte~) pressed::$0 ← (byte) keyboard_key_pressed::return#10
// [47] (byte~) pressed::$1 ← (byte) keyboard_key_pressed::return#10
// if(keyboard_key_pressed(KEY_SPACE)!=0)
// [48] if((byte~) pressed::$0!=(byte) 0) goto pressed::@return -- vbuaa_neq_0_then_la1
// [48] if((byte~) pressed::$1!=(byte) 0) goto pressed::@return -- vbuaa_neq_0_then_la1
cmp #0
bne breturn
jmp b1

View File

@ -69,7 +69,7 @@
(label) menu::@9
(label) menu::@return
(void()) pressed()
(byte~) pressed::$0 reg byte a 202.0
(byte~) pressed::$1 reg byte a 202.0
(label) pressed::@1
(label) pressed::@2
(label) pressed::@return
@ -89,4 +89,4 @@ reg byte a [ keyboard_key_pressed::$2 ]
reg byte a [ keyboard_key_pressed::return#0 ]
reg byte a [ keyboard_matrix_read::return#0 ]
reg byte a [ keyboard_key_pressed::return#10 ]
reg byte a [ pressed::$0 ]
reg byte a [ pressed::$1 ]

View File

@ -43,8 +43,8 @@ main::@1: scope:[main] from main::@6 main::@8
[20] call point_init
to:main::@7
main::@7: scope:[main] from main::@1
[21] (byte~) main::$13 ← (byte) main::i#2 << (byte) 1
[22] (word) bitmap_plot::x#0 ← *((const word[SIZE#0]) x_start#0 + (byte~) main::$13)
[21] (byte~) main::$14 ← (byte) main::i#2 << (byte) 1
[22] (word) bitmap_plot::x#0 ← *((const word[SIZE#0]) x_start#0 + (byte~) main::$14)
[23] (byte) bitmap_plot::y#0 ← *((const byte[SIZE#0]) y_start#0 + (byte) main::i#2)
[24] call bitmap_plot
to:main::@8

View File

@ -343,8 +343,8 @@ main::@1: scope:[main] from main::@19 main::@21
to:main::@20
main::@20: scope:[main] from main::@1
(byte) main::i#3 ← phi( main::@1/(byte) main::i#2 )
(byte~) main::$13 ← (byte) main::i#3 * (const byte) SIZEOF_WORD
(word) bitmap_plot::x#0 ← *((word[SIZE#0]) x_start#0 + (byte~) main::$13)
(byte~) main::$14 ← (byte) main::i#3 * (const byte) SIZEOF_WORD
(word) bitmap_plot::x#0 ← *((word[SIZE#0]) x_start#0 + (byte~) main::$14)
(byte) bitmap_plot::y#0 ← *((byte[SIZE#0]) y_start#0 + (byte) main::i#3)
call bitmap_plot
to:main::@21
@ -974,7 +974,7 @@ SYMBOL TABLE SSA
(byte~) main::$1
(bool~) main::$11
(bool~) main::$12
(byte~) main::$13
(byte~) main::$14
(number~) main::$2
(byte~) main::$4
(number~) main::$8
@ -1890,7 +1890,7 @@ Inlining Noop Cast [61] (signed word~) point_init::$1 ← (signed word)*((const
Inlining Noop Cast [69] (word) point_init::abs16s1_return#1 ← (word)(signed word) point_init::x_diff#1 keeping point_init::x_diff#1
Inlining Noop Cast [74] (word) point_init::abs16s2_return#1 ← (word)(signed word) point_init::y_diff#0 keeping point_init::y_diff#0
Successful SSA optimization Pass2NopCastInlining
Rewriting multiplication to use shift [51] (byte~) main::$13 ← (byte) main::i#2 * (const byte) SIZEOF_WORD
Rewriting multiplication to use shift [51] (byte~) main::$14 ← (byte) main::i#2 * (const byte) SIZEOF_WORD
Rewriting multiplication to use shift [59] (byte~) point_init::$18 ← (byte) point_init::point_idx#0 * (const byte) SIZEOF_WORD
Rewriting multiplication to use shift [78] (byte~) point_init::$20 ← (byte) point_init::point_idx#0 * (const byte) SIZEOF_WORD
Rewriting multiplication to use shift [79] (word~) point_init::$9 ← *((const word[SIZE#0]) x_start#0 + (byte~) point_init::$20) * (byte) $10
@ -2136,8 +2136,8 @@ main::@1: scope:[main] from main::@6 main::@8
[20] call point_init
to:main::@7
main::@7: scope:[main] from main::@1
[21] (byte~) main::$13 ← (byte) main::i#2 << (byte) 1
[22] (word) bitmap_plot::x#0 ← *((const word[SIZE#0]) x_start#0 + (byte~) main::$13)
[21] (byte~) main::$14 ← (byte) main::i#2 << (byte) 1
[22] (word) bitmap_plot::x#0 ← *((const word[SIZE#0]) x_start#0 + (byte~) main::$14)
[23] (byte) bitmap_plot::y#0 ← *((const byte[SIZE#0]) y_start#0 + (byte) main::i#2)
[24] call bitmap_plot
to:main::@8
@ -2520,7 +2520,7 @@ VARIABLE REGISTER WEIGHTS
(word) divr16u::return#0 61.0
(word) divr16u::return#2 4.0
(void()) main()
(byte~) main::$13 22.0
(byte~) main::$14 22.0
(byte) main::i
(byte) main::i#1 16.5
(byte) main::i#2 7.857142857142857
@ -2626,7 +2626,7 @@ Initial phi equivalence classes
[ bitmap_init::y#2 bitmap_init::y#1 ]
[ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ]
Added variable point_init::point_idx#0 to zero page equivalence class [ point_init::point_idx#0 ]
Added variable main::$13 to zero page equivalence class [ main::$13 ]
Added variable main::$14 to zero page equivalence class [ main::$14 ]
Added variable bitmap_plot::x#0 to zero page equivalence class [ bitmap_plot::x#0 ]
Added variable bitmap_plot::y#0 to zero page equivalence class [ bitmap_plot::y#0 ]
Added variable bitmap_plot::plotter#0 to zero page equivalence class [ bitmap_plot::plotter#0 ]
@ -2685,7 +2685,7 @@ Complete equivalence classes
[ bitmap_init::y#2 bitmap_init::y#1 ]
[ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ]
[ point_init::point_idx#0 ]
[ main::$13 ]
[ main::$14 ]
[ bitmap_plot::x#0 ]
[ bitmap_plot::y#0 ]
[ bitmap_plot::plotter#0 ]
@ -2743,7 +2743,7 @@ Allocated zp ZP_BYTE:30 [ bitmap_init::x#2 bitmap_init::x#1 ]
Allocated zp ZP_BYTE:31 [ bitmap_init::y#2 bitmap_init::y#1 ]
Allocated zp ZP_WORD:32 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ]
Allocated zp ZP_BYTE:34 [ point_init::point_idx#0 ]
Allocated zp ZP_BYTE:35 [ main::$13 ]
Allocated zp ZP_BYTE:35 [ main::$14 ]
Allocated zp ZP_WORD:36 [ bitmap_plot::x#0 ]
Allocated zp ZP_BYTE:38 [ bitmap_plot::y#0 ]
Allocated zp ZP_WORD:39 [ bitmap_plot::plotter#0 ]
@ -2832,7 +2832,7 @@ bend:
main: {
.const vicSelectGfxBank1_toDd001_return = 3^(>SCREEN)/$40
.const toD0181_return = (>(SCREEN&$3fff)*4)|(>BITMAP)/4&$f
.label _13 = $23
.label _14 = $23
.label i = 2
// asm { sei }
// Disable normal interrupt
@ -2915,12 +2915,12 @@ main: {
jmp b7
// main::@7
b7:
// [21] (byte~) main::$13 ← (byte) main::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1
// [21] (byte~) main::$14 ← (byte) main::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1
lda.z i
asl
sta.z _13
// [22] (word) bitmap_plot::x#0 ← *((const word[SIZE#0]) x_start#0 + (byte~) main::$13) -- vwuz1=pwuc1_derefidx_vbuz2
ldy.z _13
sta.z _14
// [22] (word) bitmap_plot::x#0 ← *((const word[SIZE#0]) x_start#0 + (byte~) main::$14) -- vwuz1=pwuc1_derefidx_vbuz2
ldy.z _14
lda x_start,y
sta.z bitmap_plot.x
lda x_start+1,y
@ -3871,9 +3871,9 @@ Statement [7] *((const byte*) D011#0) ← (const byte) VIC_BMM#0|(const byte) VI
Statement [8] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte) 3 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [10] *((const byte*) CIA2_PORT_A#0) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [12] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [21] (byte~) main::$13 ← (byte) main::i#2 << (byte) 1 [ main::i#2 main::$13 ] ( main:2 [ main::i#2 main::$13 ] ) always clobbers reg byte a
Statement [21] (byte~) main::$14 ← (byte) main::i#2 << (byte) 1 [ main::i#2 main::$14 ] ( main:2 [ main::i#2 main::$14 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
Statement [22] (word) bitmap_plot::x#0 ← *((const word[SIZE#0]) x_start#0 + (byte~) main::$13) [ main::i#2 bitmap_plot::x#0 ] ( main:2 [ main::i#2 bitmap_plot::x#0 ] ) always clobbers reg byte a
Statement [22] (word) bitmap_plot::x#0 ← *((const word[SIZE#0]) x_start#0 + (byte~) main::$14) [ main::i#2 bitmap_plot::x#0 ] ( main:2 [ main::i#2 bitmap_plot::x#0 ] ) always clobbers reg byte a
Statement [27] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [29] (word) bitmap_plot::plotter#0 ← *((const byte[$100]) bitmap_plot_yhi#0 + (byte) bitmap_plot::y#0) w= *((const byte[$100]) bitmap_plot_ylo#0 + (byte) bitmap_plot::y#0) [ bitmap_plot::x#0 bitmap_plot::plotter#0 ] ( main:2::bitmap_plot:24 [ main::i#2 bitmap_plot::x#0 bitmap_plot::plotter#0 ] ) always clobbers reg byte a
Statement [30] (word~) bitmap_plot::$1 ← (word) bitmap_plot::x#0 & (word) $fff8 [ bitmap_plot::x#0 bitmap_plot::plotter#0 bitmap_plot::$1 ] ( main:2::bitmap_plot:24 [ main::i#2 bitmap_plot::x#0 bitmap_plot::plotter#0 bitmap_plot::$1 ] ) always clobbers reg byte a
@ -3954,8 +3954,8 @@ Statement [7] *((const byte*) D011#0) ← (const byte) VIC_BMM#0|(const byte) VI
Statement [8] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte) 3 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [10] *((const byte*) CIA2_PORT_A#0) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [12] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [21] (byte~) main::$13 ← (byte) main::i#2 << (byte) 1 [ main::i#2 main::$13 ] ( main:2 [ main::i#2 main::$13 ] ) always clobbers reg byte a
Statement [22] (word) bitmap_plot::x#0 ← *((const word[SIZE#0]) x_start#0 + (byte~) main::$13) [ main::i#2 bitmap_plot::x#0 ] ( main:2 [ main::i#2 bitmap_plot::x#0 ] ) always clobbers reg byte a
Statement [21] (byte~) main::$14 ← (byte) main::i#2 << (byte) 1 [ main::i#2 main::$14 ] ( main:2 [ main::i#2 main::$14 ] ) always clobbers reg byte a
Statement [22] (word) bitmap_plot::x#0 ← *((const word[SIZE#0]) x_start#0 + (byte~) main::$14) [ main::i#2 bitmap_plot::x#0 ] ( main:2 [ main::i#2 bitmap_plot::x#0 ] ) always clobbers reg byte a
Statement [27] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [29] (word) bitmap_plot::plotter#0 ← *((const byte[$100]) bitmap_plot_yhi#0 + (byte) bitmap_plot::y#0) w= *((const byte[$100]) bitmap_plot_ylo#0 + (byte) bitmap_plot::y#0) [ bitmap_plot::x#0 bitmap_plot::plotter#0 ] ( main:2::bitmap_plot:24 [ main::i#2 bitmap_plot::x#0 bitmap_plot::plotter#0 ] ) always clobbers reg byte a
Statement [30] (word~) bitmap_plot::$1 ← (word) bitmap_plot::x#0 & (word) $fff8 [ bitmap_plot::x#0 bitmap_plot::plotter#0 bitmap_plot::$1 ] ( main:2::bitmap_plot:24 [ main::i#2 bitmap_plot::x#0 bitmap_plot::plotter#0 bitmap_plot::$1 ] ) always clobbers reg byte a
@ -4039,7 +4039,7 @@ Potential registers zp ZP_BYTE:30 [ bitmap_init::x#2 bitmap_init::x#1 ] : zp ZP_
Potential registers zp ZP_BYTE:31 [ bitmap_init::y#2 bitmap_init::y#1 ] : zp ZP_BYTE:31 , reg byte x , reg byte y ,
Potential registers zp ZP_WORD:32 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] : zp ZP_WORD:32 ,
Potential registers zp ZP_BYTE:34 [ point_init::point_idx#0 ] : zp ZP_BYTE:34 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:35 [ main::$13 ] : zp ZP_BYTE:35 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:35 [ main::$14 ] : zp ZP_BYTE:35 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_WORD:36 [ bitmap_plot::x#0 ] : zp ZP_WORD:36 ,
Potential registers zp ZP_BYTE:38 [ bitmap_plot::y#0 ] : zp ZP_BYTE:38 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_WORD:39 [ bitmap_plot::plotter#0 ] : zp ZP_WORD:39 ,
@ -4083,7 +4083,7 @@ Uplift Scope [screen_fill] 221.6: zp ZP_WORD:22 [ screen_fill::screen#2 screen_f
Uplift Scope [bitmap_init] 39.88: zp ZP_WORD:32 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] 34.83: zp ZP_BYTE:29 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] 22: zp ZP_BYTE:30 [ bitmap_init::x#2 bitmap_init::x#1 ] 22: zp ZP_BYTE:31 [ bitmap_init::y#2 bitmap_init::y#1 ] 22: zp ZP_BYTE:91 [ bitmap_init::$4 ] 22: zp ZP_BYTE:92 [ bitmap_init::$5 ] 22: zp ZP_BYTE:93 [ bitmap_init::$6 ] 5.5: zp ZP_BYTE:90 [ bitmap_init::$7 ]
Uplift Scope [point_init] 14: zp ZP_WORD:5 [ point_init::abs16s2_return#2 point_init::abs16s2_return#5 point_init::abs16s2_return#6 ] 9: zp ZP_WORD:3 [ point_init::abs16s1_return#2 point_init::abs16s1_return#5 point_init::abs16s1_return#6 ] 4: zp ZP_WORD:51 [ point_init::$4 ] 4: zp ZP_WORD:56 [ point_init::$9 ] 4: zp ZP_WORD:58 [ point_init::$10 ] 4: zp ZP_WORD:60 [ point_init::$11 ] 4: zp ZP_WORD:68 [ point_init::x_stepf#0 ] 4: zp ZP_BYTE:70 [ point_init::$14 ] 2: zp ZP_BYTE:46 [ point_init::$18 ] 2: zp ZP_WORD:49 [ point_init::$3 ] 2: zp ZP_BYTE:71 [ point_init::$16 ] 2: zp ZP_WORD:72 [ point_init::abs16s2_return#0 ] 2: zp ZP_WORD:74 [ point_init::abs16s1_return#0 ] 1.6: zp ZP_BYTE:55 [ point_init::$20 ] 0.68: zp ZP_BYTE:34 [ point_init::point_idx#0 ] 0.56: zp ZP_WORD:47 [ point_init::x_diff#1 ] 0.5: zp ZP_WORD:53 [ point_init::y_diff#0 ]
Uplift Scope [divr16s] 14: zp ZP_WORD:9 [ divr16s::divisoru#3 divr16s::divisoru#4 divr16s::divisoru#5 ] 10: zp ZP_WORD:12 [ divr16s::return#2 divr16s::return#1 divr16s::return#7 ] 8.75: zp ZP_WORD:7 [ divr16s::remu#3 divr16s::remu#7 divr16s::remu#8 ] 4: zp ZP_BYTE:11 [ divr16s::neg#4 divr16s::neg#2 divr16s::neg#3 ] 4: zp ZP_WORD:66 [ divr16s::return#3 ] 2: zp ZP_WORD:64 [ divr16s::rem#0 ] 2: zp ZP_WORD:84 [ divr16s::remu#1 ] 1: zp ZP_WORD:80 [ divr16s::resultu#0 ] 1: zp ZP_WORD:82 [ divr16s::divisoru#1 ] 0.67: zp ZP_WORD:62 [ divr16s::divisor#0 ]
Uplift Scope [main] 24.36: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] 22: zp ZP_BYTE:35 [ main::$13 ]
Uplift Scope [main] 24.36: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] 22: zp ZP_BYTE:35 [ main::$14 ]
Uplift Scope [bitmap_plot] 15: zp ZP_BYTE:38 [ bitmap_plot::y#0 ] 4: zp ZP_WORD:41 [ bitmap_plot::$1 ] 4: zp ZP_BYTE:45 [ bitmap_plot::$2 ] 3: zp ZP_WORD:36 [ bitmap_plot::x#0 ] 3: zp ZP_WORD:43 [ bitmap_plot::plotter#1 ] 1: zp ZP_WORD:39 [ bitmap_plot::plotter#0 ]
Uplift Scope []
@ -4095,7 +4095,7 @@ Limited combination testing to 100 combinations of 15360 possible.
Uplifting [point_init] best 28101 combination zp ZP_WORD:5 [ point_init::abs16s2_return#2 point_init::abs16s2_return#5 point_init::abs16s2_return#6 ] zp ZP_WORD:3 [ point_init::abs16s1_return#2 point_init::abs16s1_return#5 point_init::abs16s1_return#6 ] zp ZP_WORD:51 [ point_init::$4 ] zp ZP_WORD:56 [ point_init::$9 ] zp ZP_WORD:58 [ point_init::$10 ] zp ZP_WORD:60 [ point_init::$11 ] zp ZP_WORD:68 [ point_init::x_stepf#0 ] reg byte a [ point_init::$14 ] reg byte a [ point_init::$18 ] zp ZP_WORD:49 [ point_init::$3 ] reg byte a [ point_init::$16 ] zp ZP_WORD:72 [ point_init::abs16s2_return#0 ] zp ZP_WORD:74 [ point_init::abs16s1_return#0 ] reg byte x [ point_init::$20 ] zp ZP_BYTE:34 [ point_init::point_idx#0 ] zp ZP_WORD:47 [ point_init::x_diff#1 ] zp ZP_WORD:53 [ point_init::y_diff#0 ]
Limited combination testing to 100 combinations of 576 possible.
Uplifting [divr16s] best 28090 combination zp ZP_WORD:9 [ divr16s::divisoru#3 divr16s::divisoru#4 divr16s::divisoru#5 ] zp ZP_WORD:12 [ divr16s::return#2 divr16s::return#1 divr16s::return#7 ] zp ZP_WORD:7 [ divr16s::remu#3 divr16s::remu#7 divr16s::remu#8 ] reg byte y [ divr16s::neg#4 divr16s::neg#2 divr16s::neg#3 ] zp ZP_WORD:66 [ divr16s::return#3 ] zp ZP_WORD:64 [ divr16s::rem#0 ] zp ZP_WORD:84 [ divr16s::remu#1 ] zp ZP_WORD:80 [ divr16s::resultu#0 ] zp ZP_WORD:82 [ divr16s::divisoru#1 ] zp ZP_WORD:62 [ divr16s::divisor#0 ]
Uplifting [main] best 28050 combination zp ZP_BYTE:2 [ main::i#2 main::i#1 ] reg byte a [ main::$13 ]
Uplifting [main] best 28050 combination zp ZP_BYTE:2 [ main::i#2 main::i#1 ] reg byte a [ main::$14 ]
Uplifting [bitmap_plot] best 28013 combination reg byte x [ bitmap_plot::y#0 ] zp ZP_WORD:41 [ bitmap_plot::$1 ] reg byte a [ bitmap_plot::$2 ] zp ZP_WORD:36 [ bitmap_plot::x#0 ] zp ZP_WORD:43 [ bitmap_plot::plotter#1 ] zp ZP_WORD:39 [ bitmap_plot::plotter#0 ]
Uplifting [] best 28013 combination
Attempting to uplift remaining variables inzp ZP_BYTE:2 [ main::i#2 main::i#1 ]
@ -4283,10 +4283,10 @@ main: {
jmp b7
// main::@7
b7:
// [21] (byte~) main::$13 ← (byte) main::i#2 << (byte) 1 -- vbuaa=vbuz1_rol_1
// [21] (byte~) main::$14 ← (byte) main::i#2 << (byte) 1 -- vbuaa=vbuz1_rol_1
lda.z i
asl
// [22] (word) bitmap_plot::x#0 ← *((const word[SIZE#0]) x_start#0 + (byte~) main::$13) -- vwuz1=pwuc1_derefidx_vbuaa
// [22] (word) bitmap_plot::x#0 ← *((const word[SIZE#0]) x_start#0 + (byte~) main::$14) -- vwuz1=pwuc1_derefidx_vbuaa
tay
lda x_start,y
sta.z bitmap_plot.x
@ -5447,7 +5447,7 @@ FINAL SYMBOL TABLE
(word) divr16u::return#0 return zp ZP_WORD:10 61.0
(word) divr16u::return#2 return zp ZP_WORD:10 4.0
(void()) main()
(byte~) main::$13 reg byte a 22.0
(byte~) main::$14 reg byte a 22.0
(label) main::@1
(label) main::@2
(label) main::@3
@ -5584,7 +5584,7 @@ reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ]
reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ]
reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ]
zp ZP_WORD:8 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 divr16s::divisoru#3 divr16s::divisoru#4 divr16s::divisoru#5 divr16s::divisor#0 divr16u::divisor#0 divr16s::divisoru#1 point_init::x_diff#1 ]
reg byte a [ main::$13 ]
reg byte a [ main::$14 ]
zp ZP_WORD:10 [ bitmap_plot::x#0 divr16s::return#2 divr16s::return#1 divr16s::return#7 divr16s::resultu#0 divr16s::return#3 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 point_init::x_stepf#0 ]
reg byte x [ bitmap_plot::y#0 ]
reg byte a [ bitmap_plot::$2 ]
@ -5714,10 +5714,10 @@ main: {
jsr point_init
// main::@7
// bitmap_plot(x_start[i], y_start[i])
// [21] (byte~) main::$13 ← (byte) main::i#2 << (byte) 1 -- vbuaa=vbuz1_rol_1
// [21] (byte~) main::$14 ← (byte) main::i#2 << (byte) 1 -- vbuaa=vbuz1_rol_1
lda.z i
asl
// [22] (word) bitmap_plot::x#0 ← *((const word[SIZE#0]) x_start#0 + (byte~) main::$13) -- vwuz1=pwuc1_derefidx_vbuaa
// [22] (word) bitmap_plot::x#0 ← *((const word[SIZE#0]) x_start#0 + (byte~) main::$14) -- vwuz1=pwuc1_derefidx_vbuaa
tay
lda x_start,y
sta.z bitmap_plot.x

View File

@ -170,7 +170,7 @@
(word) divr16u::return#0 return zp ZP_WORD:10 61.0
(word) divr16u::return#2 return zp ZP_WORD:10 4.0
(void()) main()
(byte~) main::$13 reg byte a 22.0
(byte~) main::$14 reg byte a 22.0
(label) main::@1
(label) main::@2
(label) main::@3
@ -307,7 +307,7 @@ reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ]
reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ]
reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ]
zp ZP_WORD:8 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 divr16s::divisoru#3 divr16s::divisoru#4 divr16s::divisoru#5 divr16s::divisor#0 divr16u::divisor#0 divr16s::divisoru#1 point_init::x_diff#1 ]
reg byte a [ main::$13 ]
reg byte a [ main::$14 ]
zp ZP_WORD:10 [ bitmap_plot::x#0 divr16s::return#2 divr16s::return#1 divr16s::return#7 divr16s::resultu#0 divr16s::return#3 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 point_init::x_stepf#0 ]
reg byte x [ bitmap_plot::y#0 ]
reg byte a [ bitmap_plot::$2 ]

View File

@ -22,8 +22,8 @@ main::@2: scope:[main] from main::@1
main::@3: scope:[main] from main::@1 main::@2
(byte) main::i#4 ← phi( main::@1/(byte) main::i#2 main::@2/(byte) main::i#3 )
(byte) main::i#1 ← (byte) main::i#4 + rangenext(0,$28*6)
(bool~) main::$2 ← (byte) main::i#1 != rangelast(0,$28*6)
if((bool~) main::$2) goto main::@1
(bool~) main::$3 ← (byte) main::i#1 != rangelast(0,$28*6)
if((bool~) main::$3) goto main::@1
to:main::@return
main::@return: scope:[main] from main::@3
return
@ -45,7 +45,7 @@ SYMBOL TABLE SSA
(void()) main()
(bool~) main::$0
(bool~) main::$1
(bool~) main::$2
(bool~) main::$3
(label) main::@1
(label) main::@2
(label) main::@3
@ -68,7 +68,7 @@ Successful SSA optimization Pass2AliasElimination
Alias (byte) main::i#2 = (byte) main::i#4
Successful SSA optimization Pass2AliasElimination
Simple Condition (bool~) main::$1 [5] if(*((byte*) SCREEN#0 + (byte) main::i#2)!=(byte) ' ') goto main::@2
Simple Condition (bool~) main::$2 [11] if((byte) main::i#1!=rangelast(0,$28*6)) goto main::@1
Simple Condition (bool~) main::$3 [11] if((byte) main::i#1!=rangelast(0,$28*6)) goto main::@1
Successful SSA optimization Pass2ConditionalJumpSimplification
Negating conditional jump and destination [5] if(*((byte*) SCREEN#0 + (byte) main::i#2)==(byte) ' ') goto main::@3
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement

View File

@ -228,8 +228,8 @@ main::@14: scope:[main] from main::@6
(byte*) print_screen#14 ← phi( main::@6/(byte*) print_screen#17 )
(byte*) print_char_cursor#37 ← phi( main::@6/(byte*) print_char_cursor#41 )
(dword) mulf16u::return#3 ← phi( main::@6/(dword) mulf16u::return#0 )
(dword~) main::$2 ← (dword) mulf16u::return#3
(dword) main::r#0 ← (dword~) main::$2
(dword~) main::$3 ← (dword) mulf16u::return#3
(dword) main::r#0 ← (dword~) main::$3
*((byte*) BORDERCOL#0) ← -- *((byte*) BORDERCOL#0)
(dword) print_dword::dw#0 ← (dword) main::r#0
call print_dword
@ -431,7 +431,7 @@ SYMBOL TABLE SSA
(byte*) SCREEN#0
(void()) main()
(bool~) main::$1
(dword~) main::$2
(dword~) main::$3
(label) main::@1
(label) main::@13
(label) main::@14
@ -827,7 +827,7 @@ Alias (byte*) print_char_cursor#37 = (byte*) print_char_cursor#41 (byte*) print_
Alias (byte*) print_screen#10 = (byte*) print_screen#17 (byte*) print_screen#20 (byte*) print_screen#14
Alias (byte*) print_line_cursor#10 = (byte*) print_line_cursor#17 (byte*) print_line_cursor#20 (byte*) print_line_cursor#14
Alias (dword) mulf16u::return#0 = (dword) mulf16u::return#3
Alias (dword) main::r#0 = (dword~) main::$2
Alias (dword) main::r#0 = (dword~) main::$3
Alias (byte*) print_char_cursor#14 = (byte*) print_char_cursor#30
Alias (byte*) print_screen#3 = (byte*) print_screen#7
Alias (byte*) print_line_cursor#3 = (byte*) print_line_cursor#7

View File

@ -512,8 +512,8 @@ main::@1: scope:[main] from main::@2 main::@32
main::@2: scope:[main] from main::@1
(byte*) print_char_cursor#122 ← phi( main::@1/(byte*) print_char_cursor#118 )
(byte*) print_line_cursor#73 ← phi( main::@1/(byte*) print_line_cursor#70 )
(byte*~) main::$28 ← (byte*) SCREEN#0 + (number) $3e7
*((byte*~) main::$28) ← ++ *((byte*~) main::$28)
(byte*~) main::$29 ← (byte*) SCREEN#0 + (number) $3e7
*((byte*~) main::$29) ← ++ *((byte*~) main::$29)
to:main::@1
main::@return: scope:[main] from main::@1
(byte*) print_char_cursor#94 ← phi( main::@1/(byte*) print_char_cursor#118 )
@ -721,7 +721,7 @@ SYMBOL TABLE SSA
(byte*) SCREEN
(byte*) SCREEN#0
(void()) main()
(byte*~) main::$28
(byte*~) main::$29
(label) main::@1
(label) main::@10
(label) main::@11
@ -1257,7 +1257,7 @@ Adding number conversion cast (unumber) $17 in (byte) testProcport::ddr2#21 ←
Adding number conversion cast (unumber) $17 in (byte) testProcport::ddr#22 ← (number) $17
Adding number conversion cast (unumber) $17 in (byte) testProcport::port#22 ← (number) $17
Adding number conversion cast (unumber) $17 in (byte) testProcport::ddr2#22 ← (number) $17
Adding number conversion cast (unumber) $3e7 in (byte*~) main::$28 ← (byte*) SCREEN#0 + (number) $3e7
Adding number conversion cast (unumber) $3e7 in (byte*~) main::$29 ← (byte*) SCREEN#0 + (number) $3e7
Adding number conversion cast (unumber) $ff in *((byte*) PROCPORT_DDR#0) ← (number) $ff
Adding number conversion cast (unumber) 0 in *((byte*) PROCPORT#0) ← (number) 0
Successful SSA optimization PassNAddNumberTypeConversions
@ -1795,10 +1795,10 @@ Eliminating unused variable (void*) memset::return#2 and assignment [34] (void*)
Successful SSA optimization PassNEliminateUnusedVars
Removing unused block main::@return
Successful SSA optimization Pass2EliminateUnusedBlocks
Constant right-side identified [73] (byte*~) main::$28 ← (const byte*) SCREEN#0 + (word) $3e7
Constant right-side identified [73] (byte*~) main::$29 ← (const byte*) SCREEN#0 + (word) $3e7
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const void*) memset::str#0 = (void*)print_line_cursor#0
Constant (const byte*) main::$28 = SCREEN#0+$3e7
Constant (const byte*) main::$29 = SCREEN#0+$3e7
Successful SSA optimization Pass2ConstantIdentification
Constant value identified (byte*)memset::str#0 in [0] (byte*~) memset::$2 ← (byte*)(const void*) memset::str#0
Constant value identified (byte*)memset::str#0 in [2] (byte*) memset::dst#0 ← (byte*)(const void*) memset::str#0
@ -1974,10 +1974,10 @@ Constant inlined testProcport::ddr2#14 = (byte) $55
Constant inlined testProcport::ddr2#5 = (byte) 0
Constant inlined testProcport::ddr2#11 = (byte) $ff
Constant inlined testProcport::ddr2#4 = (const byte) PROCPORT_DDR_MEMORY_MASK#0
Constant inlined main::$28 = (const byte*) SCREEN#0+(word) $3e7
Constant inlined testProcport::ddr2#12 = (byte) $55
Constant inlined testProcport::ddr#22 = (byte) $17
Constant inlined testProcport::ddr2#3 = (const byte) PROCPORT_DDR_MEMORY_MASK#0
Constant inlined main::$29 = (const byte*) SCREEN#0+(word) $3e7
Constant inlined testProcport::ddr#21 = (byte) $17
Constant inlined testProcport::ddr2#2 = (const byte) PROCPORT_DDR_MEMORY_MASK#0
Constant inlined testProcport::ddr2#10 = (byte) $ff

View File

@ -10,12 +10,12 @@ main: scope:[main] from @1
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::$11 ← (byte*) main::screen#0 + (number) $28
(byte*~) main::$12 ← (byte*~) main::$11 + (byte) main::i#2
*((byte*) main::screen#0 + (byte) main::i#2) ← *((byte*~) main::$12)
(byte*~) main::$14 ← (byte*) main::screen#0 + (number) $28
(byte*~) main::$15 ← (byte*~) main::$14 + (byte) main::i#2
*((byte*) main::screen#0 + (byte) main::i#2) ← *((byte*~) main::$15)
(byte) main::i#1 ← (byte) main::i#2 + rangenext(0,$a)
(bool~) main::$13 ← (byte) main::i#1 != rangelast(0,$a)
if((bool~) main::$13) goto main::@1
(bool~) main::$16 ← (byte) main::i#1 != rangelast(0,$a)
if((bool~) main::$16) goto main::@1
to:main::@2
main::@2: scope:[main] from main::@1
(byte*~) main::$1 ← (byte*) main::screen#0 + (number) $51
@ -29,20 +29,20 @@ main::@2: scope:[main] from main::@1
to:main::@3
main::@3: scope:[main] from main::@2 main::@3
(byte) main::j#2 ← phi( main::@2/(byte) main::j#0 main::@3/(byte) main::j#1 )
(byte*~) main::$14 ← (byte*) main::screen#0 + (number) $a0
(byte*~) main::$15 ← (byte*~) main::$14 + (byte) main::j#2
(byte*~) main::$16 ← (byte*) main::screen#0 + (number) $c8
(byte*~) main::$17 ← (byte*~) main::$16 + (byte) main::j#2
*((byte*~) main::$15) ← *((byte*~) main::$17)
(byte*~) main::$17 ← (byte*) main::screen#0 + (number) $a0
(byte*~) main::$18 ← (byte*~) main::$17 + (byte) main::j#2
(byte*~) main::$19 ← (byte*) main::screen#0 + (number) $c8
(byte*~) main::$20 ← (byte*~) main::$19 + (byte) main::j#2
*((byte*~) main::$18) ← *((byte*~) main::$20)
(byte) main::j#1 ← (byte) main::j#2 + rangenext(0,$a)
(bool~) main::$18 ← (byte) main::j#1 != rangelast(0,$a)
if((bool~) main::$18) goto main::@3
(bool~) main::$21 ← (byte) main::j#1 != rangelast(0,$a)
if((bool~) main::$21) goto main::@3
to:main::@4
main::@4: scope:[main] from main::@3
(byte*~) main::$5 ← ((byte*)) (number) $d020
*((byte*~) main::$5) ← ++ *((byte*~) main::$5)
(byte*~) main::$8 ← ((byte*)) (number) $d000+(number) $21
*((byte*~) main::$8) ← -- *((byte*~) main::$8)
(byte*~) main::$9 ← ((byte*)) (number) $d000+(number) $21
*((byte*~) main::$9) ← -- *((byte*~) main::$9)
(byte*) main::BGCOL#0 ← ((byte*)) (number) $d020
*((byte*) main::BGCOL#0) ← ++ *((byte*) main::BGCOL#0)
to:main::@return
@ -63,19 +63,19 @@ SYMBOL TABLE SSA
(label) @end
(void()) main()
(byte*~) main::$1
(byte*~) main::$11
(byte*~) main::$12
(bool~) main::$13
(byte*~) main::$14
(byte*~) main::$15
(byte*~) main::$16
(bool~) main::$16
(byte*~) main::$17
(bool~) main::$18
(byte*~) main::$18
(byte*~) main::$19
(byte*~) main::$2
(byte*~) main::$20
(bool~) main::$21
(byte*~) main::$3
(byte*~) main::$4
(byte*~) main::$5
(byte*~) main::$8
(byte*~) main::$9
(label) main::@1
(label) main::@2
(label) main::@3
@ -96,17 +96,17 @@ SYMBOL TABLE SSA
(byte*) main::screen
(byte*) main::screen#0
Adding number conversion cast (unumber) $28 in (byte*~) main::$11 ← (byte*) main::screen#0 + (number) $28
Adding number conversion cast (unumber) $28 in (byte*~) main::$14 ← (byte*) main::screen#0 + (number) $28
Adding number conversion cast (unumber) $51 in (byte*~) main::$1 ← (byte*) main::screen#0 + (number) $51
Adding number conversion cast (unumber) $79 in (byte*~) main::$2 ← (byte*) main::screen#0 + (number) $79
Adding number conversion cast (unumber) $52 in (byte*~) main::$3 ← (byte*) main::screen#0 + (number) $52
Adding number conversion cast (unumber) $7a in (byte*~) main::$4 ← (byte*) main::screen#0 + (number) $7a
Adding number conversion cast (unumber) $a0 in (byte*~) main::$14 ← (byte*) main::screen#0 + (number) $a0
Adding number conversion cast (unumber) $c8 in (byte*~) main::$16 ← (byte*) main::screen#0 + (number) $c8
Adding number conversion cast (unumber) $a0 in (byte*~) main::$17 ← (byte*) main::screen#0 + (number) $a0
Adding number conversion cast (unumber) $c8 in (byte*~) main::$19 ← (byte*) main::screen#0 + (number) $c8
Successful SSA optimization PassNAddNumberTypeConversions
Inlining cast (byte*) main::screen#0 ← (byte*)(number) $400
Inlining cast (byte*~) main::$5 ← (byte*)(number) $d020
Inlining cast (byte*~) main::$8 ← (byte*)(number) $d000+(number) $21
Inlining cast (byte*~) main::$9 ← (byte*)(number) $d000+(number) $21
Inlining cast (byte*) main::BGCOL#0 ← (byte*)(number) $d020
Successful SSA optimization Pass2InlineCast
Simplifying constant pointer cast (byte*) 1024
@ -130,37 +130,37 @@ Finalized unsigned number type (byte) $c8
Successful SSA optimization PassNFinalizeNumberTypeConversions
Alias (byte*) main::sc2#0 = (byte*~) main::$1
Successful SSA optimization Pass2AliasElimination
Simple Condition (bool~) main::$13 [8] if((byte) main::i#1!=rangelast(0,$a)) goto main::@1
Simple Condition (bool~) main::$18 [25] if((byte) main::j#1!=rangelast(0,$a)) goto main::@3
Simple Condition (bool~) main::$16 [8] if((byte) main::i#1!=rangelast(0,$a)) goto main::@1
Simple Condition (bool~) main::$21 [25] if((byte) main::j#1!=rangelast(0,$a)) goto main::@3
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant right-side identified [28] (byte*~) main::$8 ← (byte*)(number) $d000+(number) $21
Constant right-side identified [28] (byte*~) main::$9 ← (byte*)(number) $d000+(number) $21
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) main::screen#0 = (byte*) 1024
Constant (const byte) main::i#0 = 0
Constant (const byte) main::j#0 = 0
Constant (const byte*) main::$5 = (byte*) 53280
Constant (const byte*) main::$8 = (byte*)$d000+$21
Constant (const byte*) main::$9 = (byte*)$d000+$21
Constant (const byte*) main::BGCOL#0 = (byte*) 53280
Successful SSA optimization Pass2ConstantIdentification
Resolved ranged next value [6] main::i#1 ← ++ main::i#2 to ++
Resolved ranged comparison value [8] if(main::i#1!=rangelast(0,$a)) goto main::@1 to (number) $b
Resolved ranged next value [23] main::j#1 ← ++ main::j#2 to ++
Resolved ranged comparison value [25] if(main::j#1!=rangelast(0,$a)) goto main::@3 to (number) $b
Converting *(pointer+n) to pointer[n] [5] *((const byte*) main::screen#0 + (byte) main::i#2) ← *((byte*~) main::$12) -- *(main::$11 + main::i#2)
Converting *(pointer+n) to pointer[n] [5] *((const byte*) main::screen#0 + (byte) main::i#2) ← *((byte*~) main::$15) -- *(main::$14 + main::i#2)
Converting *(pointer+n) to pointer[n] [12] *((byte*) main::sc2#0) ← *((byte*~) main::$2) -- *(main::screen#0 + $79)
Converting *(pointer+n) to pointer[n] [12] *((byte*) main::sc2#0) ← *((const byte*) main::screen#0 + (byte) $79) -- *(main::screen#0 + $51)
Converting *(pointer+n) to pointer[n] [15] *((byte*~) main::$3) ← *((byte*~) main::$4) -- *(main::screen#0 + $7a)
Converting *(pointer+n) to pointer[n] [15] *((byte*~) main::$3) ← *((const byte*) main::screen#0 + (byte) $7a) -- *(main::screen#0 + $52)
Converting *(pointer+n) to pointer[n] [22] *((byte*~) main::$15) ← *((byte*~) main::$17) -- *(main::$16 + main::j#2)
Converting *(pointer+n) to pointer[n] [22] *((byte*~) main::$15) ← *((byte*~) main::$16 + (byte) main::j#2) -- *(main::$14 + main::j#2)
Converting *(pointer+n) to pointer[n] [22] *((byte*~) main::$18) ← *((byte*~) main::$20) -- *(main::$19 + main::j#2)
Converting *(pointer+n) to pointer[n] [22] *((byte*~) main::$18) ← *((byte*~) main::$19 + (byte) main::j#2) -- *(main::$17 + main::j#2)
Successful SSA optimization Pass2InlineDerefIdx
Eliminating unused variable (byte*~) main::$12 and assignment [2] (byte*~) main::$12 ← (byte*~) main::$11 + (byte) main::i#2
Eliminating unused variable (byte*~) main::$15 and assignment [2] (byte*~) main::$15 ← (byte*~) main::$14 + (byte) main::i#2
Eliminating unused variable (byte*) main::sc2#0 and assignment [6] (byte*) main::sc2#0 ← (const byte*) main::screen#0 + (byte) $51
Eliminating unused variable (byte*~) main::$2 and assignment [7] (byte*~) main::$2 ← (const byte*) main::screen#0 + (byte) $79
Eliminating unused variable (byte*~) main::$3 and assignment [9] (byte*~) main::$3 ← (const byte*) main::screen#0 + (byte) $52
Eliminating unused variable (byte*~) main::$4 and assignment [10] (byte*~) main::$4 ← (const byte*) main::screen#0 + (byte) $7a
Eliminating unused variable (byte*~) main::$15 and assignment [14] (byte*~) main::$15 ← (byte*~) main::$14 + (byte) main::j#2
Eliminating unused variable (byte*~) main::$17 and assignment [16] (byte*~) main::$17 ← (byte*~) main::$16 + (byte) main::j#2
Eliminating unused variable (byte*~) main::$18 and assignment [14] (byte*~) main::$18 ← (byte*~) main::$17 + (byte) main::j#2
Eliminating unused variable (byte*~) main::$20 and assignment [16] (byte*~) main::$20 ← (byte*~) main::$19 + (byte) main::j#2
Successful SSA optimization PassNEliminateUnusedVars
Adding number conversion cast (unumber) $b in if((byte) main::i#1!=(number) $b) goto main::@1
Adding number conversion cast (unumber) $b in if((byte) main::j#1!=(number) $b) goto main::@3
@ -171,23 +171,23 @@ Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) $b
Finalized unsigned number type (byte) $b
Successful SSA optimization PassNFinalizeNumberTypeConversions
Constant right-side identified [1] (byte*~) main::$11 ← (const byte*) main::screen#0 + (byte) $28
Constant right-side identified [8] (byte*~) main::$14 ← (const byte*) main::screen#0 + (byte) $a0
Constant right-side identified [9] (byte*~) main::$16 ← (const byte*) main::screen#0 + (byte) $c8
Constant right-side identified [1] (byte*~) main::$14 ← (const byte*) main::screen#0 + (byte) $28
Constant right-side identified [8] (byte*~) main::$17 ← (const byte*) main::screen#0 + (byte) $a0
Constant right-side identified [9] (byte*~) main::$19 ← (const byte*) main::screen#0 + (byte) $c8
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) main::$11 = main::screen#0+$28
Constant (const byte*) main::$14 = main::screen#0+$a0
Constant (const byte*) main::$16 = main::screen#0+$c8
Constant (const byte*) main::$14 = main::screen#0+$28
Constant (const byte*) main::$17 = main::screen#0+$a0
Constant (const byte*) main::$19 = main::screen#0+$c8
Successful SSA optimization Pass2ConstantIdentification
Inlining constant with var siblings (const byte) main::i#0
Inlining constant with var siblings (const byte) main::j#0
Constant inlined main::$16 = (const byte*) main::screen#0+(byte) $c8
Constant inlined main::$17 = (const byte*) main::screen#0+(byte) $a0
Constant inlined main::$19 = (const byte*) main::screen#0+(byte) $c8
Constant inlined main::$5 = (byte*) 53280
Constant inlined main::i#0 = (byte) 0
Constant inlined main::$14 = (const byte*) main::screen#0+(byte) $a0
Constant inlined main::$14 = (const byte*) main::screen#0+(byte) $28
Constant inlined main::j#0 = (byte) 0
Constant inlined main::$8 = (byte*)(number) $d000+(number) $21
Constant inlined main::$11 = (const byte*) main::screen#0+(byte) $28
Constant inlined main::$9 = (byte*)(number) $d000+(number) $21
Successful SSA optimization Pass2ConstantInlining
Consolidated array index constant in *(main::screen#0+$79)
Consolidated array index constant in *(main::screen#0+$51)

View File

@ -231,11 +231,11 @@ main: {
// Initialize buckets containing indices of chars on the screen with specific distances to the center.
// init_buckets(byte* zeropage($1c) screen)
init_buckets: {
.label _5 = 5
.label _9 = $24
.label _10 = $20
.label _12 = $22
.label _13 = $24
.label _6 = 5
.label _10 = $24
.label _11 = $20
.label _15 = $22
.label _16 = $24
.label screen = $1c
.label dist = 8
.label i1 = $a
@ -245,9 +245,9 @@ init_buckets: {
.label dist_3 = 2
.label i4 = $1a
.label dist_5 = 2
.label _15 = 5
.label _16 = $22
.label _17 = $24
.label _18 = 5
.label _19 = $22
.label _20 = $24
.label dist_8 = 2
ldy #0
// Init bucket sizes to 0
@ -294,10 +294,10 @@ init_buckets: {
lda.z BUCKET_SIZES
clc
adc.z i2
sta.z _15
sta.z _18
lda.z BUCKET_SIZES+1
adc.z i2+1
sta.z _15+1
sta.z _18+1
ldy #0
lda (malloc.size),y
asl
@ -308,23 +308,23 @@ init_buckets: {
jsr malloc
lda.z i2
asl
sta.z _12
sta.z _15
lda.z i2+1
rol
sta.z _12+1
lda.z _16
sta.z _15+1
lda.z _19
clc
adc.z BUCKETS
sta.z _16
lda.z _16+1
sta.z _19
lda.z _19+1
adc.z BUCKETS+1
sta.z _16+1
sta.z _19+1
ldy #0
lda.z _5
sta (_16),y
lda.z _6
sta (_19),y
iny
lda.z _5+1
sta (_16),y
lda.z _6+1
sta (_19),y
inc.z i2
bne !+
inc.z i2+1
@ -354,18 +354,18 @@ init_buckets: {
ldy #0
lda (dist_5),y
sta.z distance
sta.z _9
sta.z _10
tya
sta.z _9+1
asl.z _13
rol.z _13+1
lda.z _17
sta.z _10+1
asl.z _16
rol.z _16+1
lda.z _20
clc
adc.z BUCKETS
sta.z _17
lda.z _17+1
sta.z _20
lda.z _20+1
adc.z BUCKETS+1
sta.z _17+1
sta.z _20+1
lda (bucket),y
pha
iny
@ -376,18 +376,18 @@ init_buckets: {
lda.z dist_5
sec
sbc.z screen
sta.z _10
sta.z _11
lda.z dist_5+1
sbc.z screen+1
sta.z _10+1
sta.z _11+1
ldy.z distance
lda (BUCKET_IDX),y
asl
tay
lda.z _10
lda.z _11
sta (bucket),y
iny
lda.z _10+1
lda.z _11+1
sta (bucket),y
ldy.z distance
lda (BUCKET_IDX),y

View File

@ -54,8 +54,8 @@ main::@2: scope:[main] from main::@1 main::@2
to:main::@3
main::@3: scope:[main] from main::@2
[25] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0)
[26] (byte~) main::$21 ← (byte) main::bucket_idx#6 << (byte) 1
[27] (word[]) main::bucket#0 ← *((word*[])(void*) BUCKETS#0 + (byte~) main::$21)
[26] (byte~) main::$26 ← (byte) main::bucket_idx#6 << (byte) 1
[27] (word[]) main::bucket#0 ← *((word*[])(void*) BUCKETS#0 + (byte~) main::$26)
[28] (byte) main::bucket_size#0 ← *((byte[])(void*) BUCKET_SIZES#0 + (byte) main::bucket_idx#6)
[29] if((byte) main::bucket_size#0<=(byte) 0) goto main::@4
to:main::@5
@ -87,8 +87,8 @@ main::@12: scope:[main] from main::@4
[40] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0)
to:main::@1
main::@6: scope:[main] from main::@5
[41] (byte~) main::$22 ← (byte) main::i#2 << (byte) 1
[42] (word) main::offset#0 ← *((word[]) main::bucket#0 + (byte~) main::$22)
[41] (byte~) main::$27 ← (byte) main::i#2 << (byte) 1
[42] (word) main::offset#0 ← *((word[]) main::bucket#0 + (byte~) main::$27)
[43] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL#0 + (word) main::offset#0
[44] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR#0) goto main::@18
to:main::@9
@ -133,15 +133,15 @@ init_buckets::@3: scope:[init_buckets] from init_buckets::@2 init_buckets::@3
to:init_buckets::@4
init_buckets::@4: scope:[init_buckets] from init_buckets::@3 init_buckets::@8
[64] (word) init_buckets::i2#2 ← phi( init_buckets::@8/(word) init_buckets::i2#1 init_buckets::@3/(word) 0 )
[65] (byte*~) init_buckets::$15 ← (byte[])(void*) BUCKET_SIZES#0 + (word) init_buckets::i2#2
[66] (word) malloc::size#6 ← *((byte*~) init_buckets::$15) << (byte) 1
[65] (byte*~) init_buckets::$18 ← (byte[])(void*) BUCKET_SIZES#0 + (word) init_buckets::i2#2
[66] (word) malloc::size#6 ← *((byte*~) init_buckets::$18) << (byte) 1
[67] call malloc
to:init_buckets::@8
init_buckets::@8: scope:[init_buckets] from init_buckets::@4
[68] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0
[69] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1
[70] (word**~) init_buckets::$16 ← (word*[])(void*) BUCKETS#0 + (word~) init_buckets::$12
[71] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$5
[68] (void*~) init_buckets::$6 ← (void*)(byte*) malloc::mem#0
[69] (word~) init_buckets::$15 ← (word) init_buckets::i2#2 << (byte) 1
[70] (word**~) init_buckets::$19 ← (word*[])(void*) BUCKETS#0 + (word~) init_buckets::$15
[71] *((word**~) init_buckets::$19) ← (word*)(void*~) init_buckets::$6
[72] (word) init_buckets::i2#1 ← ++ (word) init_buckets::i2#2
[73] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@4
to:init_buckets::@5
@ -158,13 +158,13 @@ init_buckets::@7: scope:[init_buckets] from init_buckets::@6 init_buckets::@7
[79] (word) init_buckets::i4#2 ← phi( init_buckets::@6/(word) 0 init_buckets::@7/(word) init_buckets::i4#1 )
[79] (byte*) init_buckets::dist#5 ← phi( init_buckets::@6/(byte*~) init_buckets::dist#8 init_buckets::@7/(byte*) init_buckets::dist#3 )
[80] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5)
[81] (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0
[82] (word~) init_buckets::$13 ← (word~) init_buckets::$9 << (byte) 1
[83] (word**~) init_buckets::$17 ← (word*[])(void*) BUCKETS#0 + (word~) init_buckets::$13
[84] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17)
[85] (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#0
[86] (byte~) init_buckets::$14 ← *((byte[])(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1
[87] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10
[81] (word~) init_buckets::$10 ← (word)(byte) init_buckets::distance#0
[82] (word~) init_buckets::$16 ← (word~) init_buckets::$10 << (byte) 1
[83] (word**~) init_buckets::$20 ← (word*[])(void*) BUCKETS#0 + (word~) init_buckets::$16
[84] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$20)
[85] (word~) init_buckets::$11 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#0
[86] (byte~) init_buckets::$17 ← *((byte[])(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1
[87] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$17) ← (word~) init_buckets::$11
[88] *((byte[])(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte[])(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0)
[89] (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5
[90] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2

File diff suppressed because it is too large Load Diff

View File

@ -208,15 +208,15 @@
(signed word) init_angle_screen::yw
(word) init_angle_screen::yw#0 yw zp ZP_WORD:36 50.5
(void()) init_buckets((byte*) init_buckets::screen)
(word~) init_buckets::$10 $10 zp ZP_WORD:32 11.0
(word~) init_buckets::$12 $12 zp ZP_WORD:34 22.0
(word~) init_buckets::$13 $13 zp ZP_WORD:36 22.0
(byte~) init_buckets::$14 reg byte a 22.0
(byte*~) init_buckets::$15 $15 zp ZP_WORD:5 22.0
(word**~) init_buckets::$16 $16 zp ZP_WORD:34 22.0
(word**~) init_buckets::$17 $17 zp ZP_WORD:36 22.0
(void*~) init_buckets::$5 $5 zp ZP_WORD:5 3.6666666666666665
(word~) init_buckets::$9 $9 zp ZP_WORD:36 22.0
(word~) init_buckets::$10 $10 zp ZP_WORD:36 22.0
(word~) init_buckets::$11 $11 zp ZP_WORD:32 11.0
(word~) init_buckets::$15 $15 zp ZP_WORD:34 22.0
(word~) init_buckets::$16 $16 zp ZP_WORD:36 22.0
(byte~) init_buckets::$17 reg byte a 22.0
(byte*~) init_buckets::$18 $18 zp ZP_WORD:5 22.0
(word**~) init_buckets::$19 $19 zp ZP_WORD:34 22.0
(word**~) init_buckets::$20 $20 zp ZP_WORD:36 22.0
(void*~) init_buckets::$6 $6 zp ZP_WORD:5 3.6666666666666665
(label) init_buckets::@1
(label) init_buckets::@2
(label) init_buckets::@3
@ -325,8 +325,8 @@
(word*) init_squares::squares#1 squares zp ZP_WORD:26 3.6666666666666665
(word*) init_squares::squares#2 squares zp ZP_WORD:26 17.5
(void()) main()
(byte~) main::$21 reg byte a 22.0
(byte~) main::$22 reg byte a 202.0
(byte~) main::$26 reg byte a 22.0
(byte~) main::$27 reg byte a 202.0
(label) main::@1
(label) main::@10
(label) main::@11
@ -411,7 +411,7 @@ reg byte y [ init_buckets::i#2 init_buckets::i#1 ]
reg byte y [ init_buckets::i3#2 init_buckets::i3#1 ]
zp ZP_WORD:2 [ heap_head#18 heap_head#1 init_buckets::dist#5 init_buckets::dist#8 init_buckets::dist#3 ]
zp ZP_BYTE:4 [ init_angle_screen::x#5 init_angle_screen::x#1 main::min_angle#2 main::min_angle#5 main::min_angle#1 ]
zp ZP_WORD:5 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 malloc::size#7 malloc::size#6 init_buckets::$15 malloc::mem#0 init_buckets::$5 SQUARES#1 ]
zp ZP_WORD:5 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 malloc::size#7 malloc::size#6 init_buckets::$18 malloc::mem#0 init_buckets::$6 SQUARES#1 ]
reg byte x [ atan2_16::i#2 atan2_16::i#1 ]
reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
zp ZP_BYTE:7 [ init_dist_screen::y#10 init_dist_screen::y#1 init_angle_screen::xb#5 init_angle_screen::xb#1 ]
@ -428,13 +428,13 @@ zp ZP_WORD:16 [ SCREEN_ANGLE#0 ]
zp ZP_WORD:18 [ BUCKET_SIZES#0 ]
zp ZP_WORD:20 [ BUCKETS#0 ]
zp ZP_WORD:22 [ BUCKET_IDX#0 ]
reg byte a [ main::$21 ]
reg byte a [ main::$26 ]
zp ZP_WORD:24 [ main::bucket#0 init_squares::sqr#2 init_squares::sqr#1 init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 init_buckets::i2#2 init_buckets::i2#1 ]
reg byte a [ main::$22 ]
reg byte a [ main::$27 ]
zp ZP_WORD:26 [ main::fill#0 init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 init_buckets::i4#2 init_buckets::i4#1 ]
zp ZP_WORD:28 [ main::angle#0 SCREEN_DIST#0 init_buckets::screen#0 ]
zp ZP_BYTE:30 [ init_buckets::distance#0 init_dist_screen::xb#10 init_dist_screen::xb#1 init_angle_screen::y#5 init_angle_screen::y#1 main::bucket_idx#6 main::bucket_idx#1 ]
reg byte a [ init_buckets::$14 ]
reg byte a [ init_buckets::$17 ]
reg byte a [ init_angle_screen::$3 ]
reg byte a [ init_angle_screen::$4 ]
reg byte a [ init_angle_screen::$7 ]
@ -445,15 +445,15 @@ reg byte a [ init_angle_screen::$15 ]
reg byte a [ atan2_16::$24 ]
reg byte a [ atan2_16::$23 ]
reg byte a [ init_dist_screen::y2#0 ]
zp ZP_WORD:32 [ sqr::return#2 init_dist_screen::yds#0 init_buckets::$10 ]
zp ZP_WORD:32 [ sqr::return#2 init_dist_screen::yds#0 init_buckets::$11 ]
reg byte a [ init_dist_screen::x2#0 ]
zp ZP_WORD:34 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 init_angle_screen::xw#0 atan2_16::x#0 init_buckets::$12 init_buckets::$16 ]
zp ZP_WORD:34 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 init_angle_screen::xw#0 atan2_16::x#0 init_buckets::$15 init_buckets::$19 ]
reg byte a [ sqrt::return#2 ]
reg byte a [ init_dist_screen::d#0 ]
reg byte a [ sqrt::return#0 ]
reg byte a [ bsearch16u::$6 ]
reg byte a [ bsearch16u::$16 ]
zp ZP_WORD:36 [ bsearch16u::result#0 init_angle_screen::yw#0 atan2_16::y#0 init_buckets::$9 init_buckets::$13 init_buckets::$17 init_buckets::bucket#0 ]
zp ZP_WORD:36 [ bsearch16u::result#0 init_angle_screen::yw#0 atan2_16::y#0 init_buckets::$10 init_buckets::$16 init_buckets::$20 init_buckets::bucket#0 ]
reg byte a [ sqr::$0 ]
reg byte a [ init_squares::$3 ]
reg byte a [ init_squares::$4 ]

View File

@ -14,7 +14,7 @@ main: {
.label s = 4
.label i = 6
.label i_12 = 8
.label _18 = $c
.label _19 = $c
.label i_17 = 8
jsr memset
lda #<sieve+2
@ -81,12 +81,12 @@ main: {
lda.z i
clc
adc #<sieve
sta.z _18
sta.z _19
lda.z i+1
adc #>sieve
sta.z _18+1
sta.z _19+1
ldy #0
lda (_18),y
lda (_19),y
cmp #0
bne b9
jsr print_word

View File

@ -35,8 +35,8 @@ main::@1: scope:[main] from main::@3
main::@8: scope:[main] from main::@1 main::@7
[15] (byte*) print_char_cursor#46 ← phi( main::@7/(byte*) print_char_cursor#27 main::@1/(byte*) 1024 )
[15] (word) main::i#22 ← phi( main::@7/(word) main::i#10 main::@1/(byte) 2 )
[16] (byte*~) main::$18 ← (const byte*) sieve#0 + (word) main::i#22
[17] if((byte) 0!=*((byte*~) main::$18)) goto main::@9
[16] (byte*~) main::$19 ← (const byte*) sieve#0 + (word) main::i#22
[17] if((byte) 0!=*((byte*~) main::$19)) goto main::@9
to:main::@10
main::@10: scope:[main] from main::@8
[18] (word) print_word::w#0 ← (word) main::i#22

View File

@ -227,8 +227,8 @@ main::@2: scope:[main] from main::@1
(byte*) print_char_cursor#41 ← phi( main::@1/(byte*) print_char_cursor#37 )
(word) main::i#12 ← phi( main::@1/(word) main::i#4 )
(byte*) main::sieve_i#2 ← phi( main::@1/(byte*) main::sieve_i#4 )
(bool~) main::$16 ← (number) 0 != *((byte*) main::sieve_i#2)
(bool~) main::$3 ← ! (bool~) main::$16
(bool~) main::$17 ← (number) 0 != *((byte*) main::sieve_i#2)
(bool~) main::$3 ← ! (bool~) main::$17
(bool~) main::$4 ← ! (bool~) main::$3
if((bool~) main::$4) goto main::@4
to:main::@13
@ -280,8 +280,8 @@ main::@15: scope:[main] from main::@18 main::@3
main::@16: scope:[main] from main::@15
(byte*) print_char_cursor#30 ← phi( main::@15/(byte*) print_char_cursor#31 )
(word) main::i#9 ← phi( main::@15/(word) main::i#8 )
(bool~) main::$17 ← (number) 0 != *((byte*) sieve#0 + (word) main::i#9)
(bool~) main::$9 ← ! (bool~) main::$17
(bool~) main::$18 ← (number) 0 != *((byte*) sieve#0 + (word) main::i#9)
(bool~) main::$9 ← ! (bool~) main::$18
(bool~) main::$10 ← ! (bool~) main::$9
if((bool~) main::$10) goto main::@18
to:main::@21
@ -314,8 +314,8 @@ main::@23: scope:[main] from main::@15 main::@24
to:main::@return
main::@24: scope:[main] from main::@23
(byte*) print_char_cursor#32 ← phi( main::@23/(byte*) print_char_cursor#28 )
(byte*~) main::$15 ← (byte*) SCREEN#0 + (number) $3e7
*((byte*~) main::$15) ← ++ *((byte*~) main::$15)
(byte*~) main::$16 ← (byte*) SCREEN#0 + (number) $3e7
*((byte*~) main::$16) ← ++ *((byte*~) main::$16)
to:main::@23
main::@return: scope:[main] from main::@23
(byte*) print_char_cursor#23 ← phi( main::@23/(byte*) print_char_cursor#28 )
@ -354,9 +354,9 @@ SYMBOL TABLE SSA
(void()) main()
(byte*~) main::$1
(bool~) main::$10
(byte*~) main::$15
(bool~) main::$16
(byte*~) main::$16
(bool~) main::$17
(bool~) main::$18
(bool~) main::$2
(bool~) main::$3
(bool~) main::$4
@ -551,14 +551,14 @@ Adding number conversion cast (unumber) $4000 in (word) COUNT#0 ← (number) $40
Adding number conversion cast (unumber) $80 in (byte) SQRT_COUNT#0 ← (number) $80
Adding number conversion cast (unumber) 0 in (byte) memset::c#0 ← (number) 0
Adding number conversion cast (unumber) 2 in (word) main::i#0 ← (number) 2
Adding number conversion cast (unumber) 0 in (bool~) main::$16 ← (number) 0 != *((byte*) main::sieve_i#2)
Adding number conversion cast (unumber) 0 in (bool~) main::$17 ← (number) 0 != *((byte*) main::sieve_i#2)
Adding number conversion cast (unumber) 2 in (word) main::i#1 ← (number) 2
Adding number conversion cast (unumber) 2 in (number~) main::$5 ← (word) main::i#6 * (number) 2
Adding number conversion cast (unumber) main::$5 in (number~) main::$5 ← (word) main::i#6 * (unumber)(number) 2
Adding number conversion cast (unumber) 1 in *((byte*) main::s#2) ← (number) 1
Adding number conversion cast (unumber) $4c7 in (bool~) main::$8 ← (word) main::i#8 < (number) $4c7
Adding number conversion cast (unumber) 0 in (bool~) main::$17 ← (number) 0 != *((byte*) sieve#0 + (word) main::i#9)
Adding number conversion cast (unumber) $3e7 in (byte*~) main::$15 ← (byte*) SCREEN#0 + (number) $3e7
Adding number conversion cast (unumber) 0 in (bool~) main::$18 ← (number) 0 != *((byte*) sieve#0 + (word) main::i#9)
Adding number conversion cast (unumber) $3e7 in (byte*~) main::$16 ← (byte*) SCREEN#0 + (number) $3e7
Successful SSA optimization PassNAddNumberTypeConversions
Inlining cast (byte*~) memset::$2 ← (byte*)(void*) memset::str#2
Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#2
@ -608,9 +608,9 @@ Successful SSA optimization PassNFinalizeNumberTypeConversions
Inferred type updated to byte in (unumber~) print_byte::$2 ← (byte) print_byte::b#3 & (byte) $f
Inferred type updated to word in (unumber~) main::$5 ← (word) main::i#6 * (byte) 2
Inversing boolean not [2] (bool~) memset::$1 ← (word) memset::num#1 <= (byte) 0 from [1] (bool~) memset::$0 ← (word) memset::num#1 > (byte) 0
Inversing boolean not [79] (bool~) main::$3 ← (byte) 0 == *((byte*) main::sieve_i#2) from [78] (bool~) main::$16 ← (byte) 0 != *((byte*) main::sieve_i#2)
Inversing boolean not [79] (bool~) main::$3 ← (byte) 0 == *((byte*) main::sieve_i#2) from [78] (bool~) main::$17 ← (byte) 0 != *((byte*) main::sieve_i#2)
Inversing boolean not [80] (bool~) main::$4 ← (byte) 0 != *((byte*) main::sieve_i#2) from [79] (bool~) main::$3 ← (byte) 0 == *((byte*) main::sieve_i#2)
Inversing boolean not [104] (bool~) main::$9 ← (byte) 0 == *((byte*) sieve#0 + (word) main::i#9) from [103] (bool~) main::$17 ← (byte) 0 != *((byte*) sieve#0 + (word) main::i#9)
Inversing boolean not [104] (bool~) main::$9 ← (byte) 0 == *((byte*) sieve#0 + (word) main::i#9) from [103] (bool~) main::$18 ← (byte) 0 != *((byte*) sieve#0 + (word) main::i#9)
Inversing boolean not [105] (bool~) main::$10 ← (byte) 0 != *((byte*) sieve#0 + (word) main::i#9) from [104] (bool~) main::$9 ← (byte) 0 == *((byte*) sieve#0 + (word) main::i#9)
Successful SSA optimization Pass2UnaryNotSimplification
Alias (void*) memset::return#0 = (void*) memset::str#1 (void*) memset::return#3 (void*) memset::return#1
@ -743,11 +743,11 @@ Identical Phi Values (word) main::i#16 (word) main::i#17
Identical Phi Values (byte*) main::sieve_i#9 (byte*) main::sieve_i#11
Successful SSA optimization Pass2IdenticalPhiElimination
Constant right-side identified [28] (byte*) main::sieve_i#0 ← (const byte*) sieve#0 + (const word) main::i#0
Constant right-side identified [60] (byte*~) main::$15 ← (const byte*) SCREEN#0 + (word) $3e7
Constant right-side identified [60] (byte*~) main::$16 ← (const byte*) SCREEN#0 + (word) $3e7
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const void*) memset::str#0 = (void*)sieve#0
Constant (const byte*) main::sieve_i#0 = sieve#0+main::i#0
Constant (const byte*) main::$15 = SCREEN#0+$3e7
Constant (const byte*) main::$16 = SCREEN#0+$3e7
Successful SSA optimization Pass2ConstantIdentification
Constant value identified (byte*)memset::str#0 in [0] (byte*~) memset::$2 ← (byte*)(const void*) memset::str#0
Constant value identified (byte*)memset::str#0 in [2] (byte*) memset::dst#0 ← (byte*)(const void*) memset::str#0
@ -780,10 +780,10 @@ Inlining constant with var siblings (const byte*) print_char_cursor#0
Constant inlined print_char::ch#2 = (byte) ' '
Constant inlined print_char_cursor#0 = (byte*) 1024
Constant inlined memset::$2 = (byte*)(const void*) memset::str#0
Constant inlined main::$16 = (const byte*) SCREEN#0+(word) $3e7
Constant inlined main::i#0 = (byte) 2
Constant inlined memset::dst#0 = (byte*)(const void*) memset::str#0
Constant inlined memset::num#0 = (const word) COUNT#0
Constant inlined main::$15 = (const byte*) SCREEN#0+(word) $3e7
Constant inlined main::i#1 = (byte) 2
Constant inlined $1 = (const byte[]) print_hextab#0
Constant inlined main::sieve_i#0 = (const byte*) sieve#0+(byte) 2
@ -916,8 +916,8 @@ main::@1: scope:[main] from main::@3
main::@8: scope:[main] from main::@1 main::@7
[15] (byte*) print_char_cursor#46 ← phi( main::@7/(byte*) print_char_cursor#27 main::@1/(byte*) 1024 )
[15] (word) main::i#22 ← phi( main::@7/(word) main::i#10 main::@1/(byte) 2 )
[16] (byte*~) main::$18 ← (const byte*) sieve#0 + (word) main::i#22
[17] if((byte) 0!=*((byte*~) main::$18)) goto main::@9
[16] (byte*~) main::$19 ← (const byte*) sieve#0 + (word) main::i#22
[17] if((byte) 0!=*((byte*~) main::$19)) goto main::@9
to:main::@10
main::@10: scope:[main] from main::@8
[18] (word) print_word::w#0 ← (word) main::i#22
@ -998,7 +998,7 @@ VARIABLE REGISTER WEIGHTS
(byte*) SCREEN
(byte) SQRT_COUNT
(void()) main()
(byte*~) main::$18 22.0
(byte*~) main::$19 22.0
(word) main::i
(word) main::i#10 16.5
(word) main::i#12 11.0
@ -1060,7 +1060,7 @@ Initial phi equivalence classes
[ print_char_cursor#19 print_char_cursor#46 print_char_cursor#27 print_char_cursor#20 print_char_cursor#26 ]
[ print_byte::b#2 print_byte::b#0 print_byte::b#1 ]
[ memset::dst#4 memset::dst#1 ]
Added variable main::$18 to zero page equivalence class [ main::$18 ]
Added variable main::$19 to zero page equivalence class [ main::$19 ]
Added variable print_word::w#0 to zero page equivalence class [ print_word::w#0 ]
Added variable print_byte::$0 to zero page equivalence class [ print_byte::$0 ]
Added variable print_byte::$2 to zero page equivalence class [ print_byte::$2 ]
@ -1074,7 +1074,7 @@ Complete equivalence classes
[ print_char_cursor#19 print_char_cursor#46 print_char_cursor#27 print_char_cursor#20 print_char_cursor#26 ]
[ print_byte::b#2 print_byte::b#0 print_byte::b#1 ]
[ memset::dst#4 memset::dst#1 ]
[ main::$18 ]
[ main::$19 ]
[ print_word::w#0 ]
[ print_byte::$0 ]
[ print_byte::$2 ]
@ -1087,7 +1087,7 @@ Allocated zp ZP_BYTE:12 [ print_char::ch#3 print_char::ch#0 print_char::ch#1 ]
Allocated zp ZP_WORD:13 [ print_char_cursor#19 print_char_cursor#46 print_char_cursor#27 print_char_cursor#20 print_char_cursor#26 ]
Allocated zp ZP_BYTE:15 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ]
Allocated zp ZP_WORD:16 [ memset::dst#4 memset::dst#1 ]
Allocated zp ZP_WORD:18 [ main::$18 ]
Allocated zp ZP_WORD:18 [ main::$19 ]
Allocated zp ZP_WORD:20 [ print_word::w#0 ]
Allocated zp ZP_BYTE:22 [ print_byte::$0 ]
Allocated zp ZP_BYTE:23 [ print_byte::$2 ]
@ -1130,7 +1130,7 @@ main: {
.label s = 8
.label i = $a
.label i_12 = 2
.label _18 = $12
.label _19 = $12
.label i_17 = 2
// [5] call memset
// [46] phi from main to memset [phi:main->memset]
@ -1241,17 +1241,17 @@ main: {
jmp b8
// main::@8
b8:
// [16] (byte*~) main::$18 ← (const byte*) sieve#0 + (word) main::i#22 -- pbuz1=pbuc1_plus_vwuz2
// [16] (byte*~) main::$19 ← (const byte*) sieve#0 + (word) main::i#22 -- pbuz1=pbuc1_plus_vwuz2
lda.z i
clc
adc #<sieve
sta.z _18
sta.z _19
lda.z i+1
adc #>sieve
sta.z _18+1
// [17] if((byte) 0!=*((byte*~) main::$18)) goto main::@9 -- vbuc1_neq__deref_pbuz1_then_la1
sta.z _19+1
// [17] if((byte) 0!=*((byte*~) main::$19)) goto main::@9 -- vbuc1_neq__deref_pbuz1_then_la1
ldy #0
lda (_18),y
lda (_19),y
cmp #0
bne b9_from_b8
jmp b10
@ -1485,8 +1485,8 @@ Statement [8] (word) main::j#0 ← (word) main::i#17 << (byte) 1 [ main::i#17 ma
Statement [9] (byte*) main::s#0 ← (const byte*) sieve#0 + (word) main::j#0 [ main::i#17 main::sieve_i#11 main::j#0 main::s#0 ] ( main:2 [ main::i#17 main::sieve_i#11 main::j#0 main::s#0 ] ) always clobbers reg byte a
Statement [11] if((word) main::j#2<(const word) COUNT#0) goto main::@5 [ main::i#17 main::sieve_i#11 main::j#2 main::s#2 ] ( main:2 [ main::i#17 main::sieve_i#11 main::j#2 main::s#2 ] ) always clobbers reg byte a
Statement [14] if((word) main::i#12<(const byte) SQRT_COUNT#0) goto main::@2 [ main::i#12 main::sieve_i#1 ] ( main:2 [ main::i#12 main::sieve_i#1 ] ) always clobbers reg byte a
Statement [16] (byte*~) main::$18 ← (const byte*) sieve#0 + (word) main::i#22 [ main::i#22 print_char_cursor#46 main::$18 ] ( main:2 [ main::i#22 print_char_cursor#46 main::$18 ] ) always clobbers reg byte a
Statement [17] if((byte) 0!=*((byte*~) main::$18)) goto main::@9 [ main::i#22 print_char_cursor#46 ] ( main:2 [ main::i#22 print_char_cursor#46 ] ) always clobbers reg byte a reg byte y
Statement [16] (byte*~) main::$19 ← (const byte*) sieve#0 + (word) main::i#22 [ main::i#22 print_char_cursor#46 main::$19 ] ( main:2 [ main::i#22 print_char_cursor#46 main::$19 ] ) always clobbers reg byte a
Statement [17] if((byte) 0!=*((byte*~) main::$19)) goto main::@9 [ main::i#22 print_char_cursor#46 ] ( main:2 [ main::i#22 print_char_cursor#46 ] ) always clobbers reg byte a reg byte y
Statement [18] (word) print_word::w#0 ← (word) main::i#22 [ main::i#22 print_char_cursor#46 print_word::w#0 ] ( main:2 [ main::i#22 print_char_cursor#46 print_word::w#0 ] ) always clobbers reg byte a
Statement [24] if((word) main::i#10<(word) $4c7) goto main::@8 [ main::i#10 print_char_cursor#27 ] ( main:2 [ main::i#10 print_char_cursor#27 ] ) always clobbers reg byte a
Statement [26] *((byte*) main::s#2) ← (byte) 1 [ main::i#17 main::sieve_i#11 main::j#2 main::s#2 ] ( main:2 [ main::i#17 main::sieve_i#11 main::j#2 main::s#2 ] ) always clobbers reg byte a reg byte y
@ -1506,8 +1506,8 @@ Statement [8] (word) main::j#0 ← (word) main::i#17 << (byte) 1 [ main::i#17 ma
Statement [9] (byte*) main::s#0 ← (const byte*) sieve#0 + (word) main::j#0 [ main::i#17 main::sieve_i#11 main::j#0 main::s#0 ] ( main:2 [ main::i#17 main::sieve_i#11 main::j#0 main::s#0 ] ) always clobbers reg byte a
Statement [11] if((word) main::j#2<(const word) COUNT#0) goto main::@5 [ main::i#17 main::sieve_i#11 main::j#2 main::s#2 ] ( main:2 [ main::i#17 main::sieve_i#11 main::j#2 main::s#2 ] ) always clobbers reg byte a
Statement [14] if((word) main::i#12<(const byte) SQRT_COUNT#0) goto main::@2 [ main::i#12 main::sieve_i#1 ] ( main:2 [ main::i#12 main::sieve_i#1 ] ) always clobbers reg byte a
Statement [16] (byte*~) main::$18 ← (const byte*) sieve#0 + (word) main::i#22 [ main::i#22 print_char_cursor#46 main::$18 ] ( main:2 [ main::i#22 print_char_cursor#46 main::$18 ] ) always clobbers reg byte a
Statement [17] if((byte) 0!=*((byte*~) main::$18)) goto main::@9 [ main::i#22 print_char_cursor#46 ] ( main:2 [ main::i#22 print_char_cursor#46 ] ) always clobbers reg byte a reg byte y
Statement [16] (byte*~) main::$19 ← (const byte*) sieve#0 + (word) main::i#22 [ main::i#22 print_char_cursor#46 main::$19 ] ( main:2 [ main::i#22 print_char_cursor#46 main::$19 ] ) always clobbers reg byte a
Statement [17] if((byte) 0!=*((byte*~) main::$19)) goto main::@9 [ main::i#22 print_char_cursor#46 ] ( main:2 [ main::i#22 print_char_cursor#46 ] ) always clobbers reg byte a reg byte y
Statement [18] (word) print_word::w#0 ← (word) main::i#22 [ main::i#22 print_char_cursor#46 print_word::w#0 ] ( main:2 [ main::i#22 print_char_cursor#46 print_word::w#0 ] ) always clobbers reg byte a
Statement [24] if((word) main::i#10<(word) $4c7) goto main::@8 [ main::i#10 print_char_cursor#27 ] ( main:2 [ main::i#10 print_char_cursor#27 ] ) always clobbers reg byte a
Statement [26] *((byte*) main::s#2) ← (byte) 1 [ main::i#17 main::sieve_i#11 main::j#2 main::s#2 ] ( main:2 [ main::i#17 main::sieve_i#11 main::j#2 main::s#2 ] ) always clobbers reg byte a reg byte y
@ -1529,13 +1529,13 @@ Potential registers zp ZP_BYTE:12 [ print_char::ch#3 print_char::ch#0 print_char
Potential registers zp ZP_WORD:13 [ print_char_cursor#19 print_char_cursor#46 print_char_cursor#27 print_char_cursor#20 print_char_cursor#26 ] : zp ZP_WORD:13 ,
Potential registers zp ZP_BYTE:15 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] : zp ZP_BYTE:15 , reg byte x ,
Potential registers zp ZP_WORD:16 [ memset::dst#4 memset::dst#1 ] : zp ZP_WORD:16 ,
Potential registers zp ZP_WORD:18 [ main::$18 ] : zp ZP_WORD:18 ,
Potential registers zp ZP_WORD:18 [ main::$19 ] : zp ZP_WORD:18 ,
Potential registers zp ZP_WORD:20 [ print_word::w#0 ] : zp ZP_WORD:20 ,
Potential registers zp ZP_BYTE:22 [ print_byte::$0 ] : zp ZP_BYTE:22 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:23 [ print_byte::$2 ] : zp ZP_BYTE:23 , reg byte a , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [main] 297: zp ZP_WORD:6 [ main::j#2 main::j#0 main::j#1 ] 227.67: zp ZP_WORD:8 [ main::s#2 main::s#0 main::s#1 ] 37.11: zp ZP_WORD:2 [ main::i#17 main::i#12 ] 22: zp ZP_WORD:10 [ main::i#22 main::i#10 ] 22: zp ZP_WORD:18 [ main::$18 ] 14.3: zp ZP_WORD:4 [ main::sieve_i#11 main::sieve_i#1 ]
Uplift Scope [main] 297: zp ZP_WORD:6 [ main::j#2 main::j#0 main::j#1 ] 227.67: zp ZP_WORD:8 [ main::s#2 main::s#0 main::s#1 ] 37.11: zp ZP_WORD:2 [ main::i#17 main::i#12 ] 22: zp ZP_WORD:10 [ main::i#22 main::i#10 ] 22: zp ZP_WORD:18 [ main::$19 ] 14.3: zp ZP_WORD:4 [ main::sieve_i#11 main::sieve_i#1 ]
Uplift Scope [memset] 33: zp ZP_WORD:16 [ memset::dst#4 memset::dst#1 ]
Uplift Scope [] 29.3: zp ZP_WORD:13 [ print_char_cursor#19 print_char_cursor#46 print_char_cursor#27 print_char_cursor#20 print_char_cursor#26 ]
Uplift Scope [print_byte] 10: zp ZP_BYTE:15 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] 4: zp ZP_BYTE:22 [ print_byte::$0 ] 4: zp ZP_BYTE:23 [ print_byte::$2 ]
@ -1543,7 +1543,7 @@ Uplift Scope [print_char] 14: zp ZP_BYTE:12 [ print_char::ch#3 print_char::ch#0
Uplift Scope [print_word] 5: zp ZP_WORD:20 [ print_word::w#0 ]
Uplift Scope [RADIX]
Uplifting [main] best 10899 combination zp ZP_WORD:6 [ main::j#2 main::j#0 main::j#1 ] zp ZP_WORD:8 [ main::s#2 main::s#0 main::s#1 ] zp ZP_WORD:2 [ main::i#17 main::i#12 ] zp ZP_WORD:10 [ main::i#22 main::i#10 ] zp ZP_WORD:18 [ main::$18 ] zp ZP_WORD:4 [ main::sieve_i#11 main::sieve_i#1 ]
Uplifting [main] best 10899 combination zp ZP_WORD:6 [ main::j#2 main::j#0 main::j#1 ] zp ZP_WORD:8 [ main::s#2 main::s#0 main::s#1 ] zp ZP_WORD:2 [ main::i#17 main::i#12 ] zp ZP_WORD:10 [ main::i#22 main::i#10 ] zp ZP_WORD:18 [ main::$19 ] zp ZP_WORD:4 [ main::sieve_i#11 main::sieve_i#1 ]
Uplifting [memset] best 10899 combination zp ZP_WORD:16 [ memset::dst#4 memset::dst#1 ]
Uplifting [] best 10899 combination zp ZP_WORD:13 [ print_char_cursor#19 print_char_cursor#46 print_char_cursor#27 print_char_cursor#20 print_char_cursor#26 ]
Uplifting [print_byte] best 10885 combination reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ]
@ -1558,7 +1558,7 @@ Allocated (was zp ZP_WORD:8) zp ZP_WORD:4 [ main::s#2 main::s#0 main::s#1 ]
Allocated (was zp ZP_WORD:10) zp ZP_WORD:6 [ main::i#22 main::i#10 print_word::w#0 ]
Allocated (was zp ZP_WORD:13) zp ZP_WORD:8 [ print_char_cursor#19 print_char_cursor#46 print_char_cursor#27 print_char_cursor#20 print_char_cursor#26 main::i#17 main::i#12 ]
Allocated (was zp ZP_WORD:16) zp ZP_WORD:10 [ memset::dst#4 memset::dst#1 main::sieve_i#11 main::sieve_i#1 ]
Allocated (was zp ZP_WORD:18) zp ZP_WORD:12 [ main::$18 ]
Allocated (was zp ZP_WORD:18) zp ZP_WORD:12 [ main::$19 ]
ASSEMBLER BEFORE OPTIMIZATION
// File Comments
@ -1597,7 +1597,7 @@ main: {
.label s = 4
.label i = 6
.label i_12 = 8
.label _18 = $c
.label _19 = $c
.label i_17 = 8
// [5] call memset
// [46] phi from main to memset [phi:main->memset]
@ -1708,17 +1708,17 @@ main: {
jmp b8
// main::@8
b8:
// [16] (byte*~) main::$18 ← (const byte*) sieve#0 + (word) main::i#22 -- pbuz1=pbuc1_plus_vwuz2
// [16] (byte*~) main::$19 ← (const byte*) sieve#0 + (word) main::i#22 -- pbuz1=pbuc1_plus_vwuz2
lda.z i
clc
adc #<sieve
sta.z _18
sta.z _19
lda.z i+1
adc #>sieve
sta.z _18+1
// [17] if((byte) 0!=*((byte*~) main::$18)) goto main::@9 -- vbuc1_neq__deref_pbuz1_then_la1
sta.z _19+1
// [17] if((byte) 0!=*((byte*~) main::$19)) goto main::@9 -- vbuc1_neq__deref_pbuz1_then_la1
ldy #0
lda (_18),y
lda (_19),y
cmp #0
bne b9_from_b8
jmp b10
@ -2023,7 +2023,7 @@ FINAL SYMBOL TABLE
(byte) SQRT_COUNT
(const byte) SQRT_COUNT#0 SQRT_COUNT = (byte) $80
(void()) main()
(byte*~) main::$18 $18 zp ZP_WORD:12 22.0
(byte*~) main::$19 $19 zp ZP_WORD:12 22.0
(label) main::@1
(label) main::@10
(label) main::@11
@ -2107,7 +2107,7 @@ reg byte a [ print_char::ch#3 print_char::ch#0 print_char::ch#1 ]
zp ZP_WORD:8 [ print_char_cursor#19 print_char_cursor#46 print_char_cursor#27 print_char_cursor#20 print_char_cursor#26 main::i#17 main::i#12 ]
reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ]
zp ZP_WORD:10 [ memset::dst#4 memset::dst#1 main::sieve_i#11 main::sieve_i#1 ]
zp ZP_WORD:12 [ main::$18 ]
zp ZP_WORD:12 [ main::$19 ]
reg byte a [ print_byte::$0 ]
reg byte x [ print_byte::$2 ]
@ -2142,7 +2142,7 @@ main: {
.label s = 4
.label i = 6
.label i_12 = 8
.label _18 = $c
.label _19 = $c
.label i_17 = 8
// memset(sieve, 0, COUNT)
// [5] call memset
@ -2245,17 +2245,17 @@ main: {
// main::@8
b8:
// if (!sieve[i])
// [16] (byte*~) main::$18 ← (const byte*) sieve#0 + (word) main::i#22 -- pbuz1=pbuc1_plus_vwuz2
// [16] (byte*~) main::$19 ← (const byte*) sieve#0 + (word) main::i#22 -- pbuz1=pbuc1_plus_vwuz2
lda.z i
clc
adc #<sieve
sta.z _18
sta.z _19
lda.z i+1
adc #>sieve
sta.z _18+1
// [17] if((byte) 0!=*((byte*~) main::$18)) goto main::@9 -- vbuc1_neq__deref_pbuz1_then_la1
sta.z _19+1
// [17] if((byte) 0!=*((byte*~) main::$19)) goto main::@9 -- vbuc1_neq__deref_pbuz1_then_la1
ldy #0
lda (_18),y
lda (_19),y
cmp #0
bne b9
// main::@10

View File

@ -12,7 +12,7 @@
(byte) SQRT_COUNT
(const byte) SQRT_COUNT#0 SQRT_COUNT = (byte) $80
(void()) main()
(byte*~) main::$18 $18 zp ZP_WORD:12 22.0
(byte*~) main::$19 $19 zp ZP_WORD:12 22.0
(label) main::@1
(label) main::@10
(label) main::@11
@ -96,6 +96,6 @@ reg byte a [ print_char::ch#3 print_char::ch#0 print_char::ch#1 ]
zp ZP_WORD:8 [ print_char_cursor#19 print_char_cursor#46 print_char_cursor#27 print_char_cursor#20 print_char_cursor#26 main::i#17 main::i#12 ]
reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ]
zp ZP_WORD:10 [ memset::dst#4 memset::dst#1 main::sieve_i#11 main::sieve_i#1 ]
zp ZP_WORD:12 [ main::$18 ]
zp ZP_WORD:12 [ main::$19 ]
reg byte a [ print_byte::$0 ]
reg byte x [ print_byte::$2 ]

View File

@ -46,7 +46,7 @@ main: {
.label s = 2
.label i = $b
.label i_12 = $f
.label _38 = $17
.label _39 = $17
.label i_17 = $f
//Show lower case font
lda #toD0181_return
@ -192,12 +192,12 @@ main: {
lda.z i
clc
adc #<sieve
sta.z _38
sta.z _39
lda.z i+1
adc #>sieve
sta.z _38+1
sta.z _39+1
ldy #0
lda (_38),y
lda (_39),y
cmp #0
bne b30
lda.z print_char_cursor_90

View File

@ -103,8 +103,8 @@ main::@27: scope:[main] from main::@26
main::@9: scope:[main] from main::@27 main::@29
[51] (byte*) print_char_cursor#90 ← phi( main::@29/(byte*~) print_char_cursor#104 main::@27/(byte*) print_line_cursor#1 )
[51] (word) main::i#22 ← phi( main::@29/(word) main::i#10 main::@27/(byte) 2 )
[52] (byte*~) main::$38 ← (const byte*) sieve#0 + (word) main::i#22
[53] if((byte) 0!=*((byte*~) main::$38)) goto main::@30
[52] (byte*~) main::$39 ← (const byte*) sieve#0 + (word) main::i#22
[53] if((byte) 0!=*((byte*~) main::$39)) goto main::@30
to:main::@12
main::@12: scope:[main] from main::@9
[54] (word) print_word_decimal::w#2 ← (word) main::i#22

View File

@ -967,8 +967,8 @@ main::@2: scope:[main] from main::@1
(word) rem16u#33 ← phi( main::@1/(word) rem16u#25 )
(word) main::i#12 ← phi( main::@1/(word) main::i#4 )
(byte*) main::sieve_i#2 ← phi( main::@1/(byte*) main::sieve_i#4 )
(bool~) main::$36 ← (number) 0 != *((byte*) main::sieve_i#2)
(bool~) main::$23 ← ! (bool~) main::$36
(bool~) main::$37 ← (number) 0 != *((byte*) main::sieve_i#2)
(bool~) main::$23 ← ! (bool~) main::$37
(bool~) main::$24 ← ! (bool~) main::$23
if((bool~) main::$24) goto main::@4
to:main::@13
@ -1106,8 +1106,8 @@ main::@16: scope:[main] from main::@15
(byte*) print_line_cursor#45 ← phi( main::@15/(byte*) print_line_cursor#41 )
(byte*) print_char_cursor#72 ← phi( main::@15/(byte*) print_char_cursor#71 )
(word) main::i#9 ← phi( main::@15/(word) main::i#8 )
(bool~) main::$37 ← (number) 0 != *((byte*) sieve#0 + (word) main::i#9)
(bool~) main::$29 ← ! (bool~) main::$37
(bool~) main::$38 ← (number) 0 != *((byte*) sieve#0 + (word) main::i#9)
(bool~) main::$29 ← ! (bool~) main::$38
(bool~) main::$30 ← ! (bool~) main::$29
if((bool~) main::$30) goto main::@18
to:main::@21
@ -1165,8 +1165,8 @@ main::@24: scope:[main] from main::@23
(word) rem16u#21 ← phi( main::@23/(word) rem16u#18 )
(byte*) print_char_cursor#73 ← phi( main::@23/(byte*) print_char_cursor#64 )
(byte*) print_line_cursor#31 ← phi( main::@23/(byte*) print_line_cursor#26 )
(byte*~) main::$35 ← (byte*) SCREEN#0 + (number) $3e7
*((byte*~) main::$35) ← ++ *((byte*~) main::$35)
(byte*~) main::$36 ← (byte*) SCREEN#0 + (number) $3e7
*((byte*~) main::$36) ← ++ *((byte*~) main::$36)
to:main::@23
main::@return: scope:[main] from main::@23
(word) rem16u#14 ← phi( main::@23/(word) rem16u#18 )
@ -1417,9 +1417,9 @@ SYMBOL TABLE SSA
(bool~) main::$28
(bool~) main::$29
(bool~) main::$30
(byte*~) main::$35
(bool~) main::$36
(byte*~) main::$36
(bool~) main::$37
(bool~) main::$38
(byte*~) main::$9
(label) main::@1
(label) main::@13
@ -2223,7 +2223,7 @@ Adding number conversion cast (unumber) main::toD0181_$7#0 in (number~) main::to
Adding number conversion cast (unumber) main::toD0181_$8#0 in (number~) main::toD0181_$8#0 ← (unumber~) main::toD0181_$3#0 | (unumber~) main::toD0181_$7#0
Adding number conversion cast (unumber) 0 in (byte) memset::c#1 ← (number) 0
Adding number conversion cast (unumber) 2 in (word) main::i#0 ← (number) 2
Adding number conversion cast (unumber) 0 in (bool~) main::$36 ← (number) 0 != *((byte*) main::sieve_i#2)
Adding number conversion cast (unumber) 0 in (bool~) main::$37 ← (number) 0 != *((byte*) main::sieve_i#2)
Adding number conversion cast (unumber) $64 in (number~) main::$12 ← (dword) CLOCKS_PER_SEC#0 / (number) $64
Adding number conversion cast (unumber) main::$12 in (number~) main::$12 ← (dword) CLOCKS_PER_SEC#0 / (unumber)(number) $64
Adding number conversion cast (unumber) 2 in (word) main::i#1 ← (number) 2
@ -2231,8 +2231,8 @@ Adding number conversion cast (unumber) 2 in (number~) main::$25 ← (word) main
Adding number conversion cast (unumber) main::$25 in (number~) main::$25 ← (word) main::i#6 * (unumber)(number) 2
Adding number conversion cast (unumber) 1 in *((byte*) main::s#2) ← (number) 1
Adding number conversion cast (unumber) $514 in (bool~) main::$28 ← (word) main::i#8 < (number) $514
Adding number conversion cast (unumber) 0 in (bool~) main::$37 ← (number) 0 != *((byte*) sieve#0 + (word) main::i#9)
Adding number conversion cast (unumber) $3e7 in (byte*~) main::$35 ← (byte*) SCREEN#0 + (number) $3e7
Adding number conversion cast (unumber) 0 in (bool~) main::$38 ← (number) 0 != *((byte*) sieve#0 + (word) main::i#9)
Adding number conversion cast (unumber) $3e7 in (byte*~) main::$36 ← (byte*) SCREEN#0 + (number) $3e7
Successful SSA optimization PassNAddNumberTypeConversions
Added casts to value list in (word[]) RADIX_BINARY_VALUES#0 ← (word[]){ (word)(number) $8000, (word)(number) $4000, (word)(number) $2000, (word)(number) $1000, (word)(number) $800, (word)(number) $400, (word)(number) $200, (word)(number) $100, (word)(number) $80, (word)(number) $40, (word)(number) $20, (word)(number) $10, (word)(number) 8, (word)(number) 4, (word)(number) 2 }
Added casts to value list in (word[]) RADIX_OCTAL_VALUES#0 ← (word[]){ (word)(number) $8000, (word)(number) $1000, (word)(number) $200, (word)(number) $40, (word)(number) 8 }
@ -2532,9 +2532,9 @@ Inferred type updated to word in (unumber~) main::$25 ← (word) main::i#6 * (by
Inversing boolean not [2] (bool~) memset::$1 ← (word) memset::num#2 <= (byte) 0 from [1] (bool~) memset::$0 ← (word) memset::num#2 > (byte) 0
Inversing boolean not [63] (bool~) divr16u::$4 ← (byte~) divr16u::$2 == (byte) 0 from [62] (bool~) divr16u::$3 ← (byte~) divr16u::$2 != (byte) 0
Inversing boolean not [71] (bool~) divr16u::$9 ← (word) divr16u::rem#6 < (word) divr16u::divisor#2 from [70] (bool~) divr16u::$8 ← (word) divr16u::rem#6 >= (word) divr16u::divisor#2
Inversing boolean not [432] (bool~) main::$23 ← (byte) 0 == *((byte*) main::sieve_i#2) from [431] (bool~) main::$36 ← (byte) 0 != *((byte*) main::sieve_i#2)
Inversing boolean not [432] (bool~) main::$23 ← (byte) 0 == *((byte*) main::sieve_i#2) from [431] (bool~) main::$37 ← (byte) 0 != *((byte*) main::sieve_i#2)
Inversing boolean not [433] (bool~) main::$24 ← (byte) 0 != *((byte*) main::sieve_i#2) from [432] (bool~) main::$23 ← (byte) 0 == *((byte*) main::sieve_i#2)
Inversing boolean not [494] (bool~) main::$29 ← (byte) 0 == *((byte*) sieve#0 + (word) main::i#9) from [493] (bool~) main::$37 ← (byte) 0 != *((byte*) sieve#0 + (word) main::i#9)
Inversing boolean not [494] (bool~) main::$29 ← (byte) 0 == *((byte*) sieve#0 + (word) main::i#9) from [493] (bool~) main::$38 ← (byte) 0 != *((byte*) sieve#0 + (word) main::i#9)
Inversing boolean not [495] (bool~) main::$30 ← (byte) 0 != *((byte*) sieve#0 + (word) main::i#9) from [494] (bool~) main::$29 ← (byte) 0 == *((byte*) sieve#0 + (word) main::i#9)
Successful SSA optimization Pass2UnaryNotSimplification
Alias (void*) memset::return#0 = (void*) memset::str#2 (void*) memset::return#4 (void*) memset::return#1
@ -3042,7 +3042,7 @@ Constant right-side identified [10] (dword) CLOCKS_PER_SEC#0 ← (const word) CL
Constant right-side identified [61] (byte~) utoa::$5 ← (const byte) utoa::max_digits#1 - (byte) 1
Constant right-side identified [90] (byte~) ultoa::$5 ← (const byte) ultoa::max_digits#1 - (byte) 1
Constant right-side identified [162] (byte*) main::sieve_i#0 ← (const byte*) sieve#0 + (const word) main::i#0
Constant right-side identified [213] (byte*~) main::$35 ← (const byte*) SCREEN#0 + (word) $3e7
Constant right-side identified [213] (byte*~) main::$36 ← (const byte*) SCREEN#0 + (word) $3e7
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const dword) CLOCKS_PER_SEC#0 = CLOCKS_PER_FRAME#0*FRAMES_PER_SEC#0
Constant (const byte) clock_start::$1 = CIA_TIMER_CONTROL_CONTINUOUS#0
@ -3054,7 +3054,7 @@ Constant (const word) main::toD0181_$0#0 = (word)main::toD0181_screen#0
Constant (const word) main::toD0181_$4#0 = (word)main::toD0181_gfx#0
Constant (const void*) memset::str#1 = (void*)sieve#0
Constant (const byte*) main::sieve_i#0 = sieve#0+main::i#0
Constant (const byte*) main::$35 = SCREEN#0+$3e7
Constant (const byte*) main::$36 = SCREEN#0+$3e7
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [219] if((const word) main::i#0<(const byte) SQRT_COUNT#0) goto main::@2
Removing PHI-reference to removed block (main::@15_1) in block main::@17
@ -3283,7 +3283,7 @@ Constant inlined print_str::str#5 = (const string) main::str2
Constant inlined utoa_append::digit#0 = (byte) 0
Constant inlined main::toD0181_screen#0 = (const byte*) SCREEN#0
Constant inlined divr16u::i#0 = (byte) 0
Constant inlined main::$35 = (const byte*) SCREEN#0+(word) $3e7
Constant inlined main::$36 = (const byte*) SCREEN#0+(word) $3e7
Constant inlined divr16u::quotient#0 = (byte) 0
Constant inlined ultoa::buffer#5 = (const byte[$b]) decimal_digits_long#0
Constant inlined ultoa::$5 = (const byte) ultoa::max_digits#1-(byte) 1
@ -3692,8 +3692,8 @@ main::@27: scope:[main] from main::@26
main::@9: scope:[main] from main::@27 main::@29
[51] (byte*) print_char_cursor#90 ← phi( main::@29/(byte*~) print_char_cursor#104 main::@27/(byte*) print_line_cursor#1 )
[51] (word) main::i#22 ← phi( main::@29/(word) main::i#10 main::@27/(byte) 2 )
[52] (byte*~) main::$38 ← (const byte*) sieve#0 + (word) main::i#22
[53] if((byte) 0!=*((byte*~) main::$38)) goto main::@30
[52] (byte*~) main::$39 ← (const byte*) sieve#0 + (word) main::i#22
[53] if((byte) 0!=*((byte*~) main::$39)) goto main::@30
to:main::@12
main::@12: scope:[main] from main::@9
[54] (word) print_word_decimal::w#2 ← (word) main::i#22
@ -4112,7 +4112,7 @@ VARIABLE REGISTER WEIGHTS
(void()) main()
(dword~) main::$10 4.0
(dword~) main::$14 2.0
(byte*~) main::$38 22.0
(byte*~) main::$39 22.0
(dword) main::cyclecount
(dword) main::cyclecount#0 0.5
(word) main::i
@ -4328,7 +4328,7 @@ Added variable div32u16u::return#2 to zero page equivalence class [ div32u16u::r
Added variable main::$14 to zero page equivalence class [ main::$14 ]
Added variable main::sec100s#0 to zero page equivalence class [ main::sec100s#0 ]
Added variable print_dword_decimal::w#0 to zero page equivalence class [ print_dword_decimal::w#0 ]
Added variable main::$38 to zero page equivalence class [ main::$38 ]
Added variable main::$39 to zero page equivalence class [ main::$39 ]
Added variable utoa::$4 to zero page equivalence class [ utoa::$4 ]
Added variable utoa::buffer#3 to zero page equivalence class [ utoa::buffer#3 ]
Added variable utoa::$11 to zero page equivalence class [ utoa::$11 ]
@ -4391,7 +4391,7 @@ Complete equivalence classes
[ main::$14 ]
[ main::sec100s#0 ]
[ print_dword_decimal::w#0 ]
[ main::$38 ]
[ main::$39 ]
[ utoa::$4 ]
[ utoa::buffer#3 ]
[ utoa::$11 ]
@ -4453,7 +4453,7 @@ Allocated zp ZP_DWORD:78 [ div32u16u::return#2 ]
Allocated zp ZP_DWORD:82 [ main::$14 ]
Allocated zp ZP_WORD:86 [ main::sec100s#0 ]
Allocated zp ZP_DWORD:88 [ print_dword_decimal::w#0 ]
Allocated zp ZP_WORD:92 [ main::$38 ]
Allocated zp ZP_WORD:92 [ main::$39 ]
Allocated zp ZP_BYTE:94 [ utoa::$4 ]
Allocated zp ZP_WORD:95 [ utoa::buffer#3 ]
Allocated zp ZP_BYTE:97 [ utoa::$11 ]
@ -4547,7 +4547,7 @@ main: {
.label s = 8
.label i = $a
.label i_12 = 2
.label _38 = $5c
.label _39 = $5c
.label i_17 = 2
// [5] phi from main to main::toD0181 [phi:main->main::toD0181]
toD0181_from_main:
@ -4913,17 +4913,17 @@ main: {
jmp b9
// main::@9
b9:
// [52] (byte*~) main::$38 ← (const byte*) sieve#0 + (word) main::i#22 -- pbuz1=pbuc1_plus_vwuz2
// [52] (byte*~) main::$39 ← (const byte*) sieve#0 + (word) main::i#22 -- pbuz1=pbuc1_plus_vwuz2
lda.z i
clc
adc #<sieve
sta.z _38
sta.z _39
lda.z i+1
adc #>sieve
sta.z _38+1
// [53] if((byte) 0!=*((byte*~) main::$38)) goto main::@30 -- vbuc1_neq__deref_pbuz1_then_la1
sta.z _39+1
// [53] if((byte) 0!=*((byte*~) main::$39)) goto main::@30 -- vbuc1_neq__deref_pbuz1_then_la1
ldy #0
lda (_38),y
lda (_39),y
cmp #0
bne b30
jmp b12
@ -6145,8 +6145,8 @@ Statement [40] (word) main::sec100s#0 ← (word)(dword~) main::$14 [ print_line_
Statement [41] (byte*~) print_char_cursor#95 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 main::cyclecount#0 main::sec100s#0 print_char_cursor#95 ] ( main:2 [ print_line_cursor#1 main::cyclecount#0 main::sec100s#0 print_char_cursor#95 ] ) always clobbers reg byte a
Statement [43] (word) print_word_decimal::w#1 ← (word) main::sec100s#0 [ print_line_cursor#1 main::cyclecount#0 print_word_decimal::w#1 print_char_cursor#2 ] ( main:2 [ print_line_cursor#1 main::cyclecount#0 print_word_decimal::w#1 print_char_cursor#2 ] ) always clobbers reg byte a
Statement [47] (dword) print_dword_decimal::w#0 ← (dword) main::cyclecount#0 [ print_line_cursor#1 print_dword_decimal::w#0 print_char_cursor#2 ] ( main:2 [ print_line_cursor#1 print_dword_decimal::w#0 print_char_cursor#2 ] ) always clobbers reg byte a
Statement [52] (byte*~) main::$38 ← (const byte*) sieve#0 + (word) main::i#22 [ main::i#22 print_char_cursor#90 main::$38 ] ( main:2 [ main::i#22 print_char_cursor#90 main::$38 ] ) always clobbers reg byte a
Statement [53] if((byte) 0!=*((byte*~) main::$38)) goto main::@30 [ main::i#22 print_char_cursor#90 ] ( main:2 [ main::i#22 print_char_cursor#90 ] ) always clobbers reg byte a reg byte y
Statement [52] (byte*~) main::$39 ← (const byte*) sieve#0 + (word) main::i#22 [ main::i#22 print_char_cursor#90 main::$39 ] ( main:2 [ main::i#22 print_char_cursor#90 main::$39 ] ) always clobbers reg byte a
Statement [53] if((byte) 0!=*((byte*~) main::$39)) goto main::@30 [ main::i#22 print_char_cursor#90 ] ( main:2 [ main::i#22 print_char_cursor#90 ] ) always clobbers reg byte a reg byte y
Statement [54] (word) print_word_decimal::w#2 ← (word) main::i#22 [ main::i#22 print_char_cursor#90 print_word_decimal::w#2 ] ( main:2 [ main::i#22 print_char_cursor#90 print_word_decimal::w#2 ] ) always clobbers reg byte a
Statement [55] (byte*~) print_char_cursor#101 ← (byte*) print_char_cursor#90 [ main::i#22 print_word_decimal::w#2 print_char_cursor#101 ] ( main:2 [ main::i#22 print_word_decimal::w#2 print_char_cursor#101 ] ) always clobbers reg byte a
Statement [61] if((word) main::i#10<(word) $514) goto main::@29 [ main::i#10 print_char_cursor#62 ] ( main:2 [ main::i#10 print_char_cursor#62 ] ) always clobbers reg byte a
@ -6246,8 +6246,8 @@ Statement [40] (word) main::sec100s#0 ← (word)(dword~) main::$14 [ print_line_
Statement [41] (byte*~) print_char_cursor#95 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 main::cyclecount#0 main::sec100s#0 print_char_cursor#95 ] ( main:2 [ print_line_cursor#1 main::cyclecount#0 main::sec100s#0 print_char_cursor#95 ] ) always clobbers reg byte a
Statement [43] (word) print_word_decimal::w#1 ← (word) main::sec100s#0 [ print_line_cursor#1 main::cyclecount#0 print_word_decimal::w#1 print_char_cursor#2 ] ( main:2 [ print_line_cursor#1 main::cyclecount#0 print_word_decimal::w#1 print_char_cursor#2 ] ) always clobbers reg byte a
Statement [47] (dword) print_dword_decimal::w#0 ← (dword) main::cyclecount#0 [ print_line_cursor#1 print_dword_decimal::w#0 print_char_cursor#2 ] ( main:2 [ print_line_cursor#1 print_dword_decimal::w#0 print_char_cursor#2 ] ) always clobbers reg byte a
Statement [52] (byte*~) main::$38 ← (const byte*) sieve#0 + (word) main::i#22 [ main::i#22 print_char_cursor#90 main::$38 ] ( main:2 [ main::i#22 print_char_cursor#90 main::$38 ] ) always clobbers reg byte a
Statement [53] if((byte) 0!=*((byte*~) main::$38)) goto main::@30 [ main::i#22 print_char_cursor#90 ] ( main:2 [ main::i#22 print_char_cursor#90 ] ) always clobbers reg byte a reg byte y
Statement [52] (byte*~) main::$39 ← (const byte*) sieve#0 + (word) main::i#22 [ main::i#22 print_char_cursor#90 main::$39 ] ( main:2 [ main::i#22 print_char_cursor#90 main::$39 ] ) always clobbers reg byte a
Statement [53] if((byte) 0!=*((byte*~) main::$39)) goto main::@30 [ main::i#22 print_char_cursor#90 ] ( main:2 [ main::i#22 print_char_cursor#90 ] ) always clobbers reg byte a reg byte y
Statement [54] (word) print_word_decimal::w#2 ← (word) main::i#22 [ main::i#22 print_char_cursor#90 print_word_decimal::w#2 ] ( main:2 [ main::i#22 print_char_cursor#90 print_word_decimal::w#2 ] ) always clobbers reg byte a
Statement [55] (byte*~) print_char_cursor#101 ← (byte*) print_char_cursor#90 [ main::i#22 print_word_decimal::w#2 print_char_cursor#101 ] ( main:2 [ main::i#22 print_word_decimal::w#2 print_char_cursor#101 ] ) always clobbers reg byte a
Statement [61] if((word) main::i#10<(word) $514) goto main::@29 [ main::i#10 print_char_cursor#62 ] ( main:2 [ main::i#10 print_char_cursor#62 ] ) always clobbers reg byte a
@ -6358,7 +6358,7 @@ Potential registers zp ZP_DWORD:78 [ div32u16u::return#2 ] : zp ZP_DWORD:78 ,
Potential registers zp ZP_DWORD:82 [ main::$14 ] : zp ZP_DWORD:82 ,
Potential registers zp ZP_WORD:86 [ main::sec100s#0 ] : zp ZP_WORD:86 ,
Potential registers zp ZP_DWORD:88 [ print_dword_decimal::w#0 ] : zp ZP_DWORD:88 ,
Potential registers zp ZP_WORD:92 [ main::$38 ] : zp ZP_WORD:92 ,
Potential registers zp ZP_WORD:92 [ main::$39 ] : zp ZP_WORD:92 ,
Potential registers zp ZP_BYTE:94 [ utoa::$4 ] : zp ZP_BYTE:94 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_WORD:95 [ utoa::buffer#3 ] : zp ZP_WORD:95 ,
Potential registers zp ZP_BYTE:97 [ utoa::$11 ] : zp ZP_BYTE:97 , reg byte a , reg byte x , reg byte y ,
@ -6385,7 +6385,7 @@ Potential registers zp ZP_WORD:138 [ memset::end#0 ] : zp ZP_WORD:138 ,
REGISTER UPLIFT SCOPES
Uplift Scope [utoa_append] 2,554: zp ZP_WORD:26 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] 2,003: zp ZP_BYTE:28 [ utoa_append::digit#2 utoa_append::digit#1 ] 350.5: zp ZP_WORD:100 [ utoa_append::sub#0 ] 202: zp ZP_WORD:102 [ utoa_append::return#0 ] 12.88: zp ZP_WORD:98 [ utoa_append::buffer#0 ]
Uplift Scope [utoa] 593.38: zp ZP_BYTE:19 [ utoa::digit#13 utoa::digit#14 utoa::digit#15 utoa::digit#1 ] 524.17: zp ZP_WORD:20 [ utoa::value#22 utoa::value#21 utoa::value#16 utoa::value#1 utoa::value#0 ] 462.21: zp ZP_WORD:22 [ utoa::buffer#29 utoa::buffer#28 utoa::buffer#11 utoa::buffer#4 ] 409: zp ZP_WORD:24 [ utoa::digit_value#2 utoa::digit_value#3 utoa::digit_value#0 utoa::digit_value#4 ] 202: zp ZP_BYTE:97 [ utoa::$11 ] 151.5: zp ZP_BYTE:18 [ utoa::started#8 utoa::started#2 ] 4: zp ZP_BYTE:94 [ utoa::$4 ] 4: zp ZP_WORD:95 [ utoa::buffer#3 ]
Uplift Scope [main] 297: zp ZP_WORD:6 [ main::j#2 main::j#0 main::j#1 ] 227.67: zp ZP_WORD:8 [ main::s#2 main::s#0 main::s#1 ] 37.11: zp ZP_WORD:2 [ main::i#17 main::i#12 ] 22: zp ZP_WORD:92 [ main::$38 ] 15.4: zp ZP_WORD:10 [ main::i#22 main::i#10 ] 14.3: zp ZP_WORD:4 [ main::sieve_i#11 main::sieve_i#1 ] 4: zp ZP_DWORD:66 [ main::$10 ] 2: zp ZP_DWORD:82 [ main::$14 ] 1.33: zp ZP_WORD:86 [ main::sec100s#0 ] 0.5: zp ZP_DWORD:70 [ main::cyclecount#0 ]
Uplift Scope [main] 297: zp ZP_WORD:6 [ main::j#2 main::j#0 main::j#1 ] 227.67: zp ZP_WORD:8 [ main::s#2 main::s#0 main::s#1 ] 37.11: zp ZP_WORD:2 [ main::i#17 main::i#12 ] 22: zp ZP_WORD:92 [ main::$39 ] 15.4: zp ZP_WORD:10 [ main::i#22 main::i#10 ] 14.3: zp ZP_WORD:4 [ main::sieve_i#11 main::sieve_i#1 ] 4: zp ZP_DWORD:66 [ main::$10 ] 2: zp ZP_DWORD:82 [ main::$14 ] 1.33: zp ZP_WORD:86 [ main::sec100s#0 ] 0.5: zp ZP_DWORD:70 [ main::cyclecount#0 ]
Uplift Scope [ultoa_append] 259: zp ZP_DWORD:43 [ ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 ] 203: zp ZP_BYTE:47 [ ultoa_append::digit#2 ultoa_append::digit#1 ] 35.5: zp ZP_DWORD:110 [ ultoa_append::sub#0 ] 22: zp ZP_DWORD:114 [ ultoa_append::return#0 ] 1.62: zp ZP_WORD:108 [ ultoa_append::buffer#0 ]
Uplift Scope [print_str] 305.5: zp ZP_WORD:14 [ print_str::str#8 print_str::str#10 print_str::str#0 ]
Uplift Scope [ultoa] 64.62: zp ZP_BYTE:32 [ ultoa::digit#13 ultoa::digit#14 ultoa::digit#15 ultoa::digit#1 ] 59.17: zp ZP_DWORD:33 [ ultoa::value#22 ultoa::value#21 ultoa::value#16 ultoa::value#1 ultoa::value#0 ] 50.79: zp ZP_WORD:37 [ ultoa::buffer#29 ultoa::buffer#28 ultoa::buffer#11 ultoa::buffer#4 ] 49: zp ZP_DWORD:39 [ ultoa::digit_value#2 ultoa::digit_value#3 ultoa::digit_value#0 ultoa::digit_value#4 ] 22: zp ZP_BYTE:107 [ ultoa::$11 ] 16.5: zp ZP_BYTE:31 [ ultoa::started#8 ultoa::started#2 ] 4: zp ZP_BYTE:104 [ ultoa::$4 ] 4: zp ZP_WORD:105 [ ultoa::buffer#3 ]
@ -6404,7 +6404,7 @@ Uplift Scope [print_cls]
Uplifting [utoa_append] best 104136 combination zp ZP_WORD:26 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] reg byte x [ utoa_append::digit#2 utoa_append::digit#1 ] zp ZP_WORD:100 [ utoa_append::sub#0 ] zp ZP_WORD:102 [ utoa_append::return#0 ] zp ZP_WORD:98 [ utoa_append::buffer#0 ]
Uplifting [utoa] best 102832 combination zp ZP_BYTE:19 [ utoa::digit#13 utoa::digit#14 utoa::digit#15 utoa::digit#1 ] zp ZP_WORD:20 [ utoa::value#22 utoa::value#21 utoa::value#16 utoa::value#1 utoa::value#0 ] zp ZP_WORD:22 [ utoa::buffer#29 utoa::buffer#28 utoa::buffer#11 utoa::buffer#4 ] zp ZP_WORD:24 [ utoa::digit_value#2 utoa::digit_value#3 utoa::digit_value#0 utoa::digit_value#4 ] reg byte a [ utoa::$11 ] reg byte x [ utoa::started#8 utoa::started#2 ] reg byte a [ utoa::$4 ] zp ZP_WORD:95 [ utoa::buffer#3 ]
Uplifting [main] best 102832 combination zp ZP_WORD:6 [ main::j#2 main::j#0 main::j#1 ] zp ZP_WORD:8 [ main::s#2 main::s#0 main::s#1 ] zp ZP_WORD:2 [ main::i#17 main::i#12 ] zp ZP_WORD:92 [ main::$38 ] zp ZP_WORD:10 [ main::i#22 main::i#10 ] zp ZP_WORD:4 [ main::sieve_i#11 main::sieve_i#1 ] zp ZP_DWORD:66 [ main::$10 ] zp ZP_DWORD:82 [ main::$14 ] zp ZP_WORD:86 [ main::sec100s#0 ] zp ZP_DWORD:70 [ main::cyclecount#0 ]
Uplifting [main] best 102832 combination zp ZP_WORD:6 [ main::j#2 main::j#0 main::j#1 ] zp ZP_WORD:8 [ main::s#2 main::s#0 main::s#1 ] zp ZP_WORD:2 [ main::i#17 main::i#12 ] zp ZP_WORD:92 [ main::$39 ] zp ZP_WORD:10 [ main::i#22 main::i#10 ] zp ZP_WORD:4 [ main::sieve_i#11 main::sieve_i#1 ] zp ZP_DWORD:66 [ main::$10 ] zp ZP_DWORD:82 [ main::$14 ] zp ZP_WORD:86 [ main::sec100s#0 ] zp ZP_DWORD:70 [ main::cyclecount#0 ]
Uplifting [ultoa_append] best 102229 combination zp ZP_DWORD:43 [ ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 ] reg byte x [ ultoa_append::digit#2 ultoa_append::digit#1 ] zp ZP_DWORD:110 [ ultoa_append::sub#0 ] zp ZP_DWORD:114 [ ultoa_append::return#0 ] zp ZP_WORD:108 [ ultoa_append::buffer#0 ]
Uplifting [print_str] best 102229 combination zp ZP_WORD:14 [ print_str::str#8 print_str::str#10 print_str::str#0 ]
Uplifting [ultoa] best 102095 combination zp ZP_BYTE:32 [ ultoa::digit#13 ultoa::digit#14 ultoa::digit#15 ultoa::digit#1 ] zp ZP_DWORD:33 [ ultoa::value#22 ultoa::value#21 ultoa::value#16 ultoa::value#1 ultoa::value#0 ] zp ZP_WORD:37 [ ultoa::buffer#29 ultoa::buffer#28 ultoa::buffer#11 ultoa::buffer#4 ] zp ZP_DWORD:39 [ ultoa::digit_value#2 ultoa::digit_value#3 ultoa::digit_value#0 ultoa::digit_value#4 ] reg byte a [ ultoa::$11 ] reg byte x [ ultoa::started#8 ultoa::started#2 ] reg byte a [ ultoa::$4 ] zp ZP_WORD:105 [ ultoa::buffer#3 ]
@ -6460,7 +6460,7 @@ Coalescing zero page register [ zp ZP_WORD:48 [ divr16u::rem#5 divr16u::rem#10 d
Coalescing zero page register [ zp ZP_WORD:55 [ memset::num#2 memset::end#0 ] ] with [ zp ZP_WORD:50 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 divr16u::dividend#2 divr16u::dividend#0 ] ]
Coalescing zero page register [ zp ZP_WORD:57 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] ] with [ zp ZP_WORD:52 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 ] ]
Coalescing zero page register [ zp ZP_DWORD:78 [ div32u16u::return#2 main::$14 div32u16u::return#0 ] ] with [ zp ZP_DWORD:39 [ ultoa::digit_value#2 ultoa::digit_value#3 ultoa::digit_value#0 ultoa::digit_value#4 ultoa_append::sub#0 ] ]
Coalescing zero page register [ zp ZP_WORD:120 [ div32u16u::quotient_hi#0 ] ] with [ zp ZP_WORD:92 [ main::$38 ] ]
Coalescing zero page register [ zp ZP_WORD:120 [ div32u16u::quotient_hi#0 ] ] with [ zp ZP_WORD:92 [ main::$39 ] ]
Coalescing zero page register [ zp ZP_WORD:48 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 utoa::digit_value#2 utoa::digit_value#3 utoa::digit_value#0 utoa::digit_value#4 utoa_append::sub#0 ] ] with [ zp ZP_WORD:14 [ print_str::str#8 print_str::str#10 print_str::str#0 main::sieve_i#11 main::sieve_i#1 ] ]
Coalescing zero page register [ zp ZP_WORD:55 [ memset::num#2 memset::end#0 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 divr16u::dividend#2 divr16u::dividend#0 ] ] with [ zp ZP_WORD:12 [ print_char_cursor#66 print_char_cursor#62 print_char_cursor#106 print_char_cursor#10 print_char_cursor#94 print_char_cursor#95 print_char_cursor#2 print_char_cursor#58 print_char_cursor#1 print_char_cursor#101 main::i#17 main::i#12 ] ]
Coalescing zero page register [ zp ZP_WORD:57 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 ] ] with [ zp ZP_WORD:20 [ utoa::value#22 utoa::value#21 utoa::value#16 utoa::value#1 utoa::value#0 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 utoa_append::return#0 main::j#2 main::j#0 main::j#1 ] ]
@ -6473,7 +6473,7 @@ Allocated (was zp ZP_WORD:48) zp ZP_WORD:13 [ divr16u::rem#5 divr16u::rem#10 div
Allocated (was zp ZP_WORD:55) zp ZP_WORD:15 [ memset::num#2 memset::end#0 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 divr16u::dividend#2 divr16u::dividend#0 print_char_cursor#66 print_char_cursor#62 print_char_cursor#106 print_char_cursor#10 print_char_cursor#94 print_char_cursor#95 print_char_cursor#2 print_char_cursor#58 print_char_cursor#1 print_char_cursor#101 main::i#17 main::i#12 ]
Allocated (was zp ZP_WORD:57) zp ZP_WORD:17 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 utoa::value#22 utoa::value#21 utoa::value#16 utoa::value#1 utoa::value#0 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 utoa_append::return#0 main::j#2 main::j#0 main::j#1 ]
Allocated (was zp ZP_DWORD:78) zp ZP_DWORD:19 [ div32u16u::return#2 main::$14 div32u16u::return#0 ultoa::digit_value#2 ultoa::digit_value#3 ultoa::digit_value#0 ultoa::digit_value#4 ultoa_append::sub#0 ]
Allocated (was zp ZP_WORD:120) zp ZP_WORD:23 [ div32u16u::quotient_hi#0 main::$38 ]
Allocated (was zp ZP_WORD:120) zp ZP_WORD:23 [ div32u16u::quotient_hi#0 main::$39 ]
ASSEMBLER BEFORE OPTIMIZATION
// File Comments
@ -6544,7 +6544,7 @@ main: {
.label s = 2
.label i = $b
.label i_12 = $f
.label _38 = $17
.label _39 = $17
.label i_17 = $f
// [5] phi from main to main::toD0181 [phi:main->main::toD0181]
toD0181_from_main:
@ -6857,17 +6857,17 @@ main: {
jmp b9
// main::@9
b9:
// [52] (byte*~) main::$38 ← (const byte*) sieve#0 + (word) main::i#22 -- pbuz1=pbuc1_plus_vwuz2
// [52] (byte*~) main::$39 ← (const byte*) sieve#0 + (word) main::i#22 -- pbuz1=pbuc1_plus_vwuz2
lda.z i
clc
adc #<sieve
sta.z _38
sta.z _39
lda.z i+1
adc #>sieve
sta.z _38+1
// [53] if((byte) 0!=*((byte*~) main::$38)) goto main::@30 -- vbuc1_neq__deref_pbuz1_then_la1
sta.z _39+1
// [53] if((byte) 0!=*((byte*~) main::$39)) goto main::@30 -- vbuc1_neq__deref_pbuz1_then_la1
ldy #0
lda (_38),y
lda (_39),y
cmp #0
bne b30
jmp b12
@ -8297,7 +8297,7 @@ FINAL SYMBOL TABLE
(void()) main()
(dword~) main::$10 $10 zp ZP_DWORD:7 4.0
(dword~) main::$14 $14 zp ZP_DWORD:19 2.0
(byte*~) main::$38 $38 zp ZP_WORD:23 22.0
(byte*~) main::$39 $39 zp ZP_WORD:23 22.0
(label) main::@1
(label) main::@10
(label) main::@11
@ -8575,7 +8575,7 @@ reg byte a [ utoa::$4 ]
reg byte a [ utoa::$11 ]
reg byte a [ ultoa::$4 ]
reg byte a [ ultoa::$11 ]
zp ZP_WORD:23 [ div32u16u::quotient_hi#0 main::$38 ]
zp ZP_WORD:23 [ div32u16u::quotient_hi#0 main::$39 ]
reg byte a [ divr16u::$1 ]
reg byte a [ divr16u::$2 ]
@ -8642,7 +8642,7 @@ main: {
.label s = 2
.label i = $b
.label i_12 = $f
.label _38 = $17
.label _39 = $17
.label i_17 = $f
// [5] phi from main to main::toD0181 [phi:main->main::toD0181]
// main::toD0181
@ -8918,17 +8918,17 @@ main: {
// main::@9
b9:
// if (!sieve[i])
// [52] (byte*~) main::$38 ← (const byte*) sieve#0 + (word) main::i#22 -- pbuz1=pbuc1_plus_vwuz2
// [52] (byte*~) main::$39 ← (const byte*) sieve#0 + (word) main::i#22 -- pbuz1=pbuc1_plus_vwuz2
lda.z i
clc
adc #<sieve
sta.z _38
sta.z _39
lda.z i+1
adc #>sieve
sta.z _38+1
// [53] if((byte) 0!=*((byte*~) main::$38)) goto main::@30 -- vbuc1_neq__deref_pbuz1_then_la1
sta.z _39+1
// [53] if((byte) 0!=*((byte*~) main::$39)) goto main::@30 -- vbuc1_neq__deref_pbuz1_then_la1
ldy #0
lda (_38),y
lda (_39),y
cmp #0
bne b30
// main::@12

View File

@ -114,7 +114,7 @@
(void()) main()
(dword~) main::$10 $10 zp ZP_DWORD:7 4.0
(dword~) main::$14 $14 zp ZP_DWORD:19 2.0
(byte*~) main::$38 $38 zp ZP_WORD:23 22.0
(byte*~) main::$39 $39 zp ZP_WORD:23 22.0
(label) main::@1
(label) main::@10
(label) main::@11
@ -392,6 +392,6 @@ reg byte a [ utoa::$4 ]
reg byte a [ utoa::$11 ]
reg byte a [ ultoa::$4 ]
reg byte a [ ultoa::$11 ]
zp ZP_WORD:23 [ div32u16u::quotient_hi#0 main::$38 ]
zp ZP_WORD:23 [ div32u16u::quotient_hi#0 main::$39 ]
reg byte a [ divr16u::$1 ]
reg byte a [ divr16u::$2 ]

View File

@ -23,8 +23,8 @@ main::@7: scope:[main] from main::@3 main::@7
(byte) main::line#2 ← phi( main::@3/(byte) main::line#0 main::@7/(byte) main::line#1 )
*((byte*) main::SCREEN#0 + (byte) main::line#2) ← (byte) main::line#2
(byte) main::line#1 ← (byte) main::line#2 + rangenext(0,$18)
(bool~) main::$0 ← (byte) main::line#1 != rangelast(0,$18)
if((bool~) main::$0) goto main::@7
(bool~) main::$1 ← (byte) main::line#1 != rangelast(0,$18)
if((bool~) main::$1) goto main::@7
to:main::@return
main::@return: scope:[main] from main::@7
return
@ -42,7 +42,7 @@ SYMBOL TABLE SSA
(label) @begin
(label) @end
(void()) main()
(bool~) main::$0
(bool~) main::$1
(label) main::@1
(label) main::@2
(label) main::@3
@ -59,7 +59,7 @@ Inlining cast (byte*) main::SCREEN#0 ← (byte*)(number) $400
Successful SSA optimization Pass2InlineCast
Simplifying constant pointer cast (byte*) 1024
Successful SSA optimization PassNCastSimplification
Simple Condition (bool~) main::$0 [8] if((byte) main::line#1!=rangelast(0,$18)) goto main::@7
Simple Condition (bool~) main::$1 [8] if((byte) main::line#1!=rangelast(0,$18)) goto main::@7
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte*) main::SCREEN#0 = (byte*) 1024
Constant (const byte) main::line#0 = 0