diff --git a/src/main/fragment/mos6502-common/_deref_pssz1=_deref_pssz2_memcpy_vbuc1.asm b/src/main/fragment/mos6502-common/_deref_pssz1=_deref_pssz2_memcpy_vbuc1.asm new file mode 100644 index 000000000..2e7758f0d --- /dev/null +++ b/src/main/fragment/mos6502-common/_deref_pssz1=_deref_pssz2_memcpy_vbuc1.asm @@ -0,0 +1,7 @@ +ldy #00 +!: +lda ({z2}),y +sta ({z1}),y +iny +cpy #{c1} +bne !- \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/_deref_pssz1=_deref_pssz2_memcpy_vbuxx.asm b/src/main/fragment/mos6502-common/_deref_pssz1=_deref_pssz2_memcpy_vbuxx.asm new file mode 100644 index 000000000..5a48bf712 --- /dev/null +++ b/src/main/fragment/mos6502-common/_deref_pssz1=_deref_pssz2_memcpy_vbuxx.asm @@ -0,0 +1,7 @@ +ldy #0 +!: +lda ({z2}),y +sta ({z1}),y +iny +dex +bne !- \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/pssc1_derefidx_vbuxx=_deref_pssc2_memcpy_vbuc3.asm b/src/main/fragment/mos6502-common/pssc1_derefidx_vbuxx=_deref_pssc2_memcpy_vbuc3.asm new file mode 100644 index 000000000..17d54141e --- /dev/null +++ b/src/main/fragment/mos6502-common/pssc1_derefidx_vbuxx=_deref_pssc2_memcpy_vbuc3.asm @@ -0,0 +1,8 @@ +ldy #0 +!: +lda {c2},y +sta {c1},x +inx +iny +cpy #{c3} +bne !- \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/pssc1_derefidx_vbuxx=pssc2_derefidx_vbuxx_memcpy_vbuyy.asm b/src/main/fragment/mos6502-common/pssc1_derefidx_vbuxx=pssc2_derefidx_vbuxx_memcpy_vbuyy.asm new file mode 100644 index 000000000..7f371f389 --- /dev/null +++ b/src/main/fragment/mos6502-common/pssc1_derefidx_vbuxx=pssc2_derefidx_vbuxx_memcpy_vbuyy.asm @@ -0,0 +1,6 @@ +!: +lda {c2},x +sta {c1},x +inx +dey +bne !- \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/pssc1_derefidx_vbuyy=_deref_pssc2_memcpy_vbuc3.asm b/src/main/fragment/mos6502-common/pssc1_derefidx_vbuyy=_deref_pssc2_memcpy_vbuc3.asm new file mode 100644 index 000000000..6806ce7d2 --- /dev/null +++ b/src/main/fragment/mos6502-common/pssc1_derefidx_vbuyy=_deref_pssc2_memcpy_vbuc3.asm @@ -0,0 +1,8 @@ +ldx #0 +!: +lda {c2},x +sta {c1},y +iny +inx +cpx #{c3} +bne !- \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/pssc1_derefidx_vbuyy=pssc2_derefidx_vbuyy_memcpy_vbuxx.asm b/src/main/fragment/mos6502-common/pssc1_derefidx_vbuyy=pssc2_derefidx_vbuyy_memcpy_vbuxx.asm new file mode 100644 index 000000000..f7115574f --- /dev/null +++ b/src/main/fragment/mos6502-common/pssc1_derefidx_vbuyy=pssc2_derefidx_vbuyy_memcpy_vbuxx.asm @@ -0,0 +1,6 @@ +!: +lda {c2},y +sta {c1},y +iny +dex +bne !- \ No newline at end of file diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass1UnwindStructValues.java b/src/main/java/dk/camelot64/kickc/passes/Pass1UnwindStructValues.java index fc251c086..b07f1b2a7 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass1UnwindStructValues.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass1UnwindStructValues.java @@ -4,13 +4,15 @@ import dk.camelot64.kickc.model.InternalError; import dk.camelot64.kickc.model.*; import dk.camelot64.kickc.model.iterator.ProgramValueIterator; import dk.camelot64.kickc.model.statements.*; -import dk.camelot64.kickc.model.symbols.*; +import dk.camelot64.kickc.model.symbols.Procedure; +import dk.camelot64.kickc.model.symbols.ProgramScope; +import dk.camelot64.kickc.model.symbols.StructDefinition; +import dk.camelot64.kickc.model.symbols.Variable; import dk.camelot64.kickc.model.types.SymbolType; import dk.camelot64.kickc.model.types.SymbolTypeInference; import dk.camelot64.kickc.model.types.SymbolTypeStruct; import dk.camelot64.kickc.model.values.*; import dk.camelot64.kickc.passes.unwinding.*; -import dk.camelot64.kickc.passes.unwinding.StructUnwinding; import java.util.ArrayList; import java.util.List; @@ -268,8 +270,8 @@ public class Pass1UnwindStructValues extends Pass1Base { if(lValueUnwinding.isBulkCopyable() && rValueUnwinding.isBulkCopyable()) { // Use bulk unwinding for a struct member that is an array stmtIt.previous(); - if(lValueUnwinding.getArraySpec()!=null) - if(rValueUnwinding.getArraySpec()==null || !lValueUnwinding.getArraySpec().equals(rValueUnwinding.getArraySpec())) + if(lValueUnwinding.getArraySpec() != null) + if(rValueUnwinding.getArraySpec() == null || !lValueUnwinding.getArraySpec().equals(rValueUnwinding.getArraySpec())) throw new RuntimeException("ArraySpec mismatch!"); LValue lValueMemberVarRef = lValueUnwinding.getBulkLValue(getScope()); RValue rValueBulkUnwinding = rValueUnwinding.getBulkRValue(getScope()); @@ -312,6 +314,12 @@ public class Pass1UnwindStructValues extends Pass1Base { if(value instanceof ConstantStructValue) // A constant struct value return true; + if(value instanceof PointerDereference) { + final SymbolType symbolType = SymbolTypeInference.inferType(getProgram().getScope(), value); + if(symbolType instanceof SymbolTypeStruct) + // A pointer to a struct + return true; + } // TODO: Add support for arrays // Not bulk assignable return false; @@ -339,6 +347,9 @@ public class Pass1UnwindStructValues extends Pass1Base { if(value instanceof ConstantStructValue) { return new RValueUnwindingConstant(valueType, null, (ConstantStructValue) value); } + if(value instanceof PointerDereference) { + return new RValueUnwindingStructPointerDeref((PointerDereference) value, (SymbolTypeStruct) valueType); + } } } return null; diff --git a/src/main/java/dk/camelot64/kickc/passes/unwinding/RValueUnwindingStructPointerDeref.java b/src/main/java/dk/camelot64/kickc/passes/unwinding/RValueUnwindingStructPointerDeref.java new file mode 100644 index 000000000..3f2ff4e96 --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/passes/unwinding/RValueUnwindingStructPointerDeref.java @@ -0,0 +1,57 @@ +package dk.camelot64.kickc.passes.unwinding; + +import dk.camelot64.kickc.model.operators.OperatorSizeOf; +import dk.camelot64.kickc.model.symbols.ArraySpec; +import dk.camelot64.kickc.model.symbols.ProgramScope; +import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.types.SymbolTypeStruct; +import dk.camelot64.kickc.model.values.*; + +/** Value unwinding for a simple pointer to a struct. */ +public class RValueUnwindingStructPointerDeref implements RValueUnwinding { + + /** Pointer to struct value. */ + private final PointerDereference structPointerDereference; + /** Struct type. */ + private final SymbolTypeStruct structType; + + public RValueUnwindingStructPointerDeref(PointerDereference structPointerDereference, SymbolTypeStruct structType) { + this.structPointerDereference = structPointerDereference; + this.structType = structType; + } + + @Override + public SymbolType getSymbolType() { + return structType; + } + + @Override + public ArraySpec getArraySpec() { + return null; + } + + @Override + public RValue getUnwinding(ProgramScope programScope) { + return structPointerDereference.getPointer(); + } + + @Override + public boolean isBulkCopyable() { + return true; + } + + @Override + public LValue getBulkLValue(ProgramScope scope) { + return structPointerDereference; + } + + private ConstantValue getByteSize(ProgramScope scope) { + return OperatorSizeOf.getSizeOfConstantVar(scope, getSymbolType()); + } + + @Override + public RValue getBulkRValue(ProgramScope scope) { + return new MemcpyValue(structPointerDereference, getByteSize(scope), getSymbolType()); + } + +} diff --git a/src/main/java/dk/camelot64/kickc/passes/unwinding/RValueUnwindingStructPointerDerefSimple.java b/src/main/java/dk/camelot64/kickc/passes/unwinding/RValueUnwindingStructPointerDerefSimple.java index f3678679e..33e933e0f 100644 --- a/src/main/java/dk/camelot64/kickc/passes/unwinding/RValueUnwindingStructPointerDerefSimple.java +++ b/src/main/java/dk/camelot64/kickc/passes/unwinding/RValueUnwindingStructPointerDerefSimple.java @@ -11,7 +11,7 @@ import dk.camelot64.kickc.model.values.*; import java.util.ListIterator; -class RValueUnwindingStructPointerDerefSimple implements RValueUnwinding { +public class RValueUnwindingStructPointerDerefSimple implements RValueUnwinding { private final PointerDereferenceSimple structPointerDeref; private final ArraySpec memberArraySpec; private final SymbolType memberType; @@ -47,9 +47,9 @@ class RValueUnwindingStructPointerDerefSimple implements RValueUnwinding { Variable memberAddress = scope.addVariableIntermediate(); memberAddress.setType(new SymbolTypePointer(memberType)); CastValue structTypedPointer = new CastValue(new SymbolTypePointer(memberType), structPointerDeref.getPointer()); - // Add statement $1 = ptr_struct + OFFSET_STRUCT_NAME_MEMBER + // Add statement $1 = (memberType*)ptr_struct + OFFSET_MEMBER stmtIt.add(new StatementAssignment((LValue) memberAddress.getRef(), structTypedPointer, Operators.PLUS, memberOffsetConstant, true, currentStmt.getSource(), currentStmt.getComments())); - // Unwind to *(ptr_struct+OFFSET_STRUCT_NAME_MEMBER) + // Unwind to *((memberType*)ptr_struct+OFFSET_MEMBER) return new PointerDereferenceSimple(memberAddress.getRef()); } diff --git a/src/main/java/dk/camelot64/kickc/passes/unwinding/RValueUnwindingStructPointerDereferenceIndexedMember.java b/src/main/java/dk/camelot64/kickc/passes/unwinding/RValueUnwindingStructPointerDereferenceIndexedMember.java index 62fac775d..bb24de6ed 100644 --- a/src/main/java/dk/camelot64/kickc/passes/unwinding/RValueUnwindingStructPointerDereferenceIndexedMember.java +++ b/src/main/java/dk/camelot64/kickc/passes/unwinding/RValueUnwindingStructPointerDereferenceIndexedMember.java @@ -46,9 +46,9 @@ class RValueUnwindingStructPointerDereferenceIndexedMember implements RValueUnwi Variable memberAddress = scope.addVariableIntermediate(); memberAddress.setType(new SymbolTypePointer(memberType)); CastValue structTypedPointer = new CastValue(new SymbolTypePointer(memberType), structPointerDeref.getPointer()); - // Add statement $1 = ptr_struct + OFFSET_STRUCT_NAME_MEMBER + // Add statement $1 = ptr_struct + OFFSET_MEMBER stmtIt.add(new StatementAssignment((LValue) memberAddress.getRef(), structTypedPointer, Operators.PLUS, memberOffsetConstant, true, currentStmt.getSource(), currentStmt.getComments())); - // Unwind to *(ptr_struct+OFFSET_STRUCT_NAME_MEMBER[idx] + // Unwind to ((elmType*)ptr_struct+OFFSET_MEMBER)[idx] return new PointerDereferenceIndexed(memberAddress.getRef(), structPointerDeref.getIndex()); } diff --git a/src/main/java/dk/camelot64/kickc/passes/unwinding/StructUnwindingVariable.java b/src/main/java/dk/camelot64/kickc/passes/unwinding/StructUnwindingVariable.java index 7dda41444..76387fde1 100644 --- a/src/main/java/dk/camelot64/kickc/passes/unwinding/StructUnwindingVariable.java +++ b/src/main/java/dk/camelot64/kickc/passes/unwinding/StructUnwindingVariable.java @@ -1,19 +1,16 @@ package dk.camelot64.kickc.passes.unwinding; -import dk.camelot64.kickc.model.ControlFlowBlock; -import dk.camelot64.kickc.model.statements.Statement; import dk.camelot64.kickc.model.symbols.ArraySpec; import dk.camelot64.kickc.model.symbols.ProgramScope; import dk.camelot64.kickc.model.symbols.StructDefinition; import dk.camelot64.kickc.model.symbols.Variable; import dk.camelot64.kickc.model.types.SymbolType; -import dk.camelot64.kickc.model.values.*; +import dk.camelot64.kickc.model.values.ConstantRef; import dk.camelot64.kickc.passes.PassNStructPointerRewriting; import java.util.ArrayList; import java.util.Collection; import java.util.List; -import java.util.ListIterator; /** Unwinding for a struct value with C-classic memory layout. */ public class StructUnwindingVariable implements StructUnwinding { @@ -37,15 +34,15 @@ public class StructUnwindingVariable implements StructUnwinding { @Override public RValueUnwinding getMemberUnwinding(String memberName, ProgramScope programScope) { - final SymbolType symbolType = structDefinition.getMember(memberName).getType(); - final ArraySpec arraySpec = structDefinition.getMember(memberName).getArraySpec(); + final SymbolType memberType = structDefinition.getMember(memberName).getType(); + final ArraySpec memberArraySpec = structDefinition.getMember(memberName).getArraySpec(); ConstantRef memberOffsetConstant = PassNStructPointerRewriting.getMemberOffsetConstant(programScope, structDefinition, memberName); - if(arraySpec==null) { + if(memberArraySpec==null) { // Simple member value - unwind to value of member *((type*)&struct + OFFSET_MEMBER) - return new RValueUnwindingStructVariableMemberSimple(variable, symbolType, arraySpec, memberOffsetConstant); + return new RValueUnwindingStructVariableMemberSimple(variable, memberType, memberArraySpec, memberOffsetConstant); } else { // Array struct member - unwind to pointer to first element (elmtype*)&struct + OFFSET_MEMBER - return new RValueUnwindingStructVariableMemberArray(variable, symbolType, arraySpec, memberOffsetConstant); + return new RValueUnwindingStructVariableMemberArray(variable, memberType, memberArraySpec, memberOffsetConstant); } } diff --git a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java index 00e52a06f..d83114d9a 100644 --- a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java +++ b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java @@ -1127,6 +1127,11 @@ public class TestPrograms { assertError("struct-err-0", "Unknown struct type"); } + @Test + public void testStruct35() throws IOException, URISyntaxException { + compileAndCompare("struct-35"); + } + @Test public void testStruct34() throws IOException, URISyntaxException { compileAndCompare("struct-34"); diff --git a/src/test/kc/struct-35.kc b/src/test/kc/struct-35.kc new file mode 100644 index 000000000..1692a0ce0 --- /dev/null +++ b/src/test/kc/struct-35.kc @@ -0,0 +1,18 @@ +// Minimal struct with C-Standard behavior - copy assignment through struct pointer + +struct Point { + char x; + char y; +}; + +__mem __ma struct Point point1 = { 2, 3 }; +__mem __ma struct Point point2; + +const char* SCREEN = 0x0400; + +void main() { + struct Point* p2 = &point2; + *p2 = point1; + SCREEN[0] = point2.x; + SCREEN[1] = point2.y; +} \ No newline at end of file diff --git a/src/test/ref/complex/clearscreen/clearscreen.asm b/src/test/ref/complex/clearscreen/clearscreen.asm index da895e2b8..940efcf5a 100644 --- a/src/test/ref/complex/clearscreen/clearscreen.asm +++ b/src/test/ref/complex/clearscreen/clearscreen.asm @@ -65,6 +65,7 @@ .const YPOS_BOTTOMMOST = BORDER_YPOS_BOTTOM<<4 .const RASTER_IRQ_TOP = $30 .const RASTER_IRQ_MIDDLE = $ff + .const SIZEOF_STRUCT_PROCESSINGSPRITE = $e .const OFFSET_STRUCT_PROCESSINGSPRITE_Y = 2 .const OFFSET_STRUCT_PROCESSINGSPRITE_VX = 4 .const OFFSET_STRUCT_PROCESSINGSPRITE_VY = 6 @@ -95,7 +96,8 @@ __b1: main: { .label dst = 3 .label src = $1c - .label center_y = $1e + .label i = 2 + .label center_y = $b lda.z SCREEN_DIST sta.z init_angle_screen.screen lda.z SCREEN_DIST+1 @@ -117,39 +119,30 @@ main: { lda.z src cmp #=(byte) getCharToProcess::closest_dist#2) goto getCharToProcess::@12 + [115] (byte) getCharToProcess::dist#0 ← *((byte*) getCharToProcess::dist_line#6 + (byte) getCharToProcess::x#2) + [116] if((byte) getCharToProcess::dist#0>=(byte) getCharToProcess::closest_dist#2) goto getCharToProcess::@12 to:getCharToProcess::@5 getCharToProcess::@5: scope:[getCharToProcess] from getCharToProcess::@4 - [125] (byte) getCharToProcess::return_x#7 ← (byte) getCharToProcess::x#2 - [126] (byte) getCharToProcess::return_y#7 ← (byte) getCharToProcess::y#7 + [117] (byte) getCharToProcess::return_x#7 ← (byte) getCharToProcess::x#2 + [118] (byte) getCharToProcess::return_y#7 ← (byte) getCharToProcess::y#7 to:getCharToProcess::@3 getCharToProcess::@3: scope:[getCharToProcess] from getCharToProcess::@11 getCharToProcess::@12 getCharToProcess::@5 - [127] (byte) getCharToProcess::return_y#1 ← phi( getCharToProcess::@11/(byte) getCharToProcess::closest_y#7 getCharToProcess::@12/(byte) getCharToProcess::closest_y#7 getCharToProcess::@5/(byte) getCharToProcess::return_y#7 ) - [127] (byte) getCharToProcess::return_x#1 ← phi( getCharToProcess::@11/(byte) getCharToProcess::closest_x#7 getCharToProcess::@12/(byte) getCharToProcess::closest_x#7 getCharToProcess::@5/(byte) getCharToProcess::return_x#7 ) - [127] (byte) getCharToProcess::return_dist#1 ← phi( getCharToProcess::@11/(byte) getCharToProcess::return_dist#5 getCharToProcess::@12/(byte) getCharToProcess::return_dist#6 getCharToProcess::@5/(byte) getCharToProcess::dist#0 ) - [128] (byte) getCharToProcess::x#1 ← ++ (byte) getCharToProcess::x#2 - [129] if((byte) getCharToProcess::x#1!=(byte) $28) goto getCharToProcess::@10 + [119] (byte) getCharToProcess::return_y#1 ← phi( getCharToProcess::@11/(byte) getCharToProcess::closest_y#7 getCharToProcess::@12/(byte) getCharToProcess::closest_y#7 getCharToProcess::@5/(byte) getCharToProcess::return_y#7 ) + [119] (byte) getCharToProcess::return_x#1 ← phi( getCharToProcess::@11/(byte) getCharToProcess::closest_x#7 getCharToProcess::@12/(byte) getCharToProcess::closest_x#7 getCharToProcess::@5/(byte) getCharToProcess::return_x#7 ) + [119] (byte) getCharToProcess::return_dist#1 ← phi( getCharToProcess::@11/(byte) getCharToProcess::return_dist#5 getCharToProcess::@12/(byte) getCharToProcess::return_dist#6 getCharToProcess::@5/(byte) getCharToProcess::dist#0 ) + [120] (byte) getCharToProcess::x#1 ← ++ (byte) getCharToProcess::x#2 + [121] if((byte) getCharToProcess::x#1!=(byte) $28) goto getCharToProcess::@10 to:getCharToProcess::@6 getCharToProcess::@6: scope:[getCharToProcess] from getCharToProcess::@3 - [130] (byte*) getCharToProcess::screen_line#1 ← (byte*) getCharToProcess::screen_line#4 + (byte) $28 - [131] (byte*) getCharToProcess::dist_line#1 ← (byte*) getCharToProcess::dist_line#6 + (byte) $28 - [132] (byte) getCharToProcess::y#1 ← ++ (byte) getCharToProcess::y#7 - [133] if((byte) getCharToProcess::y#1!=(byte) $19) goto getCharToProcess::@9 + [122] (byte*) getCharToProcess::screen_line#1 ← (byte*) getCharToProcess::screen_line#4 + (byte) $28 + [123] (byte*) getCharToProcess::dist_line#1 ← (byte*) getCharToProcess::dist_line#6 + (byte) $28 + [124] (byte) getCharToProcess::y#1 ← ++ (byte) getCharToProcess::y#7 + [125] if((byte) getCharToProcess::y#1!=(byte) $19) goto getCharToProcess::@9 to:getCharToProcess::@7 getCharToProcess::@7: scope:[getCharToProcess] from getCharToProcess::@6 - [134] if((byte) getCharToProcess::return_dist#1==(const byte) NOT_FOUND) goto getCharToProcess::@return + [126] if((byte) getCharToProcess::return_dist#1==(const byte) NOT_FOUND) goto getCharToProcess::@return to:getCharToProcess::@8 getCharToProcess::@8: scope:[getCharToProcess] from getCharToProcess::@7 - [135] (word~) getCharToProcess::$8 ← (word)(byte) getCharToProcess::return_y#1 - [136] (word~) getCharToProcess::$12 ← (word~) getCharToProcess::$8 << (byte) 2 - [137] (word~) getCharToProcess::$13 ← (word~) getCharToProcess::$12 + (word~) getCharToProcess::$8 - [138] (word~) getCharToProcess::$9 ← (word~) getCharToProcess::$13 << (byte) 3 - [139] (byte*~) getCharToProcess::$10 ← (byte*)(void*) SCREEN_COPY#0 + (word~) getCharToProcess::$9 - [140] *((byte*~) getCharToProcess::$10 + (byte) getCharToProcess::return_x#1) ← (byte) ' ' + [127] (word~) getCharToProcess::$8 ← (word)(byte) getCharToProcess::return_y#1 + [128] (word~) getCharToProcess::$12 ← (word~) getCharToProcess::$8 << (byte) 2 + [129] (word~) getCharToProcess::$13 ← (word~) getCharToProcess::$12 + (word~) getCharToProcess::$8 + [130] (word~) getCharToProcess::$9 ← (word~) getCharToProcess::$13 << (byte) 3 + [131] (byte*~) getCharToProcess::$10 ← (byte*)(void*) SCREEN_COPY#0 + (word~) getCharToProcess::$9 + [132] *((byte*~) getCharToProcess::$10 + (byte) getCharToProcess::return_x#1) ← (byte) ' ' to:getCharToProcess::@return getCharToProcess::@return: scope:[getCharToProcess] from getCharToProcess::@7 getCharToProcess::@8 - [141] return + [133] return to:@return getCharToProcess::@9: scope:[getCharToProcess] from getCharToProcess::@6 - [142] (byte) getCharToProcess::closest_dist#10 ← (byte) getCharToProcess::return_dist#1 + [134] (byte) getCharToProcess::closest_dist#10 ← (byte) getCharToProcess::return_dist#1 to:getCharToProcess::@1 getCharToProcess::@10: scope:[getCharToProcess] from getCharToProcess::@3 - [143] (byte) getCharToProcess::closest_dist#12 ← (byte) getCharToProcess::return_dist#1 + [135] (byte) getCharToProcess::closest_dist#12 ← (byte) getCharToProcess::return_dist#1 to:getCharToProcess::@2 getCharToProcess::@12: scope:[getCharToProcess] from getCharToProcess::@4 - [144] (byte) getCharToProcess::return_dist#6 ← (byte) getCharToProcess::closest_dist#2 + [136] (byte) getCharToProcess::return_dist#6 ← (byte) getCharToProcess::closest_dist#2 to:getCharToProcess::@3 getCharToProcess::@11: scope:[getCharToProcess] from getCharToProcess::@2 - [145] (byte) getCharToProcess::return_dist#5 ← (byte) getCharToProcess::closest_dist#2 + [137] (byte) getCharToProcess::return_dist#5 ← (byte) getCharToProcess::closest_dist#2 to:getCharToProcess::@3 (void()) setupRasterIrq((word) setupRasterIrq::raster , (void()*) setupRasterIrq::irqRoutine) setupRasterIrq: scope:[setupRasterIrq] from main::@10 asm { sei } - [147] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK - [148] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO - [149] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR + [139] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK + [140] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO + [141] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR to:setupRasterIrq::@1 setupRasterIrq::@1: scope:[setupRasterIrq] from setupRasterIrq - [150] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) & (byte) $7f + [142] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) & (byte) $7f to:setupRasterIrq::@2 setupRasterIrq::@2: scope:[setupRasterIrq] from setupRasterIrq::@1 - [151] *((const byte*) RASTER) ← <(const byte) RASTER_IRQ_TOP - [152] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER - [153] *((const void()**) HARDWARE_IRQ) ← (const void()*) setupRasterIrq::irqRoutine#0 + [143] *((const byte*) RASTER) ← <(const byte) RASTER_IRQ_TOP + [144] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER + [145] *((const void()**) HARDWARE_IRQ) ← (const void()*) setupRasterIrq::irqRoutine#0 asm { cli } to:setupRasterIrq::@return setupRasterIrq::@return: scope:[setupRasterIrq] from setupRasterIrq::@2 - [155] return + [147] return to:@return (void()) initSprites() initSprites: scope:[initSprites] from main::@4 - [156] phi() + [148] phi() to:initSprites::@1 initSprites::@1: scope:[initSprites] from initSprites initSprites::@2 - [157] (byte*) initSprites::sp#2 ← phi( initSprites/(const byte*) SPRITE_DATA initSprites::@2/(byte*) initSprites::sp#1 ) - [158] if((byte*) initSprites::sp#2<(const byte*) SPRITE_DATA+(const byte) NUM_PROCESSING*(byte) $40) goto initSprites::@2 + [149] (byte*) initSprites::sp#2 ← phi( initSprites/(const byte*) SPRITE_DATA initSprites::@2/(byte*) initSprites::sp#1 ) + [150] if((byte*) initSprites::sp#2<(const byte*) SPRITE_DATA+(const byte) NUM_PROCESSING*(byte) $40) goto initSprites::@2 to:initSprites::@3 initSprites::@3: scope:[initSprites] from initSprites::@1 initSprites::@3 - [159] (byte) initSprites::i#2 ← phi( initSprites::@1/(byte) 0 initSprites::@3/(byte) initSprites::i#1 ) - [160] *((const byte*) SPRITES_COLS + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE - [161] (byte) initSprites::i#1 ← ++ (byte) initSprites::i#2 - [162] if((byte) initSprites::i#1!=(byte) 8) goto initSprites::@3 + [151] (byte) initSprites::i#2 ← phi( initSprites::@1/(byte) 0 initSprites::@3/(byte) initSprites::i#1 ) + [152] *((const byte*) SPRITES_COLS + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE + [153] (byte) initSprites::i#1 ← ++ (byte) initSprites::i#2 + [154] if((byte) initSprites::i#1!=(byte) 8) goto initSprites::@3 to:initSprites::@4 initSprites::@4: scope:[initSprites] from initSprites::@3 - [163] *((const byte*) SPRITES_MC) ← (byte) 0 - [164] *((const byte*) SPRITES_EXPAND_X) ← (byte) 0 - [165] *((const byte*) SPRITES_EXPAND_Y) ← (byte) 0 + [155] *((const byte*) SPRITES_MC) ← (byte) 0 + [156] *((const byte*) SPRITES_EXPAND_X) ← (byte) 0 + [157] *((const byte*) SPRITES_EXPAND_Y) ← (byte) 0 to:initSprites::@return initSprites::@return: scope:[initSprites] from initSprites::@4 - [166] return + [158] return to:@return initSprites::@2: scope:[initSprites] from initSprites::@1 - [167] *((byte*) initSprites::sp#2) ← (byte) 0 - [168] (byte*) initSprites::sp#1 ← ++ (byte*) initSprites::sp#2 + [159] *((byte*) initSprites::sp#2) ← (byte) 0 + [160] (byte*) initSprites::sp#1 ← ++ (byte*) initSprites::sp#2 to:initSprites::@1 (void()) init_angle_screen((byte*) init_angle_screen::screen) init_angle_screen: scope:[init_angle_screen] from main - [169] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c - [170] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c + [161] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c + [162] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c to:init_angle_screen::@1 init_angle_screen::@1: scope:[init_angle_screen] from init_angle_screen init_angle_screen::@4 - [171] (byte*) init_angle_screen::screen_bottomline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_bottomline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_bottomline#1 ) - [171] (byte*) init_angle_screen::screen_topline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_topline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_topline#1 ) - [171] (byte) init_angle_screen::y#5 ← phi( init_angle_screen/(byte) 0 init_angle_screen::@4/(byte) init_angle_screen::y#1 ) + [163] (byte*) init_angle_screen::screen_bottomline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_bottomline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_bottomline#1 ) + [163] (byte*) init_angle_screen::screen_topline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_topline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_topline#1 ) + [163] (byte) init_angle_screen::y#5 ← phi( init_angle_screen/(byte) 0 init_angle_screen::@4/(byte) init_angle_screen::y#1 ) to:init_angle_screen::@2 init_angle_screen::@2: scope:[init_angle_screen] from init_angle_screen::@1 init_angle_screen::@5 - [172] (byte) init_angle_screen::xb#2 ← phi( init_angle_screen::@1/(byte) $27 init_angle_screen::@5/(byte) init_angle_screen::xb#1 ) - [172] (byte) init_angle_screen::x#2 ← phi( init_angle_screen::@1/(byte) 0 init_angle_screen::@5/(byte) init_angle_screen::x#1 ) - [173] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 + [164] (byte) init_angle_screen::xb#2 ← phi( init_angle_screen::@1/(byte) $27 init_angle_screen::@5/(byte) init_angle_screen::xb#1 ) + [164] (byte) init_angle_screen::x#2 ← phi( init_angle_screen::@1/(byte) 0 init_angle_screen::@5/(byte) init_angle_screen::x#1 ) + [165] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 to:init_angle_screen::@4 init_angle_screen::@4: scope:[init_angle_screen] from init_angle_screen::@2 - [174] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 - [175] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 - [176] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 - [177] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 + [166] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 + [167] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 + [168] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 + [169] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 to:init_angle_screen::@return init_angle_screen::@return: scope:[init_angle_screen] from init_angle_screen::@4 - [178] return + [170] return to:@return init_angle_screen::@3: scope:[init_angle_screen] from init_angle_screen::@2 - [179] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 - [180] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 - [181] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 - [182] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 - [183] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 - [184] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 - [185] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 - [186] call atan2_16 - [187] (word) atan2_16::return#2 ← (word) atan2_16::return#0 + [171] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 + [172] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 + [173] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 + [174] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 + [175] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 + [176] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 + [177] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 + [178] call atan2_16 + [179] (word) atan2_16::return#2 ← (word) atan2_16::return#0 to:init_angle_screen::@5 init_angle_screen::@5: scope:[init_angle_screen] from init_angle_screen::@3 - [188] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 - [189] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 - [190] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 - [191] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 - [192] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 - [193] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 - [194] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 - [195] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 - [196] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 - [197] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 - [198] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 - [199] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 + [180] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 + [181] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 + [182] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 + [183] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 + [184] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 + [185] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 + [186] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 + [187] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 + [188] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 + [189] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 + [190] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 + [191] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 to:init_angle_screen::@2 (word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y) atan2_16: scope:[atan2_16] from init_angle_screen::@3 - [200] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 + [192] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 to:atan2_16::@2 atan2_16::@2: scope:[atan2_16] from atan2_16 - [201] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 + [193] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 to:atan2_16::@3 atan2_16::@3: scope:[atan2_16] from atan2_16::@1 atan2_16::@2 - [202] (signed word) atan2_16::yi#0 ← phi( atan2_16::@1/(signed word) atan2_16::yi#16 atan2_16::@2/(signed word~) atan2_16::$2 ) - [203] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 + [194] (signed word) atan2_16::yi#0 ← phi( atan2_16::@1/(signed word) atan2_16::yi#16 atan2_16::@2/(signed word~) atan2_16::$2 ) + [195] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 to:atan2_16::@5 atan2_16::@5: scope:[atan2_16] from atan2_16::@3 - [204] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 + [196] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 to:atan2_16::@6 atan2_16::@6: scope:[atan2_16] from atan2_16::@4 atan2_16::@5 - [205] (signed word) atan2_16::xi#0 ← phi( atan2_16::@4/(signed word) atan2_16::xi#13 atan2_16::@5/(signed word~) atan2_16::$7 ) + [197] (signed word) atan2_16::xi#0 ← phi( atan2_16::@4/(signed word) atan2_16::xi#13 atan2_16::@5/(signed word~) atan2_16::$7 ) to:atan2_16::@10 atan2_16::@10: scope:[atan2_16] from atan2_16::@19 atan2_16::@6 - [206] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(word) 0 ) - [206] (byte) atan2_16::i#2 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 ) - [206] (signed word) atan2_16::xi#3 ← phi( atan2_16::@19/(signed word) atan2_16::xi#8 atan2_16::@6/(signed word) atan2_16::xi#0 ) - [206] (signed word) atan2_16::yi#3 ← phi( atan2_16::@19/(signed word) atan2_16::yi#8 atan2_16::@6/(signed word) atan2_16::yi#0 ) - [207] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 + [198] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(word) 0 ) + [198] (byte) atan2_16::i#2 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 ) + [198] (signed word) atan2_16::xi#3 ← phi( atan2_16::@19/(signed word) atan2_16::xi#8 atan2_16::@6/(signed word) atan2_16::xi#0 ) + [198] (signed word) atan2_16::yi#3 ← phi( atan2_16::@19/(signed word) atan2_16::yi#8 atan2_16::@6/(signed word) atan2_16::yi#0 ) + [199] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 to:atan2_16::@12 atan2_16::@12: scope:[atan2_16] from atan2_16::@10 atan2_16::@19 - [208] (word) atan2_16::angle#6 ← phi( atan2_16::@10/(word) atan2_16::angle#12 atan2_16::@19/(word) atan2_16::angle#13 ) - [209] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 - [210] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 + [200] (word) atan2_16::angle#6 ← phi( atan2_16::@10/(word) atan2_16::angle#12 atan2_16::@19/(word) atan2_16::angle#13 ) + [201] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 + [202] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 to:atan2_16::@21 atan2_16::@21: scope:[atan2_16] from atan2_16::@12 - [211] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 + [203] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 to:atan2_16::@7 atan2_16::@7: scope:[atan2_16] from atan2_16::@12 atan2_16::@21 - [212] (word) atan2_16::angle#11 ← phi( atan2_16::@12/(word) atan2_16::angle#1 atan2_16::@21/(word) atan2_16::angle#4 ) - [213] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 + [204] (word) atan2_16::angle#11 ← phi( atan2_16::@12/(word) atan2_16::angle#1 atan2_16::@21/(word) atan2_16::angle#4 ) + [205] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 to:atan2_16::@9 atan2_16::@9: scope:[atan2_16] from atan2_16::@7 - [214] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 + [206] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 to:atan2_16::@8 atan2_16::@8: scope:[atan2_16] from atan2_16::@7 atan2_16::@9 - [215] (word) atan2_16::return#0 ← phi( atan2_16::@9/(word) atan2_16::angle#5 atan2_16::@7/(word) atan2_16::angle#11 ) + [207] (word) atan2_16::return#0 ← phi( atan2_16::@9/(word) atan2_16::angle#5 atan2_16::@7/(word) atan2_16::angle#11 ) to:atan2_16::@return atan2_16::@return: scope:[atan2_16] from atan2_16::@8 - [216] return + [208] return to:@return atan2_16::@11: scope:[atan2_16] from atan2_16::@10 - [217] (byte) atan2_16::shift#5 ← (byte) atan2_16::i#2 - [218] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 - [219] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 + [209] (byte) atan2_16::shift#5 ← (byte) atan2_16::i#2 + [210] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 + [211] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 to:atan2_16::@13 atan2_16::@13: scope:[atan2_16] from atan2_16::@11 atan2_16::@14 - [220] (signed word) atan2_16::yd#3 ← phi( atan2_16::@11/(signed word) atan2_16::yd#10 atan2_16::@14/(signed word) atan2_16::yd#1 ) - [220] (signed word) atan2_16::xd#3 ← phi( atan2_16::@11/(signed word) atan2_16::xd#10 atan2_16::@14/(signed word) atan2_16::xd#1 ) - [220] (byte) atan2_16::shift#2 ← phi( atan2_16::@11/(byte) atan2_16::shift#5 atan2_16::@14/(byte) atan2_16::shift#1 ) - [221] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 + [212] (signed word) atan2_16::yd#3 ← phi( atan2_16::@11/(signed word) atan2_16::yd#10 atan2_16::@14/(signed word) atan2_16::yd#1 ) + [212] (signed word) atan2_16::xd#3 ← phi( atan2_16::@11/(signed word) atan2_16::xd#10 atan2_16::@14/(signed word) atan2_16::xd#1 ) + [212] (byte) atan2_16::shift#2 ← phi( atan2_16::@11/(byte) atan2_16::shift#5 atan2_16::@14/(byte) atan2_16::shift#1 ) + [213] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 to:atan2_16::@15 atan2_16::@15: scope:[atan2_16] from atan2_16::@13 - [222] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 + [214] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 to:atan2_16::@16 atan2_16::@16: scope:[atan2_16] from atan2_16::@15 - [223] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 - [224] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 + [215] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 + [216] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 to:atan2_16::@17 atan2_16::@17: scope:[atan2_16] from atan2_16::@15 atan2_16::@16 - [225] (signed word) atan2_16::xd#5 ← phi( atan2_16::@15/(signed word) atan2_16::xd#3 atan2_16::@16/(signed word) atan2_16::xd#2 ) - [225] (signed word) atan2_16::yd#5 ← phi( atan2_16::@15/(signed word) atan2_16::yd#3 atan2_16::@16/(signed word) atan2_16::yd#2 ) - [226] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 + [217] (signed word) atan2_16::xd#5 ← phi( atan2_16::@15/(signed word) atan2_16::xd#3 atan2_16::@16/(signed word) atan2_16::xd#2 ) + [217] (signed word) atan2_16::yd#5 ← phi( atan2_16::@15/(signed word) atan2_16::yd#3 atan2_16::@16/(signed word) atan2_16::yd#2 ) + [218] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 to:atan2_16::@20 atan2_16::@20: scope:[atan2_16] from atan2_16::@17 - [227] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 - [228] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 - [229] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 - [230] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) + [219] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 + [220] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 + [221] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 + [222] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) to:atan2_16::@19 atan2_16::@19: scope:[atan2_16] from atan2_16::@18 atan2_16::@20 - [231] (signed word) atan2_16::xi#8 ← phi( atan2_16::@18/(signed word) atan2_16::xi#1 atan2_16::@20/(signed word) atan2_16::xi#2 ) - [231] (word) atan2_16::angle#13 ← phi( atan2_16::@18/(word) atan2_16::angle#2 atan2_16::@20/(word) atan2_16::angle#3 ) - [231] (signed word) atan2_16::yi#8 ← phi( atan2_16::@18/(signed word) atan2_16::yi#1 atan2_16::@20/(signed word) atan2_16::yi#2 ) - [232] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 - [233] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16-(byte) 1+(byte) 1) goto atan2_16::@12 + [223] (signed word) atan2_16::xi#8 ← phi( atan2_16::@18/(signed word) atan2_16::xi#1 atan2_16::@20/(signed word) atan2_16::xi#2 ) + [223] (word) atan2_16::angle#13 ← phi( atan2_16::@18/(word) atan2_16::angle#2 atan2_16::@20/(word) atan2_16::angle#3 ) + [223] (signed word) atan2_16::yi#8 ← phi( atan2_16::@18/(signed word) atan2_16::yi#1 atan2_16::@20/(signed word) atan2_16::yi#2 ) + [224] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 + [225] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16-(byte) 1+(byte) 1) goto atan2_16::@12 to:atan2_16::@10 atan2_16::@18: scope:[atan2_16] from atan2_16::@17 - [234] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 - [235] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 - [236] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 - [237] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) + [226] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 + [227] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 + [228] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 + [229] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) to:atan2_16::@19 atan2_16::@14: scope:[atan2_16] from atan2_16::@13 - [238] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 - [239] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 - [240] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 + [230] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 + [231] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 + [232] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 to:atan2_16::@13 atan2_16::@4: scope:[atan2_16] from atan2_16::@3 - [241] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 + [233] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 to:atan2_16::@6 atan2_16::@1: scope:[atan2_16] from atan2_16 - [242] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 + [234] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 to:atan2_16::@3 (void*()) malloc((word) malloc::size) malloc: scope:[malloc] from @1 @3 - [243] (byte*) heap_head#5 ← phi( @1/(const byte*) HEAP_TOP @3/(byte*) heap_head#1 ) - [244] (byte*) malloc::mem#0 ← (byte*) heap_head#5 - (word) $3e8 - [245] (byte*) heap_head#1 ← (byte*) malloc::mem#0 + [235] (byte*) heap_head#5 ← phi( @1/(const byte*) HEAP_TOP @3/(byte*) heap_head#1 ) + [236] (byte*) malloc::mem#0 ← (byte*) heap_head#5 - (word) $3e8 + [237] (byte*) heap_head#1 ← (byte*) malloc::mem#0 to:malloc::@return malloc::@return: scope:[malloc] from malloc - [246] return + [238] return to:@return interrupt(HARDWARE_ALL)(void()) irqBottom() irqBottom: scope:[irqBottom] from - [247] phi() + [239] phi() to:irqBottom::@1 irqBottom::@1: scope:[irqBottom] from irqBottom - [248] phi() - [249] call processChars + [240] phi() + [241] call processChars to:irqBottom::@2 irqBottom::@2: scope:[irqBottom] from irqBottom::@1 - [250] *((const byte*) RASTER) ← (const byte) RASTER_IRQ_TOP - [251] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_ALL)(void()) irqTop() - [252] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER + [242] *((const byte*) RASTER) ← (const byte) RASTER_IRQ_TOP + [243] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_ALL)(void()) irqTop() + [244] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER to:irqBottom::@return irqBottom::@return: scope:[irqBottom] from irqBottom::@2 - [253] return + [245] return to:@return (void()) processChars() processChars: scope:[processChars] from irqBottom::@1 - [254] phi() + [246] phi() to:processChars::@1 processChars::@1: scope:[processChars] from processChars processChars::@2 - [255] (byte) processChars::numActive#10 ← phi( processChars/(byte) 0 processChars::@2/(byte) processChars::numActive#3 ) - [255] (byte) processChars::i#10 ← phi( processChars/(byte) 0 processChars::@2/(byte) processChars::i#1 ) - [256] (byte~) processChars::$62 ← (byte) processChars::i#10 << (byte) 1 - [257] (byte~) processChars::$63 ← (byte~) processChars::$62 + (byte) processChars::i#10 - [258] (byte~) processChars::$64 ← (byte~) processChars::$63 << (byte) 1 - [259] (byte~) processChars::$65 ← (byte~) processChars::$64 + (byte) processChars::i#10 - [260] (byte~) processChars::$32 ← (byte~) processChars::$65 << (byte) 1 - [261] (struct ProcessingSprite*) processChars::processing#0 ← (const struct ProcessingSprite*) PROCESSING + (byte~) processChars::$32 - [262] (byte) processChars::bitmask#0 ← (byte) 1 << *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID) - [263] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)==(const byte) STATUS_FREE) goto processChars::@2 + [247] (byte) processChars::numActive#10 ← phi( processChars/(byte) 0 processChars::@2/(byte) processChars::numActive#3 ) + [247] (byte) processChars::i#10 ← phi( processChars/(byte) 0 processChars::@2/(byte) processChars::i#1 ) + [248] (byte~) processChars::$62 ← (byte) processChars::i#10 << (byte) 1 + [249] (byte~) processChars::$63 ← (byte~) processChars::$62 + (byte) processChars::i#10 + [250] (byte~) processChars::$64 ← (byte~) processChars::$63 << (byte) 1 + [251] (byte~) processChars::$65 ← (byte~) processChars::$64 + (byte) processChars::i#10 + [252] (byte~) processChars::$32 ← (byte~) processChars::$65 << (byte) 1 + [253] (struct ProcessingSprite*) processChars::processing#0 ← (const struct ProcessingSprite*) PROCESSING + (byte~) processChars::$32 + [254] (byte) processChars::bitmask#0 ← (byte) 1 << *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID) + [255] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)==(const byte) STATUS_FREE) goto processChars::@2 to:processChars::@10 processChars::@10: scope:[processChars] from processChars::@1 - [264] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)!=(const byte) STATUS_NEW) goto processChars::@3 + [256] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)!=(const byte) STATUS_NEW) goto processChars::@3 to:processChars::@11 processChars::@11: scope:[processChars] from processChars::@10 - [265] *(*((byte**)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR)) ← (byte) ' ' - [266] *((const byte*) SPRITES_ENABLE) ← *((const byte*) SPRITES_ENABLE) | (byte) processChars::bitmask#0 - [267] *((const byte*) SPRITES_COLS + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL) - [268] *((const byte*) SCREEN+(const word) SPRITE_PTRS + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR) - [269] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_PROCESSING + [257] *(*((byte**)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR)) ← (byte) ' ' + [258] *((const byte*) SPRITES_ENABLE) ← *((const byte*) SPRITES_ENABLE) | (byte) processChars::bitmask#0 + [259] *((const byte*) SPRITES_COLS + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL) + [260] *((const byte*) SCREEN+(const word) SPRITE_PTRS + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR) + [261] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_PROCESSING to:processChars::@3 processChars::@3: scope:[processChars] from processChars::@10 processChars::@11 - [270] (word) processChars::xpos#0 ← *((word*)(struct ProcessingSprite*) processChars::processing#0) >> (byte) 4 - [271] (byte~) processChars::$9 ← > (word) processChars::xpos#0 - [272] if((byte) 0!=(byte~) processChars::$9) goto processChars::@4 + [262] (word) processChars::xpos#0 ← *((word*)(struct ProcessingSprite*) processChars::processing#0) >> (byte) 4 + [263] (byte~) processChars::$9 ← > (word) processChars::xpos#0 + [264] if((byte) 0!=(byte~) processChars::$9) goto processChars::@4 to:processChars::@8 processChars::@8: scope:[processChars] from processChars::@3 - [273] (byte~) processChars::$10 ← (byte) $ff ^ (byte) processChars::bitmask#0 - [274] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) & (byte~) processChars::$10 + [265] (byte~) processChars::$10 ← (byte) $ff ^ (byte) processChars::bitmask#0 + [266] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) & (byte~) processChars::$10 to:processChars::@5 processChars::@5: scope:[processChars] from processChars::@4 processChars::@8 - [275] (byte~) processChars::$15 ← (byte) processChars::i#10 << (byte) 1 - [276] (byte~) processChars::$12 ← (byte)(word) processChars::xpos#0 - [277] *((const byte*) SPRITES_XPOS + (byte~) processChars::$15) ← (byte~) processChars::$12 - [278] (word~) processChars::$13 ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) >> (byte) 4 - [279] (byte) processChars::ypos#0 ← (byte)(word~) processChars::$13 - [280] *((const byte*) SPRITES_YPOS + (byte~) processChars::$15) ← (byte) processChars::ypos#0 - [281] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)<(const word) XPOS_LEFTMOST) goto processChars::@6 + [267] (byte~) processChars::$15 ← (byte) processChars::i#10 << (byte) 1 + [268] (byte~) processChars::$12 ← (byte)(word) processChars::xpos#0 + [269] *((const byte*) SPRITES_XPOS + (byte~) processChars::$15) ← (byte~) processChars::$12 + [270] (word~) processChars::$13 ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) >> (byte) 4 + [271] (byte) processChars::ypos#0 ← (byte)(word~) processChars::$13 + [272] *((const byte*) SPRITES_YPOS + (byte~) processChars::$15) ← (byte) processChars::ypos#0 + [273] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)<(const word) XPOS_LEFTMOST) goto processChars::@6 to:processChars::@14 processChars::@14: scope:[processChars] from processChars::@5 - [282] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)>(const word) XPOS_RIGHTMOST) goto processChars::@6 + [274] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)>(const word) XPOS_RIGHTMOST) goto processChars::@6 to:processChars::@13 processChars::@13: scope:[processChars] from processChars::@14 - [283] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)<(const word) YPOS_TOPMOST) goto processChars::@6 + [275] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)<(const word) YPOS_TOPMOST) goto processChars::@6 to:processChars::@12 processChars::@12: scope:[processChars] from processChars::@13 - [284] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)>(const word) YPOS_BOTTOMMOST) goto processChars::@6 + [276] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)>(const word) YPOS_BOTTOMMOST) goto processChars::@6 to:processChars::@9 processChars::@9: scope:[processChars] from processChars::@12 - [285] (word~) processChars::$23 ← (word) processChars::xpos#0 >> (byte) 3 - [286] (byte~) processChars::$24 ← (byte)(word~) processChars::$23 - [287] (byte) processChars::xchar#0 ← (byte~) processChars::$24 - (const byte) BORDER_XPOS_LEFT/(byte) 8 - [288] (byte~) processChars::$33 ← (byte) processChars::xchar#0 << (byte) 1 - [289] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) + *((const word*) VXSIN + (byte~) processChars::$33) - [290] *((word*)(struct ProcessingSprite*) processChars::processing#0) ← *((word*)(struct ProcessingSprite*) processChars::processing#0) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) - [291] (byte~) processChars::$27 ← (byte) processChars::ypos#0 >> (byte) 3 - [292] (byte) processChars::ychar#0 ← (byte~) processChars::$27 - (const byte) BORDER_YPOS_TOP/(byte) 8 - [293] (byte~) processChars::$34 ← (byte) processChars::ychar#0 << (byte) 1 - [294] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) + *((const word*) VYSIN + (byte~) processChars::$34) - [295] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) + [277] (word~) processChars::$23 ← (word) processChars::xpos#0 >> (byte) 3 + [278] (byte~) processChars::$24 ← (byte)(word~) processChars::$23 + [279] (byte) processChars::xchar#0 ← (byte~) processChars::$24 - (const byte) BORDER_XPOS_LEFT/(byte) 8 + [280] (byte~) processChars::$33 ← (byte) processChars::xchar#0 << (byte) 1 + [281] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) + *((const word*) VXSIN + (byte~) processChars::$33) + [282] *((word*)(struct ProcessingSprite*) processChars::processing#0) ← *((word*)(struct ProcessingSprite*) processChars::processing#0) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) + [283] (byte~) processChars::$27 ← (byte) processChars::ypos#0 >> (byte) 3 + [284] (byte) processChars::ychar#0 ← (byte~) processChars::$27 - (const byte) BORDER_YPOS_TOP/(byte) 8 + [285] (byte~) processChars::$34 ← (byte) processChars::ychar#0 << (byte) 1 + [286] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) + *((const word*) VYSIN + (byte~) processChars::$34) + [287] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) to:processChars::@7 processChars::@7: scope:[processChars] from processChars::@6 processChars::@9 - [296] (byte) processChars::numActive#1 ← ++ (byte) processChars::numActive#10 + [288] (byte) processChars::numActive#1 ← ++ (byte) processChars::numActive#10 to:processChars::@2 processChars::@2: scope:[processChars] from processChars::@1 processChars::@7 - [297] (byte) processChars::numActive#3 ← phi( processChars::@1/(byte) processChars::numActive#10 processChars::@7/(byte) processChars::numActive#1 ) - [298] (byte) processChars::i#1 ← ++ (byte) processChars::i#10 - [299] if((byte) processChars::i#1!=(const byte) NUM_PROCESSING-(byte) 1+(byte) 1) goto processChars::@1 + [289] (byte) processChars::numActive#3 ← phi( processChars::@1/(byte) processChars::numActive#10 processChars::@7/(byte) processChars::numActive#1 ) + [290] (byte) processChars::i#1 ← ++ (byte) processChars::i#10 + [291] if((byte) processChars::i#1!=(const byte) NUM_PROCESSING-(byte) 1+(byte) 1) goto processChars::@1 to:processChars::@return processChars::@return: scope:[processChars] from processChars::@2 - [300] return + [292] return to:@return processChars::@6: scope:[processChars] from processChars::@12 processChars::@13 processChars::@14 processChars::@5 - [301] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_FREE - [302] (byte~) processChars::$29 ← (byte) $ff ^ (byte) processChars::bitmask#0 - [303] *((const byte*) SPRITES_ENABLE) ← *((const byte*) SPRITES_ENABLE) & (byte~) processChars::$29 + [293] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_FREE + [294] (byte~) processChars::$29 ← (byte) $ff ^ (byte) processChars::bitmask#0 + [295] *((const byte*) SPRITES_ENABLE) ← *((const byte*) SPRITES_ENABLE) & (byte~) processChars::$29 to:processChars::@7 processChars::@4: scope:[processChars] from processChars::@3 - [304] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) | (byte) processChars::bitmask#0 + [296] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) | (byte) processChars::bitmask#0 to:processChars::@5 interrupt(HARDWARE_ALL)(void()) irqTop() irqTop: scope:[irqTop] from - [305] phi() + [297] phi() to:irqTop::@1 irqTop::@1: scope:[irqTop] from irqTop - [306] *((const byte*) RASTER) ← (const byte) RASTER_IRQ_MIDDLE - [307] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_ALL)(void()) irqBottom() - [308] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER + [298] *((const byte*) RASTER) ← (const byte) RASTER_IRQ_MIDDLE + [299] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_ALL)(void()) irqBottom() + [300] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER to:irqTop::@return irqTop::@return: scope:[irqTop] from irqTop::@1 - [309] return + [301] return to:@return diff --git a/src/test/ref/complex/clearscreen/clearscreen.log b/src/test/ref/complex/clearscreen/clearscreen.log index f442a2ccf..2c0609aaa 100644 --- a/src/test/ref/complex/clearscreen/clearscreen.log +++ b/src/test/ref/complex/clearscreen/clearscreen.log @@ -42,15 +42,7 @@ 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 member variable copy *((word*~) main::$11 + (byte~) main::$10) ← (word) 0 -Adding struct value member variable copy *((word*~) main::$12 + (byte~) main::$10) ← (word) 0 -Adding struct value member variable copy *((word*~) main::$13 + (byte~) main::$10) ← (word) 0 -Adding struct value member variable copy *((word*~) main::$14 + (byte~) main::$10) ← (word) 0 -Adding struct value member variable copy *((byte*~) main::$15 + (byte~) main::$10) ← (byte) 0 -Adding struct value member variable copy *((byte*~) main::$16 + (byte~) main::$10) ← (byte) 0 -Adding struct value member variable copy *((byte*~) main::$17 + (byte~) main::$10) ← (byte) 0 -Adding struct value member variable copy *((byte*~) main::$18 + (byte~) main::$10) ← (const byte) STATUS_FREE -Adding struct value member variable copy *((byte**~) main::$19 + (byte~) main::$10) ← (byte*)(number) 0 +Adding struct value member variable copy *((const struct ProcessingSprite*) PROCESSING + (byte~) main::$10) ← memcpy(*(&(const struct ProcessingSprite) $2), struct ProcessingSprite, (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE) Converted procedure call LValue to member unwinding { (byte~) main::$5_x, (byte~) main::$5_y, (byte~) main::$5_dist } ← call getCharToProcess Adding struct value member variable copy (byte) main::center_x ← (byte~) main::$5_x Adding struct value member variable copy (byte) main::center_y ← (byte~) main::$5_y @@ -491,24 +483,7 @@ main::@7: scope:[main] from main::@3 main::@7 (byte*) SCREEN_COPY#20 ← phi( main::@3/(byte*) SCREEN_COPY#22 main::@7/(byte*) SCREEN_COPY#20 ) (byte) main::i#2 ← phi( main::@3/(byte) main::i#0 main::@7/(byte) main::i#1 ) (byte~) main::$10 ← (byte) main::i#2 * (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE - (word*~) main::$11 ← (word*)(const struct ProcessingSprite*) PROCESSING + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X - *((word*~) main::$11 + (byte~) main::$10) ← (word) 0 - (word*~) main::$12 ← (word*)(const struct ProcessingSprite*) PROCESSING + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y - *((word*~) main::$12 + (byte~) main::$10) ← (word) 0 - (word*~) main::$13 ← (word*)(const struct ProcessingSprite*) PROCESSING + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX - *((word*~) main::$13 + (byte~) main::$10) ← (word) 0 - (word*~) main::$14 ← (word*)(const struct ProcessingSprite*) PROCESSING + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY - *((word*~) main::$14 + (byte~) main::$10) ← (word) 0 - (byte*~) main::$15 ← (byte*)(const struct ProcessingSprite*) PROCESSING + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID - *((byte*~) main::$15 + (byte~) main::$10) ← (byte) 0 - (byte*~) main::$16 ← (byte*)(const struct ProcessingSprite*) PROCESSING + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR - *((byte*~) main::$16 + (byte~) main::$10) ← (byte) 0 - (byte*~) main::$17 ← (byte*)(const struct ProcessingSprite*) PROCESSING + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL - *((byte*~) main::$17 + (byte~) main::$10) ← (byte) 0 - (byte*~) main::$18 ← (byte*)(const struct ProcessingSprite*) PROCESSING + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS - *((byte*~) main::$18 + (byte~) main::$10) ← (const byte) STATUS_FREE - (byte**~) main::$19 ← (byte**)(const struct ProcessingSprite*) PROCESSING + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR - *((byte**~) main::$19 + (byte~) main::$10) ← (byte*)(number) 0 + *((const struct ProcessingSprite*) PROCESSING + (byte~) main::$10) ← memcpy(*(&(const struct ProcessingSprite) $2), struct ProcessingSprite, (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE) (byte) main::i#1 ← (byte) main::i#2 + rangenext(0,NUM_PROCESSING-1) (bool~) main::$4 ← (byte) main::i#1 != rangelast(0,NUM_PROCESSING-1) if((bool~) main::$4) goto main::@7 @@ -1246,6 +1221,7 @@ irqBottom::@return: scope:[irqBottom] from irqBottom::@2 SYMBOL TABLE SSA (void*~) $0 (void*~) $1 +(const struct ProcessingSprite) $2 = { x: (word) 0, y: (word) 0, vx: (word) 0, vy: (word) 0, id: (byte) 0, ptr: (byte) 0, col: (byte) 0, status: (const byte) STATUS_FREE, screenPtr: (byte*)(number) 0 } (label) @27 (label) @37 (label) @38 @@ -1829,15 +1805,6 @@ interrupt(HARDWARE_ALL)(void()) irqTop() (byte) irqTop::i1#2 (void()) main() (byte~) main::$10 -(word*~) main::$11 -(word*~) main::$12 -(word*~) main::$13 -(word*~) main::$14 -(byte*~) main::$15 -(byte*~) main::$16 -(byte*~) main::$17 -(byte*~) main::$18 -(byte**~) main::$19 (bool~) main::$3 (bool~) main::$4 (struct ProcessingChar~) main::$5 @@ -2348,6 +2315,7 @@ Simplifying constant integer cast 4 Simplifying constant integer cast 8 Simplifying constant integer cast 4 Simplifying constant integer cast 4 +Simplifying constant pointer cast (byte*) 0 Simplifying constant pointer cast (byte*) 40960 Simplifying constant integer cast 0 Simplifying constant integer cast 0 @@ -2368,7 +2336,6 @@ Simplifying constant integer cast $8000 Simplifying constant integer cast $3e8 Simplifying constant integer cast $3e8 Simplifying constant integer cast $3e8 -Simplifying constant pointer cast (byte*) 0 Simplifying constant integer cast 1 Simplifying constant integer cast $3e7 Simplifying constant integer cast $3e7 @@ -2532,13 +2499,13 @@ Inversing boolean not [33] (bool~) atan2_16::$17 ← (signed word) atan2_16::yi# Inversing boolean not [42] (bool~) atan2_16::$11 ← (signed word) atan2_16::x#4 >= (signed byte) 0 from [41] (bool~) atan2_16::$10 ← (signed word) atan2_16::x#4 < (signed byte) 0 Inversing boolean not [53] (bool~) atan2_16::$19 ← (byte) 0 == (byte) atan2_16::shift#4 from [52] (bool~) atan2_16::$24 ← (byte) 0 != (byte) atan2_16::shift#4 Inversing boolean not [77] (bool~) atan2_16::$14 ← (signed word) atan2_16::y#4 >= (signed byte) 0 from [76] (bool~) atan2_16::$13 ← (signed word) atan2_16::y#4 < (signed byte) 0 -Inversing boolean not [163] (bool~) main::$7 ← (byte) main::center_dist#0 != (const byte) NOT_FOUND from [162] (bool~) main::$6 ← (byte) main::center_dist#0 == (const byte) NOT_FOUND -Inversing boolean not [187] (bool~) getCharToProcess::$3 ← *((byte*) getCharToProcess::screen_line#2 + (byte) getCharToProcess::x#2) == (byte) ' ' from [186] (bool~) getCharToProcess::$2 ← *((byte*) getCharToProcess::screen_line#2 + (byte) getCharToProcess::x#2) != (byte) ' ' -Inversing boolean not [196] (bool~) getCharToProcess::$5 ← (byte) getCharToProcess::dist#0 >= (byte) getCharToProcess::closest_dist#2 from [195] (bool~) getCharToProcess::$4 ← (byte) getCharToProcess::dist#0 < (byte) getCharToProcess::closest_dist#2 -Inversing boolean not [210] (bool~) getCharToProcess::$1 ← (byte) getCharToProcess::closest_dist#3 == (const byte) NOT_FOUND from [209] (bool~) getCharToProcess::$0 ← (byte) getCharToProcess::closest_dist#3 != (const byte) NOT_FOUND -Inversing boolean not [237] (bool~) startProcessing::$23 ← *((byte*~) startProcessing::$38 + (byte~) startProcessing::$27) != (const byte) STATUS_FREE from [236] (bool~) startProcessing::$22 ← *((byte*~) startProcessing::$38 + (byte~) startProcessing::$27) == (const byte) STATUS_FREE -Inversing boolean not [326] (bool~) processChars::$4 ← *((byte*~) processChars::$36) == (const byte) STATUS_FREE from [325] (bool~) processChars::$3 ← *((byte*~) processChars::$36) != (const byte) STATUS_FREE -Inversing boolean not [335] (bool~) processChars::$6 ← *((byte*~) processChars::$37) != (const byte) STATUS_NEW from [334] (bool~) processChars::$5 ← *((byte*~) processChars::$37) == (const byte) STATUS_NEW +Inversing boolean not [146] (bool~) main::$7 ← (byte) main::center_dist#0 != (const byte) NOT_FOUND from [145] (bool~) main::$6 ← (byte) main::center_dist#0 == (const byte) NOT_FOUND +Inversing boolean not [170] (bool~) getCharToProcess::$3 ← *((byte*) getCharToProcess::screen_line#2 + (byte) getCharToProcess::x#2) == (byte) ' ' from [169] (bool~) getCharToProcess::$2 ← *((byte*) getCharToProcess::screen_line#2 + (byte) getCharToProcess::x#2) != (byte) ' ' +Inversing boolean not [179] (bool~) getCharToProcess::$5 ← (byte) getCharToProcess::dist#0 >= (byte) getCharToProcess::closest_dist#2 from [178] (bool~) getCharToProcess::$4 ← (byte) getCharToProcess::dist#0 < (byte) getCharToProcess::closest_dist#2 +Inversing boolean not [193] (bool~) getCharToProcess::$1 ← (byte) getCharToProcess::closest_dist#3 == (const byte) NOT_FOUND from [192] (bool~) getCharToProcess::$0 ← (byte) getCharToProcess::closest_dist#3 != (const byte) NOT_FOUND +Inversing boolean not [220] (bool~) startProcessing::$23 ← *((byte*~) startProcessing::$38 + (byte~) startProcessing::$27) != (const byte) STATUS_FREE from [219] (bool~) startProcessing::$22 ← *((byte*~) startProcessing::$38 + (byte~) startProcessing::$27) == (const byte) STATUS_FREE +Inversing boolean not [309] (bool~) processChars::$4 ← *((byte*~) processChars::$36) == (const byte) STATUS_FREE from [308] (bool~) processChars::$3 ← *((byte*~) processChars::$36) != (const byte) STATUS_FREE +Inversing boolean not [318] (bool~) processChars::$6 ← *((byte*~) processChars::$37) != (const byte) STATUS_NEW from [317] (bool~) processChars::$5 ← *((byte*~) processChars::$37) == (const byte) STATUS_NEW Successful SSA optimization Pass2UnaryNotSimplification Alias (byte*) malloc::mem#0 = (byte*~) malloc::$0 Alias (void*) malloc::return#0 = (void*) malloc::return#4 (void*) malloc::return#1 @@ -2763,7 +2730,7 @@ Identical Phi Values (byte) getCharToProcess::y#2 (byte) getCharToProcess::y#7 Identical Phi Values (byte) startProcessing::center_y#8 (byte) startProcessing::center_y#0 Identical Phi Values (byte) startProcessing::center_x#8 (byte) startProcessing::center_x#0 Successful SSA optimization Pass2IdenticalPhiElimination -Identified duplicate assignment right side [370] (byte~) processChars::$15 ← (byte) processChars::i#10 * (byte) 2 +Identified duplicate assignment right side [353] (byte~) processChars::$15 ← (byte) processChars::i#10 * (byte) 2 Successful SSA optimization Pass2DuplicateRValueIdentification Simple Condition (bool~) atan2_16::$0 [12] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 Simple Condition (bool~) atan2_16::$5 [21] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 @@ -2775,58 +2742,49 @@ Simple Condition (bool~) atan2_16::$20 [57] if((signed word) atan2_16::yi#3>=(si Simple Condition (bool~) atan2_16::$21 [74] if((byte) atan2_16::i#1!=rangelast(0,CORDIC_ITERATIONS_16-1)) goto atan2_16::@15 Simple Condition (bool~) atan2_16::$14 [78] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 Simple Condition (bool~) main::$3 [113] if((byte*) main::src#2!=(const byte*) SCREEN+(word) $3e8) goto main::@2 -Simple Condition (bool~) main::$4 [142] if((byte) main::i#1!=rangelast(0,NUM_PROCESSING-1)) goto main::@7 -Simple Condition (bool~) main::$7 [164] if((byte) main::center_dist#0!=(const byte) NOT_FOUND) goto main::@10 -Simple Condition (bool~) getCharToProcess::$3 [188] if(*((byte*) getCharToProcess::screen_line#4 + (byte) getCharToProcess::x#2)==(byte) ' ') goto getCharToProcess::@5 -Simple Condition (bool~) getCharToProcess::$6 [192] if((byte) getCharToProcess::x#1!=rangelast(0,$27)) goto getCharToProcess::@4 -Simple Condition (bool~) getCharToProcess::$5 [197] if((byte) getCharToProcess::dist#0>=(byte) getCharToProcess::closest_dist#2) goto getCharToProcess::@5 -Simple Condition (bool~) getCharToProcess::$7 [207] if((byte) getCharToProcess::y#1!=rangelast(0,$18)) goto getCharToProcess::@3 -Simple Condition (bool~) getCharToProcess::$1 [211] if((byte) getCharToProcess::return_dist#1==(const byte) NOT_FOUND) goto getCharToProcess::@1 -Simple Condition (bool~) startProcessing::$23 [238] if(*((byte*~) startProcessing::$38 + (byte~) startProcessing::$27)!=(const byte) STATUS_FREE) goto startProcessing::@3 -Simple Condition (bool~) startProcessing::$24 [242] if((byte) startProcessing::i#1!=rangelast(0,NUM_PROCESSING-1)) goto startProcessing::@2 -Simple Condition (bool~) startProcessing::$25 [247] if((byte) startProcessing::freeIdx#2==(byte) $ff) goto startProcessing::@1 -Simple Condition (bool~) startProcessing::$26 [277] if((byte) startProcessing::i1#1!=rangelast(0,7)) goto startProcessing::@9 -Simple Condition (bool~) processChars::$4 [327] if(*((byte*~) processChars::$36)==(const byte) STATUS_FREE) goto processChars::@3 -Simple Condition (bool~) processChars::$30 [331] if((byte) processChars::i#1!=rangelast(0,NUM_PROCESSING-1)) goto processChars::@2 -Simple Condition (bool~) processChars::$6 [336] if(*((byte*~) processChars::$37)!=(const byte) STATUS_NEW) goto processChars::@4 -Simple Condition (bool~) processChars::$61 [343] if((byte) 0!=(byte~) processChars::$9) goto processChars::@5 -Simple Condition (bool~) init_angle_screen::$2 [434] if((byte) init_angle_screen::x#2<=(byte) $13) goto init_angle_screen::@3 -Simple Condition (bool~) init_angle_screen::$16 [471] if((byte) init_angle_screen::y#1!=rangelast(0,$c)) goto init_angle_screen::@1 -Simple Condition (bool~) initSprites::$0 [476] if((byte*) initSprites::sp#2<(const byte*) SPRITE_DATA+(const byte) NUM_PROCESSING*(byte) $40) goto initSprites::@2 -Simple Condition (bool~) initSprites::$1 [485] if((byte) initSprites::i#1!=rangelast(0,7)) goto initSprites::@7 -Simple Condition (bool~) setupRasterIrq::$0 [496] if((word) setupRasterIrq::raster#0<(word) $100) goto setupRasterIrq::@1 -Simple Condition (bool~) irqTop::$1 [517] if((byte) irqTop::i#1!=rangelast(0,4)) goto irqTop::@3 -Simple Condition (bool~) irqTop::$2 [524] if((byte) irqTop::i1#1!=rangelast(0,7)) goto irqTop::@5 -Simple Condition (bool~) irqBottom::$3 [537] if((byte) irqBottom::i#1!=rangelast(0,4)) goto irqBottom::@5 +Simple Condition (bool~) main::$4 [125] if((byte) main::i#1!=rangelast(0,NUM_PROCESSING-1)) goto main::@7 +Simple Condition (bool~) main::$7 [147] if((byte) main::center_dist#0!=(const byte) NOT_FOUND) goto main::@10 +Simple Condition (bool~) getCharToProcess::$3 [171] if(*((byte*) getCharToProcess::screen_line#4 + (byte) getCharToProcess::x#2)==(byte) ' ') goto getCharToProcess::@5 +Simple Condition (bool~) getCharToProcess::$6 [175] if((byte) getCharToProcess::x#1!=rangelast(0,$27)) goto getCharToProcess::@4 +Simple Condition (bool~) getCharToProcess::$5 [180] if((byte) getCharToProcess::dist#0>=(byte) getCharToProcess::closest_dist#2) goto getCharToProcess::@5 +Simple Condition (bool~) getCharToProcess::$7 [190] if((byte) getCharToProcess::y#1!=rangelast(0,$18)) goto getCharToProcess::@3 +Simple Condition (bool~) getCharToProcess::$1 [194] if((byte) getCharToProcess::return_dist#1==(const byte) NOT_FOUND) goto getCharToProcess::@1 +Simple Condition (bool~) startProcessing::$23 [221] if(*((byte*~) startProcessing::$38 + (byte~) startProcessing::$27)!=(const byte) STATUS_FREE) goto startProcessing::@3 +Simple Condition (bool~) startProcessing::$24 [225] if((byte) startProcessing::i#1!=rangelast(0,NUM_PROCESSING-1)) goto startProcessing::@2 +Simple Condition (bool~) startProcessing::$25 [230] if((byte) startProcessing::freeIdx#2==(byte) $ff) goto startProcessing::@1 +Simple Condition (bool~) startProcessing::$26 [260] if((byte) startProcessing::i1#1!=rangelast(0,7)) goto startProcessing::@9 +Simple Condition (bool~) processChars::$4 [310] if(*((byte*~) processChars::$36)==(const byte) STATUS_FREE) goto processChars::@3 +Simple Condition (bool~) processChars::$30 [314] if((byte) processChars::i#1!=rangelast(0,NUM_PROCESSING-1)) goto processChars::@2 +Simple Condition (bool~) processChars::$6 [319] if(*((byte*~) processChars::$37)!=(const byte) STATUS_NEW) goto processChars::@4 +Simple Condition (bool~) processChars::$61 [326] if((byte) 0!=(byte~) processChars::$9) goto processChars::@5 +Simple Condition (bool~) init_angle_screen::$2 [417] if((byte) init_angle_screen::x#2<=(byte) $13) goto init_angle_screen::@3 +Simple Condition (bool~) init_angle_screen::$16 [454] if((byte) init_angle_screen::y#1!=rangelast(0,$c)) goto init_angle_screen::@1 +Simple Condition (bool~) initSprites::$0 [459] if((byte*) initSprites::sp#2<(const byte*) SPRITE_DATA+(const byte) NUM_PROCESSING*(byte) $40) goto initSprites::@2 +Simple Condition (bool~) initSprites::$1 [468] if((byte) initSprites::i#1!=rangelast(0,7)) goto initSprites::@7 +Simple Condition (bool~) setupRasterIrq::$0 [479] if((word) setupRasterIrq::raster#0<(word) $100) goto setupRasterIrq::@1 +Simple Condition (bool~) irqTop::$1 [500] if((byte) irqTop::i#1!=rangelast(0,4)) goto irqTop::@3 +Simple Condition (bool~) irqTop::$2 [507] if((byte) irqTop::i1#1!=rangelast(0,7)) goto irqTop::@5 +Simple Condition (bool~) irqBottom::$3 [520] if((byte) irqBottom::i#1!=rangelast(0,4)) goto irqBottom::@5 Successful SSA optimization Pass2ConditionalJumpSimplification -Rewriting || if()-condition to two if()s [382] (bool~) processChars::$22 ← (bool~) processChars::$20 || (bool~) processChars::$21 -Rewriting || if()-condition to two if()s [379] (bool~) processChars::$20 ← (bool~) processChars::$18 || (bool~) processChars::$19 -Rewriting || if()-condition to two if()s [376] (bool~) processChars::$18 ← (bool~) processChars::$16 || (bool~) processChars::$17 -Rewriting ! if()-condition to reversed if() [417] (bool~) processChars::$0 ← ! (const bool) DEBUG -Rewriting ! if()-condition to reversed if() [508] (bool~) irqTop::$0 ← ! (const bool) DEBUG -Rewriting ! if()-condition to reversed if() [528] (bool~) irqBottom::$0 ← ! (const bool) DEBUG -Rewriting ! if()-condition to reversed if() [531] (bool~) irqBottom::$2 ← ! (const bool) DEBUG +Rewriting || if()-condition to two if()s [365] (bool~) processChars::$22 ← (bool~) processChars::$20 || (bool~) processChars::$21 +Rewriting || if()-condition to two if()s [362] (bool~) processChars::$20 ← (bool~) processChars::$18 || (bool~) processChars::$19 +Rewriting || if()-condition to two if()s [359] (bool~) processChars::$18 ← (bool~) processChars::$16 || (bool~) processChars::$17 +Rewriting ! if()-condition to reversed if() [400] (bool~) processChars::$0 ← ! (const bool) DEBUG +Rewriting ! if()-condition to reversed if() [491] (bool~) irqTop::$0 ← ! (const bool) DEBUG +Rewriting ! if()-condition to reversed if() [511] (bool~) irqBottom::$0 ← ! (const bool) DEBUG +Rewriting ! if()-condition to reversed if() [514] (bool~) irqBottom::$2 ← ! (const bool) DEBUG Successful SSA optimization Pass2ConditionalAndOrRewriting Negating conditional jump and destination [74] if((byte) atan2_16::i#1==rangelast(0,CORDIC_ITERATIONS_16-1)) goto atan2_16::@17 -Constant right-side identified [122] (word*~) main::$11 ← (word*)(const struct ProcessingSprite*) PROCESSING + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X -Constant right-side identified [124] (word*~) main::$12 ← (word*)(const struct ProcessingSprite*) PROCESSING + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y -Constant right-side identified [126] (word*~) main::$13 ← (word*)(const struct ProcessingSprite*) PROCESSING + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX -Constant right-side identified [128] (word*~) main::$14 ← (word*)(const struct ProcessingSprite*) PROCESSING + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY -Constant right-side identified [130] (byte*~) main::$15 ← (byte*)(const struct ProcessingSprite*) PROCESSING + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID -Constant right-side identified [132] (byte*~) main::$16 ← (byte*)(const struct ProcessingSprite*) PROCESSING + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR -Constant right-side identified [134] (byte*~) main::$17 ← (byte*)(const struct ProcessingSprite*) PROCESSING + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL -Constant right-side identified [136] (byte*~) main::$18 ← (byte*)(const struct ProcessingSprite*) PROCESSING + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS -Constant right-side identified [138] (byte**~) main::$19 ← (byte**)(const struct ProcessingSprite*) PROCESSING + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR -Constant right-side identified [235] (byte*~) startProcessing::$38 ← (byte*)(const struct ProcessingSprite*) PROCESSING + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS -Constant right-side identified [296] (word*~) startProcessing::$29 ← (word*)(const struct ProcessingSprite*) PROCESSING + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X -Constant right-side identified [298] (word*~) startProcessing::$30 ← (word*)(const struct ProcessingSprite*) PROCESSING + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y -Constant right-side identified [300] (word*~) startProcessing::$31 ← (word*)(const struct ProcessingSprite*) PROCESSING + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX -Constant right-side identified [302] (word*~) startProcessing::$32 ← (word*)(const struct ProcessingSprite*) PROCESSING + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY -Constant right-side identified [304] (byte*~) startProcessing::$33 ← (byte*)(const struct ProcessingSprite*) PROCESSING + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID -Constant right-side identified [306] (byte*~) startProcessing::$34 ← (byte*)(const struct ProcessingSprite*) PROCESSING + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR -Constant right-side identified [308] (byte*~) startProcessing::$35 ← (byte*)(const struct ProcessingSprite*) PROCESSING + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL -Constant right-side identified [310] (byte*~) startProcessing::$36 ← (byte*)(const struct ProcessingSprite*) PROCESSING + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS -Constant right-side identified [312] (byte**~) startProcessing::$37 ← (byte**)(const struct ProcessingSprite*) PROCESSING + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR +Constant right-side identified [218] (byte*~) startProcessing::$38 ← (byte*)(const struct ProcessingSprite*) PROCESSING + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS +Constant right-side identified [279] (word*~) startProcessing::$29 ← (word*)(const struct ProcessingSprite*) PROCESSING + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X +Constant right-side identified [281] (word*~) startProcessing::$30 ← (word*)(const struct ProcessingSprite*) PROCESSING + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y +Constant right-side identified [283] (word*~) startProcessing::$31 ← (word*)(const struct ProcessingSprite*) PROCESSING + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX +Constant right-side identified [285] (word*~) startProcessing::$32 ← (word*)(const struct ProcessingSprite*) PROCESSING + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY +Constant right-side identified [287] (byte*~) startProcessing::$33 ← (byte*)(const struct ProcessingSprite*) PROCESSING + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID +Constant right-side identified [289] (byte*~) startProcessing::$34 ← (byte*)(const struct ProcessingSprite*) PROCESSING + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR +Constant right-side identified [291] (byte*~) startProcessing::$35 ← (byte*)(const struct ProcessingSprite*) PROCESSING + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL +Constant right-side identified [293] (byte*~) startProcessing::$36 ← (byte*)(const struct ProcessingSprite*) PROCESSING + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS +Constant right-side identified [295] (byte**~) startProcessing::$37 ← (byte**)(const struct ProcessingSprite*) PROCESSING + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte*) heap_head#0 = HEAP_TOP Constant (const word) atan2_16::angle#0 = 0 @@ -2835,15 +2793,6 @@ Constant (const word) malloc::size#0 = $3e8 Constant (const word) malloc::size#1 = $3e8 Constant (const byte*) main::src#0 = SCREEN Constant (const byte) main::i#0 = 0 -Constant (const word*) main::$11 = (word*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_X -Constant (const word*) main::$12 = (word*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y -Constant (const word*) main::$13 = (word*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX -Constant (const word*) main::$14 = (word*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY -Constant (const byte*) main::$15 = (byte*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_ID -Constant (const byte*) main::$16 = (byte*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_PTR -Constant (const byte*) main::$17 = (byte*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_COL -Constant (const byte*) main::$18 = (byte*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS -Constant (const byte**) main::$19 = (byte**)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR Constant (const word) setupRasterIrq::raster#0 = RASTER_IRQ_TOP Constant (const void()*) setupRasterIrq::irqRoutine#0 = &irqTop Constant (const byte) getCharToProcess::closest_x#0 = 0 @@ -2875,112 +2824,111 @@ Constant (const byte) irqTop::i#0 = 0 Constant (const byte) irqTop::i1#0 = 0 Constant (const byte) irqBottom::i#0 = 0 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [171] if(true) goto main::@9 -if() condition always true - replacing block destination [174] if(true) goto main::@15 -if() condition always false - eliminating [418] if((const bool) DEBUG) goto processChars::@16 -if() condition always true - replacing block destination [496] if((const word) setupRasterIrq::raster#0<(word) $100) goto setupRasterIrq::@1 -if() condition always false - eliminating [509] if((const bool) DEBUG) goto irqTop::@2 -if() condition always false - eliminating [529] if((const bool) DEBUG) goto irqBottom::@3 -if() condition always false - eliminating [532] if((const bool) DEBUG) goto irqBottom::@4 +if() condition always true - replacing block destination [154] if(true) goto main::@9 +if() condition always true - replacing block destination [157] if(true) goto main::@15 +if() condition always false - eliminating [401] if((const bool) DEBUG) goto processChars::@16 +if() condition always true - replacing block destination [479] if((const word) setupRasterIrq::raster#0<(word) $100) goto setupRasterIrq::@1 +if() condition always false - eliminating [492] if((const bool) DEBUG) goto irqTop::@2 +if() condition always false - eliminating [512] if((const bool) DEBUG) goto irqBottom::@3 +if() condition always false - eliminating [515] if((const bool) DEBUG) goto irqBottom::@4 Successful SSA optimization Pass2ConstantIfs Resolved ranged next value [72] atan2_16::i#1 ← ++ atan2_16::i#2 to ++ Resolved ranged comparison value [74] if(atan2_16::i#1==rangelast(0,CORDIC_ITERATIONS_16-1)) goto atan2_16::@17 to (const byte) CORDIC_ITERATIONS_16-(byte) 1+(number) 1 -Resolved ranged next value [140] main::i#1 ← ++ main::i#2 to ++ -Resolved ranged comparison value [142] if(main::i#1!=rangelast(0,NUM_PROCESSING-1)) goto main::@7 to (const byte) NUM_PROCESSING-(byte) 1+(number) 1 -Resolved ranged next value [190] getCharToProcess::x#1 ← ++ getCharToProcess::x#2 to ++ -Resolved ranged comparison value [192] if(getCharToProcess::x#1!=rangelast(0,$27)) goto getCharToProcess::@4 to (number) $28 -Resolved ranged next value [205] getCharToProcess::y#1 ← ++ getCharToProcess::y#7 to ++ -Resolved ranged comparison value [207] if(getCharToProcess::y#1!=rangelast(0,$18)) goto getCharToProcess::@3 to (number) $19 -Resolved ranged next value [240] startProcessing::i#1 ← ++ startProcessing::i#2 to ++ -Resolved ranged comparison value [242] if(startProcessing::i#1!=rangelast(0,NUM_PROCESSING-1)) goto startProcessing::@2 to (const byte) NUM_PROCESSING-(byte) 1+(number) 1 -Resolved ranged next value [275] startProcessing::i1#1 ← ++ startProcessing::i1#2 to ++ -Resolved ranged comparison value [277] if(startProcessing::i1#1!=rangelast(0,7)) goto startProcessing::@9 to (number) 8 -Resolved ranged next value [329] processChars::i#1 ← ++ processChars::i#10 to ++ -Resolved ranged comparison value [331] if(processChars::i#1!=rangelast(0,NUM_PROCESSING-1)) goto processChars::@2 to (const byte) NUM_PROCESSING-(byte) 1+(number) 1 -Resolved ranged next value [469] init_angle_screen::y#1 ← ++ init_angle_screen::y#5 to ++ -Resolved ranged comparison value [471] if(init_angle_screen::y#1!=rangelast(0,$c)) goto init_angle_screen::@1 to (number) $d -Resolved ranged next value [483] initSprites::i#1 ← ++ initSprites::i#2 to ++ -Resolved ranged comparison value [485] if(initSprites::i#1!=rangelast(0,7)) goto initSprites::@7 to (number) 8 -Resolved ranged next value [515] irqTop::i#1 ← ++ irqTop::i#2 to ++ -Resolved ranged comparison value [517] if(irqTop::i#1!=rangelast(0,4)) goto irqTop::@3 to (number) 5 -Resolved ranged next value [522] irqTop::i1#1 ← ++ irqTop::i1#2 to ++ -Resolved ranged comparison value [524] if(irqTop::i1#1!=rangelast(0,7)) goto irqTop::@5 to (number) 8 -Resolved ranged next value [535] irqBottom::i#1 ← ++ irqBottom::i#2 to ++ -Resolved ranged comparison value [537] if(irqBottom::i#1!=rangelast(0,4)) goto irqBottom::@5 to (number) 5 -Rewriting conditional comparison [434] if((byte) init_angle_screen::x#2<=(byte) $13) goto init_angle_screen::@3 -Converting *(pointer+n) to pointer[n] [222] *((byte*~) getCharToProcess::$11) ← (byte) ' ' -- *(getCharToProcess::$10 + getCharToProcess::return_x#1) -Converting *(pointer+n) to pointer[n] [322] (byte) processChars::bitmask#0 ← (byte) 1 << *((byte*~) processChars::$35) -- *((byte*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_ID) -Converting *(pointer+n) to pointer[n] [327] if(*((byte*~) processChars::$36)==(const byte) STATUS_FREE) goto processChars::@3 -- *((byte*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) -Converting *(pointer+n) to pointer[n] [336] if(*((byte*~) processChars::$37)!=(const byte) STATUS_NEW) goto processChars::@4 -- *((byte*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) -Converting *(pointer+n) to pointer[n] [339] (word) processChars::xpos#0 ← *((word*~) processChars::$38) >> (byte) 4 -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_X) -Converting *(pointer+n) to pointer[n] [346] *(*((byte**~) processChars::$39)) ← (byte) ' ' -- *((byte**)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR) -Converting *(pointer+n) to pointer[n] [350] *((const byte*) SPRITES_COLS + *((byte*~) processChars::$41)) ← *((byte*~) processChars::$40) -- *((byte*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_COL) -Converting *(pointer+n) to pointer[n] [350] *((const byte*) SPRITES_COLS + *((byte*~) processChars::$41)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL) -- *((byte*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_ID) -Converting *(pointer+n) to pointer[n] [352] (byte*~) processChars::$7 ← (const byte*) SCREEN+(const word) SPRITE_PTRS + *((byte*~) processChars::$42) -- *((byte*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_ID) -Converting *(pointer+n) to pointer[n] [354] *((byte*~) processChars::$7) ← *((byte*~) processChars::$43) -- *((byte*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_PTR) -Converting *(pointer+n) to pointer[n] [354] *((byte*~) processChars::$7) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR) -- *(SCREEN+SPRITE_PTRS + *((byte*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_ID)) -Converting *(pointer+n) to pointer[n] [356] *((byte*~) processChars::$44) ← (const byte) STATUS_PROCESSING -- *((byte*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) -Converting *(pointer+n) to pointer[n] [367] (word~) processChars::$13 ← *((word*~) processChars::$45) >> (byte) 4 -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_Y) -Converting *(pointer+n) to pointer[n] [373] (bool~) processChars::$16 ← *((word*~) processChars::$46) < (const word) XPOS_LEFTMOST -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_X) -Converting *(pointer+n) to pointer[n] [375] (bool~) processChars::$17 ← *((word*~) processChars::$47) > (const word) XPOS_RIGHTMOST -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_X) -Converting *(pointer+n) to pointer[n] [378] (bool~) processChars::$19 ← *((word*~) processChars::$48) < (const word) YPOS_TOPMOST -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_Y) -Converting *(pointer+n) to pointer[n] [381] (bool~) processChars::$21 ← *((word*~) processChars::$49) > (const word) YPOS_BOTTOMMOST -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_Y) -Converting *(pointer+n) to pointer[n] [386] *((byte*~) processChars::$50) ← (const byte) STATUS_FREE -- *((byte*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) -Converting *(pointer+n) to pointer[n] [397] *((word*~) processChars::$52) ← *((word*~) processChars::$51) + *((const word*) VXSIN + (byte~) processChars::$33) -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_VX) -Converting *(pointer+n) to pointer[n] [397] *((word*~) processChars::$52) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) + *((const word*) VXSIN + (byte~) processChars::$33) -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_VX) -Converting *(pointer+n) to pointer[n] [401] *((word*~) processChars::$55) ← *((word*~) processChars::$53) + *((word*~) processChars::$54) -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_X) -Converting *(pointer+n) to pointer[n] [401] *((word*~) processChars::$55) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X) + *((word*~) processChars::$54) -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_VX) -Converting *(pointer+n) to pointer[n] [401] *((word*~) processChars::$55) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_X) -Converting *(pointer+n) to pointer[n] [409] *((word*~) processChars::$57) ← *((word*~) processChars::$56) + *((const word*) VYSIN + (byte~) processChars::$34) -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_VY) -Converting *(pointer+n) to pointer[n] [409] *((word*~) processChars::$57) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) + *((const word*) VYSIN + (byte~) processChars::$34) -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_VY) -Converting *(pointer+n) to pointer[n] [413] *((word*~) processChars::$60) ← *((word*~) processChars::$58) + *((word*~) processChars::$59) -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_Y) -Converting *(pointer+n) to pointer[n] [413] *((word*~) processChars::$60) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) + *((word*~) processChars::$59) -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_VY) -Converting *(pointer+n) to pointer[n] [413] *((word*~) processChars::$60) ← *((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) +Resolved ranged next value [123] main::i#1 ← ++ main::i#2 to ++ +Resolved ranged comparison value [125] if(main::i#1!=rangelast(0,NUM_PROCESSING-1)) goto main::@7 to (const byte) NUM_PROCESSING-(byte) 1+(number) 1 +Resolved ranged next value [173] getCharToProcess::x#1 ← ++ getCharToProcess::x#2 to ++ +Resolved ranged comparison value [175] if(getCharToProcess::x#1!=rangelast(0,$27)) goto getCharToProcess::@4 to (number) $28 +Resolved ranged next value [188] getCharToProcess::y#1 ← ++ getCharToProcess::y#7 to ++ +Resolved ranged comparison value [190] if(getCharToProcess::y#1!=rangelast(0,$18)) goto getCharToProcess::@3 to (number) $19 +Resolved ranged next value [223] startProcessing::i#1 ← ++ startProcessing::i#2 to ++ +Resolved ranged comparison value [225] if(startProcessing::i#1!=rangelast(0,NUM_PROCESSING-1)) goto startProcessing::@2 to (const byte) NUM_PROCESSING-(byte) 1+(number) 1 +Resolved ranged next value [258] startProcessing::i1#1 ← ++ startProcessing::i1#2 to ++ +Resolved ranged comparison value [260] if(startProcessing::i1#1!=rangelast(0,7)) goto startProcessing::@9 to (number) 8 +Resolved ranged next value [312] processChars::i#1 ← ++ processChars::i#10 to ++ +Resolved ranged comparison value [314] if(processChars::i#1!=rangelast(0,NUM_PROCESSING-1)) goto processChars::@2 to (const byte) NUM_PROCESSING-(byte) 1+(number) 1 +Resolved ranged next value [452] init_angle_screen::y#1 ← ++ init_angle_screen::y#5 to ++ +Resolved ranged comparison value [454] if(init_angle_screen::y#1!=rangelast(0,$c)) goto init_angle_screen::@1 to (number) $d +Resolved ranged next value [466] initSprites::i#1 ← ++ initSprites::i#2 to ++ +Resolved ranged comparison value [468] if(initSprites::i#1!=rangelast(0,7)) goto initSprites::@7 to (number) 8 +Resolved ranged next value [498] irqTop::i#1 ← ++ irqTop::i#2 to ++ +Resolved ranged comparison value [500] if(irqTop::i#1!=rangelast(0,4)) goto irqTop::@3 to (number) 5 +Resolved ranged next value [505] irqTop::i1#1 ← ++ irqTop::i1#2 to ++ +Resolved ranged comparison value [507] if(irqTop::i1#1!=rangelast(0,7)) goto irqTop::@5 to (number) 8 +Resolved ranged next value [518] irqBottom::i#1 ← ++ irqBottom::i#2 to ++ +Resolved ranged comparison value [520] if(irqBottom::i#1!=rangelast(0,4)) goto irqBottom::@5 to (number) 5 +Rewriting conditional comparison [417] if((byte) init_angle_screen::x#2<=(byte) $13) goto init_angle_screen::@3 +Converting *(pointer+n) to pointer[n] [205] *((byte*~) getCharToProcess::$11) ← (byte) ' ' -- *(getCharToProcess::$10 + getCharToProcess::return_x#1) +Converting *(pointer+n) to pointer[n] [305] (byte) processChars::bitmask#0 ← (byte) 1 << *((byte*~) processChars::$35) -- *((byte*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_ID) +Converting *(pointer+n) to pointer[n] [310] if(*((byte*~) processChars::$36)==(const byte) STATUS_FREE) goto processChars::@3 -- *((byte*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) +Converting *(pointer+n) to pointer[n] [319] if(*((byte*~) processChars::$37)!=(const byte) STATUS_NEW) goto processChars::@4 -- *((byte*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) +Converting *(pointer+n) to pointer[n] [322] (word) processChars::xpos#0 ← *((word*~) processChars::$38) >> (byte) 4 -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_X) +Converting *(pointer+n) to pointer[n] [329] *(*((byte**~) processChars::$39)) ← (byte) ' ' -- *((byte**)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR) +Converting *(pointer+n) to pointer[n] [333] *((const byte*) SPRITES_COLS + *((byte*~) processChars::$41)) ← *((byte*~) processChars::$40) -- *((byte*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_COL) +Converting *(pointer+n) to pointer[n] [333] *((const byte*) SPRITES_COLS + *((byte*~) processChars::$41)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL) -- *((byte*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_ID) +Converting *(pointer+n) to pointer[n] [335] (byte*~) processChars::$7 ← (const byte*) SCREEN+(const word) SPRITE_PTRS + *((byte*~) processChars::$42) -- *((byte*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_ID) +Converting *(pointer+n) to pointer[n] [337] *((byte*~) processChars::$7) ← *((byte*~) processChars::$43) -- *((byte*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_PTR) +Converting *(pointer+n) to pointer[n] [337] *((byte*~) processChars::$7) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR) -- *(SCREEN+SPRITE_PTRS + *((byte*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_ID)) +Converting *(pointer+n) to pointer[n] [339] *((byte*~) processChars::$44) ← (const byte) STATUS_PROCESSING -- *((byte*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) +Converting *(pointer+n) to pointer[n] [350] (word~) processChars::$13 ← *((word*~) processChars::$45) >> (byte) 4 -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_Y) +Converting *(pointer+n) to pointer[n] [356] (bool~) processChars::$16 ← *((word*~) processChars::$46) < (const word) XPOS_LEFTMOST -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_X) +Converting *(pointer+n) to pointer[n] [358] (bool~) processChars::$17 ← *((word*~) processChars::$47) > (const word) XPOS_RIGHTMOST -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_X) +Converting *(pointer+n) to pointer[n] [361] (bool~) processChars::$19 ← *((word*~) processChars::$48) < (const word) YPOS_TOPMOST -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_Y) +Converting *(pointer+n) to pointer[n] [364] (bool~) processChars::$21 ← *((word*~) processChars::$49) > (const word) YPOS_BOTTOMMOST -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_Y) +Converting *(pointer+n) to pointer[n] [369] *((byte*~) processChars::$50) ← (const byte) STATUS_FREE -- *((byte*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) +Converting *(pointer+n) to pointer[n] [380] *((word*~) processChars::$52) ← *((word*~) processChars::$51) + *((const word*) VXSIN + (byte~) processChars::$33) -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_VX) +Converting *(pointer+n) to pointer[n] [380] *((word*~) processChars::$52) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) + *((const word*) VXSIN + (byte~) processChars::$33) -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_VX) +Converting *(pointer+n) to pointer[n] [384] *((word*~) processChars::$55) ← *((word*~) processChars::$53) + *((word*~) processChars::$54) -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_X) +Converting *(pointer+n) to pointer[n] [384] *((word*~) processChars::$55) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X) + *((word*~) processChars::$54) -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_VX) +Converting *(pointer+n) to pointer[n] [384] *((word*~) processChars::$55) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_X) +Converting *(pointer+n) to pointer[n] [392] *((word*~) processChars::$57) ← *((word*~) processChars::$56) + *((const word*) VYSIN + (byte~) processChars::$34) -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_VY) +Converting *(pointer+n) to pointer[n] [392] *((word*~) processChars::$57) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) + *((const word*) VYSIN + (byte~) processChars::$34) -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_VY) +Converting *(pointer+n) to pointer[n] [396] *((word*~) processChars::$60) ← *((word*~) processChars::$58) + *((word*~) processChars::$59) -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_Y) +Converting *(pointer+n) to pointer[n] [396] *((word*~) processChars::$60) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) + *((word*~) processChars::$59) -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_VY) +Converting *(pointer+n) to pointer[n] [396] *((word*~) processChars::$60) ← *((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 in -Simplifying expression containing zero (word*)PROCESSING in -Simplifying expression containing zero (word*)processChars::processing#0 in [338] (word*~) processChars::$38 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X -Simplifying expression containing zero (word*)processChars::processing#0 in [339] (word) processChars::xpos#0 ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X) >> (byte) 4 -Simplifying expression containing zero (word*)processChars::processing#0 in [372] (word*~) processChars::$46 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X -Simplifying expression containing zero (word*)processChars::processing#0 in [373] (bool~) processChars::$16 ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X) < (const word) XPOS_LEFTMOST -Simplifying expression containing zero (word*)processChars::processing#0 in [374] (word*~) processChars::$47 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X -Simplifying expression containing zero (word*)processChars::processing#0 in [375] (bool~) processChars::$17 ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X) > (const word) XPOS_RIGHTMOST -Simplifying expression containing zero (word*)processChars::processing#0 in [398] (word*~) processChars::$53 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X -Simplifying expression containing zero (word*)processChars::processing#0 in [400] (word*~) processChars::$55 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X -Simplifying expression containing zero (word*)processChars::processing#0 in [401] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) -Simplifying expression containing zero (word*)processChars::processing#0 in [401] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X) ← *((word*)(struct ProcessingSprite*) processChars::processing#0) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) +Simplifying expression containing zero (word*)processChars::processing#0 in [321] (word*~) processChars::$38 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X +Simplifying expression containing zero (word*)processChars::processing#0 in [322] (word) processChars::xpos#0 ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X) >> (byte) 4 +Simplifying expression containing zero (word*)processChars::processing#0 in [355] (word*~) processChars::$46 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X +Simplifying expression containing zero (word*)processChars::processing#0 in [356] (bool~) processChars::$16 ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X) < (const word) XPOS_LEFTMOST +Simplifying expression containing zero (word*)processChars::processing#0 in [357] (word*~) processChars::$47 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X +Simplifying expression containing zero (word*)processChars::processing#0 in [358] (bool~) processChars::$17 ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X) > (const word) XPOS_RIGHTMOST +Simplifying expression containing zero (word*)processChars::processing#0 in [381] (word*~) processChars::$53 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X +Simplifying expression containing zero (word*)processChars::processing#0 in [383] (word*~) processChars::$55 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X +Simplifying expression containing zero (word*)processChars::processing#0 in [384] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) +Simplifying expression containing zero (word*)processChars::processing#0 in [384] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X) ← *((word*)(struct ProcessingSprite*) processChars::processing#0) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) Successful SSA optimization PassNSimplifyExpressionWithZero -Eliminating unused variable (byte) startProcessing::center_dist#0 and assignment [84] (byte) startProcessing::center_dist#0 ← (byte) main::center_dist#0 -Eliminating unused variable (struct ProcessingChar) getCharToProcess::return#0 and assignment [104] (struct ProcessingChar) getCharToProcess::return#0 ← struct-unwound {(byte) getCharToProcess::return_x#1, (byte) getCharToProcess::return_y#1, (byte) getCharToProcess::return_dist#1} -Eliminating unused variable (byte*~) getCharToProcess::$11 and assignment [108] (byte*~) getCharToProcess::$11 ← (byte*~) getCharToProcess::$10 + (byte) getCharToProcess::return_x#1 -Eliminating unused variable (struct ProcessingChar) getCharToProcess::return#1 and assignment [110] (struct ProcessingChar) getCharToProcess::return#1 ← struct-unwound {(byte) getCharToProcess::return_x#1, (byte) getCharToProcess::return_y#1, (byte) getCharToProcess::return_dist#1} -Eliminating unused variable (byte*~) processChars::$35 and assignment [168] (byte*~) processChars::$35 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID -Eliminating unused variable (byte*~) processChars::$36 and assignment [170] (byte*~) processChars::$36 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS -Eliminating unused variable (byte*~) processChars::$37 and assignment [175] (byte*~) processChars::$37 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS -Eliminating unused variable (word*~) processChars::$38 and assignment [177] (word*~) processChars::$38 ← (word*)(struct ProcessingSprite*) processChars::processing#0 -Eliminating unused variable (byte**~) processChars::$39 and assignment [181] (byte**~) processChars::$39 ← (byte**)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR -Eliminating unused variable (byte*~) processChars::$40 and assignment [184] (byte*~) processChars::$40 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL -Eliminating unused variable (byte*~) processChars::$41 and assignment [185] (byte*~) processChars::$41 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID -Eliminating unused variable (byte*~) processChars::$42 and assignment [187] (byte*~) processChars::$42 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID -Eliminating unused variable (byte*~) processChars::$7 and assignment [188] (byte*~) processChars::$7 ← (const byte*) SCREEN+(const word) SPRITE_PTRS + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID) -Eliminating unused variable (byte*~) processChars::$43 and assignment [189] (byte*~) processChars::$43 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR -Eliminating unused variable (byte*~) processChars::$44 and assignment [191] (byte*~) processChars::$44 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS -Eliminating unused variable (word*~) processChars::$45 and assignment [199] (word*~) processChars::$45 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y -Eliminating unused variable (word*~) processChars::$46 and assignment [204] (word*~) processChars::$46 ← (word*)(struct ProcessingSprite*) processChars::processing#0 -Eliminating unused variable (word*~) processChars::$47 and assignment [206] (word*~) processChars::$47 ← (word*)(struct ProcessingSprite*) processChars::processing#0 -Eliminating unused variable (word*~) processChars::$48 and assignment [208] (word*~) processChars::$48 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y -Eliminating unused variable (word*~) processChars::$49 and assignment [210] (word*~) processChars::$49 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y -Eliminating unused variable (byte*~) processChars::$50 and assignment [213] (byte*~) processChars::$50 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS -Eliminating unused variable (word*~) processChars::$51 and assignment [221] (word*~) processChars::$51 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX -Eliminating unused variable (word*~) processChars::$52 and assignment [222] (word*~) processChars::$52 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX -Eliminating unused variable (word*~) processChars::$53 and assignment [224] (word*~) processChars::$53 ← (word*)(struct ProcessingSprite*) processChars::processing#0 -Eliminating unused variable (word*~) processChars::$54 and assignment [225] (word*~) processChars::$54 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX -Eliminating unused variable (word*~) processChars::$55 and assignment [226] (word*~) processChars::$55 ← (word*)(struct ProcessingSprite*) processChars::processing#0 -Eliminating unused variable (word*~) processChars::$56 and assignment [232] (word*~) processChars::$56 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY -Eliminating unused variable (word*~) processChars::$57 and assignment [233] (word*~) processChars::$57 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY -Eliminating unused variable (word*~) processChars::$58 and assignment [235] (word*~) processChars::$58 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y -Eliminating unused variable (word*~) processChars::$59 and assignment [236] (word*~) processChars::$59 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY -Eliminating unused variable (word*~) processChars::$60 and assignment [237] (word*~) processChars::$60 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y +Eliminating unused variable (byte) startProcessing::center_dist#0 and assignment [76] (byte) startProcessing::center_dist#0 ← (byte) main::center_dist#0 +Eliminating unused variable (struct ProcessingChar) getCharToProcess::return#0 and assignment [96] (struct ProcessingChar) getCharToProcess::return#0 ← struct-unwound {(byte) getCharToProcess::return_x#1, (byte) getCharToProcess::return_y#1, (byte) getCharToProcess::return_dist#1} +Eliminating unused variable (byte*~) getCharToProcess::$11 and assignment [100] (byte*~) getCharToProcess::$11 ← (byte*~) getCharToProcess::$10 + (byte) getCharToProcess::return_x#1 +Eliminating unused variable (struct ProcessingChar) getCharToProcess::return#1 and assignment [102] (struct ProcessingChar) getCharToProcess::return#1 ← struct-unwound {(byte) getCharToProcess::return_x#1, (byte) getCharToProcess::return_y#1, (byte) getCharToProcess::return_dist#1} +Eliminating unused variable (byte*~) processChars::$35 and assignment [160] (byte*~) processChars::$35 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID +Eliminating unused variable (byte*~) processChars::$36 and assignment [162] (byte*~) processChars::$36 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS +Eliminating unused variable (byte*~) processChars::$37 and assignment [167] (byte*~) processChars::$37 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS +Eliminating unused variable (word*~) processChars::$38 and assignment [169] (word*~) processChars::$38 ← (word*)(struct ProcessingSprite*) processChars::processing#0 +Eliminating unused variable (byte**~) processChars::$39 and assignment [173] (byte**~) processChars::$39 ← (byte**)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR +Eliminating unused variable (byte*~) processChars::$40 and assignment [176] (byte*~) processChars::$40 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL +Eliminating unused variable (byte*~) processChars::$41 and assignment [177] (byte*~) processChars::$41 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID +Eliminating unused variable (byte*~) processChars::$42 and assignment [179] (byte*~) processChars::$42 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID +Eliminating unused variable (byte*~) processChars::$7 and assignment [180] (byte*~) processChars::$7 ← (const byte*) SCREEN+(const word) SPRITE_PTRS + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID) +Eliminating unused variable (byte*~) processChars::$43 and assignment [181] (byte*~) processChars::$43 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR +Eliminating unused variable (byte*~) processChars::$44 and assignment [183] (byte*~) processChars::$44 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS +Eliminating unused variable (word*~) processChars::$45 and assignment [191] (word*~) processChars::$45 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y +Eliminating unused variable (word*~) processChars::$46 and assignment [196] (word*~) processChars::$46 ← (word*)(struct ProcessingSprite*) processChars::processing#0 +Eliminating unused variable (word*~) processChars::$47 and assignment [198] (word*~) processChars::$47 ← (word*)(struct ProcessingSprite*) processChars::processing#0 +Eliminating unused variable (word*~) processChars::$48 and assignment [200] (word*~) processChars::$48 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y +Eliminating unused variable (word*~) processChars::$49 and assignment [202] (word*~) processChars::$49 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y +Eliminating unused variable (byte*~) processChars::$50 and assignment [205] (byte*~) processChars::$50 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS +Eliminating unused variable (word*~) processChars::$51 and assignment [213] (word*~) processChars::$51 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX +Eliminating unused variable (word*~) processChars::$52 and assignment [214] (word*~) processChars::$52 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX +Eliminating unused variable (word*~) processChars::$53 and assignment [216] (word*~) processChars::$53 ← (word*)(struct ProcessingSprite*) processChars::processing#0 +Eliminating unused variable (word*~) processChars::$54 and assignment [217] (word*~) processChars::$54 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX +Eliminating unused variable (word*~) processChars::$55 and assignment [218] (word*~) processChars::$55 ← (word*)(struct ProcessingSprite*) processChars::processing#0 +Eliminating unused variable (word*~) processChars::$56 and assignment [224] (word*~) processChars::$56 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY +Eliminating unused variable (word*~) processChars::$57 and assignment [225] (word*~) processChars::$57 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY +Eliminating unused variable (word*~) processChars::$58 and assignment [227] (word*~) processChars::$58 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y +Eliminating unused variable (word*~) processChars::$59 and assignment [228] (word*~) processChars::$59 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY +Eliminating unused variable (word*~) processChars::$60 and assignment [229] (word*~) processChars::$60 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y Eliminating unused constant (const bool) DEBUG Eliminating unused constant (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X Successful SSA optimization PassNEliminateUnusedVars @@ -3056,12 +3004,12 @@ Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte~) processChars::$15 = (byte~) processChars::$11 Alias (byte~) processChars::$27 = (byte~) processChars::$26 Successful SSA optimization Pass2AliasElimination -Simple Condition (bool~) processChars::$16 [191] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)<(const word) XPOS_LEFTMOST) goto processChars::@7 -Simple Condition (bool~) processChars::$21 [275] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)>(const word) YPOS_BOTTOMMOST) goto processChars::@7 -Simple Condition (bool~) processChars::$19 [276] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)<(const word) YPOS_TOPMOST) goto processChars::@7 -Simple Condition (bool~) processChars::$17 [277] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)>(const word) XPOS_RIGHTMOST) goto processChars::@7 +Simple Condition (bool~) processChars::$16 [183] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)<(const word) XPOS_LEFTMOST) goto processChars::@7 +Simple Condition (bool~) processChars::$21 [267] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)>(const word) YPOS_BOTTOMMOST) goto processChars::@7 +Simple Condition (bool~) processChars::$19 [268] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)<(const word) YPOS_TOPMOST) goto processChars::@7 +Simple Condition (bool~) processChars::$17 [269] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)>(const word) XPOS_RIGHTMOST) goto processChars::@7 Successful SSA optimization Pass2ConditionalJumpSimplification -Constant right-side identified [259] (byte~) setupRasterIrq::$1 ← < (const word) setupRasterIrq::raster#0 +Constant right-side identified [251] (byte~) setupRasterIrq::$1 ← < (const word) setupRasterIrq::raster#0 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) setupRasterIrq::$1 = =(byte) getCharToProcess::closest_dist#2) goto getCharToProcess::@12 + [115] (byte) getCharToProcess::dist#0 ← *((byte*) getCharToProcess::dist_line#6 + (byte) getCharToProcess::x#2) + [116] if((byte) getCharToProcess::dist#0>=(byte) getCharToProcess::closest_dist#2) goto getCharToProcess::@12 to:getCharToProcess::@5 getCharToProcess::@5: scope:[getCharToProcess] from getCharToProcess::@4 - [125] (byte) getCharToProcess::return_x#7 ← (byte) getCharToProcess::x#2 - [126] (byte) getCharToProcess::return_y#7 ← (byte) getCharToProcess::y#7 + [117] (byte) getCharToProcess::return_x#7 ← (byte) getCharToProcess::x#2 + [118] (byte) getCharToProcess::return_y#7 ← (byte) getCharToProcess::y#7 to:getCharToProcess::@3 getCharToProcess::@3: scope:[getCharToProcess] from getCharToProcess::@11 getCharToProcess::@12 getCharToProcess::@5 - [127] (byte) getCharToProcess::return_y#1 ← phi( getCharToProcess::@11/(byte) getCharToProcess::closest_y#7 getCharToProcess::@12/(byte) getCharToProcess::closest_y#7 getCharToProcess::@5/(byte) getCharToProcess::return_y#7 ) - [127] (byte) getCharToProcess::return_x#1 ← phi( getCharToProcess::@11/(byte) getCharToProcess::closest_x#7 getCharToProcess::@12/(byte) getCharToProcess::closest_x#7 getCharToProcess::@5/(byte) getCharToProcess::return_x#7 ) - [127] (byte) getCharToProcess::return_dist#1 ← phi( getCharToProcess::@11/(byte) getCharToProcess::return_dist#5 getCharToProcess::@12/(byte) getCharToProcess::return_dist#6 getCharToProcess::@5/(byte) getCharToProcess::dist#0 ) - [128] (byte) getCharToProcess::x#1 ← ++ (byte) getCharToProcess::x#2 - [129] if((byte) getCharToProcess::x#1!=(byte) $28) goto getCharToProcess::@10 + [119] (byte) getCharToProcess::return_y#1 ← phi( getCharToProcess::@11/(byte) getCharToProcess::closest_y#7 getCharToProcess::@12/(byte) getCharToProcess::closest_y#7 getCharToProcess::@5/(byte) getCharToProcess::return_y#7 ) + [119] (byte) getCharToProcess::return_x#1 ← phi( getCharToProcess::@11/(byte) getCharToProcess::closest_x#7 getCharToProcess::@12/(byte) getCharToProcess::closest_x#7 getCharToProcess::@5/(byte) getCharToProcess::return_x#7 ) + [119] (byte) getCharToProcess::return_dist#1 ← phi( getCharToProcess::@11/(byte) getCharToProcess::return_dist#5 getCharToProcess::@12/(byte) getCharToProcess::return_dist#6 getCharToProcess::@5/(byte) getCharToProcess::dist#0 ) + [120] (byte) getCharToProcess::x#1 ← ++ (byte) getCharToProcess::x#2 + [121] if((byte) getCharToProcess::x#1!=(byte) $28) goto getCharToProcess::@10 to:getCharToProcess::@6 getCharToProcess::@6: scope:[getCharToProcess] from getCharToProcess::@3 - [130] (byte*) getCharToProcess::screen_line#1 ← (byte*) getCharToProcess::screen_line#4 + (byte) $28 - [131] (byte*) getCharToProcess::dist_line#1 ← (byte*) getCharToProcess::dist_line#6 + (byte) $28 - [132] (byte) getCharToProcess::y#1 ← ++ (byte) getCharToProcess::y#7 - [133] if((byte) getCharToProcess::y#1!=(byte) $19) goto getCharToProcess::@9 + [122] (byte*) getCharToProcess::screen_line#1 ← (byte*) getCharToProcess::screen_line#4 + (byte) $28 + [123] (byte*) getCharToProcess::dist_line#1 ← (byte*) getCharToProcess::dist_line#6 + (byte) $28 + [124] (byte) getCharToProcess::y#1 ← ++ (byte) getCharToProcess::y#7 + [125] if((byte) getCharToProcess::y#1!=(byte) $19) goto getCharToProcess::@9 to:getCharToProcess::@7 getCharToProcess::@7: scope:[getCharToProcess] from getCharToProcess::@6 - [134] if((byte) getCharToProcess::return_dist#1==(const byte) NOT_FOUND) goto getCharToProcess::@return + [126] if((byte) getCharToProcess::return_dist#1==(const byte) NOT_FOUND) goto getCharToProcess::@return to:getCharToProcess::@8 getCharToProcess::@8: scope:[getCharToProcess] from getCharToProcess::@7 - [135] (word~) getCharToProcess::$8 ← (word)(byte) getCharToProcess::return_y#1 - [136] (word~) getCharToProcess::$12 ← (word~) getCharToProcess::$8 << (byte) 2 - [137] (word~) getCharToProcess::$13 ← (word~) getCharToProcess::$12 + (word~) getCharToProcess::$8 - [138] (word~) getCharToProcess::$9 ← (word~) getCharToProcess::$13 << (byte) 3 - [139] (byte*~) getCharToProcess::$10 ← (byte*)(void*) SCREEN_COPY#0 + (word~) getCharToProcess::$9 - [140] *((byte*~) getCharToProcess::$10 + (byte) getCharToProcess::return_x#1) ← (byte) ' ' + [127] (word~) getCharToProcess::$8 ← (word)(byte) getCharToProcess::return_y#1 + [128] (word~) getCharToProcess::$12 ← (word~) getCharToProcess::$8 << (byte) 2 + [129] (word~) getCharToProcess::$13 ← (word~) getCharToProcess::$12 + (word~) getCharToProcess::$8 + [130] (word~) getCharToProcess::$9 ← (word~) getCharToProcess::$13 << (byte) 3 + [131] (byte*~) getCharToProcess::$10 ← (byte*)(void*) SCREEN_COPY#0 + (word~) getCharToProcess::$9 + [132] *((byte*~) getCharToProcess::$10 + (byte) getCharToProcess::return_x#1) ← (byte) ' ' to:getCharToProcess::@return getCharToProcess::@return: scope:[getCharToProcess] from getCharToProcess::@7 getCharToProcess::@8 - [141] return + [133] return to:@return getCharToProcess::@9: scope:[getCharToProcess] from getCharToProcess::@6 - [142] (byte) getCharToProcess::closest_dist#10 ← (byte) getCharToProcess::return_dist#1 + [134] (byte) getCharToProcess::closest_dist#10 ← (byte) getCharToProcess::return_dist#1 to:getCharToProcess::@1 getCharToProcess::@10: scope:[getCharToProcess] from getCharToProcess::@3 - [143] (byte) getCharToProcess::closest_dist#12 ← (byte) getCharToProcess::return_dist#1 + [135] (byte) getCharToProcess::closest_dist#12 ← (byte) getCharToProcess::return_dist#1 to:getCharToProcess::@2 getCharToProcess::@12: scope:[getCharToProcess] from getCharToProcess::@4 - [144] (byte) getCharToProcess::return_dist#6 ← (byte) getCharToProcess::closest_dist#2 + [136] (byte) getCharToProcess::return_dist#6 ← (byte) getCharToProcess::closest_dist#2 to:getCharToProcess::@3 getCharToProcess::@11: scope:[getCharToProcess] from getCharToProcess::@2 - [145] (byte) getCharToProcess::return_dist#5 ← (byte) getCharToProcess::closest_dist#2 + [137] (byte) getCharToProcess::return_dist#5 ← (byte) getCharToProcess::closest_dist#2 to:getCharToProcess::@3 (void()) setupRasterIrq((word) setupRasterIrq::raster , (void()*) setupRasterIrq::irqRoutine) setupRasterIrq: scope:[setupRasterIrq] from main::@10 asm { sei } - [147] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK - [148] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO - [149] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR + [139] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK + [140] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO + [141] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR to:setupRasterIrq::@1 setupRasterIrq::@1: scope:[setupRasterIrq] from setupRasterIrq - [150] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) & (byte) $7f + [142] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) & (byte) $7f to:setupRasterIrq::@2 setupRasterIrq::@2: scope:[setupRasterIrq] from setupRasterIrq::@1 - [151] *((const byte*) RASTER) ← <(const byte) RASTER_IRQ_TOP - [152] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER - [153] *((const void()**) HARDWARE_IRQ) ← (const void()*) setupRasterIrq::irqRoutine#0 + [143] *((const byte*) RASTER) ← <(const byte) RASTER_IRQ_TOP + [144] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER + [145] *((const void()**) HARDWARE_IRQ) ← (const void()*) setupRasterIrq::irqRoutine#0 asm { cli } to:setupRasterIrq::@return setupRasterIrq::@return: scope:[setupRasterIrq] from setupRasterIrq::@2 - [155] return + [147] return to:@return (void()) initSprites() initSprites: scope:[initSprites] from main::@4 - [156] phi() + [148] phi() to:initSprites::@1 initSprites::@1: scope:[initSprites] from initSprites initSprites::@2 - [157] (byte*) initSprites::sp#2 ← phi( initSprites/(const byte*) SPRITE_DATA initSprites::@2/(byte*) initSprites::sp#1 ) - [158] if((byte*) initSprites::sp#2<(const byte*) SPRITE_DATA+(const byte) NUM_PROCESSING*(byte) $40) goto initSprites::@2 + [149] (byte*) initSprites::sp#2 ← phi( initSprites/(const byte*) SPRITE_DATA initSprites::@2/(byte*) initSprites::sp#1 ) + [150] if((byte*) initSprites::sp#2<(const byte*) SPRITE_DATA+(const byte) NUM_PROCESSING*(byte) $40) goto initSprites::@2 to:initSprites::@3 initSprites::@3: scope:[initSprites] from initSprites::@1 initSprites::@3 - [159] (byte) initSprites::i#2 ← phi( initSprites::@1/(byte) 0 initSprites::@3/(byte) initSprites::i#1 ) - [160] *((const byte*) SPRITES_COLS + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE - [161] (byte) initSprites::i#1 ← ++ (byte) initSprites::i#2 - [162] if((byte) initSprites::i#1!=(byte) 8) goto initSprites::@3 + [151] (byte) initSprites::i#2 ← phi( initSprites::@1/(byte) 0 initSprites::@3/(byte) initSprites::i#1 ) + [152] *((const byte*) SPRITES_COLS + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE + [153] (byte) initSprites::i#1 ← ++ (byte) initSprites::i#2 + [154] if((byte) initSprites::i#1!=(byte) 8) goto initSprites::@3 to:initSprites::@4 initSprites::@4: scope:[initSprites] from initSprites::@3 - [163] *((const byte*) SPRITES_MC) ← (byte) 0 - [164] *((const byte*) SPRITES_EXPAND_X) ← (byte) 0 - [165] *((const byte*) SPRITES_EXPAND_Y) ← (byte) 0 + [155] *((const byte*) SPRITES_MC) ← (byte) 0 + [156] *((const byte*) SPRITES_EXPAND_X) ← (byte) 0 + [157] *((const byte*) SPRITES_EXPAND_Y) ← (byte) 0 to:initSprites::@return initSprites::@return: scope:[initSprites] from initSprites::@4 - [166] return + [158] return to:@return initSprites::@2: scope:[initSprites] from initSprites::@1 - [167] *((byte*) initSprites::sp#2) ← (byte) 0 - [168] (byte*) initSprites::sp#1 ← ++ (byte*) initSprites::sp#2 + [159] *((byte*) initSprites::sp#2) ← (byte) 0 + [160] (byte*) initSprites::sp#1 ← ++ (byte*) initSprites::sp#2 to:initSprites::@1 (void()) init_angle_screen((byte*) init_angle_screen::screen) init_angle_screen: scope:[init_angle_screen] from main - [169] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c - [170] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c + [161] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c + [162] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c to:init_angle_screen::@1 init_angle_screen::@1: scope:[init_angle_screen] from init_angle_screen init_angle_screen::@4 - [171] (byte*) init_angle_screen::screen_bottomline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_bottomline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_bottomline#1 ) - [171] (byte*) init_angle_screen::screen_topline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_topline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_topline#1 ) - [171] (byte) init_angle_screen::y#5 ← phi( init_angle_screen/(byte) 0 init_angle_screen::@4/(byte) init_angle_screen::y#1 ) + [163] (byte*) init_angle_screen::screen_bottomline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_bottomline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_bottomline#1 ) + [163] (byte*) init_angle_screen::screen_topline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_topline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_topline#1 ) + [163] (byte) init_angle_screen::y#5 ← phi( init_angle_screen/(byte) 0 init_angle_screen::@4/(byte) init_angle_screen::y#1 ) to:init_angle_screen::@2 init_angle_screen::@2: scope:[init_angle_screen] from init_angle_screen::@1 init_angle_screen::@5 - [172] (byte) init_angle_screen::xb#2 ← phi( init_angle_screen::@1/(byte) $27 init_angle_screen::@5/(byte) init_angle_screen::xb#1 ) - [172] (byte) init_angle_screen::x#2 ← phi( init_angle_screen::@1/(byte) 0 init_angle_screen::@5/(byte) init_angle_screen::x#1 ) - [173] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 + [164] (byte) init_angle_screen::xb#2 ← phi( init_angle_screen::@1/(byte) $27 init_angle_screen::@5/(byte) init_angle_screen::xb#1 ) + [164] (byte) init_angle_screen::x#2 ← phi( init_angle_screen::@1/(byte) 0 init_angle_screen::@5/(byte) init_angle_screen::x#1 ) + [165] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 to:init_angle_screen::@4 init_angle_screen::@4: scope:[init_angle_screen] from init_angle_screen::@2 - [174] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 - [175] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 - [176] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 - [177] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 + [166] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 + [167] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 + [168] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 + [169] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 to:init_angle_screen::@return init_angle_screen::@return: scope:[init_angle_screen] from init_angle_screen::@4 - [178] return + [170] return to:@return init_angle_screen::@3: scope:[init_angle_screen] from init_angle_screen::@2 - [179] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 - [180] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 - [181] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 - [182] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 - [183] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 - [184] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 - [185] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 - [186] call atan2_16 - [187] (word) atan2_16::return#2 ← (word) atan2_16::return#0 + [171] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 + [172] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 + [173] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 + [174] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 + [175] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 + [176] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 + [177] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 + [178] call atan2_16 + [179] (word) atan2_16::return#2 ← (word) atan2_16::return#0 to:init_angle_screen::@5 init_angle_screen::@5: scope:[init_angle_screen] from init_angle_screen::@3 - [188] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 - [189] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 - [190] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 - [191] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 - [192] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 - [193] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 - [194] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 - [195] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 - [196] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 - [197] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 - [198] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 - [199] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 + [180] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 + [181] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 + [182] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 + [183] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 + [184] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 + [185] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 + [186] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 + [187] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 + [188] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 + [189] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 + [190] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 + [191] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 to:init_angle_screen::@2 (word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y) atan2_16: scope:[atan2_16] from init_angle_screen::@3 - [200] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 + [192] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 to:atan2_16::@2 atan2_16::@2: scope:[atan2_16] from atan2_16 - [201] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 + [193] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 to:atan2_16::@3 atan2_16::@3: scope:[atan2_16] from atan2_16::@1 atan2_16::@2 - [202] (signed word) atan2_16::yi#0 ← phi( atan2_16::@1/(signed word) atan2_16::yi#16 atan2_16::@2/(signed word~) atan2_16::$2 ) - [203] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 + [194] (signed word) atan2_16::yi#0 ← phi( atan2_16::@1/(signed word) atan2_16::yi#16 atan2_16::@2/(signed word~) atan2_16::$2 ) + [195] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 to:atan2_16::@5 atan2_16::@5: scope:[atan2_16] from atan2_16::@3 - [204] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 + [196] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 to:atan2_16::@6 atan2_16::@6: scope:[atan2_16] from atan2_16::@4 atan2_16::@5 - [205] (signed word) atan2_16::xi#0 ← phi( atan2_16::@4/(signed word) atan2_16::xi#13 atan2_16::@5/(signed word~) atan2_16::$7 ) + [197] (signed word) atan2_16::xi#0 ← phi( atan2_16::@4/(signed word) atan2_16::xi#13 atan2_16::@5/(signed word~) atan2_16::$7 ) to:atan2_16::@10 atan2_16::@10: scope:[atan2_16] from atan2_16::@19 atan2_16::@6 - [206] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(word) 0 ) - [206] (byte) atan2_16::i#2 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 ) - [206] (signed word) atan2_16::xi#3 ← phi( atan2_16::@19/(signed word) atan2_16::xi#8 atan2_16::@6/(signed word) atan2_16::xi#0 ) - [206] (signed word) atan2_16::yi#3 ← phi( atan2_16::@19/(signed word) atan2_16::yi#8 atan2_16::@6/(signed word) atan2_16::yi#0 ) - [207] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 + [198] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(word) 0 ) + [198] (byte) atan2_16::i#2 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 ) + [198] (signed word) atan2_16::xi#3 ← phi( atan2_16::@19/(signed word) atan2_16::xi#8 atan2_16::@6/(signed word) atan2_16::xi#0 ) + [198] (signed word) atan2_16::yi#3 ← phi( atan2_16::@19/(signed word) atan2_16::yi#8 atan2_16::@6/(signed word) atan2_16::yi#0 ) + [199] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 to:atan2_16::@12 atan2_16::@12: scope:[atan2_16] from atan2_16::@10 atan2_16::@19 - [208] (word) atan2_16::angle#6 ← phi( atan2_16::@10/(word) atan2_16::angle#12 atan2_16::@19/(word) atan2_16::angle#13 ) - [209] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 - [210] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 + [200] (word) atan2_16::angle#6 ← phi( atan2_16::@10/(word) atan2_16::angle#12 atan2_16::@19/(word) atan2_16::angle#13 ) + [201] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 + [202] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 to:atan2_16::@21 atan2_16::@21: scope:[atan2_16] from atan2_16::@12 - [211] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 + [203] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 to:atan2_16::@7 atan2_16::@7: scope:[atan2_16] from atan2_16::@12 atan2_16::@21 - [212] (word) atan2_16::angle#11 ← phi( atan2_16::@12/(word) atan2_16::angle#1 atan2_16::@21/(word) atan2_16::angle#4 ) - [213] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 + [204] (word) atan2_16::angle#11 ← phi( atan2_16::@12/(word) atan2_16::angle#1 atan2_16::@21/(word) atan2_16::angle#4 ) + [205] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 to:atan2_16::@9 atan2_16::@9: scope:[atan2_16] from atan2_16::@7 - [214] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 + [206] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 to:atan2_16::@8 atan2_16::@8: scope:[atan2_16] from atan2_16::@7 atan2_16::@9 - [215] (word) atan2_16::return#0 ← phi( atan2_16::@9/(word) atan2_16::angle#5 atan2_16::@7/(word) atan2_16::angle#11 ) + [207] (word) atan2_16::return#0 ← phi( atan2_16::@9/(word) atan2_16::angle#5 atan2_16::@7/(word) atan2_16::angle#11 ) to:atan2_16::@return atan2_16::@return: scope:[atan2_16] from atan2_16::@8 - [216] return + [208] return to:@return atan2_16::@11: scope:[atan2_16] from atan2_16::@10 - [217] (byte) atan2_16::shift#5 ← (byte) atan2_16::i#2 - [218] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 - [219] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 + [209] (byte) atan2_16::shift#5 ← (byte) atan2_16::i#2 + [210] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 + [211] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 to:atan2_16::@13 atan2_16::@13: scope:[atan2_16] from atan2_16::@11 atan2_16::@14 - [220] (signed word) atan2_16::yd#3 ← phi( atan2_16::@11/(signed word) atan2_16::yd#10 atan2_16::@14/(signed word) atan2_16::yd#1 ) - [220] (signed word) atan2_16::xd#3 ← phi( atan2_16::@11/(signed word) atan2_16::xd#10 atan2_16::@14/(signed word) atan2_16::xd#1 ) - [220] (byte) atan2_16::shift#2 ← phi( atan2_16::@11/(byte) atan2_16::shift#5 atan2_16::@14/(byte) atan2_16::shift#1 ) - [221] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 + [212] (signed word) atan2_16::yd#3 ← phi( atan2_16::@11/(signed word) atan2_16::yd#10 atan2_16::@14/(signed word) atan2_16::yd#1 ) + [212] (signed word) atan2_16::xd#3 ← phi( atan2_16::@11/(signed word) atan2_16::xd#10 atan2_16::@14/(signed word) atan2_16::xd#1 ) + [212] (byte) atan2_16::shift#2 ← phi( atan2_16::@11/(byte) atan2_16::shift#5 atan2_16::@14/(byte) atan2_16::shift#1 ) + [213] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 to:atan2_16::@15 atan2_16::@15: scope:[atan2_16] from atan2_16::@13 - [222] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 + [214] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 to:atan2_16::@16 atan2_16::@16: scope:[atan2_16] from atan2_16::@15 - [223] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 - [224] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 + [215] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 + [216] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 to:atan2_16::@17 atan2_16::@17: scope:[atan2_16] from atan2_16::@15 atan2_16::@16 - [225] (signed word) atan2_16::xd#5 ← phi( atan2_16::@15/(signed word) atan2_16::xd#3 atan2_16::@16/(signed word) atan2_16::xd#2 ) - [225] (signed word) atan2_16::yd#5 ← phi( atan2_16::@15/(signed word) atan2_16::yd#3 atan2_16::@16/(signed word) atan2_16::yd#2 ) - [226] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 + [217] (signed word) atan2_16::xd#5 ← phi( atan2_16::@15/(signed word) atan2_16::xd#3 atan2_16::@16/(signed word) atan2_16::xd#2 ) + [217] (signed word) atan2_16::yd#5 ← phi( atan2_16::@15/(signed word) atan2_16::yd#3 atan2_16::@16/(signed word) atan2_16::yd#2 ) + [218] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 to:atan2_16::@20 atan2_16::@20: scope:[atan2_16] from atan2_16::@17 - [227] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 - [228] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 - [229] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 - [230] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) + [219] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 + [220] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 + [221] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 + [222] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) to:atan2_16::@19 atan2_16::@19: scope:[atan2_16] from atan2_16::@18 atan2_16::@20 - [231] (signed word) atan2_16::xi#8 ← phi( atan2_16::@18/(signed word) atan2_16::xi#1 atan2_16::@20/(signed word) atan2_16::xi#2 ) - [231] (word) atan2_16::angle#13 ← phi( atan2_16::@18/(word) atan2_16::angle#2 atan2_16::@20/(word) atan2_16::angle#3 ) - [231] (signed word) atan2_16::yi#8 ← phi( atan2_16::@18/(signed word) atan2_16::yi#1 atan2_16::@20/(signed word) atan2_16::yi#2 ) - [232] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 - [233] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16-(byte) 1+(byte) 1) goto atan2_16::@12 + [223] (signed word) atan2_16::xi#8 ← phi( atan2_16::@18/(signed word) atan2_16::xi#1 atan2_16::@20/(signed word) atan2_16::xi#2 ) + [223] (word) atan2_16::angle#13 ← phi( atan2_16::@18/(word) atan2_16::angle#2 atan2_16::@20/(word) atan2_16::angle#3 ) + [223] (signed word) atan2_16::yi#8 ← phi( atan2_16::@18/(signed word) atan2_16::yi#1 atan2_16::@20/(signed word) atan2_16::yi#2 ) + [224] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 + [225] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16-(byte) 1+(byte) 1) goto atan2_16::@12 to:atan2_16::@10 atan2_16::@18: scope:[atan2_16] from atan2_16::@17 - [234] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 - [235] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 - [236] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 - [237] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) + [226] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 + [227] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 + [228] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 + [229] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) to:atan2_16::@19 atan2_16::@14: scope:[atan2_16] from atan2_16::@13 - [238] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 - [239] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 - [240] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 + [230] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 + [231] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 + [232] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 to:atan2_16::@13 atan2_16::@4: scope:[atan2_16] from atan2_16::@3 - [241] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 + [233] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 to:atan2_16::@6 atan2_16::@1: scope:[atan2_16] from atan2_16 - [242] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 + [234] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 to:atan2_16::@3 (void*()) malloc((word) malloc::size) malloc: scope:[malloc] from @1 @3 - [243] (byte*) heap_head#5 ← phi( @1/(const byte*) HEAP_TOP @3/(byte*) heap_head#1 ) - [244] (byte*) malloc::mem#0 ← (byte*) heap_head#5 - (word) $3e8 - [245] (byte*) heap_head#1 ← (byte*) malloc::mem#0 + [235] (byte*) heap_head#5 ← phi( @1/(const byte*) HEAP_TOP @3/(byte*) heap_head#1 ) + [236] (byte*) malloc::mem#0 ← (byte*) heap_head#5 - (word) $3e8 + [237] (byte*) heap_head#1 ← (byte*) malloc::mem#0 to:malloc::@return malloc::@return: scope:[malloc] from malloc - [246] return + [238] return to:@return interrupt(HARDWARE_ALL)(void()) irqBottom() irqBottom: scope:[irqBottom] from - [247] phi() + [239] phi() to:irqBottom::@1 irqBottom::@1: scope:[irqBottom] from irqBottom - [248] phi() - [249] call processChars + [240] phi() + [241] call processChars to:irqBottom::@2 irqBottom::@2: scope:[irqBottom] from irqBottom::@1 - [250] *((const byte*) RASTER) ← (const byte) RASTER_IRQ_TOP - [251] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_ALL)(void()) irqTop() - [252] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER + [242] *((const byte*) RASTER) ← (const byte) RASTER_IRQ_TOP + [243] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_ALL)(void()) irqTop() + [244] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER to:irqBottom::@return irqBottom::@return: scope:[irqBottom] from irqBottom::@2 - [253] return + [245] return to:@return (void()) processChars() processChars: scope:[processChars] from irqBottom::@1 - [254] phi() + [246] phi() to:processChars::@1 processChars::@1: scope:[processChars] from processChars processChars::@2 - [255] (byte) processChars::numActive#10 ← phi( processChars/(byte) 0 processChars::@2/(byte) processChars::numActive#3 ) - [255] (byte) processChars::i#10 ← phi( processChars/(byte) 0 processChars::@2/(byte) processChars::i#1 ) - [256] (byte~) processChars::$62 ← (byte) processChars::i#10 << (byte) 1 - [257] (byte~) processChars::$63 ← (byte~) processChars::$62 + (byte) processChars::i#10 - [258] (byte~) processChars::$64 ← (byte~) processChars::$63 << (byte) 1 - [259] (byte~) processChars::$65 ← (byte~) processChars::$64 + (byte) processChars::i#10 - [260] (byte~) processChars::$32 ← (byte~) processChars::$65 << (byte) 1 - [261] (struct ProcessingSprite*) processChars::processing#0 ← (const struct ProcessingSprite*) PROCESSING + (byte~) processChars::$32 - [262] (byte) processChars::bitmask#0 ← (byte) 1 << *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID) - [263] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)==(const byte) STATUS_FREE) goto processChars::@2 + [247] (byte) processChars::numActive#10 ← phi( processChars/(byte) 0 processChars::@2/(byte) processChars::numActive#3 ) + [247] (byte) processChars::i#10 ← phi( processChars/(byte) 0 processChars::@2/(byte) processChars::i#1 ) + [248] (byte~) processChars::$62 ← (byte) processChars::i#10 << (byte) 1 + [249] (byte~) processChars::$63 ← (byte~) processChars::$62 + (byte) processChars::i#10 + [250] (byte~) processChars::$64 ← (byte~) processChars::$63 << (byte) 1 + [251] (byte~) processChars::$65 ← (byte~) processChars::$64 + (byte) processChars::i#10 + [252] (byte~) processChars::$32 ← (byte~) processChars::$65 << (byte) 1 + [253] (struct ProcessingSprite*) processChars::processing#0 ← (const struct ProcessingSprite*) PROCESSING + (byte~) processChars::$32 + [254] (byte) processChars::bitmask#0 ← (byte) 1 << *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID) + [255] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)==(const byte) STATUS_FREE) goto processChars::@2 to:processChars::@10 processChars::@10: scope:[processChars] from processChars::@1 - [264] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)!=(const byte) STATUS_NEW) goto processChars::@3 + [256] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)!=(const byte) STATUS_NEW) goto processChars::@3 to:processChars::@11 processChars::@11: scope:[processChars] from processChars::@10 - [265] *(*((byte**)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR)) ← (byte) ' ' - [266] *((const byte*) SPRITES_ENABLE) ← *((const byte*) SPRITES_ENABLE) | (byte) processChars::bitmask#0 - [267] *((const byte*) SPRITES_COLS + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL) - [268] *((const byte*) SCREEN+(const word) SPRITE_PTRS + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR) - [269] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_PROCESSING + [257] *(*((byte**)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR)) ← (byte) ' ' + [258] *((const byte*) SPRITES_ENABLE) ← *((const byte*) SPRITES_ENABLE) | (byte) processChars::bitmask#0 + [259] *((const byte*) SPRITES_COLS + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL) + [260] *((const byte*) SCREEN+(const word) SPRITE_PTRS + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR) + [261] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_PROCESSING to:processChars::@3 processChars::@3: scope:[processChars] from processChars::@10 processChars::@11 - [270] (word) processChars::xpos#0 ← *((word*)(struct ProcessingSprite*) processChars::processing#0) >> (byte) 4 - [271] (byte~) processChars::$9 ← > (word) processChars::xpos#0 - [272] if((byte) 0!=(byte~) processChars::$9) goto processChars::@4 + [262] (word) processChars::xpos#0 ← *((word*)(struct ProcessingSprite*) processChars::processing#0) >> (byte) 4 + [263] (byte~) processChars::$9 ← > (word) processChars::xpos#0 + [264] if((byte) 0!=(byte~) processChars::$9) goto processChars::@4 to:processChars::@8 processChars::@8: scope:[processChars] from processChars::@3 - [273] (byte~) processChars::$10 ← (byte) $ff ^ (byte) processChars::bitmask#0 - [274] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) & (byte~) processChars::$10 + [265] (byte~) processChars::$10 ← (byte) $ff ^ (byte) processChars::bitmask#0 + [266] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) & (byte~) processChars::$10 to:processChars::@5 processChars::@5: scope:[processChars] from processChars::@4 processChars::@8 - [275] (byte~) processChars::$15 ← (byte) processChars::i#10 << (byte) 1 - [276] (byte~) processChars::$12 ← (byte)(word) processChars::xpos#0 - [277] *((const byte*) SPRITES_XPOS + (byte~) processChars::$15) ← (byte~) processChars::$12 - [278] (word~) processChars::$13 ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) >> (byte) 4 - [279] (byte) processChars::ypos#0 ← (byte)(word~) processChars::$13 - [280] *((const byte*) SPRITES_YPOS + (byte~) processChars::$15) ← (byte) processChars::ypos#0 - [281] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)<(const word) XPOS_LEFTMOST) goto processChars::@6 + [267] (byte~) processChars::$15 ← (byte) processChars::i#10 << (byte) 1 + [268] (byte~) processChars::$12 ← (byte)(word) processChars::xpos#0 + [269] *((const byte*) SPRITES_XPOS + (byte~) processChars::$15) ← (byte~) processChars::$12 + [270] (word~) processChars::$13 ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) >> (byte) 4 + [271] (byte) processChars::ypos#0 ← (byte)(word~) processChars::$13 + [272] *((const byte*) SPRITES_YPOS + (byte~) processChars::$15) ← (byte) processChars::ypos#0 + [273] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)<(const word) XPOS_LEFTMOST) goto processChars::@6 to:processChars::@14 processChars::@14: scope:[processChars] from processChars::@5 - [282] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)>(const word) XPOS_RIGHTMOST) goto processChars::@6 + [274] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)>(const word) XPOS_RIGHTMOST) goto processChars::@6 to:processChars::@13 processChars::@13: scope:[processChars] from processChars::@14 - [283] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)<(const word) YPOS_TOPMOST) goto processChars::@6 + [275] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)<(const word) YPOS_TOPMOST) goto processChars::@6 to:processChars::@12 processChars::@12: scope:[processChars] from processChars::@13 - [284] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)>(const word) YPOS_BOTTOMMOST) goto processChars::@6 + [276] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)>(const word) YPOS_BOTTOMMOST) goto processChars::@6 to:processChars::@9 processChars::@9: scope:[processChars] from processChars::@12 - [285] (word~) processChars::$23 ← (word) processChars::xpos#0 >> (byte) 3 - [286] (byte~) processChars::$24 ← (byte)(word~) processChars::$23 - [287] (byte) processChars::xchar#0 ← (byte~) processChars::$24 - (const byte) BORDER_XPOS_LEFT/(byte) 8 - [288] (byte~) processChars::$33 ← (byte) processChars::xchar#0 << (byte) 1 - [289] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) + *((const word*) VXSIN + (byte~) processChars::$33) - [290] *((word*)(struct ProcessingSprite*) processChars::processing#0) ← *((word*)(struct ProcessingSprite*) processChars::processing#0) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) - [291] (byte~) processChars::$27 ← (byte) processChars::ypos#0 >> (byte) 3 - [292] (byte) processChars::ychar#0 ← (byte~) processChars::$27 - (const byte) BORDER_YPOS_TOP/(byte) 8 - [293] (byte~) processChars::$34 ← (byte) processChars::ychar#0 << (byte) 1 - [294] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) + *((const word*) VYSIN + (byte~) processChars::$34) - [295] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) + [277] (word~) processChars::$23 ← (word) processChars::xpos#0 >> (byte) 3 + [278] (byte~) processChars::$24 ← (byte)(word~) processChars::$23 + [279] (byte) processChars::xchar#0 ← (byte~) processChars::$24 - (const byte) BORDER_XPOS_LEFT/(byte) 8 + [280] (byte~) processChars::$33 ← (byte) processChars::xchar#0 << (byte) 1 + [281] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) + *((const word*) VXSIN + (byte~) processChars::$33) + [282] *((word*)(struct ProcessingSprite*) processChars::processing#0) ← *((word*)(struct ProcessingSprite*) processChars::processing#0) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) + [283] (byte~) processChars::$27 ← (byte) processChars::ypos#0 >> (byte) 3 + [284] (byte) processChars::ychar#0 ← (byte~) processChars::$27 - (const byte) BORDER_YPOS_TOP/(byte) 8 + [285] (byte~) processChars::$34 ← (byte) processChars::ychar#0 << (byte) 1 + [286] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) + *((const word*) VYSIN + (byte~) processChars::$34) + [287] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) to:processChars::@7 processChars::@7: scope:[processChars] from processChars::@6 processChars::@9 - [296] (byte) processChars::numActive#1 ← ++ (byte) processChars::numActive#10 + [288] (byte) processChars::numActive#1 ← ++ (byte) processChars::numActive#10 to:processChars::@2 processChars::@2: scope:[processChars] from processChars::@1 processChars::@7 - [297] (byte) processChars::numActive#3 ← phi( processChars::@1/(byte) processChars::numActive#10 processChars::@7/(byte) processChars::numActive#1 ) - [298] (byte) processChars::i#1 ← ++ (byte) processChars::i#10 - [299] if((byte) processChars::i#1!=(const byte) NUM_PROCESSING-(byte) 1+(byte) 1) goto processChars::@1 + [289] (byte) processChars::numActive#3 ← phi( processChars::@1/(byte) processChars::numActive#10 processChars::@7/(byte) processChars::numActive#1 ) + [290] (byte) processChars::i#1 ← ++ (byte) processChars::i#10 + [291] if((byte) processChars::i#1!=(const byte) NUM_PROCESSING-(byte) 1+(byte) 1) goto processChars::@1 to:processChars::@return processChars::@return: scope:[processChars] from processChars::@2 - [300] return + [292] return to:@return processChars::@6: scope:[processChars] from processChars::@12 processChars::@13 processChars::@14 processChars::@5 - [301] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_FREE - [302] (byte~) processChars::$29 ← (byte) $ff ^ (byte) processChars::bitmask#0 - [303] *((const byte*) SPRITES_ENABLE) ← *((const byte*) SPRITES_ENABLE) & (byte~) processChars::$29 + [293] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_FREE + [294] (byte~) processChars::$29 ← (byte) $ff ^ (byte) processChars::bitmask#0 + [295] *((const byte*) SPRITES_ENABLE) ← *((const byte*) SPRITES_ENABLE) & (byte~) processChars::$29 to:processChars::@7 processChars::@4: scope:[processChars] from processChars::@3 - [304] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) | (byte) processChars::bitmask#0 + [296] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) | (byte) processChars::bitmask#0 to:processChars::@5 interrupt(HARDWARE_ALL)(void()) irqTop() irqTop: scope:[irqTop] from - [305] phi() + [297] phi() to:irqTop::@1 irqTop::@1: scope:[irqTop] from irqTop - [306] *((const byte*) RASTER) ← (const byte) RASTER_IRQ_MIDDLE - [307] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_ALL)(void()) irqBottom() - [308] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER + [298] *((const byte*) RASTER) ← (const byte) RASTER_IRQ_MIDDLE + [299] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_ALL)(void()) irqBottom() + [300] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER to:irqTop::@return irqTop::@return: scope:[irqTop] from irqTop::@1 - [309] return + [301] return to:@return @@ -4005,9 +3935,9 @@ VARIABLE REGISTER WEIGHTS (word) ProcessingSprite::x (word) ProcessingSprite::y (byte*) SCREEN_COPY -(void*) SCREEN_COPY#0 0.0273972602739726 +(void*) SCREEN_COPY#0 0.03076923076923077 (byte*) SCREEN_DIST -(void*) SCREEN_DIST#0 0.028169014084507043 +(void*) SCREEN_DIST#0 0.031746031746031744 (word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y) (signed word~) atan2_16::$2 4.0 (byte~) atan2_16::$22 2002.0 @@ -4161,11 +4091,11 @@ interrupt(HARDWARE_ALL)(void()) irqTop() (byte) irqTop::i (byte) irqTop::i1 (void()) main() -(byte~) main::$10 12.222222222222221 -(byte~) main::$20 22.0 -(byte~) main::$21 22.0 -(byte~) main::$22 22.0 -(byte~) main::$23 22.0 +(byte~) main::$10 22.0 +(byte~) main::$11 22.0 +(byte~) main::$12 22.0 +(byte~) main::$13 22.0 +(byte~) main::$14 22.0 (struct ProcessingChar~) main::$5 (byte) main::center_dist (byte) main::center_dist#0 22.0 @@ -4179,7 +4109,7 @@ interrupt(HARDWARE_ALL)(void()) irqTop() (byte*) main::dst#2 8.75 (byte) main::i (byte) main::i#1 16.5 -(byte) main::i#2 3.6666666666666665 +(byte) main::i#2 7.857142857142857 (byte*) main::src (byte*) main::src#1 11.0 (byte*) main::src#2 14.666666666666666 @@ -4335,10 +4265,10 @@ Initial phi equivalence classes Added variable SCREEN_COPY#0 to live range equivalence class [ SCREEN_COPY#0 ] Added variable SCREEN_DIST#0 to live range equivalence class [ SCREEN_DIST#0 ] Added variable init_angle_screen::screen#0 to live range equivalence class [ init_angle_screen::screen#0 ] -Added variable main::$20 to live range equivalence class [ main::$20 ] -Added variable main::$21 to live range equivalence class [ main::$21 ] -Added variable main::$22 to live range equivalence class [ main::$22 ] -Added variable main::$23 to live range equivalence class [ main::$23 ] +Added variable main::$11 to live range equivalence class [ main::$11 ] +Added variable main::$12 to live range equivalence class [ main::$12 ] +Added variable main::$13 to live range equivalence class [ main::$13 ] +Added variable main::$14 to live range equivalence class [ main::$14 ] Added variable main::$10 to live range equivalence class [ main::$10 ] Added variable getCharToProcess::return_x#0 to live range equivalence class [ getCharToProcess::return_x#0 ] Added variable getCharToProcess::return_y#0 to live range equivalence class [ getCharToProcess::return_y#0 ] @@ -4464,10 +4394,10 @@ Complete equivalence classes [ SCREEN_COPY#0 ] [ SCREEN_DIST#0 ] [ init_angle_screen::screen#0 ] -[ main::$20 ] -[ main::$21 ] -[ main::$22 ] -[ main::$23 ] +[ main::$11 ] +[ main::$12 ] +[ main::$13 ] +[ main::$14 ] [ main::$10 ] [ getCharToProcess::return_x#0 ] [ getCharToProcess::return_y#0 ] @@ -4592,10 +4522,10 @@ Allocated zp[1]:51 [ processChars::numActive#10 processChars::numActive#3 proces Allocated zp[2]:52 [ SCREEN_COPY#0 ] Allocated zp[2]:54 [ SCREEN_DIST#0 ] Allocated zp[2]:56 [ init_angle_screen::screen#0 ] -Allocated zp[1]:58 [ main::$20 ] -Allocated zp[1]:59 [ main::$21 ] -Allocated zp[1]:60 [ main::$22 ] -Allocated zp[1]:61 [ main::$23 ] +Allocated zp[1]:58 [ main::$11 ] +Allocated zp[1]:59 [ main::$12 ] +Allocated zp[1]:60 [ main::$13 ] +Allocated zp[1]:61 [ main::$14 ] Allocated zp[1]:62 [ main::$10 ] Allocated zp[1]:63 [ getCharToProcess::return_x#0 ] Allocated zp[1]:64 [ getCharToProcess::return_y#0 ] @@ -4756,6 +4686,7 @@ Target platform is c64basic / MOS6502X .const YPOS_BOTTOMMOST = BORDER_YPOS_BOTTOM<<4 .const RASTER_IRQ_TOP = $30 .const RASTER_IRQ_MIDDLE = $ff + .const SIZEOF_STRUCT_PROCESSINGSPRITE = $e .const OFFSET_STRUCT_PROCESSINGSPRITE_Y = 2 .const OFFSET_STRUCT_PROCESSINGSPRITE_VX = 4 .const OFFSET_STRUCT_PROCESSINGSPRITE_VY = 6 @@ -4778,9 +4709,9 @@ __b1_from___bbegin: // @1 __b1: // [2] call malloc - // [243] phi from @1 to malloc [phi:@1->malloc] + // [235] phi from @1 to malloc [phi:@1->malloc] malloc_from___b1: - // [243] phi (byte*) heap_head#5 = (const byte*) HEAP_TOP [phi:@1->malloc#0] -- pbuz1=pbuc1 + // [235] phi (byte*) heap_head#5 = (const byte*) HEAP_TOP [phi:@1->malloc#0] -- pbuz1=pbuc1 lda #HEAP_TOP @@ -4795,9 +4726,9 @@ __b3: lda.z malloc.mem+1 sta.z SCREEN_COPY+1 // [4] call malloc - // [243] phi from @3 to malloc [phi:@3->malloc] + // [235] phi from @3 to malloc [phi:@3->malloc] malloc_from___b3: - // [243] phi (byte*) heap_head#5 = (byte*) heap_head#1 [phi:@3->malloc#0] -- register_copy + // [235] phi (byte*) heap_head#5 = (byte*) heap_head#1 [phi:@3->malloc#0] -- register_copy jsr malloc jmp __b4 // @4 @@ -4828,10 +4759,10 @@ main: { .label center_x = $42 .label center_y = $43 .label center_dist = $44 - .label __20 = $3a - .label __21 = $3b - .label __22 = $3c - .label __23 = $3d + .label __11 = $3a + .label __12 = $3b + .label __13 = $3c + .label __14 = $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 @@ -4879,168 +4810,132 @@ main: { jmp __b3 // main::@3 __b3: - // [15] (byte~) main::$20 ← (byte) main::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [15] (byte~) main::$11 ← (byte) main::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z i asl - sta.z __20 - // [16] (byte~) main::$21 ← (byte~) main::$20 + (byte) main::i#2 -- vbuz1=vbuz2_plus_vbuz3 - lda.z __20 + sta.z __11 + // [16] (byte~) main::$12 ← (byte~) main::$11 + (byte) main::i#2 -- vbuz1=vbuz2_plus_vbuz3 + lda.z __11 clc adc.z i - sta.z __21 - // [17] (byte~) main::$22 ← (byte~) main::$21 << (byte) 1 -- vbuz1=vbuz2_rol_1 - lda.z __21 + sta.z __12 + // [17] (byte~) main::$13 ← (byte~) main::$12 << (byte) 1 -- vbuz1=vbuz2_rol_1 + lda.z __12 asl - sta.z __22 - // [18] (byte~) main::$23 ← (byte~) main::$22 + (byte) main::i#2 -- vbuz1=vbuz2_plus_vbuz3 - lda.z __22 + sta.z __13 + // [18] (byte~) main::$14 ← (byte~) main::$13 + (byte) main::i#2 -- vbuz1=vbuz2_plus_vbuz3 + lda.z __13 clc adc.z i - sta.z __23 - // [19] (byte~) main::$10 ← (byte~) main::$23 << (byte) 1 -- vbuz1=vbuz2_rol_1 - lda.z __23 + sta.z __14 + // [19] (byte~) main::$10 ← (byte~) main::$14 << (byte) 1 -- vbuz1=vbuz2_rol_1 + lda.z __14 asl sta.z __10 - // [20] *((word*)(const struct ProcessingSprite*) PROCESSING + (byte~) main::$10) ← (word) 0 -- pwuc1_derefidx_vbuz1=vwuc2 - ldy.z __10 - lda #<0 - sta PROCESSING,y - lda #>0 - sta PROCESSING+1,y - // [21] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$10) ← (word) 0 -- pwuc1_derefidx_vbuz1=vwuc2 - ldy.z __10 - lda #<0 - sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y,y - lda #>0 - sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y+1,y - // [22] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$10) ← (word) 0 -- pwuc1_derefidx_vbuz1=vwuc2 - ldy.z __10 - lda #<0 - sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX,y - lda #>0 - sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX+1,y - // [23] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$10) ← (word) 0 -- pwuc1_derefidx_vbuz1=vwuc2 - ldy.z __10 - lda #<0 - sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY,y - lda #>0 - sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY+1,y - // [24] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$10) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 - lda #0 - ldy.z __10 - sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_ID,y - // [25] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$10) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 - lda #0 - ldy.z __10 - sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_PTR,y - // [26] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) main::$10) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 - lda #0 - ldy.z __10 - sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_COL,y - // [27] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$10) ← (const byte) STATUS_FREE -- pbuc1_derefidx_vbuz1=vbuc2 - lda #STATUS_FREE - ldy.z __10 - sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS,y - // [28] *((byte**)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$10) ← (byte*) 0 -- pptc1_derefidx_vbuz1=pbuc2 - ldy.z __10 - lda #<0 - sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR,y - lda #>0 - sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR+1,y - // [29] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 + // [20] *((const struct ProcessingSprite*) PROCESSING + (byte~) main::$10) ← memcpy(*(&(const struct ProcessingSprite) $2), struct ProcessingSprite, (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE) -- pssc1_derefidx_vbuz1=_deref_pssc2_memcpy_vbuc3 + ldx.z __10 + ldy #0 + !: + lda __2,y + sta PROCESSING,x + inx + iny + cpy #SIZEOF_STRUCT_PROCESSINGSPRITE + bne !- + // [21] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [30] if((byte) main::i#1!=(const byte) NUM_PROCESSING-(byte) 1+(byte) 1) goto main::@3 -- vbuz1_neq_vbuc1_then_la1 + // [22] if((byte) main::i#1!=(const byte) NUM_PROCESSING-(byte) 1+(byte) 1) goto main::@3 -- vbuz1_neq_vbuc1_then_la1 lda #NUM_PROCESSING-1+1 cmp.z i bne __b3_from___b3 - // [31] phi from main::@3 to main::@4 [phi:main::@3->main::@4] + // [23] phi from main::@3 to main::@4 [phi:main::@3->main::@4] __b4_from___b3: jmp __b4 // main::@4 __b4: - // [32] call initSprites - // [156] phi from main::@4 to initSprites [phi:main::@4->initSprites] + // [24] call initSprites + // [148] phi from main::@4 to initSprites [phi:main::@4->initSprites] initSprites_from___b4: jsr initSprites - // [33] phi from main::@4 to main::@10 [phi:main::@4->main::@10] + // [25] phi from main::@4 to main::@10 [phi:main::@4->main::@10] __b10_from___b4: jmp __b10 // main::@10 __b10: - // [34] call setupRasterIrq + // [26] call setupRasterIrq jsr setupRasterIrq - // [35] phi from main::@10 main::@6 to main::@5 [phi:main::@10/main::@6->main::@5] + // [27] phi from main::@10 main::@6 to main::@5 [phi:main::@10/main::@6->main::@5] __b5_from___b10: __b5_from___b6: jmp __b5 // Main loop // main::@5 __b5: - // [36] call getCharToProcess + // [28] call getCharToProcess jsr getCharToProcess - // [37] (byte) getCharToProcess::return_x#0 ← (byte) getCharToProcess::return_x#1 -- vbuz1=vbuz2 + // [29] (byte) getCharToProcess::return_x#0 ← (byte) getCharToProcess::return_x#1 -- vbuz1=vbuz2 lda.z getCharToProcess.return_x_1 sta.z getCharToProcess.return_x - // [38] (byte) getCharToProcess::return_y#0 ← (byte) getCharToProcess::return_y#1 -- vbuz1=vbuz2 + // [30] (byte) getCharToProcess::return_y#0 ← (byte) getCharToProcess::return_y#1 -- vbuz1=vbuz2 lda.z getCharToProcess.return_y_1 sta.z getCharToProcess.return_y - // [39] (byte) getCharToProcess::return_dist#0 ← (byte) getCharToProcess::return_dist#1 -- vbuz1=vbuz2 + // [31] (byte) getCharToProcess::return_dist#0 ← (byte) getCharToProcess::return_dist#1 -- vbuz1=vbuz2 lda.z getCharToProcess.return_dist_1 sta.z getCharToProcess.return_dist jmp __b11 // main::@11 __b11: - // [40] (byte) main::center_x#0 ← (byte) getCharToProcess::return_x#0 -- vbuz1=vbuz2 + // [32] (byte) main::center_x#0 ← (byte) getCharToProcess::return_x#0 -- vbuz1=vbuz2 lda.z getCharToProcess.return_x sta.z center_x - // [41] (byte) main::center_y#0 ← (byte) getCharToProcess::return_y#0 -- vbuz1=vbuz2 + // [33] (byte) main::center_y#0 ← (byte) getCharToProcess::return_y#0 -- vbuz1=vbuz2 lda.z getCharToProcess.return_y sta.z center_y - // [42] (byte) main::center_dist#0 ← (byte) getCharToProcess::return_dist#0 -- vbuz1=vbuz2 + // [34] (byte) main::center_dist#0 ← (byte) getCharToProcess::return_dist#0 -- vbuz1=vbuz2 lda.z getCharToProcess.return_dist sta.z center_dist - // [43] if((byte) main::center_dist#0!=(const byte) NOT_FOUND) goto main::@6 -- vbuz1_neq_vbuc1_then_la1 + // [35] if((byte) main::center_dist#0!=(const byte) NOT_FOUND) goto main::@6 -- vbuz1_neq_vbuc1_then_la1 lda #NOT_FOUND cmp.z center_dist bne __b6 jmp __b7 // main::@7 __b7: - // [44] *((const byte*) SCREEN+(word) $3e7) ← (byte) '.' -- _deref_pbuc1=vbuc2 + // [36] *((const byte*) SCREEN+(word) $3e7) ← (byte) '.' -- _deref_pbuc1=vbuc2 lda #'.' sta SCREEN+$3e7 jmp __b8 // main::@8 __b8: - // [45] *((const byte*) COLS+(word) $3e7) ← ++ *((const byte*) COLS+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 + // [37] *((const byte*) COLS+(word) $3e7) ← ++ *((const byte*) COLS+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 inc COLS+$3e7 jmp __b8 // main::@6 __b6: - // [46] (byte) startProcessing::center_x#0 ← (byte) main::center_x#0 -- vbuz1=vbuz2 + // [38] (byte) startProcessing::center_x#0 ← (byte) main::center_x#0 -- vbuz1=vbuz2 lda.z center_x sta.z startProcessing.center_x - // [47] (byte) startProcessing::center_y#0 ← (byte) main::center_y#0 -- vbuz1=vbuz2 + // [39] (byte) startProcessing::center_y#0 ← (byte) main::center_y#0 -- vbuz1=vbuz2 lda.z center_y sta.z startProcessing.center_y - // [48] call startProcessing - // [52] phi from main::@6 to startProcessing [phi:main::@6->startProcessing] + // [40] call startProcessing + // [44] phi from main::@6 to startProcessing [phi:main::@6->startProcessing] startProcessing_from___b6: jsr startProcessing jmp __b5_from___b6 // main::@2 __b2: - // [49] *((byte*) main::dst#2) ← *((byte*) main::src#2) -- _deref_pbuz1=_deref_pbuz2 + // [41] *((byte*) main::dst#2) ← *((byte*) main::src#2) -- _deref_pbuz1=_deref_pbuz2 ldy #0 lda (src),y ldy #0 sta (dst),y - // [50] (byte*) main::src#1 ← ++ (byte*) main::src#2 -- pbuz1=_inc_pbuz1 + // [42] (byte*) main::src#1 ← ++ (byte*) main::src#2 -- pbuz1=_inc_pbuz1 inc.z src bne !+ inc.z src+1 !: - // [51] (byte*) main::dst#1 ← ++ (byte*) main::dst#2 -- pbuz1=_inc_pbuz1 + // [43] (byte*) main::dst#1 ← ++ (byte*) main::dst#2 -- pbuz1=_inc_pbuz1 inc.z dst bne !+ inc.z dst+1 @@ -5099,73 +4994,73 @@ startProcessing: { .label __48 = $79 .label __49 = $7a .label __50 = $7b - // [53] phi from startProcessing to startProcessing::@1 [phi:startProcessing->startProcessing::@1] + // [45] phi from startProcessing to startProcessing::@1 [phi:startProcessing->startProcessing::@1] __b1_from_startProcessing: - // [53] phi (byte) startProcessing::freeIdx#6 = (byte) $ff [phi:startProcessing->startProcessing::@1#0] -- vbuz1=vbuc1 + // [45] phi (byte) startProcessing::freeIdx#6 = (byte) $ff [phi:startProcessing->startProcessing::@1#0] -- vbuz1=vbuc1 lda #$ff sta.z freeIdx_1 jmp __b1 // startProcessing::@1 __b1: - // [54] phi from startProcessing::@1 to startProcessing::@2 [phi:startProcessing::@1->startProcessing::@2] + // [46] phi from startProcessing::@1 to startProcessing::@2 [phi:startProcessing::@1->startProcessing::@2] __b2_from___b1: - // [54] phi (byte) startProcessing::i#2 = (byte) 0 [phi:startProcessing::@1->startProcessing::@2#0] -- vbuz1=vbuc1 + // [46] phi (byte) startProcessing::i#2 = (byte) 0 [phi:startProcessing::@1->startProcessing::@2#0] -- vbuz1=vbuc1 lda #0 sta.z i jmp __b2 - // [54] phi from startProcessing::@3 to startProcessing::@2 [phi:startProcessing::@3->startProcessing::@2] + // [46] phi from startProcessing::@3 to startProcessing::@2 [phi:startProcessing::@3->startProcessing::@2] __b2_from___b3: - // [54] phi (byte) startProcessing::i#2 = (byte) startProcessing::i#1 [phi:startProcessing::@3->startProcessing::@2#0] -- register_copy + // [46] phi (byte) startProcessing::i#2 = (byte) startProcessing::i#1 [phi:startProcessing::@3->startProcessing::@2#0] -- register_copy jmp __b2 // startProcessing::@2 __b2: - // [55] (byte~) startProcessing::$39 ← (byte) startProcessing::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [47] (byte~) startProcessing::$39 ← (byte) startProcessing::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z i asl sta.z __39 - // [56] (byte~) startProcessing::$40 ← (byte~) startProcessing::$39 + (byte) startProcessing::i#2 -- vbuz1=vbuz2_plus_vbuz3 + // [48] (byte~) startProcessing::$40 ← (byte~) startProcessing::$39 + (byte) startProcessing::i#2 -- vbuz1=vbuz2_plus_vbuz3 lda.z __39 clc adc.z i sta.z __40 - // [57] (byte~) startProcessing::$41 ← (byte~) startProcessing::$40 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [49] (byte~) startProcessing::$41 ← (byte~) startProcessing::$40 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z __40 asl sta.z __41 - // [58] (byte~) startProcessing::$42 ← (byte~) startProcessing::$41 + (byte) startProcessing::i#2 -- vbuz1=vbuz2_plus_vbuz3 + // [50] (byte~) startProcessing::$42 ← (byte~) startProcessing::$41 + (byte) startProcessing::i#2 -- vbuz1=vbuz2_plus_vbuz3 lda.z __41 clc adc.z i sta.z __42 - // [59] (byte~) startProcessing::$27 ← (byte~) startProcessing::$42 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [51] (byte~) startProcessing::$27 ← (byte~) startProcessing::$42 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z __42 asl sta.z __27 - // [60] if(*((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$27)!=(const byte) STATUS_FREE) goto startProcessing::@3 -- pbuc1_derefidx_vbuz1_neq_vbuc2_then_la1 + // [52] if(*((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$27)!=(const byte) STATUS_FREE) goto startProcessing::@3 -- pbuc1_derefidx_vbuz1_neq_vbuc2_then_la1 lda #STATUS_FREE ldy.z __27 cmp PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS,y bne __b3 - // [61] phi from startProcessing::@2 startProcessing::@9 to startProcessing::@4 [phi:startProcessing::@2/startProcessing::@9->startProcessing::@4] + // [53] phi from startProcessing::@2 startProcessing::@9 to startProcessing::@4 [phi:startProcessing::@2/startProcessing::@9->startProcessing::@4] __b4_from___b2: __b4_from___b9: - // [61] phi (byte) startProcessing::freeIdx#2 = (byte) startProcessing::i#2 [phi:startProcessing::@2/startProcessing::@9->startProcessing::@4#0] -- register_copy + // [53] phi (byte) startProcessing::freeIdx#2 = (byte) startProcessing::i#2 [phi:startProcessing::@2/startProcessing::@9->startProcessing::@4#0] -- register_copy jmp __b4 // startProcessing::@4 __b4: - // [62] if((byte) startProcessing::freeIdx#2==(byte) $ff) goto startProcessing::@8 -- vbuz1_eq_vbuc1_then_la1 + // [54] if((byte) startProcessing::freeIdx#2==(byte) $ff) goto startProcessing::@8 -- vbuz1_eq_vbuc1_then_la1 lda #$ff cmp.z freeIdx beq __b8 jmp __b5 // startProcessing::@5 __b5: - // [63] (word~) startProcessing::$0 ← (word)(byte) startProcessing::center_y#0 -- vwuz1=_word_vbuz2 + // [55] (word~) startProcessing::$0 ← (word)(byte) startProcessing::center_y#0 -- vwuz1=_word_vbuz2 lda.z center_y sta.z __0 lda #0 sta.z __0+1 - // [64] (word~) startProcessing::$44 ← (word~) startProcessing::$0 << (byte) 2 -- vwuz1=vwuz2_rol_2 + // [56] (word~) startProcessing::$44 ← (word~) startProcessing::$0 << (byte) 2 -- vwuz1=vwuz2_rol_2 lda.z __0 asl sta.z __44 @@ -5174,7 +5069,7 @@ startProcessing: { sta.z __44+1 asl.z __44 rol.z __44+1 - // [65] (word~) startProcessing::$45 ← (word~) startProcessing::$44 + (word~) startProcessing::$0 -- vwuz1=vwuz2_plus_vwuz3 + // [57] (word~) startProcessing::$45 ← (word~) startProcessing::$44 + (word~) startProcessing::$0 -- vwuz1=vwuz2_plus_vwuz3 lda.z __44 clc adc.z __0 @@ -5182,7 +5077,7 @@ startProcessing: { lda.z __44+1 adc.z __0+1 sta.z __45+1 - // [66] (word~) startProcessing::$1 ← (word~) startProcessing::$45 << (byte) 3 -- vwuz1=vwuz2_rol_3 + // [58] (word~) startProcessing::$1 ← (word~) startProcessing::$45 << (byte) 3 -- vwuz1=vwuz2_rol_3 lda.z __45 asl sta.z __1 @@ -5193,7 +5088,7 @@ startProcessing: { rol.z __1+1 asl.z __1 rol.z __1+1 - // [67] (word) startProcessing::offset#0 ← (word~) startProcessing::$1 + (byte) startProcessing::center_x#0 -- vwuz1=vwuz2_plus_vbuz3 + // [59] (word) startProcessing::offset#0 ← (word~) startProcessing::$1 + (byte) startProcessing::center_x#0 -- vwuz1=vwuz2_plus_vbuz3 lda.z center_x clc adc.z __1 @@ -5201,7 +5096,7 @@ startProcessing: { lda #0 adc.z __1+1 sta.z offset+1 - // [68] (byte*) startProcessing::colPtr#0 ← (const byte*) COLS + (word) startProcessing::offset#0 -- pbuz1=pbuc1_plus_vwuz2 + // [60] (byte*) startProcessing::colPtr#0 ← (const byte*) COLS + (word) startProcessing::offset#0 -- pbuz1=pbuc1_plus_vwuz2 lda.z offset clc adc #COLS sta.z colPtr+1 - // [69] (byte) startProcessing::spriteCol#0 ← *((byte*) startProcessing::colPtr#0) -- vbuz1=_deref_pbuz2 + // [61] (byte) startProcessing::spriteCol#0 ← *((byte*) startProcessing::colPtr#0) -- vbuz1=_deref_pbuz2 ldy #0 lda (colPtr),y sta.z spriteCol - // [70] (byte*) startProcessing::screenPtr#0 ← (const byte*) SCREEN + (word) startProcessing::offset#0 -- pbuz1=pbuc1_plus_vwuz2 + // [62] (byte*) startProcessing::screenPtr#0 ← (const byte*) SCREEN + (word) startProcessing::offset#0 -- pbuz1=pbuc1_plus_vwuz2 lda.z offset clc adc #SCREEN sta.z screenPtr+1 - // [71] (word~) startProcessing::$5 ← (word)(byte) startProcessing::freeIdx#2 -- vwuz1=_word_vbuz2 + // [63] (word~) startProcessing::$5 ← (word)(byte) startProcessing::freeIdx#2 -- vwuz1=_word_vbuz2 lda.z freeIdx sta.z __5 lda #0 sta.z __5+1 - // [72] (word~) startProcessing::$6 ← (word~) startProcessing::$5 << (byte) 6 -- vwuz1=vwuz2_rol_6 + // [64] (word~) startProcessing::$6 ← (word~) startProcessing::$5 << (byte) 6 -- vwuz1=vwuz2_rol_6 lda.z __5 asl sta.z __6 @@ -5243,7 +5138,7 @@ startProcessing: { rol.z __6+1 asl.z __6 rol.z __6+1 - // [73] (byte*) startProcessing::spriteData#0 ← (const byte*) SPRITE_DATA + (word~) startProcessing::$6 -- pbuz1=pbuc1_plus_vwuz2 + // [65] (byte*) startProcessing::spriteData#0 ← (const byte*) SPRITE_DATA + (word~) startProcessing::$6 -- pbuz1=pbuc1_plus_vwuz2 lda.z __6 clc adc #SPRITE_DATA sta.z spriteData+1 - // [74] (byte) startProcessing::ch#0 ← *((byte*) startProcessing::screenPtr#0) -- vbuz1=_deref_pbuz2 + // [66] (byte) startProcessing::ch#0 ← *((byte*) startProcessing::screenPtr#0) -- vbuz1=_deref_pbuz2 ldy #0 lda (screenPtr),y sta.z ch - // [75] (word~) startProcessing::$8 ← (word)(byte) startProcessing::ch#0 -- vwuz1=_word_vbuz2 + // [67] (word~) startProcessing::$8 ← (word)(byte) startProcessing::ch#0 -- vwuz1=_word_vbuz2 lda.z ch sta.z __8 lda #0 sta.z __8+1 - // [76] (word~) startProcessing::$9 ← (word~) startProcessing::$8 << (byte) 3 -- vwuz1=vwuz2_rol_3 + // [68] (word~) startProcessing::$9 ← (word~) startProcessing::$8 << (byte) 3 -- vwuz1=vwuz2_rol_3 lda.z __8 asl sta.z __9 @@ -5271,7 +5166,7 @@ startProcessing: { rol.z __9+1 asl.z __9 rol.z __9+1 - // [77] (byte*) startProcessing::chargenData#0 ← (const byte*) CHARGEN + (word~) startProcessing::$9 -- pbuz1=pbuc1_plus_vwuz2 + // [69] (byte*) startProcessing::chargenData#0 ← (const byte*) CHARGEN + (word~) startProcessing::$9 -- pbuz1=pbuc1_plus_vwuz2 lda.z __9 clc adc #startProcessing::@6] + // [72] phi from startProcessing::@5 to startProcessing::@6 [phi:startProcessing::@5->startProcessing::@6] __b6_from___b5: - // [80] phi (byte) startProcessing::i1#2 = (byte) 0 [phi:startProcessing::@5->startProcessing::@6#0] -- vbuz1=vbuc1 + // [72] phi (byte) startProcessing::i1#2 = (byte) 0 [phi:startProcessing::@5->startProcessing::@6#0] -- vbuz1=vbuc1 lda #0 sta.z i1 - // [80] phi (byte*) startProcessing::spriteData#2 = (byte*) startProcessing::spriteData#0 [phi:startProcessing::@5->startProcessing::@6#1] -- register_copy - // [80] phi (byte*) startProcessing::chargenData#2 = (byte*) startProcessing::chargenData#0 [phi:startProcessing::@5->startProcessing::@6#2] -- register_copy + // [72] phi (byte*) startProcessing::spriteData#2 = (byte*) startProcessing::spriteData#0 [phi:startProcessing::@5->startProcessing::@6#1] -- register_copy + // [72] phi (byte*) startProcessing::chargenData#2 = (byte*) startProcessing::chargenData#0 [phi:startProcessing::@5->startProcessing::@6#2] -- register_copy jmp __b6 - // [80] phi from startProcessing::@6 to startProcessing::@6 [phi:startProcessing::@6->startProcessing::@6] + // [72] phi from startProcessing::@6 to startProcessing::@6 [phi:startProcessing::@6->startProcessing::@6] __b6_from___b6: - // [80] phi (byte) startProcessing::i1#2 = (byte) startProcessing::i1#1 [phi:startProcessing::@6->startProcessing::@6#0] -- register_copy - // [80] phi (byte*) startProcessing::spriteData#2 = (byte*) startProcessing::spriteData#1 [phi:startProcessing::@6->startProcessing::@6#1] -- register_copy - // [80] phi (byte*) startProcessing::chargenData#2 = (byte*) startProcessing::chargenData#1 [phi:startProcessing::@6->startProcessing::@6#2] -- register_copy + // [72] phi (byte) startProcessing::i1#2 = (byte) startProcessing::i1#1 [phi:startProcessing::@6->startProcessing::@6#0] -- register_copy + // [72] phi (byte*) startProcessing::spriteData#2 = (byte*) startProcessing::spriteData#1 [phi:startProcessing::@6->startProcessing::@6#1] -- register_copy + // [72] phi (byte*) startProcessing::chargenData#2 = (byte*) startProcessing::chargenData#1 [phi:startProcessing::@6->startProcessing::@6#2] -- register_copy jmp __b6 // startProcessing::@6 __b6: - // [81] *((byte*) startProcessing::spriteData#2) ← *((byte*) startProcessing::chargenData#2) -- _deref_pbuz1=_deref_pbuz2 + // [73] *((byte*) startProcessing::spriteData#2) ← *((byte*) startProcessing::chargenData#2) -- _deref_pbuz1=_deref_pbuz2 ldy #0 lda (chargenData),y ldy #0 sta (spriteData),y - // [82] (byte*) startProcessing::spriteData#1 ← (byte*) startProcessing::spriteData#2 + (byte) 3 -- pbuz1=pbuz1_plus_vbuc1 + // [74] (byte*) startProcessing::spriteData#1 ← (byte*) startProcessing::spriteData#2 + (byte) 3 -- pbuz1=pbuz1_plus_vbuc1 lda #3 clc adc.z spriteData @@ -5313,31 +5208,31 @@ startProcessing: { bcc !+ inc.z spriteData+1 !: - // [83] (byte*) startProcessing::chargenData#1 ← ++ (byte*) startProcessing::chargenData#2 -- pbuz1=_inc_pbuz1 + // [75] (byte*) startProcessing::chargenData#1 ← ++ (byte*) startProcessing::chargenData#2 -- pbuz1=_inc_pbuz1 inc.z chargenData bne !+ inc.z chargenData+1 !: - // [84] (byte) startProcessing::i1#1 ← ++ (byte) startProcessing::i1#2 -- vbuz1=_inc_vbuz1 + // [76] (byte) startProcessing::i1#1 ← ++ (byte) startProcessing::i1#2 -- vbuz1=_inc_vbuz1 inc.z i1 - // [85] if((byte) startProcessing::i1#1!=(byte) 8) goto startProcessing::@6 -- vbuz1_neq_vbuc1_then_la1 + // [77] if((byte) startProcessing::i1#1!=(byte) 8) goto startProcessing::@6 -- vbuz1_neq_vbuc1_then_la1 lda #8 cmp.z i1 bne __b6_from___b6 jmp __b7 // startProcessing::@7 __b7: - // [86] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 + // [78] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 lda #PROCPORT_RAM_IO sta PROCPORT // asm { cli } cli - // [88] (word~) startProcessing::$11 ← (word)(byte) startProcessing::center_x#0 -- vwuz1=_word_vbuz2 + // [80] (word~) startProcessing::$11 ← (word)(byte) startProcessing::center_x#0 -- vwuz1=_word_vbuz2 lda.z center_x sta.z __11 lda #0 sta.z __11+1 - // [89] (word~) startProcessing::$12 ← (word~) startProcessing::$11 << (byte) 3 -- vwuz1=vwuz2_rol_3 + // [81] (word~) startProcessing::$12 ← (word~) startProcessing::$11 << (byte) 3 -- vwuz1=vwuz2_rol_3 lda.z __11 asl sta.z __12 @@ -5348,7 +5243,7 @@ startProcessing: { rol.z __12+1 asl.z __12 rol.z __12+1 - // [90] (word~) startProcessing::$13 ← (const byte) BORDER_XPOS_LEFT + (word~) startProcessing::$12 -- vwuz1=vbuc1_plus_vwuz2 + // [82] (word~) startProcessing::$13 ← (const byte) BORDER_XPOS_LEFT + (word~) startProcessing::$12 -- vwuz1=vbuc1_plus_vwuz2 lda #BORDER_XPOS_LEFT clc adc.z __12 @@ -5356,7 +5251,7 @@ startProcessing: { lda #0 adc.z __12+1 sta.z __13+1 - // [91] (word) startProcessing::spriteX#0 ← (word~) startProcessing::$13 << (byte) 4 -- vwuz1=vwuz2_rol_4 + // [83] (word) startProcessing::spriteX#0 ← (word~) startProcessing::$13 << (byte) 4 -- vwuz1=vwuz2_rol_4 lda.z __13 asl sta.z spriteX @@ -5369,12 +5264,12 @@ startProcessing: { rol.z spriteX+1 asl.z spriteX rol.z spriteX+1 - // [92] (word~) startProcessing::$15 ← (word)(byte) startProcessing::center_y#0 -- vwuz1=_word_vbuz2 + // [84] (word~) startProcessing::$15 ← (word)(byte) startProcessing::center_y#0 -- vwuz1=_word_vbuz2 lda.z center_y sta.z __15 lda #0 sta.z __15+1 - // [93] (word~) startProcessing::$16 ← (word~) startProcessing::$15 << (byte) 3 -- vwuz1=vwuz2_rol_3 + // [85] (word~) startProcessing::$16 ← (word~) startProcessing::$15 << (byte) 3 -- vwuz1=vwuz2_rol_3 lda.z __15 asl sta.z __16 @@ -5385,7 +5280,7 @@ startProcessing: { rol.z __16+1 asl.z __16 rol.z __16+1 - // [94] (word~) startProcessing::$17 ← (const byte) BORDER_YPOS_TOP + (word~) startProcessing::$16 -- vwuz1=vbuc1_plus_vwuz2 + // [86] (word~) startProcessing::$17 ← (const byte) BORDER_YPOS_TOP + (word~) startProcessing::$16 -- vwuz1=vbuc1_plus_vwuz2 lda #BORDER_YPOS_TOP clc adc.z __16 @@ -5393,7 +5288,7 @@ startProcessing: { lda #0 adc.z __16+1 sta.z __17+1 - // [95] (word) startProcessing::spriteY#0 ← (word~) startProcessing::$17 << (byte) 4 -- vwuz1=vwuz2_rol_4 + // [87] (word) startProcessing::spriteY#0 ← (word~) startProcessing::$17 << (byte) 4 -- vwuz1=vwuz2_rol_4 lda.z __17 asl sta.z spriteY @@ -5406,84 +5301,84 @@ startProcessing: { rol.z spriteY+1 asl.z spriteY rol.z spriteY+1 - // [96] (byte) startProcessing::spritePtr#0 ← (byte)(const byte*) SPRITE_DATA/(byte) $40 + (byte) startProcessing::freeIdx#2 -- vbuz1=vbuc1_plus_vbuz2 + // [88] (byte) startProcessing::spritePtr#0 ← (byte)(const byte*) SPRITE_DATA/(byte) $40 + (byte) startProcessing::freeIdx#2 -- vbuz1=vbuc1_plus_vbuz2 lax.z freeIdx axs #-[SPRITE_DATA/$40] stx.z spritePtr - // [97] (byte~) startProcessing::$20 ← (byte) startProcessing::freeIdx#2 << (byte) 3 -- vbuz1=vbuz2_rol_3 + // [89] (byte~) startProcessing::$20 ← (byte) startProcessing::freeIdx#2 << (byte) 3 -- vbuz1=vbuz2_rol_3 lda.z freeIdx asl asl asl sta.z __20 - // [98] (word~) startProcessing::$21 ← (word)(byte~) startProcessing::$20 -- vwuz1=_word_vbuz2 + // [90] (word~) startProcessing::$21 ← (word)(byte~) startProcessing::$20 -- vwuz1=_word_vbuz2 lda.z __20 sta.z __21 lda #0 sta.z __21+1 - // [99] (byte~) startProcessing::$47 ← (byte) startProcessing::freeIdx#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [91] (byte~) startProcessing::$47 ← (byte) startProcessing::freeIdx#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z freeIdx asl sta.z __47 - // [100] (byte~) startProcessing::$48 ← (byte~) startProcessing::$47 + (byte) startProcessing::freeIdx#2 -- vbuz1=vbuz2_plus_vbuz3 + // [92] (byte~) startProcessing::$48 ← (byte~) startProcessing::$47 + (byte) startProcessing::freeIdx#2 -- vbuz1=vbuz2_plus_vbuz3 lda.z __47 clc adc.z freeIdx sta.z __48 - // [101] (byte~) startProcessing::$49 ← (byte~) startProcessing::$48 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [93] (byte~) startProcessing::$49 ← (byte~) startProcessing::$48 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z __48 asl sta.z __49 - // [102] (byte~) startProcessing::$50 ← (byte~) startProcessing::$49 + (byte) startProcessing::freeIdx#2 -- vbuz1=vbuz2_plus_vbuz3 + // [94] (byte~) startProcessing::$50 ← (byte~) startProcessing::$49 + (byte) startProcessing::freeIdx#2 -- vbuz1=vbuz2_plus_vbuz3 lda.z __49 clc adc.z freeIdx sta.z __50 - // [103] (byte~) startProcessing::$28 ← (byte~) startProcessing::$50 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [95] (byte~) startProcessing::$28 ← (byte~) startProcessing::$50 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z __50 asl sta.z __28 - // [104] *((word*)(const struct ProcessingSprite*) PROCESSING + (byte~) startProcessing::$28) ← (word) startProcessing::spriteX#0 -- pwuc1_derefidx_vbuz1=vwuz2 + // [96] *((word*)(const struct ProcessingSprite*) PROCESSING + (byte~) startProcessing::$28) ← (word) startProcessing::spriteX#0 -- pwuc1_derefidx_vbuz1=vwuz2 ldy.z __28 lda.z spriteX sta PROCESSING,y lda.z spriteX+1 sta PROCESSING+1,y - // [105] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) startProcessing::$28) ← (word) startProcessing::spriteY#0 -- pwuc1_derefidx_vbuz1=vwuz2 + // [97] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) startProcessing::$28) ← (word) startProcessing::spriteY#0 -- pwuc1_derefidx_vbuz1=vwuz2 ldy.z __28 lda.z spriteY sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y,y lda.z spriteY+1 sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y+1,y - // [106] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) startProcessing::$28) ← (word~) startProcessing::$21 -- pwuc1_derefidx_vbuz1=vwuz2 + // [98] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) startProcessing::$28) ← (word~) startProcessing::$21 -- pwuc1_derefidx_vbuz1=vwuz2 ldy.z __28 lda.z __21 sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX,y lda.z __21+1 sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX+1,y - // [107] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) startProcessing::$28) ← (word) $3c -- pwuc1_derefidx_vbuz1=vwuc2 + // [99] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) startProcessing::$28) ← (word) $3c -- pwuc1_derefidx_vbuz1=vwuc2 ldy.z __28 lda #<$3c sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY,y lda #>$3c sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY+1,y - // [108] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) startProcessing::$28) ← (byte) startProcessing::freeIdx#2 -- pbuc1_derefidx_vbuz1=vbuz2 + // [100] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) startProcessing::$28) ← (byte) startProcessing::freeIdx#2 -- pbuc1_derefidx_vbuz1=vbuz2 lda.z freeIdx ldy.z __28 sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_ID,y - // [109] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) startProcessing::$28) ← (byte) startProcessing::spritePtr#0 -- pbuc1_derefidx_vbuz1=vbuz2 + // [101] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) startProcessing::$28) ← (byte) startProcessing::spritePtr#0 -- pbuc1_derefidx_vbuz1=vbuz2 lda.z spritePtr ldy.z __28 sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_PTR,y - // [110] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) startProcessing::$28) ← (byte) startProcessing::spriteCol#0 -- pbuc1_derefidx_vbuz1=vbuz2 + // [102] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) startProcessing::$28) ← (byte) startProcessing::spriteCol#0 -- pbuc1_derefidx_vbuz1=vbuz2 lda.z spriteCol ldy.z __28 sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_COL,y - // [111] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$28) ← (const byte) STATUS_NEW -- pbuc1_derefidx_vbuz1=vbuc2 + // [103] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$28) ← (const byte) STATUS_NEW -- pbuc1_derefidx_vbuz1=vbuc2 lda #STATUS_NEW ldy.z __28 sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS,y - // [112] *((byte**)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) startProcessing::$28) ← (byte*) startProcessing::screenPtr#0 -- pptc1_derefidx_vbuz1=pbuz2 + // [104] *((byte**)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) startProcessing::$28) ← (byte*) startProcessing::screenPtr#0 -- pptc1_derefidx_vbuz1=pbuz2 ldy.z __28 lda.z screenPtr sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR,y @@ -5492,29 +5387,29 @@ startProcessing: { jmp __breturn // startProcessing::@return __breturn: - // [113] return + // [105] return rts // startProcessing::@8 __b8: - // [114] (byte) startProcessing::freeIdx#7 ← (byte) startProcessing::freeIdx#2 -- vbuz1=vbuz2 + // [106] (byte) startProcessing::freeIdx#7 ← (byte) startProcessing::freeIdx#2 -- vbuz1=vbuz2 lda.z freeIdx sta.z freeIdx_1 - // [53] phi from startProcessing::@8 to startProcessing::@1 [phi:startProcessing::@8->startProcessing::@1] + // [45] phi from startProcessing::@8 to startProcessing::@1 [phi:startProcessing::@8->startProcessing::@1] __b1_from___b8: - // [53] phi (byte) startProcessing::freeIdx#6 = (byte) startProcessing::freeIdx#7 [phi:startProcessing::@8->startProcessing::@1#0] -- register_copy + // [45] phi (byte) startProcessing::freeIdx#6 = (byte) startProcessing::freeIdx#7 [phi:startProcessing::@8->startProcessing::@1#0] -- register_copy jmp __b1 // startProcessing::@3 __b3: - // [115] (byte) startProcessing::i#1 ← ++ (byte) startProcessing::i#2 -- vbuz1=_inc_vbuz1 + // [107] (byte) startProcessing::i#1 ← ++ (byte) startProcessing::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [116] if((byte) startProcessing::i#1!=(const byte) NUM_PROCESSING-(byte) 1+(byte) 1) goto startProcessing::@2 -- vbuz1_neq_vbuc1_then_la1 + // [108] if((byte) startProcessing::i#1!=(const byte) NUM_PROCESSING-(byte) 1+(byte) 1) goto startProcessing::@2 -- vbuz1_neq_vbuc1_then_la1 lda #NUM_PROCESSING-1+1 cmp.z i bne __b2_from___b3 jmp __b9 // startProcessing::@9 __b9: - // [117] (byte) startProcessing::freeIdx#8 ← (byte) startProcessing::freeIdx#6 -- vbuz1=vbuz2 + // [109] (byte) startProcessing::freeIdx#8 ← (byte) startProcessing::freeIdx#6 -- vbuz1=vbuz2 lda.z freeIdx_1 sta.z freeIdx jmp __b4_from___b9 @@ -5542,47 +5437,47 @@ getCharToProcess: { .label closest_y = $16 .label __12 = $7f .label __13 = $81 - // [118] (byte*) getCharToProcess::screen_line#0 ← (byte*)(void*) SCREEN_COPY#0 -- pbuz1=pbuz2 + // [110] (byte*) getCharToProcess::screen_line#0 ← (byte*)(void*) SCREEN_COPY#0 -- pbuz1=pbuz2 lda.z SCREEN_COPY sta.z screen_line lda.z SCREEN_COPY+1 sta.z screen_line+1 - // [119] (byte*) getCharToProcess::dist_line#0 ← (byte*)(void*) SCREEN_DIST#0 -- pbuz1=pbuz2 + // [111] (byte*) getCharToProcess::dist_line#0 ← (byte*)(void*) SCREEN_DIST#0 -- pbuz1=pbuz2 lda.z SCREEN_DIST sta.z dist_line lda.z SCREEN_DIST+1 sta.z dist_line+1 - // [120] phi from getCharToProcess to getCharToProcess::@1 [phi:getCharToProcess->getCharToProcess::@1] + // [112] phi from getCharToProcess to getCharToProcess::@1 [phi:getCharToProcess->getCharToProcess::@1] __b1_from_getCharToProcess: - // [120] phi (byte) getCharToProcess::closest_y#9 = (byte) 0 [phi:getCharToProcess->getCharToProcess::@1#0] -- vbuz1=vbuc1 + // [112] phi (byte) getCharToProcess::closest_y#9 = (byte) 0 [phi:getCharToProcess->getCharToProcess::@1#0] -- vbuz1=vbuc1 lda #0 sta.z closest_y - // [120] phi (byte) getCharToProcess::closest_x#9 = (byte) 0 [phi:getCharToProcess->getCharToProcess::@1#1] -- vbuz1=vbuc1 + // [112] phi (byte) getCharToProcess::closest_x#9 = (byte) 0 [phi:getCharToProcess->getCharToProcess::@1#1] -- vbuz1=vbuc1 lda #0 sta.z closest_x - // [120] phi (byte) getCharToProcess::y#7 = (byte) 0 [phi:getCharToProcess->getCharToProcess::@1#2] -- vbuz1=vbuc1 + // [112] phi (byte) getCharToProcess::y#7 = (byte) 0 [phi:getCharToProcess->getCharToProcess::@1#2] -- vbuz1=vbuc1 lda #0 sta.z y - // [120] phi (byte) getCharToProcess::closest_dist#8 = (const byte) NOT_FOUND [phi:getCharToProcess->getCharToProcess::@1#3] -- vbuz1=vbuc1 + // [112] phi (byte) getCharToProcess::closest_dist#8 = (const byte) NOT_FOUND [phi:getCharToProcess->getCharToProcess::@1#3] -- vbuz1=vbuc1 lda #NOT_FOUND sta.z closest_dist - // [120] phi (byte*) getCharToProcess::dist_line#6 = (byte*) getCharToProcess::dist_line#0 [phi:getCharToProcess->getCharToProcess::@1#4] -- register_copy - // [120] phi (byte*) getCharToProcess::screen_line#4 = (byte*) getCharToProcess::screen_line#0 [phi:getCharToProcess->getCharToProcess::@1#5] -- register_copy + // [112] phi (byte*) getCharToProcess::dist_line#6 = (byte*) getCharToProcess::dist_line#0 [phi:getCharToProcess->getCharToProcess::@1#4] -- register_copy + // [112] phi (byte*) getCharToProcess::screen_line#4 = (byte*) getCharToProcess::screen_line#0 [phi:getCharToProcess->getCharToProcess::@1#5] -- register_copy jmp __b1 // getCharToProcess::@1 __b1: - // [121] phi from getCharToProcess::@1 to getCharToProcess::@2 [phi:getCharToProcess::@1->getCharToProcess::@2] + // [113] phi from getCharToProcess::@1 to getCharToProcess::@2 [phi:getCharToProcess::@1->getCharToProcess::@2] __b2_from___b1: - // [121] phi (byte) getCharToProcess::closest_y#7 = (byte) getCharToProcess::closest_y#9 [phi:getCharToProcess::@1->getCharToProcess::@2#0] -- register_copy - // [121] phi (byte) getCharToProcess::closest_x#7 = (byte) getCharToProcess::closest_x#9 [phi:getCharToProcess::@1->getCharToProcess::@2#1] -- register_copy - // [121] phi (byte) getCharToProcess::closest_dist#2 = (byte) getCharToProcess::closest_dist#8 [phi:getCharToProcess::@1->getCharToProcess::@2#2] -- register_copy - // [121] phi (byte) getCharToProcess::x#2 = (byte) 0 [phi:getCharToProcess::@1->getCharToProcess::@2#3] -- vbuz1=vbuc1 + // [113] phi (byte) getCharToProcess::closest_y#7 = (byte) getCharToProcess::closest_y#9 [phi:getCharToProcess::@1->getCharToProcess::@2#0] -- register_copy + // [113] phi (byte) getCharToProcess::closest_x#7 = (byte) getCharToProcess::closest_x#9 [phi:getCharToProcess::@1->getCharToProcess::@2#1] -- register_copy + // [113] phi (byte) getCharToProcess::closest_dist#2 = (byte) getCharToProcess::closest_dist#8 [phi:getCharToProcess::@1->getCharToProcess::@2#2] -- register_copy + // [113] phi (byte) getCharToProcess::x#2 = (byte) 0 [phi:getCharToProcess::@1->getCharToProcess::@2#3] -- vbuz1=vbuc1 lda #0 sta.z x jmp __b2 // getCharToProcess::@2 __b2: - // [122] if(*((byte*) getCharToProcess::screen_line#4 + (byte) getCharToProcess::x#2)==(byte) ' ') goto getCharToProcess::@11 -- pbuz1_derefidx_vbuz2_eq_vbuc1_then_la1 + // [114] if(*((byte*) getCharToProcess::screen_line#4 + (byte) getCharToProcess::x#2)==(byte) ' ') goto getCharToProcess::@11 -- pbuz1_derefidx_vbuz2_eq_vbuc1_then_la1 lda #' ' ldy.z x cmp (screen_line),y @@ -5590,43 +5485,43 @@ getCharToProcess: { jmp __b4 // getCharToProcess::@4 __b4: - // [123] (byte) getCharToProcess::dist#0 ← *((byte*) getCharToProcess::dist_line#6 + (byte) getCharToProcess::x#2) -- vbuz1=pbuz2_derefidx_vbuz3 + // [115] (byte) getCharToProcess::dist#0 ← *((byte*) getCharToProcess::dist_line#6 + (byte) getCharToProcess::x#2) -- vbuz1=pbuz2_derefidx_vbuz3 ldy.z x lda (dist_line),y sta.z dist - // [124] if((byte) getCharToProcess::dist#0>=(byte) getCharToProcess::closest_dist#2) goto getCharToProcess::@12 -- vbuz1_ge_vbuz2_then_la1 + // [116] if((byte) getCharToProcess::dist#0>=(byte) getCharToProcess::closest_dist#2) goto getCharToProcess::@12 -- vbuz1_ge_vbuz2_then_la1 lda.z dist cmp.z closest_dist bcs __b12 jmp __b5 // getCharToProcess::@5 __b5: - // [125] (byte) getCharToProcess::return_x#7 ← (byte) getCharToProcess::x#2 -- vbuz1=vbuz2 + // [117] (byte) getCharToProcess::return_x#7 ← (byte) getCharToProcess::x#2 -- vbuz1=vbuz2 lda.z x sta.z return_x_1 - // [126] (byte) getCharToProcess::return_y#7 ← (byte) getCharToProcess::y#7 -- vbuz1=vbuz2 + // [118] (byte) getCharToProcess::return_y#7 ← (byte) getCharToProcess::y#7 -- vbuz1=vbuz2 lda.z y sta.z return_y_1 - // [127] phi from getCharToProcess::@11 getCharToProcess::@12 getCharToProcess::@5 to getCharToProcess::@3 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3] + // [119] phi from getCharToProcess::@11 getCharToProcess::@12 getCharToProcess::@5 to getCharToProcess::@3 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3] __b3_from___b11: __b3_from___b12: __b3_from___b5: - // [127] phi (byte) getCharToProcess::return_y#1 = (byte) getCharToProcess::closest_y#7 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#0] -- register_copy - // [127] phi (byte) getCharToProcess::return_x#1 = (byte) getCharToProcess::closest_x#7 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#1] -- register_copy - // [127] phi (byte) getCharToProcess::return_dist#1 = (byte) getCharToProcess::return_dist#5 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#2] -- register_copy + // [119] phi (byte) getCharToProcess::return_y#1 = (byte) getCharToProcess::closest_y#7 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#0] -- register_copy + // [119] phi (byte) getCharToProcess::return_x#1 = (byte) getCharToProcess::closest_x#7 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#1] -- register_copy + // [119] phi (byte) getCharToProcess::return_dist#1 = (byte) getCharToProcess::return_dist#5 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#2] -- register_copy jmp __b3 // getCharToProcess::@3 __b3: - // [128] (byte) getCharToProcess::x#1 ← ++ (byte) getCharToProcess::x#2 -- vbuz1=_inc_vbuz1 + // [120] (byte) getCharToProcess::x#1 ← ++ (byte) getCharToProcess::x#2 -- vbuz1=_inc_vbuz1 inc.z x - // [129] if((byte) getCharToProcess::x#1!=(byte) $28) goto getCharToProcess::@10 -- vbuz1_neq_vbuc1_then_la1 + // [121] if((byte) getCharToProcess::x#1!=(byte) $28) goto getCharToProcess::@10 -- vbuz1_neq_vbuc1_then_la1 lda #$28 cmp.z x bne __b10 jmp __b6 // getCharToProcess::@6 __b6: - // [130] (byte*) getCharToProcess::screen_line#1 ← (byte*) getCharToProcess::screen_line#4 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [122] (byte*) getCharToProcess::screen_line#1 ← (byte*) getCharToProcess::screen_line#4 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc.z screen_line @@ -5634,7 +5529,7 @@ getCharToProcess: { bcc !+ inc.z screen_line+1 !: - // [131] (byte*) getCharToProcess::dist_line#1 ← (byte*) getCharToProcess::dist_line#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [123] (byte*) getCharToProcess::dist_line#1 ← (byte*) getCharToProcess::dist_line#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc.z dist_line @@ -5642,28 +5537,28 @@ getCharToProcess: { bcc !+ inc.z dist_line+1 !: - // [132] (byte) getCharToProcess::y#1 ← ++ (byte) getCharToProcess::y#7 -- vbuz1=_inc_vbuz1 + // [124] (byte) getCharToProcess::y#1 ← ++ (byte) getCharToProcess::y#7 -- vbuz1=_inc_vbuz1 inc.z y - // [133] if((byte) getCharToProcess::y#1!=(byte) $19) goto getCharToProcess::@9 -- vbuz1_neq_vbuc1_then_la1 + // [125] if((byte) getCharToProcess::y#1!=(byte) $19) goto getCharToProcess::@9 -- vbuz1_neq_vbuc1_then_la1 lda #$19 cmp.z y bne __b9 jmp __b7 // getCharToProcess::@7 __b7: - // [134] if((byte) getCharToProcess::return_dist#1==(const byte) NOT_FOUND) goto getCharToProcess::@return -- vbuz1_eq_vbuc1_then_la1 + // [126] if((byte) getCharToProcess::return_dist#1==(const byte) NOT_FOUND) goto getCharToProcess::@return -- vbuz1_eq_vbuc1_then_la1 lda #NOT_FOUND cmp.z return_dist_1 beq __breturn jmp __b8 // getCharToProcess::@8 __b8: - // [135] (word~) getCharToProcess::$8 ← (word)(byte) getCharToProcess::return_y#1 -- vwuz1=_word_vbuz2 + // [127] (word~) getCharToProcess::$8 ← (word)(byte) getCharToProcess::return_y#1 -- vwuz1=_word_vbuz2 lda.z return_y_1 sta.z __8 lda #0 sta.z __8+1 - // [136] (word~) getCharToProcess::$12 ← (word~) getCharToProcess::$8 << (byte) 2 -- vwuz1=vwuz2_rol_2 + // [128] (word~) getCharToProcess::$12 ← (word~) getCharToProcess::$8 << (byte) 2 -- vwuz1=vwuz2_rol_2 lda.z __8 asl sta.z __12 @@ -5672,7 +5567,7 @@ getCharToProcess: { sta.z __12+1 asl.z __12 rol.z __12+1 - // [137] (word~) getCharToProcess::$13 ← (word~) getCharToProcess::$12 + (word~) getCharToProcess::$8 -- vwuz1=vwuz2_plus_vwuz3 + // [129] (word~) getCharToProcess::$13 ← (word~) getCharToProcess::$12 + (word~) getCharToProcess::$8 -- vwuz1=vwuz2_plus_vwuz3 lda.z __12 clc adc.z __8 @@ -5680,7 +5575,7 @@ getCharToProcess: { lda.z __12+1 adc.z __8+1 sta.z __13+1 - // [138] (word~) getCharToProcess::$9 ← (word~) getCharToProcess::$13 << (byte) 3 -- vwuz1=vwuz2_rol_3 + // [130] (word~) getCharToProcess::$9 ← (word~) getCharToProcess::$13 << (byte) 3 -- vwuz1=vwuz2_rol_3 lda.z __13 asl sta.z __9 @@ -5691,7 +5586,7 @@ getCharToProcess: { rol.z __9+1 asl.z __9 rol.z __9+1 - // [139] (byte*~) getCharToProcess::$10 ← (byte*)(void*) SCREEN_COPY#0 + (word~) getCharToProcess::$9 -- pbuz1=pbuz2_plus_vwuz3 + // [131] (byte*~) getCharToProcess::$10 ← (byte*)(void*) SCREEN_COPY#0 + (word~) getCharToProcess::$9 -- pbuz1=pbuz2_plus_vwuz3 lda.z SCREEN_COPY clc adc.z __9 @@ -5699,7 +5594,7 @@ getCharToProcess: { lda.z SCREEN_COPY+1 adc.z __9+1 sta.z __10+1 - // [140] *((byte*~) getCharToProcess::$10 + (byte) getCharToProcess::return_x#1) ← (byte) ' ' -- pbuz1_derefidx_vbuz2=vbuc1 + // [132] *((byte*~) getCharToProcess::$10 + (byte) getCharToProcess::return_x#1) ← (byte) ' ' -- pbuz1_derefidx_vbuz2=vbuc1 // clear the found char on the screen copy lda #' ' ldy.z return_x_1 @@ -5707,43 +5602,43 @@ getCharToProcess: { jmp __breturn // getCharToProcess::@return __breturn: - // [141] return + // [133] return rts // getCharToProcess::@9 __b9: - // [142] (byte) getCharToProcess::closest_dist#10 ← (byte) getCharToProcess::return_dist#1 -- vbuz1=vbuz2 + // [134] (byte) getCharToProcess::closest_dist#10 ← (byte) getCharToProcess::return_dist#1 -- vbuz1=vbuz2 lda.z return_dist_1 sta.z closest_dist - // [120] phi from getCharToProcess::@9 to getCharToProcess::@1 [phi:getCharToProcess::@9->getCharToProcess::@1] + // [112] phi from getCharToProcess::@9 to getCharToProcess::@1 [phi:getCharToProcess::@9->getCharToProcess::@1] __b1_from___b9: - // [120] phi (byte) getCharToProcess::closest_y#9 = (byte) getCharToProcess::return_y#1 [phi:getCharToProcess::@9->getCharToProcess::@1#0] -- register_copy - // [120] phi (byte) getCharToProcess::closest_x#9 = (byte) getCharToProcess::return_x#1 [phi:getCharToProcess::@9->getCharToProcess::@1#1] -- register_copy - // [120] phi (byte) getCharToProcess::y#7 = (byte) getCharToProcess::y#1 [phi:getCharToProcess::@9->getCharToProcess::@1#2] -- register_copy - // [120] phi (byte) getCharToProcess::closest_dist#8 = (byte) getCharToProcess::closest_dist#10 [phi:getCharToProcess::@9->getCharToProcess::@1#3] -- register_copy - // [120] phi (byte*) getCharToProcess::dist_line#6 = (byte*) getCharToProcess::dist_line#1 [phi:getCharToProcess::@9->getCharToProcess::@1#4] -- register_copy - // [120] phi (byte*) getCharToProcess::screen_line#4 = (byte*) getCharToProcess::screen_line#1 [phi:getCharToProcess::@9->getCharToProcess::@1#5] -- register_copy + // [112] phi (byte) getCharToProcess::closest_y#9 = (byte) getCharToProcess::return_y#1 [phi:getCharToProcess::@9->getCharToProcess::@1#0] -- register_copy + // [112] phi (byte) getCharToProcess::closest_x#9 = (byte) getCharToProcess::return_x#1 [phi:getCharToProcess::@9->getCharToProcess::@1#1] -- register_copy + // [112] phi (byte) getCharToProcess::y#7 = (byte) getCharToProcess::y#1 [phi:getCharToProcess::@9->getCharToProcess::@1#2] -- register_copy + // [112] phi (byte) getCharToProcess::closest_dist#8 = (byte) getCharToProcess::closest_dist#10 [phi:getCharToProcess::@9->getCharToProcess::@1#3] -- register_copy + // [112] phi (byte*) getCharToProcess::dist_line#6 = (byte*) getCharToProcess::dist_line#1 [phi:getCharToProcess::@9->getCharToProcess::@1#4] -- register_copy + // [112] phi (byte*) getCharToProcess::screen_line#4 = (byte*) getCharToProcess::screen_line#1 [phi:getCharToProcess::@9->getCharToProcess::@1#5] -- register_copy jmp __b1 // getCharToProcess::@10 __b10: - // [143] (byte) getCharToProcess::closest_dist#12 ← (byte) getCharToProcess::return_dist#1 -- vbuz1=vbuz2 + // [135] (byte) getCharToProcess::closest_dist#12 ← (byte) getCharToProcess::return_dist#1 -- vbuz1=vbuz2 lda.z return_dist_1 sta.z closest_dist - // [121] phi from getCharToProcess::@10 to getCharToProcess::@2 [phi:getCharToProcess::@10->getCharToProcess::@2] + // [113] phi from getCharToProcess::@10 to getCharToProcess::@2 [phi:getCharToProcess::@10->getCharToProcess::@2] __b2_from___b10: - // [121] phi (byte) getCharToProcess::closest_y#7 = (byte) getCharToProcess::return_y#1 [phi:getCharToProcess::@10->getCharToProcess::@2#0] -- register_copy - // [121] phi (byte) getCharToProcess::closest_x#7 = (byte) getCharToProcess::return_x#1 [phi:getCharToProcess::@10->getCharToProcess::@2#1] -- register_copy - // [121] phi (byte) getCharToProcess::closest_dist#2 = (byte) getCharToProcess::closest_dist#12 [phi:getCharToProcess::@10->getCharToProcess::@2#2] -- register_copy - // [121] phi (byte) getCharToProcess::x#2 = (byte) getCharToProcess::x#1 [phi:getCharToProcess::@10->getCharToProcess::@2#3] -- register_copy + // [113] phi (byte) getCharToProcess::closest_y#7 = (byte) getCharToProcess::return_y#1 [phi:getCharToProcess::@10->getCharToProcess::@2#0] -- register_copy + // [113] phi (byte) getCharToProcess::closest_x#7 = (byte) getCharToProcess::return_x#1 [phi:getCharToProcess::@10->getCharToProcess::@2#1] -- register_copy + // [113] phi (byte) getCharToProcess::closest_dist#2 = (byte) getCharToProcess::closest_dist#12 [phi:getCharToProcess::@10->getCharToProcess::@2#2] -- register_copy + // [113] phi (byte) getCharToProcess::x#2 = (byte) getCharToProcess::x#1 [phi:getCharToProcess::@10->getCharToProcess::@2#3] -- register_copy jmp __b2 // getCharToProcess::@12 __b12: - // [144] (byte) getCharToProcess::return_dist#6 ← (byte) getCharToProcess::closest_dist#2 -- vbuz1=vbuz2 + // [136] (byte) getCharToProcess::return_dist#6 ← (byte) getCharToProcess::closest_dist#2 -- vbuz1=vbuz2 lda.z closest_dist sta.z return_dist_1 jmp __b3_from___b12 // getCharToProcess::@11 __b11: - // [145] (byte) getCharToProcess::return_dist#5 ← (byte) getCharToProcess::closest_dist#2 -- vbuz1=vbuz2 + // [137] (byte) getCharToProcess::return_dist#5 ← (byte) getCharToProcess::closest_dist#2 -- vbuz1=vbuz2 lda.z closest_dist sta.z return_dist_1 jmp __b3_from___b11 @@ -5754,35 +5649,35 @@ setupRasterIrq: { .label irqRoutine = irqTop // asm { sei } sei - // [147] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK -- _deref_pbuc1=vbuc2 + // [139] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK -- _deref_pbuc1=vbuc2 // Disable kernal & basic lda #PROCPORT_DDR_MEMORY_MASK sta PROCPORT_DDR - // [148] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 + // [140] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 lda #PROCPORT_RAM_IO sta PROCPORT - // [149] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // [141] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR sta CIA1_INTERRUPT jmp __b1 // setupRasterIrq::@1 __b1: - // [150] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 + // [142] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 lda #$7f and VIC_CONTROL sta VIC_CONTROL jmp __b2 // setupRasterIrq::@2 __b2: - // [151] *((const byte*) RASTER) ← <(const byte) RASTER_IRQ_TOP -- _deref_pbuc1=vbuc2 + // [143] *((const byte*) RASTER) ← <(const byte) RASTER_IRQ_TOP -- _deref_pbuc1=vbuc2 lda #RASTER_IRQ_TOP sta RASTER - // [152] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 + // [144] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 // Enable Raster Interrupt lda #IRQ_RASTER sta IRQ_ENABLE - // [153] *((const void()**) HARDWARE_IRQ) ← (const void()*) setupRasterIrq::irqRoutine#0 -- _deref_pptc1=pprc2 + // [145] *((const void()**) HARDWARE_IRQ) ← (const void()*) setupRasterIrq::irqRoutine#0 -- _deref_pptc1=pprc2 // Set the IRQ routine lda #initSprites::@1] + // [149] phi from initSprites to initSprites::@1 [phi:initSprites->initSprites::@1] __b1_from_initSprites: - // [157] phi (byte*) initSprites::sp#2 = (const byte*) SPRITE_DATA [phi:initSprites->initSprites::@1#0] -- pbuz1=pbuc1 + // [149] phi (byte*) initSprites::sp#2 = (const byte*) SPRITE_DATA [phi:initSprites->initSprites::@1#0] -- pbuz1=pbuc1 lda #SPRITE_DATA @@ -5812,7 +5707,7 @@ initSprites: { // Clear sprite data // initSprites::@1 __b1: - // [158] if((byte*) initSprites::sp#2<(const byte*) SPRITE_DATA+(const byte) NUM_PROCESSING*(byte) $40) goto initSprites::@2 -- pbuz1_lt_pbuc1_then_la1 + // [150] if((byte*) initSprites::sp#2<(const byte*) SPRITE_DATA+(const byte) NUM_PROCESSING*(byte) $40) goto initSprites::@2 -- pbuz1_lt_pbuc1_then_la1 lda.z sp+1 cmp #>SPRITE_DATA+NUM_PROCESSING*$40 bcc __b2 @@ -5821,60 +5716,60 @@ initSprites: { cmp #initSprites::@3] + // [151] phi from initSprites::@1 to initSprites::@3 [phi:initSprites::@1->initSprites::@3] __b3_from___b1: - // [159] phi (byte) initSprites::i#2 = (byte) 0 [phi:initSprites::@1->initSprites::@3#0] -- vbuz1=vbuc1 + // [151] phi (byte) initSprites::i#2 = (byte) 0 [phi:initSprites::@1->initSprites::@3#0] -- vbuz1=vbuc1 lda #0 sta.z i jmp __b3 // Initialize sprite registers - // [159] phi from initSprites::@3 to initSprites::@3 [phi:initSprites::@3->initSprites::@3] + // [151] phi from initSprites::@3 to initSprites::@3 [phi:initSprites::@3->initSprites::@3] __b3_from___b3: - // [159] phi (byte) initSprites::i#2 = (byte) initSprites::i#1 [phi:initSprites::@3->initSprites::@3#0] -- register_copy + // [151] phi (byte) initSprites::i#2 = (byte) initSprites::i#1 [phi:initSprites::@3->initSprites::@3#0] -- register_copy jmp __b3 // initSprites::@3 __b3: - // [160] *((const byte*) SPRITES_COLS + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE -- pbuc1_derefidx_vbuz1=vbuc2 + // [152] *((const byte*) SPRITES_COLS + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE -- pbuc1_derefidx_vbuz1=vbuc2 lda #LIGHT_BLUE ldy.z i sta SPRITES_COLS,y - // [161] (byte) initSprites::i#1 ← ++ (byte) initSprites::i#2 -- vbuz1=_inc_vbuz1 + // [153] (byte) initSprites::i#1 ← ++ (byte) initSprites::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [162] if((byte) initSprites::i#1!=(byte) 8) goto initSprites::@3 -- vbuz1_neq_vbuc1_then_la1 + // [154] if((byte) initSprites::i#1!=(byte) 8) goto initSprites::@3 -- vbuz1_neq_vbuc1_then_la1 lda #8 cmp.z i bne __b3_from___b3 jmp __b4 // initSprites::@4 __b4: - // [163] *((const byte*) SPRITES_MC) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [155] *((const byte*) SPRITES_MC) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta SPRITES_MC - // [164] *((const byte*) SPRITES_EXPAND_X) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [156] *((const byte*) SPRITES_EXPAND_X) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta SPRITES_EXPAND_X - // [165] *((const byte*) SPRITES_EXPAND_Y) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [157] *((const byte*) SPRITES_EXPAND_Y) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta SPRITES_EXPAND_Y jmp __breturn // initSprites::@return __breturn: - // [166] return + // [158] return rts // initSprites::@2 __b2: - // [167] *((byte*) initSprites::sp#2) ← (byte) 0 -- _deref_pbuz1=vbuc1 + // [159] *((byte*) initSprites::sp#2) ← (byte) 0 -- _deref_pbuz1=vbuc1 lda #0 ldy #0 sta (sp),y - // [168] (byte*) initSprites::sp#1 ← ++ (byte*) initSprites::sp#2 -- pbuz1=_inc_pbuz1 + // [160] (byte*) initSprites::sp#1 ← ++ (byte*) initSprites::sp#2 -- pbuz1=_inc_pbuz1 inc.z sp bne !+ inc.z sp+1 !: - // [157] phi from initSprites::@2 to initSprites::@1 [phi:initSprites::@2->initSprites::@1] + // [149] phi from initSprites::@2 to initSprites::@1 [phi:initSprites::@2->initSprites::@1] __b1_from___b2: - // [157] phi (byte*) initSprites::sp#2 = (byte*) initSprites::sp#1 [phi:initSprites::@2->initSprites::@1#0] -- register_copy + // [149] phi (byte*) initSprites::sp#2 = (byte*) initSprites::sp#1 [phi:initSprites::@2->initSprites::@1#0] -- register_copy jmp __b1 } // init_angle_screen @@ -5899,7 +5794,7 @@ init_angle_screen: { .label x = $20 .label xb = $21 .label y = $1b - // [169] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz2_plus_vwuc1 + // [161] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz2_plus_vwuc1 lda.z screen clc adc #<$28*$c @@ -5907,7 +5802,7 @@ init_angle_screen: { lda.z screen+1 adc #>$28*$c sta.z screen_topline+1 - // [170] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz2_plus_vwuc1 + // [162] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz2_plus_vwuc1 lda.z screen clc adc #<$28*$c @@ -5915,41 +5810,41 @@ init_angle_screen: { lda.z screen+1 adc #>$28*$c sta.z screen_bottomline+1 - // [171] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1] + // [163] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1] __b1_from_init_angle_screen: - // [171] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#0 [phi:init_angle_screen->init_angle_screen::@1#0] -- register_copy - // [171] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#0 [phi:init_angle_screen->init_angle_screen::@1#1] -- register_copy - // [171] phi (byte) init_angle_screen::y#5 = (byte) 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1 + // [163] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#0 [phi:init_angle_screen->init_angle_screen::@1#0] -- register_copy + // [163] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#0 [phi:init_angle_screen->init_angle_screen::@1#1] -- register_copy + // [163] phi (byte) init_angle_screen::y#5 = (byte) 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1 lda #0 sta.z y jmp __b1 - // [171] phi from init_angle_screen::@4 to init_angle_screen::@1 [phi:init_angle_screen::@4->init_angle_screen::@1] + // [163] phi from init_angle_screen::@4 to init_angle_screen::@1 [phi:init_angle_screen::@4->init_angle_screen::@1] __b1_from___b4: - // [171] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#0] -- register_copy - // [171] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#1] -- register_copy - // [171] phi (byte) init_angle_screen::y#5 = (byte) init_angle_screen::y#1 [phi:init_angle_screen::@4->init_angle_screen::@1#2] -- register_copy + // [163] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#0] -- register_copy + // [163] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#1] -- register_copy + // [163] phi (byte) init_angle_screen::y#5 = (byte) init_angle_screen::y#1 [phi:init_angle_screen::@4->init_angle_screen::@1#2] -- register_copy jmp __b1 // init_angle_screen::@1 __b1: - // [172] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2] + // [164] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2] __b2_from___b1: - // [172] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 + // [164] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 lda #$27 sta.z xb - // [172] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 + // [164] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 lda #0 sta.z x jmp __b2 // init_angle_screen::@2 __b2: - // [173] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 + // [165] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 lda.z x cmp #$13+1 bcc __b3 jmp __b4 // init_angle_screen::@4 __b4: - // [174] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + // [166] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 lda.z screen_topline sec sbc #<$28 @@ -5957,7 +5852,7 @@ init_angle_screen: { lda.z screen_topline+1 sbc #>$28 sta.z screen_topline+1 - // [175] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [167] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc.z screen_bottomline @@ -5965,55 +5860,55 @@ init_angle_screen: { bcc !+ inc.z screen_bottomline+1 !: - // [176] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 + // [168] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 inc.z y - // [177] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + // [169] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$d cmp.z y bne __b1_from___b4 jmp __breturn // init_angle_screen::@return __breturn: - // [178] return + // [170] return rts // init_angle_screen::@3 __b3: - // [179] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [171] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z x asl sta.z __3 - // [180] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuz1=vbuc1_minus_vbuz2 + // [172] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuz1=vbuc1_minus_vbuz2 lda #$27 sec sbc.z __3 sta.z __4 - // [181] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 + // [173] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 lda.z __4 ldy #0 sta.z xw+1 sty.z xw - // [182] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [174] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z y asl sta.z __7 - // [183] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 + // [175] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 lda.z __7 ldy #0 sta.z yw+1 sty.z yw - // [184] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 -- vwsz1=vwsz2 + // [176] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 -- vwsz1=vwsz2 lda.z xw sta.z atan2_16.x lda.z xw+1 sta.z atan2_16.x+1 - // [185] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 -- vwsz1=vwsz2 + // [177] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 -- vwsz1=vwsz2 lda.z yw sta.z atan2_16.y lda.z yw+1 sta.z atan2_16.y+1 - // [186] call atan2_16 + // [178] call atan2_16 jsr atan2_16 - // [187] (word) atan2_16::return#2 ← (word) atan2_16::return#0 -- vwuz1=vwuz2 + // [179] (word) atan2_16::return#2 ← (word) atan2_16::return#0 -- vwuz1=vwuz2 lda.z atan2_16.return sta.z atan2_16.return_1 lda.z atan2_16.return+1 @@ -6021,12 +5916,12 @@ init_angle_screen: { jmp __b5 // init_angle_screen::@5 __b5: - // [188] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 -- vwuz1=vwuz2 + // [180] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 -- vwuz1=vwuz2 lda.z atan2_16.return_1 sta.z angle_w lda.z atan2_16.return_1+1 sta.z angle_w+1 - // [189] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz2_plus_vbuc1 + // [181] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz2_plus_vbuc1 lda #$80 clc adc.z angle_w @@ -6034,48 +5929,48 @@ init_angle_screen: { lda #0 adc.z angle_w+1 sta.z __11+1 - // [190] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 + // [182] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 lda.z __11+1 sta.z ang_w - // [191] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [183] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 lda.z ang_w ldy.z xb sta (screen_bottomline),y - // [192] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuz1=_neg_vbuz2 + // [184] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuz1=_neg_vbuz2 lda.z ang_w eor #$ff clc adc #1 sta.z __13 - // [193] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuz3 + // [185] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuz3 lda.z __13 ldy.z xb sta (screen_topline),y - // [194] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_plus_vbuz2 + // [186] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_plus_vbuz2 lax.z ang_w axs #-[$80] stx.z __14 - // [195] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuz3 + // [187] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuz3 lda.z __14 ldy.z x sta (screen_topline),y - // [196] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_minus_vbuz2 + // [188] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_minus_vbuz2 lda #$80 sec sbc.z ang_w sta.z __15 - // [197] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuz3 + // [189] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuz3 lda.z __15 ldy.z x sta (screen_bottomline),y - // [198] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 + // [190] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 inc.z x - // [199] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [191] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 dec.z xb - // [172] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2] + // [164] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2] __b2_from___b5: - // [172] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@5->init_angle_screen::@2#0] -- register_copy - // [172] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@5->init_angle_screen::@2#1] -- register_copy + // [164] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@5->init_angle_screen::@2#0] -- register_copy + // [164] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@5->init_angle_screen::@2#1] -- register_copy jmp __b2 } // atan2_16 @@ -6100,13 +5995,13 @@ atan2_16: { .label x = $8e .label y = $90 .label return_1 = $92 - // [200] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1 + // [192] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1 lda.z y+1 bpl __b1 jmp __b2 // atan2_16::@2 __b2: - // [201] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2 + // [193] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2 sec lda #0 sbc.z y @@ -6114,20 +6009,20 @@ atan2_16: { lda #0 sbc.z y+1 sta.z __2+1 - // [202] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3] + // [194] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3] __b3_from___b1: __b3_from___b2: - // [202] phi (signed word) atan2_16::yi#0 = (signed word) atan2_16::yi#16 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3#0] -- register_copy + // [194] phi (signed word) atan2_16::yi#0 = (signed word) atan2_16::yi#16 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3#0] -- register_copy jmp __b3 // atan2_16::@3 __b3: - // [203] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1 + // [195] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1 lda.z x+1 bpl __b4 jmp __b5 // atan2_16::@5 __b5: - // [204] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2 + // [196] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2 sec lda #0 sbc.z x @@ -6135,54 +6030,54 @@ atan2_16: { lda #0 sbc.z x+1 sta.z __7+1 - // [205] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6] + // [197] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6] __b6_from___b4: __b6_from___b5: - // [205] phi (signed word) atan2_16::xi#0 = (signed word) atan2_16::xi#13 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy + // [197] phi (signed word) atan2_16::xi#0 = (signed word) atan2_16::xi#13 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy jmp __b6 // atan2_16::@6 __b6: - // [206] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] + // [198] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] __b10_from___b6: - // [206] phi (word) atan2_16::angle#12 = (word) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1 + // [198] phi (word) atan2_16::angle#12 = (word) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1 lda #<0 sta.z angle_1 lda #>0 sta.z angle_1+1 - // [206] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuz1=vbuc1 + // [198] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuz1=vbuc1 lda #0 sta.z i - // [206] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy - // [206] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy + // [198] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy + // [198] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy jmp __b10 // atan2_16::@10 __b10: - // [207] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1 + // [199] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1 lda.z yi+1 bne __b11 lda.z yi bne __b11 - // [208] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12] + // [200] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12] __b12_from___b10: __b12_from___b19: - // [208] phi (word) atan2_16::angle#6 = (word) atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12#0] -- register_copy + // [200] phi (word) atan2_16::angle#6 = (word) atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12#0] -- register_copy jmp __b12 // atan2_16::@12 __b12: - // [209] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz2_ror_1 + // [201] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz2_ror_1 lda.z angle_1+1 lsr sta.z angle+1 lda.z angle_1 ror sta.z angle - // [210] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1 + // [202] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1 lda.z x+1 bpl __b7_from___b12 jmp __b21 // atan2_16::@21 __b21: - // [211] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1 + // [203] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1 sec lda #<$8000 sbc.z angle @@ -6190,20 +6085,20 @@ atan2_16: { lda #>$8000 sbc.z angle+1 sta.z angle+1 - // [212] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7] + // [204] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7] __b7_from___b12: __b7_from___b21: - // [212] phi (word) atan2_16::angle#11 = (word) atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7#0] -- register_copy + // [204] phi (word) atan2_16::angle#11 = (word) atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7#0] -- register_copy jmp __b7 // atan2_16::@7 __b7: - // [213] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1 + // [205] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1 lda.z y+1 bpl __b8_from___b7 jmp __b9 // atan2_16::@9 __b9: - // [214] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1 + // [206] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1 sec lda #0 sbc.z angle @@ -6211,81 +6106,81 @@ atan2_16: { lda #0 sbc.z angle+1 sta.z angle+1 - // [215] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8] + // [207] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8] __b8_from___b7: __b8_from___b9: - // [215] phi (word) atan2_16::return#0 = (word) atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy + // [207] phi (word) atan2_16::return#0 = (word) atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy jmp __b8 // atan2_16::@8 __b8: jmp __breturn // atan2_16::@return __breturn: - // [216] return + // [208] return rts // atan2_16::@11 __b11: - // [217] (byte) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuz1=vbuz2 + // [209] (byte) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuz1=vbuz2 lda.z i sta.z shift - // [218] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2 + // [210] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2 lda.z xi sta.z xd lda.z xi+1 sta.z xd+1 - // [219] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2 + // [211] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2 lda.z yi sta.z yd lda.z yi+1 sta.z yd+1 - // [220] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13] + // [212] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13] __b13_from___b11: __b13_from___b14: - // [220] phi (signed word) atan2_16::yd#3 = (signed word) atan2_16::yd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#0] -- register_copy - // [220] phi (signed word) atan2_16::xd#3 = (signed word) atan2_16::xd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#1] -- register_copy - // [220] phi (byte) atan2_16::shift#2 = (byte) atan2_16::shift#5 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#2] -- register_copy + // [212] phi (signed word) atan2_16::yd#3 = (signed word) atan2_16::yd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#0] -- register_copy + // [212] phi (signed word) atan2_16::xd#3 = (signed word) atan2_16::xd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#1] -- register_copy + // [212] phi (byte) atan2_16::shift#2 = (byte) atan2_16::shift#5 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#2] -- register_copy jmp __b13 // atan2_16::@13 __b13: - // [221] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 -- vbuz1_ge_vbuc1_then_la1 + // [213] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 -- vbuz1_ge_vbuc1_then_la1 lda.z shift cmp #2 bcs __b14 jmp __b15 // atan2_16::@15 __b15: - // [222] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 -- vbuc1_eq_vbuz1_then_la1 + // [214] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 -- vbuc1_eq_vbuz1_then_la1 lda #0 cmp.z shift beq __b17_from___b15 jmp __b16 // atan2_16::@16 __b16: - // [223] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 + // [215] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 lda.z xd+1 cmp #$80 ror.z xd+1 ror.z xd - // [224] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 + // [216] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 lda.z yd+1 cmp #$80 ror.z yd+1 ror.z yd - // [225] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17] + // [217] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17] __b17_from___b15: __b17_from___b16: - // [225] phi (signed word) atan2_16::xd#5 = (signed word) atan2_16::xd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#0] -- register_copy - // [225] phi (signed word) atan2_16::yd#5 = (signed word) atan2_16::yd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#1] -- register_copy + // [217] phi (signed word) atan2_16::xd#5 = (signed word) atan2_16::xd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#0] -- register_copy + // [217] phi (signed word) atan2_16::yd#5 = (signed word) atan2_16::yd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#1] -- register_copy jmp __b17 // atan2_16::@17 __b17: - // [226] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1 + // [218] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1 lda.z yi+1 bpl __b18 jmp __b20 // atan2_16::@20 __b20: - // [227] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_minus_vwsz2 + // [219] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_minus_vwsz2 lda.z xi sec sbc.z yd @@ -6293,7 +6188,7 @@ atan2_16: { lda.z xi+1 sbc.z yd+1 sta.z xi+1 - // [228] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2 + // [220] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2 lda.z yi clc adc.z xd @@ -6301,11 +6196,11 @@ atan2_16: { lda.z yi+1 adc.z xd+1 sta.z yi+1 - // [229] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [221] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z i asl sta.z __23 - // [230] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuz2 + // [222] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuz2 ldy.z __23 sec lda.z angle_1 @@ -6314,31 +6209,31 @@ atan2_16: { lda.z angle_1+1 sbc CORDIC_ATAN2_ANGLES_16+1,y sta.z angle_1+1 - // [231] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19] + // [223] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19] __b19_from___b18: __b19_from___b20: - // [231] phi (signed word) atan2_16::xi#8 = (signed word) atan2_16::xi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#0] -- register_copy - // [231] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy - // [231] phi (signed word) atan2_16::yi#8 = (signed word) atan2_16::yi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#2] -- register_copy + // [223] phi (signed word) atan2_16::xi#8 = (signed word) atan2_16::xi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#0] -- register_copy + // [223] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy + // [223] phi (signed word) atan2_16::yi#8 = (signed word) atan2_16::yi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#2] -- register_copy jmp __b19 // atan2_16::@19 __b19: - // [232] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuz1=_inc_vbuz1 + // [224] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [233] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16-(byte) 1+(byte) 1) goto atan2_16::@12 -- vbuz1_eq_vbuc1_then_la1 + // [225] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16-(byte) 1+(byte) 1) goto atan2_16::@12 -- vbuz1_eq_vbuc1_then_la1 lda #CORDIC_ITERATIONS_16-1+1 cmp.z i beq __b12_from___b19 - // [206] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10] + // [198] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10] __b10_from___b19: - // [206] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy - // [206] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy - // [206] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy - // [206] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#8 [phi:atan2_16::@19->atan2_16::@10#3] -- register_copy + // [198] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy + // [198] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy + // [198] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy + // [198] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#8 [phi:atan2_16::@19->atan2_16::@10#3] -- register_copy jmp __b10 // atan2_16::@18 __b18: - // [234] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2 + // [226] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2 lda.z xi clc adc.z yd @@ -6346,7 +6241,7 @@ atan2_16: { lda.z xi+1 adc.z yd+1 sta.z xi+1 - // [235] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_minus_vwsz2 + // [227] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_minus_vwsz2 lda.z yi sec sbc.z xd @@ -6354,11 +6249,11 @@ atan2_16: { lda.z yi+1 sbc.z xd+1 sta.z yi+1 - // [236] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [228] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z i asl sta.z __22 - // [237] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuz2 + // [229] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuz2 ldy.z __22 clc lda.z angle_1 @@ -6370,7 +6265,7 @@ atan2_16: { jmp __b19_from___b18 // atan2_16::@14 __b14: - // [238] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 + // [230] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 lda.z xd+1 cmp #$80 ror.z xd+1 @@ -6379,7 +6274,7 @@ atan2_16: { cmp #$80 ror.z xd+1 ror.z xd - // [239] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 + // [231] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 lda.z yd+1 cmp #$80 ror.z yd+1 @@ -6388,13 +6283,13 @@ atan2_16: { cmp #$80 ror.z yd+1 ror.z yd - // [240] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuz1=vbuz1_minus_2 + // [232] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuz1=vbuz1_minus_2 dec.z shift dec.z shift jmp __b13_from___b14 // atan2_16::@4 __b4: - // [241] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2 + // [233] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2 lda.z x sta.z xi lda.z x+1 @@ -6402,7 +6297,7 @@ atan2_16: { jmp __b6_from___b4 // atan2_16::@1 __b1: - // [242] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2 + // [234] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2 lda.z y sta.z yi lda.z y+1 @@ -6414,7 +6309,7 @@ atan2_16: { // The content of the newly allocated block of memory is not initialized, remaining with indeterminate values. malloc: { .label mem = $9e - // [244] (byte*) malloc::mem#0 ← (byte*) heap_head#5 - (word) $3e8 -- pbuz1=pbuz2_minus_vwuc1 + // [236] (byte*) malloc::mem#0 ← (byte*) heap_head#5 - (word) $3e8 -- pbuz1=pbuz2_minus_vwuc1 lda.z heap_head sec sbc #<$3e8 @@ -6422,7 +6317,7 @@ malloc: { lda.z heap_head+1 sbc #>$3e8 sta.z mem+1 - // [245] (byte*) heap_head#1 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2 + // [237] (byte*) heap_head#1 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2 lda.z mem sta.z heap_head lda.z mem+1 @@ -6430,7 +6325,7 @@ malloc: { jmp __breturn // malloc::@return __breturn: - // [246] return + // [238] return rts } // irqBottom @@ -6440,35 +6335,35 @@ irqBottom: { sta rega+1 stx regx+1 sty regy+1 - // [248] phi from irqBottom to irqBottom::@1 [phi:irqBottom->irqBottom::@1] + // [240] phi from irqBottom to irqBottom::@1 [phi:irqBottom->irqBottom::@1] __b1_from_irqBottom: jmp __b1 // irqBottom::@1 __b1: - // [249] call processChars - // [254] phi from irqBottom::@1 to processChars [phi:irqBottom::@1->processChars] + // [241] call processChars + // [246] phi from irqBottom::@1 to processChars [phi:irqBottom::@1->processChars] processChars_from___b1: jsr processChars jmp __b2 // irqBottom::@2 __b2: - // [250] *((const byte*) RASTER) ← (const byte) RASTER_IRQ_TOP -- _deref_pbuc1=vbuc2 + // [242] *((const byte*) RASTER) ← (const byte) RASTER_IRQ_TOP -- _deref_pbuc1=vbuc2 // Trigger IRQ at the top of the screen lda #RASTER_IRQ_TOP sta RASTER - // [251] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_ALL)(void()) irqTop() -- _deref_pptc1=pprc2 + // [243] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_ALL)(void()) irqTop() -- _deref_pptc1=pprc2 lda #irqTop sta HARDWARE_IRQ+1 - // [252] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 + // [244] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 // Acknowledge the IRQ lda #IRQ_RASTER sta IRQ_STATUS jmp __breturn // irqBottom::@return __breturn: - // [253] return - exit interrupt(HARDWARE_ALL) + // [245] return - exit interrupt(HARDWARE_ALL) rega: lda #00 regx: @@ -6504,45 +6399,45 @@ processChars: { .label __63 = $a1 .label __64 = $a2 .label __65 = $a3 - // [255] phi from processChars to processChars::@1 [phi:processChars->processChars::@1] + // [247] phi from processChars to processChars::@1 [phi:processChars->processChars::@1] __b1_from_processChars: - // [255] phi (byte) processChars::numActive#10 = (byte) 0 [phi:processChars->processChars::@1#0] -- vbuz1=vbuc1 + // [247] phi (byte) processChars::numActive#10 = (byte) 0 [phi:processChars->processChars::@1#0] -- vbuz1=vbuc1 lda #0 sta.z numActive - // [255] phi (byte) processChars::i#10 = (byte) 0 [phi:processChars->processChars::@1#1] -- vbuz1=vbuc1 + // [247] phi (byte) processChars::i#10 = (byte) 0 [phi:processChars->processChars::@1#1] -- vbuz1=vbuc1 lda #0 sta.z i jmp __b1 - // [255] phi from processChars::@2 to processChars::@1 [phi:processChars::@2->processChars::@1] + // [247] phi from processChars::@2 to processChars::@1 [phi:processChars::@2->processChars::@1] __b1_from___b2: - // [255] phi (byte) processChars::numActive#10 = (byte) processChars::numActive#3 [phi:processChars::@2->processChars::@1#0] -- register_copy - // [255] phi (byte) processChars::i#10 = (byte) processChars::i#1 [phi:processChars::@2->processChars::@1#1] -- register_copy + // [247] phi (byte) processChars::numActive#10 = (byte) processChars::numActive#3 [phi:processChars::@2->processChars::@1#0] -- register_copy + // [247] phi (byte) processChars::i#10 = (byte) processChars::i#1 [phi:processChars::@2->processChars::@1#1] -- register_copy jmp __b1 // processChars::@1 __b1: - // [256] (byte~) processChars::$62 ← (byte) processChars::i#10 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [248] (byte~) processChars::$62 ← (byte) processChars::i#10 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z i asl sta.z __62 - // [257] (byte~) processChars::$63 ← (byte~) processChars::$62 + (byte) processChars::i#10 -- vbuz1=vbuz2_plus_vbuz3 + // [249] (byte~) processChars::$63 ← (byte~) processChars::$62 + (byte) processChars::i#10 -- vbuz1=vbuz2_plus_vbuz3 lda.z __62 clc adc.z i sta.z __63 - // [258] (byte~) processChars::$64 ← (byte~) processChars::$63 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [250] (byte~) processChars::$64 ← (byte~) processChars::$63 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z __63 asl sta.z __64 - // [259] (byte~) processChars::$65 ← (byte~) processChars::$64 + (byte) processChars::i#10 -- vbuz1=vbuz2_plus_vbuz3 + // [251] (byte~) processChars::$65 ← (byte~) processChars::$64 + (byte) processChars::i#10 -- vbuz1=vbuz2_plus_vbuz3 lda.z __64 clc adc.z i sta.z __65 - // [260] (byte~) processChars::$32 ← (byte~) processChars::$65 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [252] (byte~) processChars::$32 ← (byte~) processChars::$65 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z __65 asl sta.z __32 - // [261] (struct ProcessingSprite*) processChars::processing#0 ← (const struct ProcessingSprite*) PROCESSING + (byte~) processChars::$32 -- pssz1=pssc1_plus_vbuz2 + // [253] (struct ProcessingSprite*) processChars::processing#0 ← (const struct ProcessingSprite*) PROCESSING + (byte~) processChars::$32 -- pssz1=pssc1_plus_vbuz2 lda.z __32 clc adc #PROCESSING adc #0 sta.z processing+1 - // [262] (byte) processChars::bitmask#0 ← (byte) 1 << *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID) -- vbuz1=vbuc1_rol_pbuz2_derefidx_vbuc2 + // [254] (byte) processChars::bitmask#0 ← (byte) 1 << *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID) -- vbuz1=vbuc1_rol_pbuz2_derefidx_vbuc2 ldy #OFFSET_STRUCT_PROCESSINGSPRITE_ID lda (processing),y tay @@ -6563,7 +6458,7 @@ processChars: { bne !- !e: sta.z bitmask - // [263] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)==(const byte) STATUS_FREE) goto processChars::@2 -- pbuz1_derefidx_vbuc1_eq_vbuc2_then_la1 + // [255] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)==(const byte) STATUS_FREE) goto processChars::@2 -- pbuz1_derefidx_vbuc1_eq_vbuc2_then_la1 lda #STATUS_FREE ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS cmp (processing),y @@ -6571,7 +6466,7 @@ processChars: { jmp __b10 // processChars::@10 __b10: - // [264] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)!=(const byte) STATUS_NEW) goto processChars::@3 -- pbuz1_derefidx_vbuc1_neq_vbuc2_then_la1 + // [256] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)!=(const byte) STATUS_NEW) goto processChars::@3 -- pbuz1_derefidx_vbuc1_neq_vbuc2_then_la1 ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS lda (processing),y cmp #STATUS_NEW @@ -6579,7 +6474,7 @@ processChars: { jmp __b11 // processChars::@11 __b11: - // [265] *(*((byte**)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR)) ← (byte) ' ' -- _deref_(pptz1_derefidx_vbuc1)=vbuc2 + // [257] *(*((byte**)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR)) ← (byte) ' ' -- _deref_(pptz1_derefidx_vbuc1)=vbuc2 // Clear the char on the screen ldx #' ' ldy #OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR @@ -6590,12 +6485,12 @@ processChars: { sta !+ +2 !: stx $ffff - // [266] *((const byte*) SPRITES_ENABLE) ← *((const byte*) SPRITES_ENABLE) | (byte) processChars::bitmask#0 -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1 + // [258] *((const byte*) SPRITES_ENABLE) ← *((const byte*) SPRITES_ENABLE) | (byte) processChars::bitmask#0 -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1 // Enable the sprite lda SPRITES_ENABLE ora.z bitmask sta SPRITES_ENABLE - // [267] *((const byte*) SPRITES_COLS + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL) -- pbuc1_derefidx_(pbuz1_derefidx_vbuc2)=pbuz1_derefidx_vbuc3 + // [259] *((const byte*) SPRITES_COLS + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL) -- pbuc1_derefidx_(pbuz1_derefidx_vbuc2)=pbuz1_derefidx_vbuc3 // Set the sprite color ldy #OFFSET_STRUCT_PROCESSINGSPRITE_COL lda (processing),y @@ -6605,7 +6500,7 @@ processChars: { tay pla sta SPRITES_COLS,y - // [268] *((const byte*) SCREEN+(const word) SPRITE_PTRS + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR) -- pbuc1_derefidx_(pbuz1_derefidx_vbuc2)=pbuz1_derefidx_vbuc3 + // [260] *((const byte*) SCREEN+(const word) SPRITE_PTRS + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR) -- pbuc1_derefidx_(pbuz1_derefidx_vbuc2)=pbuz1_derefidx_vbuc3 // Set sprite pointer ldy #OFFSET_STRUCT_PROCESSINGSPRITE_PTR lda (processing),y @@ -6615,7 +6510,7 @@ processChars: { tay pla sta SCREEN+SPRITE_PTRS,y - // [269] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_PROCESSING -- pbuz1_derefidx_vbuc1=vbuc2 + // [261] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_PROCESSING -- pbuz1_derefidx_vbuc1=vbuc2 // Set status lda #STATUS_PROCESSING ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS @@ -6623,7 +6518,7 @@ processChars: { jmp __b3 // processChars::@3 __b3: - // [270] (word) processChars::xpos#0 ← *((word*)(struct ProcessingSprite*) processChars::processing#0) >> (byte) 4 -- vwuz1=_deref_pwuz2_ror_4 + // [262] (word) processChars::xpos#0 ← *((word*)(struct ProcessingSprite*) processChars::processing#0) >> (byte) 4 -- vwuz1=_deref_pwuz2_ror_4 ldy #0 lda (processing),y sta.z xpos @@ -6638,10 +6533,10 @@ processChars: { ror.z xpos lsr.z xpos+1 ror.z xpos - // [271] (byte~) processChars::$9 ← > (word) processChars::xpos#0 -- vbuz1=_hi_vwuz2 + // [263] (byte~) processChars::$9 ← > (word) processChars::xpos#0 -- vbuz1=_hi_vwuz2 lda.z xpos+1 sta.z __9 - // [272] if((byte) 0!=(byte~) processChars::$9) goto processChars::@4 -- vbuc1_neq_vbuz1_then_la1 + // [264] if((byte) 0!=(byte~) processChars::$9) goto processChars::@4 -- vbuc1_neq_vbuz1_then_la1 // Set sprite position lda #0 cmp.z __9 @@ -6649,29 +6544,29 @@ processChars: { jmp __b8 // processChars::@8 __b8: - // [273] (byte~) processChars::$10 ← (byte) $ff ^ (byte) processChars::bitmask#0 -- vbuz1=vbuc1_bxor_vbuz2 + // [265] (byte~) processChars::$10 ← (byte) $ff ^ (byte) processChars::bitmask#0 -- vbuz1=vbuc1_bxor_vbuz2 lda #$ff eor.z bitmask sta.z __10 - // [274] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) & (byte~) processChars::$10 -- _deref_pbuc1=_deref_pbuc1_band_vbuz1 + // [266] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) & (byte~) processChars::$10 -- _deref_pbuc1=_deref_pbuc1_band_vbuz1 lda SPRITES_XMSB and.z __10 sta SPRITES_XMSB jmp __b5 // processChars::@5 __b5: - // [275] (byte~) processChars::$15 ← (byte) processChars::i#10 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [267] (byte~) processChars::$15 ← (byte) processChars::i#10 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z i asl sta.z __15 - // [276] (byte~) processChars::$12 ← (byte)(word) processChars::xpos#0 -- vbuz1=_byte_vwuz2 + // [268] (byte~) processChars::$12 ← (byte)(word) processChars::xpos#0 -- vbuz1=_byte_vwuz2 lda.z xpos sta.z __12 - // [277] *((const byte*) SPRITES_XPOS + (byte~) processChars::$15) ← (byte~) processChars::$12 -- pbuc1_derefidx_vbuz1=vbuz2 + // [269] *((const byte*) SPRITES_XPOS + (byte~) processChars::$15) ← (byte~) processChars::$12 -- pbuc1_derefidx_vbuz1=vbuz2 lda.z __12 ldy.z __15 sta SPRITES_XPOS,y - // [278] (word~) processChars::$13 ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) >> (byte) 4 -- vwuz1=pwuz2_derefidx_vbuc1_ror_4 + // [270] (word~) processChars::$13 ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) >> (byte) 4 -- vwuz1=pwuz2_derefidx_vbuc1_ror_4 ldy #OFFSET_STRUCT_PROCESSINGSPRITE_Y lda (processing),y sta.z __13 @@ -6686,14 +6581,14 @@ processChars: { ror.z __13 lsr.z __13+1 ror.z __13 - // [279] (byte) processChars::ypos#0 ← (byte)(word~) processChars::$13 -- vbuz1=_byte_vwuz2 + // [271] (byte) processChars::ypos#0 ← (byte)(word~) processChars::$13 -- vbuz1=_byte_vwuz2 lda.z __13 sta.z ypos - // [280] *((const byte*) SPRITES_YPOS + (byte~) processChars::$15) ← (byte) processChars::ypos#0 -- pbuc1_derefidx_vbuz1=vbuz2 + // [272] *((const byte*) SPRITES_YPOS + (byte~) processChars::$15) ← (byte) processChars::ypos#0 -- pbuc1_derefidx_vbuz1=vbuz2 lda.z ypos ldy.z __15 sta SPRITES_YPOS,y - // [281] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)<(const word) XPOS_LEFTMOST) goto processChars::@6 -- _deref_pwuz1_lt_vwuc1_then_la1 + // [273] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)<(const word) XPOS_LEFTMOST) goto processChars::@6 -- _deref_pwuz1_lt_vwuc1_then_la1 // Move sprite ldy #1 lda (processing),y @@ -6708,7 +6603,7 @@ processChars: { jmp __b14 // processChars::@14 __b14: - // [282] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)>(const word) XPOS_RIGHTMOST) goto processChars::@6 -- _deref_pwuz1_gt_vwuc1_then_la1 + // [274] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)>(const word) XPOS_RIGHTMOST) goto processChars::@6 -- _deref_pwuz1_gt_vwuc1_then_la1 ldy #1 lda #>XPOS_RIGHTMOST cmp (processing),y @@ -6722,7 +6617,7 @@ processChars: { jmp __b13 // processChars::@13 __b13: - // [283] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)<(const word) YPOS_TOPMOST) goto processChars::@6 -- pwuz1_derefidx_vbuc1_lt_vwuc2_then_la1 + // [275] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)<(const word) YPOS_TOPMOST) goto processChars::@6 -- pwuz1_derefidx_vbuc1_lt_vwuc2_then_la1 ldy #OFFSET_STRUCT_PROCESSINGSPRITE_Y iny lda (processing),y @@ -6737,7 +6632,7 @@ processChars: { jmp __b12 // processChars::@12 __b12: - // [284] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)>(const word) YPOS_BOTTOMMOST) goto processChars::@6 -- pwuz1_derefidx_vbuc1_gt_vwuc2_then_la1 + // [276] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)>(const word) YPOS_BOTTOMMOST) goto processChars::@6 -- pwuz1_derefidx_vbuc1_gt_vwuc2_then_la1 ldy #OFFSET_STRUCT_PROCESSINGSPRITE_Y iny lda #>YPOS_BOTTOMMOST @@ -6752,7 +6647,7 @@ processChars: { jmp __b9 // processChars::@9 __b9: - // [285] (word~) processChars::$23 ← (word) processChars::xpos#0 >> (byte) 3 -- vwuz1=vwuz2_ror_3 + // [277] (word~) processChars::$23 ← (word) processChars::xpos#0 >> (byte) 3 -- vwuz1=vwuz2_ror_3 lda.z xpos+1 lsr sta.z __23+1 @@ -6763,18 +6658,18 @@ processChars: { ror.z __23 lsr.z __23+1 ror.z __23 - // [286] (byte~) processChars::$24 ← (byte)(word~) processChars::$23 -- vbuz1=_byte_vwuz2 + // [278] (byte~) processChars::$24 ← (byte)(word~) processChars::$23 -- vbuz1=_byte_vwuz2 lda.z __23 sta.z __24 - // [287] (byte) processChars::xchar#0 ← (byte~) processChars::$24 - (const byte) BORDER_XPOS_LEFT/(byte) 8 -- vbuz1=vbuz2_minus_vbuc1 + // [279] (byte) processChars::xchar#0 ← (byte~) processChars::$24 - (const byte) BORDER_XPOS_LEFT/(byte) 8 -- vbuz1=vbuz2_minus_vbuc1 lax.z __24 axs #BORDER_XPOS_LEFT/8 stx.z xchar - // [288] (byte~) processChars::$33 ← (byte) processChars::xchar#0 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [280] (byte~) processChars::$33 ← (byte) processChars::xchar#0 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z xchar asl sta.z __33 - // [289] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) + *((const word*) VXSIN + (byte~) processChars::$33) -- pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuc2_derefidx_vbuz2 + // [281] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) + *((const word*) VXSIN + (byte~) processChars::$33) -- pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuc2_derefidx_vbuz2 ldx.z __33 ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VX clc @@ -6785,7 +6680,7 @@ processChars: { lda (processing),y adc VXSIN+1,x sta (processing),y - // [290] *((word*)(struct ProcessingSprite*) processChars::processing#0) ← *((word*)(struct ProcessingSprite*) processChars::processing#0) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) -- _deref_pwuz1=_deref_pwuz1_plus_pwuz1_derefidx_vbuc1 + // [282] *((word*)(struct ProcessingSprite*) processChars::processing#0) ← *((word*)(struct ProcessingSprite*) processChars::processing#0) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) -- _deref_pwuz1=_deref_pwuz1_plus_pwuz1_derefidx_vbuc1 ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VX sty.z $ff clc @@ -6799,21 +6694,21 @@ processChars: { ldy #1 adc (processing),y sta (processing),y - // [291] (byte~) processChars::$27 ← (byte) processChars::ypos#0 >> (byte) 3 -- vbuz1=vbuz2_ror_3 + // [283] (byte~) processChars::$27 ← (byte) processChars::ypos#0 >> (byte) 3 -- vbuz1=vbuz2_ror_3 lda.z ypos lsr lsr lsr sta.z __27 - // [292] (byte) processChars::ychar#0 ← (byte~) processChars::$27 - (const byte) BORDER_YPOS_TOP/(byte) 8 -- vbuz1=vbuz2_minus_vbuc1 + // [284] (byte) processChars::ychar#0 ← (byte~) processChars::$27 - (const byte) BORDER_YPOS_TOP/(byte) 8 -- vbuz1=vbuz2_minus_vbuc1 lax.z __27 axs #BORDER_YPOS_TOP/8 stx.z ychar - // [293] (byte~) processChars::$34 ← (byte) processChars::ychar#0 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [285] (byte~) processChars::$34 ← (byte) processChars::ychar#0 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z ychar asl sta.z __34 - // [294] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) + *((const word*) VYSIN + (byte~) processChars::$34) -- pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuc2_derefidx_vbuz2 + // [286] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) + *((const word*) VYSIN + (byte~) processChars::$34) -- pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuc2_derefidx_vbuz2 ldx.z __34 ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VY clc @@ -6824,7 +6719,7 @@ processChars: { lda (processing),y adc VYSIN+1,x sta (processing),y - // [295] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) -- pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuz1_derefidx_vbuc2 + // [287] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) -- pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuz1_derefidx_vbuc2 ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VY clc lda (processing),y @@ -6839,38 +6734,38 @@ processChars: { jmp __b7 // processChars::@7 __b7: - // [296] (byte) processChars::numActive#1 ← ++ (byte) processChars::numActive#10 -- vbuz1=_inc_vbuz1 + // [288] (byte) processChars::numActive#1 ← ++ (byte) processChars::numActive#10 -- vbuz1=_inc_vbuz1 inc.z numActive - // [297] phi from processChars::@1 processChars::@7 to processChars::@2 [phi:processChars::@1/processChars::@7->processChars::@2] + // [289] phi from processChars::@1 processChars::@7 to processChars::@2 [phi:processChars::@1/processChars::@7->processChars::@2] __b2_from___b1: __b2_from___b7: - // [297] phi (byte) processChars::numActive#3 = (byte) processChars::numActive#10 [phi:processChars::@1/processChars::@7->processChars::@2#0] -- register_copy + // [289] phi (byte) processChars::numActive#3 = (byte) processChars::numActive#10 [phi:processChars::@1/processChars::@7->processChars::@2#0] -- register_copy jmp __b2 // processChars::@2 __b2: - // [298] (byte) processChars::i#1 ← ++ (byte) processChars::i#10 -- vbuz1=_inc_vbuz1 + // [290] (byte) processChars::i#1 ← ++ (byte) processChars::i#10 -- vbuz1=_inc_vbuz1 inc.z i - // [299] if((byte) processChars::i#1!=(const byte) NUM_PROCESSING-(byte) 1+(byte) 1) goto processChars::@1 -- vbuz1_neq_vbuc1_then_la1 + // [291] if((byte) processChars::i#1!=(const byte) NUM_PROCESSING-(byte) 1+(byte) 1) goto processChars::@1 -- vbuz1_neq_vbuc1_then_la1 lda #NUM_PROCESSING-1+1 cmp.z i bne __b1_from___b2 jmp __breturn // processChars::@return __breturn: - // [300] return + // [292] return rts // processChars::@6 __b6: - // [301] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_FREE -- pbuz1_derefidx_vbuc1=vbuc2 + // [293] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_FREE -- pbuz1_derefidx_vbuc1=vbuc2 // Set status to FREE lda #STATUS_FREE ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS sta (processing),y - // [302] (byte~) processChars::$29 ← (byte) $ff ^ (byte) processChars::bitmask#0 -- vbuz1=vbuc1_bxor_vbuz2 + // [294] (byte~) processChars::$29 ← (byte) $ff ^ (byte) processChars::bitmask#0 -- vbuz1=vbuc1_bxor_vbuz2 lda #$ff eor.z bitmask sta.z __29 - // [303] *((const byte*) SPRITES_ENABLE) ← *((const byte*) SPRITES_ENABLE) & (byte~) processChars::$29 -- _deref_pbuc1=_deref_pbuc1_band_vbuz1 + // [295] *((const byte*) SPRITES_ENABLE) ← *((const byte*) SPRITES_ENABLE) & (byte~) processChars::$29 -- _deref_pbuc1=_deref_pbuc1_band_vbuz1 // Disable the sprite lda SPRITES_ENABLE and.z __29 @@ -6878,7 +6773,7 @@ processChars: { jmp __b7 // processChars::@4 __b4: - // [304] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) | (byte) processChars::bitmask#0 -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1 + // [296] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) | (byte) processChars::bitmask#0 -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1 lda SPRITES_XMSB ora.z bitmask sta SPRITES_XMSB @@ -6894,23 +6789,23 @@ irqTop: { jmp __b1 // irqTop::@1 __b1: - // [306] *((const byte*) RASTER) ← (const byte) RASTER_IRQ_MIDDLE -- _deref_pbuc1=vbuc2 + // [298] *((const byte*) RASTER) ← (const byte) RASTER_IRQ_MIDDLE -- _deref_pbuc1=vbuc2 // Trigger IRQ at the middle of the screen lda #RASTER_IRQ_MIDDLE sta RASTER - // [307] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_ALL)(void()) irqBottom() -- _deref_pptc1=pprc2 + // [299] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_ALL)(void()) irqBottom() -- _deref_pptc1=pprc2 lda #irqBottom sta HARDWARE_IRQ+1 - // [308] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 + // [300] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 // Acknowledge the IRQ lda #IRQ_RASTER sta IRQ_STATUS jmp __breturn // irqTop::@return __breturn: - // [309] return - exit interrupt(HARDWARE_ALL) + // [301] return - exit interrupt(HARDWARE_ALL) rega: lda #00 regx: @@ -6939,6 +6834,9 @@ VYSIN: // Sprites currently being processed in the interrupt PROCESSING: .fill $e*NUM_PROCESSING, 0 + __2: .word 0, 0, 0, 0 + .byte 0, 0, 0, STATUS_FREE + .word 0 REGISTER UPLIFT POTENTIAL REGISTERS Statement [3] (void*) SCREEN_COPY#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_COPY#0 heap_head#1 ] ( [ SCREEN_COPY#0 heap_head#1 ] ) always clobbers reg byte a @@ -6946,440 +6844,427 @@ Statement [5] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_CO Statement [9] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::screen#0 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::screen#0 ] ) always clobbers reg byte a 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] if((byte*) main::src#2!=(const byte*) SCREEN+(word) $3e8) goto main::@2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#2 main::dst#2 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#2 main::dst#2 ] ) always clobbers reg byte a -Statement [15] (byte~) main::$20 ← (byte) main::i#2 << (byte) 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$20 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$20 ] ) always clobbers reg byte a +Statement [15] (byte~) main::$11 ← (byte) main::i#2 << (byte) 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$11 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$11 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:6 [ main::i#2 main::i#1 ] -Statement [16] (byte~) main::$21 ← (byte~) main::$20 + (byte) main::i#2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$21 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$21 ] ) always clobbers reg byte a -Statement [17] (byte~) main::$22 ← (byte~) main::$21 << (byte) 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$22 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$22 ] ) always clobbers reg byte a -Statement [18] (byte~) main::$23 ← (byte~) main::$22 + (byte) main::i#2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$23 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$23 ] ) always clobbers reg byte a -Statement [19] (byte~) main::$10 ← (byte~) main::$23 << (byte) 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$10 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$10 ] ) always clobbers reg byte a -Statement [20] *((word*)(const struct ProcessingSprite*) PROCESSING + (byte~) main::$10) ← (word) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$10 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$10 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:62 [ main::$10 ] -Statement [21] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$10) ← (word) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$10 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$10 ] ) always clobbers reg byte a -Statement [22] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$10) ← (word) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$10 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$10 ] ) always clobbers reg byte a -Statement [23] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$10) ← (word) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$10 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$10 ] ) always clobbers reg byte a -Statement [24] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$10) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$10 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$10 ] ) always clobbers reg byte a -Statement [25] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$10) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$10 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$10 ] ) always clobbers reg byte a -Statement [26] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) main::$10) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$10 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$10 ] ) always clobbers reg byte a -Statement [27] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$10) ← (const byte) STATUS_FREE [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$10 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$10 ] ) always clobbers reg byte a -Statement [28] *((byte**)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$10) ← (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 [44] *((const byte*) SCREEN+(word) $3e7) ← (byte) '.' [ ] ( main:7 [ ] ) always clobbers reg byte a -Statement [49] *((byte*) main::dst#2) ← *((byte*) main::src#2) [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#2 main::dst#2 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#2 main::dst#2 ] ) always clobbers reg byte a reg byte y -Statement [55] (byte~) startProcessing::$39 ← (byte) startProcessing::i#2 << (byte) 1 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$39 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$39 ] ) always clobbers reg byte a +Statement [16] (byte~) main::$12 ← (byte~) main::$11 + (byte) main::i#2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$12 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$12 ] ) always clobbers reg byte a +Statement [17] (byte~) main::$13 ← (byte~) main::$12 << (byte) 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$13 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$13 ] ) always clobbers reg byte a +Statement [18] (byte~) main::$14 ← (byte~) main::$13 + (byte) main::i#2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$14 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$14 ] ) always clobbers reg byte a +Statement [19] (byte~) main::$10 ← (byte~) main::$14 << (byte) 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$10 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$10 ] ) always clobbers reg byte a +Statement [20] *((const struct ProcessingSprite*) PROCESSING + (byte~) main::$10) ← memcpy(*(&(const struct ProcessingSprite) $2), struct ProcessingSprite, (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE) [ 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 reg byte x reg byte y +Removing always clobbered register reg byte x as potential for zp[1]:6 [ main::i#2 main::i#1 ] +Removing always clobbered register reg byte y as potential for zp[1]:6 [ main::i#2 main::i#1 ] +Statement [22] if((byte) main::i#1!=(const byte) NUM_PROCESSING-(byte) 1+(byte) 1) goto main::@3 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#1 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#1 ] ) always clobbers reg byte a +Statement [36] *((const byte*) SCREEN+(word) $3e7) ← (byte) '.' [ ] ( main:7 [ ] ) always clobbers reg byte a +Statement [41] *((byte*) main::dst#2) ← *((byte*) main::src#2) [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#2 main::dst#2 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#2 main::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [47] (byte~) startProcessing::$39 ← (byte) startProcessing::i#2 << (byte) 1 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$39 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$39 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:69 [ startProcessing::center_x#0 ] Removing always clobbered register reg byte a as potential for zp[1]:70 [ startProcessing::center_y#0 ] Removing always clobbered register reg byte a as potential for zp[1]:7 [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ] Removing always clobbered register reg byte a as potential for zp[1]:8 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ] -Statement [56] (byte~) startProcessing::$40 ← (byte~) startProcessing::$39 + (byte) startProcessing::i#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$40 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$40 ] ) always clobbers reg byte a -Statement [57] (byte~) startProcessing::$41 ← (byte~) startProcessing::$40 << (byte) 1 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$41 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$41 ] ) always clobbers reg byte a -Statement [58] (byte~) startProcessing::$42 ← (byte~) startProcessing::$41 + (byte) startProcessing::i#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$42 ] ( main:7::startProcessing:48 [ 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 [59] (byte~) startProcessing::$27 ← (byte~) startProcessing::$42 << (byte) 1 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$27 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$27 ] ) always clobbers reg byte a -Statement [60] if(*((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$27)!=(const byte) STATUS_FREE) goto startProcessing::@3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 ] ) always clobbers reg byte a -Statement [63] (word~) startProcessing::$0 ← (word)(byte) startProcessing::center_y#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 ] ) always clobbers reg byte a -Statement [64] (word~) startProcessing::$44 ← (word~) startProcessing::$0 << (byte) 2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 startProcessing::$44 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 startProcessing::$44 ] ) always clobbers reg byte a -Statement [65] (word~) startProcessing::$45 ← (word~) startProcessing::$44 + (word~) startProcessing::$0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$45 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$45 ] ) always clobbers reg byte a -Statement [66] (word~) startProcessing::$1 ← (word~) startProcessing::$45 << (byte) 3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$1 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$1 ] ) always clobbers reg byte a -Statement [67] (word) startProcessing::offset#0 ← (word~) startProcessing::$1 + (byte) startProcessing::center_x#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 ] ) always clobbers reg byte a -Statement [68] (byte*) startProcessing::colPtr#0 ← (const byte*) COLS + (word) startProcessing::offset#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::colPtr#0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::colPtr#0 ] ) always clobbers reg byte a -Statement [69] (byte) startProcessing::spriteCol#0 ← *((byte*) startProcessing::colPtr#0) [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::spriteCol#0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::spriteCol#0 ] ) always clobbers reg byte a reg byte y +Statement [48] (byte~) startProcessing::$40 ← (byte~) startProcessing::$39 + (byte) startProcessing::i#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$40 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$40 ] ) always clobbers reg byte a +Statement [49] (byte~) startProcessing::$41 ← (byte~) startProcessing::$40 << (byte) 1 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$41 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$41 ] ) always clobbers reg byte a +Statement [50] (byte~) startProcessing::$42 ← (byte~) startProcessing::$41 + (byte) startProcessing::i#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$42 ] ( main:7::startProcessing:40 [ 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 [51] (byte~) startProcessing::$27 ← (byte~) startProcessing::$42 << (byte) 1 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$27 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$27 ] ) always clobbers reg byte a +Statement [52] if(*((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$27)!=(const byte) STATUS_FREE) goto startProcessing::@3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 ] ) always clobbers reg byte a +Statement [55] (word~) startProcessing::$0 ← (word)(byte) startProcessing::center_y#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 ] ) always clobbers reg byte a +Statement [56] (word~) startProcessing::$44 ← (word~) startProcessing::$0 << (byte) 2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 startProcessing::$44 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 startProcessing::$44 ] ) always clobbers reg byte a +Statement [57] (word~) startProcessing::$45 ← (word~) startProcessing::$44 + (word~) startProcessing::$0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$45 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$45 ] ) always clobbers reg byte a +Statement [58] (word~) startProcessing::$1 ← (word~) startProcessing::$45 << (byte) 3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$1 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$1 ] ) always clobbers reg byte a +Statement [59] (word) startProcessing::offset#0 ← (word~) startProcessing::$1 + (byte) startProcessing::center_x#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 ] ) always clobbers reg byte a +Statement [60] (byte*) startProcessing::colPtr#0 ← (const byte*) COLS + (word) startProcessing::offset#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::colPtr#0 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::colPtr#0 ] ) always clobbers reg byte a +Statement [61] (byte) startProcessing::spriteCol#0 ← *((byte*) startProcessing::colPtr#0) [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::spriteCol#0 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::spriteCol#0 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp[1]:69 [ startProcessing::center_x#0 ] Removing always clobbered register reg byte y as potential for zp[1]:70 [ startProcessing::center_y#0 ] Removing always clobbered register reg byte y as potential for zp[1]:8 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ] -Statement [70] (byte*) startProcessing::screenPtr#0 ← (const byte*) SCREEN + (word) startProcessing::offset#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] ) always clobbers reg byte a +Statement [62] (byte*) startProcessing::screenPtr#0 ← (const byte*) SCREEN + (word) startProcessing::offset#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:88 [ startProcessing::spriteCol#0 ] -Statement [71] (word~) startProcessing::$5 ← (word)(byte) startProcessing::freeIdx#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$5 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$5 ] ) always clobbers reg byte a -Statement [72] (word~) startProcessing::$6 ← (word~) startProcessing::$5 << (byte) 6 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$6 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$6 ] ) always clobbers reg byte a -Statement [73] (byte*) startProcessing::spriteData#0 ← (const byte*) SPRITE_DATA + (word~) startProcessing::$6 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 ] ) always clobbers reg byte a -Statement [74] (byte) startProcessing::ch#0 ← *((byte*) startProcessing::screenPtr#0) [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::ch#0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::ch#0 ] ) always clobbers reg byte a reg byte y +Statement [63] (word~) startProcessing::$5 ← (word)(byte) startProcessing::freeIdx#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$5 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$5 ] ) always clobbers reg byte a +Statement [64] (word~) startProcessing::$6 ← (word~) startProcessing::$5 << (byte) 6 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$6 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$6 ] ) always clobbers reg byte a +Statement [65] (byte*) startProcessing::spriteData#0 ← (const byte*) SPRITE_DATA + (word~) startProcessing::$6 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 ] ) always clobbers reg byte a +Statement [66] (byte) startProcessing::ch#0 ← *((byte*) startProcessing::screenPtr#0) [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::ch#0 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::ch#0 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp[1]:88 [ startProcessing::spriteCol#0 ] -Statement [75] (word~) startProcessing::$8 ← (word)(byte) startProcessing::ch#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$8 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$8 ] ) always clobbers reg byte a -Statement [76] (word~) startProcessing::$9 ← (word~) startProcessing::$8 << (byte) 3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$9 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$9 ] ) always clobbers reg byte a -Statement [77] (byte*) startProcessing::chargenData#0 ← (const byte*) CHARGEN + (word~) startProcessing::$9 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ) always clobbers reg byte a -Statement [79] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_CHARROM [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ) always clobbers reg byte a -Statement [81] *((byte*) startProcessing::spriteData#2) ← *((byte*) startProcessing::chargenData#2) [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::spriteData#2 startProcessing::i1#2 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::spriteData#2 startProcessing::i1#2 ] ) always clobbers reg byte a reg byte y +Statement [67] (word~) startProcessing::$8 ← (word)(byte) startProcessing::ch#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$8 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$8 ] ) always clobbers reg byte a +Statement [68] (word~) startProcessing::$9 ← (word~) startProcessing::$8 << (byte) 3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$9 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$9 ] ) always clobbers reg byte a +Statement [69] (byte*) startProcessing::chargenData#0 ← (const byte*) CHARGEN + (word~) startProcessing::$9 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ) always clobbers reg byte a +Statement [71] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_CHARROM [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ) always clobbers reg byte a +Statement [73] *((byte*) startProcessing::spriteData#2) ← *((byte*) startProcessing::chargenData#2) [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::spriteData#2 startProcessing::i1#2 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::spriteData#2 startProcessing::i1#2 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte a as potential for zp[1]:13 [ startProcessing::i1#2 startProcessing::i1#1 ] Removing always clobbered register reg byte y as potential for zp[1]:13 [ startProcessing::i1#2 startProcessing::i1#1 ] -Statement [82] (byte*) startProcessing::spriteData#1 ← (byte*) startProcessing::spriteData#2 + (byte) 3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::i1#2 startProcessing::spriteData#1 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::i1#2 startProcessing::spriteData#1 ] ) always clobbers reg byte a -Statement [86] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] ) always clobbers reg byte a -Statement [88] (word~) startProcessing::$11 ← (word)(byte) startProcessing::center_x#0 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$11 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$11 ] ) always clobbers reg byte a -Statement [89] (word~) startProcessing::$12 ← (word~) startProcessing::$11 << (byte) 3 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$12 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$12 ] ) always clobbers reg byte a -Statement [90] (word~) startProcessing::$13 ← (const byte) BORDER_XPOS_LEFT + (word~) startProcessing::$12 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$13 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$13 ] ) always clobbers reg byte a -Statement [91] (word) startProcessing::spriteX#0 ← (word~) startProcessing::$13 << (byte) 4 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 ] ) always clobbers reg byte a -Statement [92] (word~) startProcessing::$15 ← (word)(byte) startProcessing::center_y#0 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$15 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$15 ] ) always clobbers reg byte a -Statement [93] (word~) startProcessing::$16 ← (word~) startProcessing::$15 << (byte) 3 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$16 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$16 ] ) always clobbers reg byte a -Statement [94] (word~) startProcessing::$17 ← (const byte) BORDER_YPOS_TOP + (word~) startProcessing::$16 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$17 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$17 ] ) always clobbers reg byte a -Statement [95] (word) startProcessing::spriteY#0 ← (word~) startProcessing::$17 << (byte) 4 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 ] ) always clobbers reg byte a -Statement [96] (byte) startProcessing::spritePtr#0 ← (byte)(const byte*) SPRITE_DATA/(byte) $40 + (byte) startProcessing::freeIdx#2 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 ] ) always clobbers reg byte a -Statement [97] (byte~) startProcessing::$20 ← (byte) startProcessing::freeIdx#2 << (byte) 3 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$20 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$20 ] ) always clobbers reg byte a +Statement [74] (byte*) startProcessing::spriteData#1 ← (byte*) startProcessing::spriteData#2 + (byte) 3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::i1#2 startProcessing::spriteData#1 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::i1#2 startProcessing::spriteData#1 ] ) always clobbers reg byte a +Statement [78] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] ) always clobbers reg byte a +Statement [80] (word~) startProcessing::$11 ← (word)(byte) startProcessing::center_x#0 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$11 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$11 ] ) always clobbers reg byte a +Statement [81] (word~) startProcessing::$12 ← (word~) startProcessing::$11 << (byte) 3 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$12 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$12 ] ) always clobbers reg byte a +Statement [82] (word~) startProcessing::$13 ← (const byte) BORDER_XPOS_LEFT + (word~) startProcessing::$12 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$13 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$13 ] ) always clobbers reg byte a +Statement [83] (word) startProcessing::spriteX#0 ← (word~) startProcessing::$13 << (byte) 4 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 ] ) always clobbers reg byte a +Statement [84] (word~) startProcessing::$15 ← (word)(byte) startProcessing::center_y#0 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$15 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$15 ] ) always clobbers reg byte a +Statement [85] (word~) startProcessing::$16 ← (word~) startProcessing::$15 << (byte) 3 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$16 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$16 ] ) always clobbers reg byte a +Statement [86] (word~) startProcessing::$17 ← (const byte) BORDER_YPOS_TOP + (word~) startProcessing::$16 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$17 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$17 ] ) always clobbers reg byte a +Statement [87] (word) startProcessing::spriteY#0 ← (word~) startProcessing::$17 << (byte) 4 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 ] ) always clobbers reg byte a +Statement [88] (byte) startProcessing::spritePtr#0 ← (byte)(const byte*) SPRITE_DATA/(byte) $40 + (byte) startProcessing::freeIdx#2 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 ] ) always clobbers reg byte a +Statement [89] (byte~) startProcessing::$20 ← (byte) startProcessing::freeIdx#2 << (byte) 3 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$20 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$20 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:116 [ startProcessing::spritePtr#0 ] -Statement [98] (word~) startProcessing::$21 ← (word)(byte~) startProcessing::$20 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 ] ) always clobbers reg byte a -Statement [99] (byte~) startProcessing::$47 ← (byte) startProcessing::freeIdx#2 << (byte) 1 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$47 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$47 ] ) always clobbers reg byte a -Statement [100] (byte~) startProcessing::$48 ← (byte~) startProcessing::$47 + (byte) startProcessing::freeIdx#2 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$48 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$48 ] ) always clobbers reg byte a -Statement [101] (byte~) startProcessing::$49 ← (byte~) startProcessing::$48 << (byte) 1 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$49 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$49 ] ) always clobbers reg byte a -Statement [102] (byte~) startProcessing::$50 ← (byte~) startProcessing::$49 + (byte) startProcessing::freeIdx#2 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$50 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$50 ] ) always clobbers reg byte a -Statement [103] (byte~) startProcessing::$28 ← (byte~) startProcessing::$50 << (byte) 1 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$28 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$28 ] ) always clobbers reg byte a -Statement [104] *((word*)(const struct ProcessingSprite*) PROCESSING + (byte~) startProcessing::$28) ← (word) startProcessing::spriteX#0 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$28 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$28 ] ) always clobbers reg byte a +Statement [90] (word~) startProcessing::$21 ← (word)(byte~) startProcessing::$20 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 ] ) always clobbers reg byte a +Statement [91] (byte~) startProcessing::$47 ← (byte) startProcessing::freeIdx#2 << (byte) 1 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$47 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$47 ] ) always clobbers reg byte a +Statement [92] (byte~) startProcessing::$48 ← (byte~) startProcessing::$47 + (byte) startProcessing::freeIdx#2 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$48 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$48 ] ) always clobbers reg byte a +Statement [93] (byte~) startProcessing::$49 ← (byte~) startProcessing::$48 << (byte) 1 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$49 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$49 ] ) always clobbers reg byte a +Statement [94] (byte~) startProcessing::$50 ← (byte~) startProcessing::$49 + (byte) startProcessing::freeIdx#2 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$50 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$50 ] ) always clobbers reg byte a +Statement [95] (byte~) startProcessing::$28 ← (byte~) startProcessing::$50 << (byte) 1 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$28 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$28 ] ) always clobbers reg byte a +Statement [96] *((word*)(const struct ProcessingSprite*) PROCESSING + (byte~) startProcessing::$28) ← (word) startProcessing::spriteX#0 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$28 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$28 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:124 [ startProcessing::$28 ] -Statement [105] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) startProcessing::$28) ← (word) startProcessing::spriteY#0 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$28 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$28 ] ) always clobbers reg byte a -Statement [106] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) startProcessing::$28) ← (word~) startProcessing::$21 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$28 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$28 ] ) always clobbers reg byte a -Statement [107] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) startProcessing::$28) ← (word) $3c [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$28 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$28 ] ) always clobbers reg byte a -Statement [108] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) startProcessing::$28) ← (byte) startProcessing::freeIdx#2 [ startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$28 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$28 ] ) always clobbers reg byte a -Statement [109] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) startProcessing::$28) ← (byte) startProcessing::spritePtr#0 [ startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$28 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$28 ] ) always clobbers reg byte a -Statement [110] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) startProcessing::$28) ← (byte) startProcessing::spriteCol#0 [ startProcessing::screenPtr#0 startProcessing::$28 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::screenPtr#0 startProcessing::$28 ] ) always clobbers reg byte a -Statement [111] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$28) ← (const byte) STATUS_NEW [ startProcessing::screenPtr#0 startProcessing::$28 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::screenPtr#0 startProcessing::$28 ] ) always clobbers reg byte a -Statement [112] *((byte**)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) startProcessing::$28) ← (byte*) startProcessing::screenPtr#0 [ ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a -Statement [118] (byte*) getCharToProcess::screen_line#0 ← (byte*)(void*) SCREEN_COPY#0 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 ] ( main:7::getCharToProcess:36 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 ] ) always clobbers reg byte a -Statement [119] (byte*) getCharToProcess::dist_line#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 getCharToProcess::dist_line#0 ] ( main:7::getCharToProcess:36 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 getCharToProcess::dist_line#0 ] ) always clobbers reg byte a -Statement [122] if(*((byte*) getCharToProcess::screen_line#4 + (byte) getCharToProcess::x#2)==(byte) ' ') goto getCharToProcess::@11 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#4 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 ] ( main:7::getCharToProcess:36 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#4 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 ] ) always clobbers reg byte a +Statement [97] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) startProcessing::$28) ← (word) startProcessing::spriteY#0 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$28 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$28 ] ) always clobbers reg byte a +Statement [98] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) startProcessing::$28) ← (word~) startProcessing::$21 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$28 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$28 ] ) always clobbers reg byte a +Statement [99] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) startProcessing::$28) ← (word) $3c [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$28 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$28 ] ) always clobbers reg byte a +Statement [100] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) startProcessing::$28) ← (byte) startProcessing::freeIdx#2 [ startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$28 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$28 ] ) always clobbers reg byte a +Statement [101] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) startProcessing::$28) ← (byte) startProcessing::spritePtr#0 [ startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$28 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$28 ] ) always clobbers reg byte a +Statement [102] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) startProcessing::$28) ← (byte) startProcessing::spriteCol#0 [ startProcessing::screenPtr#0 startProcessing::$28 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::screenPtr#0 startProcessing::$28 ] ) always clobbers reg byte a +Statement [103] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$28) ← (const byte) STATUS_NEW [ startProcessing::screenPtr#0 startProcessing::$28 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::screenPtr#0 startProcessing::$28 ] ) always clobbers reg byte a +Statement [104] *((byte**)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) startProcessing::$28) ← (byte*) startProcessing::screenPtr#0 [ ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a +Statement [110] (byte*) getCharToProcess::screen_line#0 ← (byte*)(void*) SCREEN_COPY#0 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 ] ( main:7::getCharToProcess:28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 ] ) always clobbers reg byte a +Statement [111] (byte*) getCharToProcess::dist_line#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 getCharToProcess::dist_line#0 ] ( main:7::getCharToProcess:28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 getCharToProcess::dist_line#0 ] ) always clobbers reg byte a +Statement [114] if(*((byte*) getCharToProcess::screen_line#4 + (byte) getCharToProcess::x#2)==(byte) ' ') goto getCharToProcess::@11 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#4 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 ] ( main:7::getCharToProcess:28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#4 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:18 [ getCharToProcess::y#7 getCharToProcess::y#1 ] Removing always clobbered register reg byte a as potential for zp[1]:19 [ getCharToProcess::x#2 getCharToProcess::x#1 ] Removing always clobbered register reg byte a as potential for zp[1]:20 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] Removing always clobbered register reg byte a as potential for zp[1]:21 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] Removing always clobbered register reg byte a as potential for zp[1]:22 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] -Statement [123] (byte) getCharToProcess::dist#0 ← *((byte*) getCharToProcess::dist_line#6 + (byte) getCharToProcess::x#2) [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#4 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 getCharToProcess::dist#0 ] ( main:7::getCharToProcess:36 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#4 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 getCharToProcess::dist#0 ] ) always clobbers reg byte a -Statement [130] (byte*) getCharToProcess::screen_line#1 ← (byte*) getCharToProcess::screen_line#4 + (byte) $28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::screen_line#1 ] ( main:7::getCharToProcess:36 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::screen_line#1 ] ) always clobbers reg byte a +Statement [115] (byte) getCharToProcess::dist#0 ← *((byte*) getCharToProcess::dist_line#6 + (byte) getCharToProcess::x#2) [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#4 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 getCharToProcess::dist#0 ] ( main:7::getCharToProcess:28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#4 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 getCharToProcess::dist#0 ] ) always clobbers reg byte a +Statement [122] (byte*) getCharToProcess::screen_line#1 ← (byte*) getCharToProcess::screen_line#4 + (byte) $28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::screen_line#1 ] ( main:7::getCharToProcess:28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::screen_line#1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:23 [ getCharToProcess::return_dist#1 getCharToProcess::return_dist#5 getCharToProcess::return_dist#6 getCharToProcess::dist#0 ] -Statement [131] (byte*) getCharToProcess::dist_line#1 ← (byte*) getCharToProcess::dist_line#6 + (byte) $28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::y#7 getCharToProcess::screen_line#1 getCharToProcess::dist_line#1 ] ( main:7::getCharToProcess:36 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::y#7 getCharToProcess::screen_line#1 getCharToProcess::dist_line#1 ] ) always clobbers reg byte a -Statement [135] (word~) getCharToProcess::$8 ← (word)(byte) getCharToProcess::return_y#1 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$8 ] ( main:7::getCharToProcess:36 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$8 ] ) always clobbers reg byte a -Statement [136] (word~) getCharToProcess::$12 ← (word~) getCharToProcess::$8 << (byte) 2 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$8 getCharToProcess::$12 ] ( main:7::getCharToProcess:36 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$8 getCharToProcess::$12 ] ) always clobbers reg byte a -Statement [137] (word~) getCharToProcess::$13 ← (word~) getCharToProcess::$12 + (word~) getCharToProcess::$8 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$13 ] ( main:7::getCharToProcess:36 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$13 ] ) always clobbers reg byte a -Statement [138] (word~) getCharToProcess::$9 ← (word~) getCharToProcess::$13 << (byte) 3 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$9 ] ( main:7::getCharToProcess:36 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$9 ] ) always clobbers reg byte a -Statement [139] (byte*~) getCharToProcess::$10 ← (byte*)(void*) SCREEN_COPY#0 + (word~) getCharToProcess::$9 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$10 ] ( main:7::getCharToProcess:36 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$10 ] ) always clobbers reg byte a -Statement [140] *((byte*~) getCharToProcess::$10 + (byte) getCharToProcess::return_x#1) ← (byte) ' ' [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 ] ( main:7::getCharToProcess:36 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 ] ) always clobbers reg byte a -Statement [147] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:7::setupRasterIrq:34 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a -Statement [148] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO [ ] ( main:7::setupRasterIrq:34 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a -Statement [149] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR [ ] ( main:7::setupRasterIrq:34 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a -Statement [150] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) & (byte) $7f [ ] ( main:7::setupRasterIrq:34 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a -Statement [151] *((const byte*) RASTER) ← <(const byte) RASTER_IRQ_TOP [ ] ( main:7::setupRasterIrq:34 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a -Statement [152] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER [ ] ( main:7::setupRasterIrq:34 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a -Statement [153] *((const void()**) HARDWARE_IRQ) ← (const void()*) setupRasterIrq::irqRoutine#0 [ ] ( main:7::setupRasterIrq:34 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a -Statement [158] if((byte*) initSprites::sp#2<(const byte*) SPRITE_DATA+(const byte) NUM_PROCESSING*(byte) $40) goto initSprites::@2 [ initSprites::sp#2 ] ( main:7::initSprites:32 [ SCREEN_COPY#0 SCREEN_DIST#0 initSprites::sp#2 ] ) always clobbers reg byte a -Statement [160] *((const byte*) SPRITES_COLS + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE [ initSprites::i#2 ] ( main:7::initSprites:32 [ SCREEN_COPY#0 SCREEN_DIST#0 initSprites::i#2 ] ) always clobbers reg byte a +Statement [123] (byte*) getCharToProcess::dist_line#1 ← (byte*) getCharToProcess::dist_line#6 + (byte) $28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::y#7 getCharToProcess::screen_line#1 getCharToProcess::dist_line#1 ] ( main:7::getCharToProcess:28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::y#7 getCharToProcess::screen_line#1 getCharToProcess::dist_line#1 ] ) always clobbers reg byte a +Statement [127] (word~) getCharToProcess::$8 ← (word)(byte) getCharToProcess::return_y#1 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$8 ] ( main:7::getCharToProcess:28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$8 ] ) always clobbers reg byte a +Statement [128] (word~) getCharToProcess::$12 ← (word~) getCharToProcess::$8 << (byte) 2 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$8 getCharToProcess::$12 ] ( main:7::getCharToProcess:28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$8 getCharToProcess::$12 ] ) always clobbers reg byte a +Statement [129] (word~) getCharToProcess::$13 ← (word~) getCharToProcess::$12 + (word~) getCharToProcess::$8 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$13 ] ( main:7::getCharToProcess:28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$13 ] ) always clobbers reg byte a +Statement [130] (word~) getCharToProcess::$9 ← (word~) getCharToProcess::$13 << (byte) 3 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$9 ] ( main:7::getCharToProcess:28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$9 ] ) always clobbers reg byte a +Statement [131] (byte*~) getCharToProcess::$10 ← (byte*)(void*) SCREEN_COPY#0 + (word~) getCharToProcess::$9 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$10 ] ( main:7::getCharToProcess:28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$10 ] ) always clobbers reg byte a +Statement [132] *((byte*~) getCharToProcess::$10 + (byte) getCharToProcess::return_x#1) ← (byte) ' ' [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 ] ( main:7::getCharToProcess:28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 ] ) always clobbers reg byte a +Statement [139] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:7::setupRasterIrq:26 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a +Statement [140] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO [ ] ( main:7::setupRasterIrq:26 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a +Statement [141] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR [ ] ( main:7::setupRasterIrq:26 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a +Statement [142] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) & (byte) $7f [ ] ( main:7::setupRasterIrq:26 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a +Statement [143] *((const byte*) RASTER) ← <(const byte) RASTER_IRQ_TOP [ ] ( main:7::setupRasterIrq:26 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a +Statement [144] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER [ ] ( main:7::setupRasterIrq:26 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a +Statement [145] *((const void()**) HARDWARE_IRQ) ← (const void()*) setupRasterIrq::irqRoutine#0 [ ] ( main:7::setupRasterIrq:26 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a +Statement [150] if((byte*) initSprites::sp#2<(const byte*) SPRITE_DATA+(const byte) NUM_PROCESSING*(byte) $40) goto initSprites::@2 [ initSprites::sp#2 ] ( main:7::initSprites:24 [ SCREEN_COPY#0 SCREEN_DIST#0 initSprites::sp#2 ] ) always clobbers reg byte a +Statement [152] *((const byte*) SPRITES_COLS + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE [ initSprites::i#2 ] ( main:7::initSprites:24 [ SCREEN_COPY#0 SCREEN_DIST#0 initSprites::i#2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:26 [ initSprites::i#2 initSprites::i#1 ] -Statement [163] *((const byte*) SPRITES_MC) ← (byte) 0 [ ] ( main:7::initSprites:32 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a -Statement [164] *((const byte*) SPRITES_EXPAND_X) ← (byte) 0 [ ] ( main:7::initSprites:32 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a -Statement [165] *((const byte*) SPRITES_EXPAND_Y) ← (byte) 0 [ ] ( main:7::initSprites:32 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a -Statement [167] *((byte*) initSprites::sp#2) ← (byte) 0 [ initSprites::sp#2 ] ( main:7::initSprites:32 [ SCREEN_COPY#0 SCREEN_DIST#0 initSprites::sp#2 ] ) always clobbers reg byte a reg byte y -Statement [169] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ) always clobbers reg byte a -Statement [170] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ) always clobbers reg byte a -Statement [174] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a +Statement [155] *((const byte*) SPRITES_MC) ← (byte) 0 [ ] ( main:7::initSprites:24 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a +Statement [156] *((const byte*) SPRITES_EXPAND_X) ← (byte) 0 [ ] ( main:7::initSprites:24 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a +Statement [157] *((const byte*) SPRITES_EXPAND_Y) ← (byte) 0 [ ] ( main:7::initSprites:24 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a +Statement [159] *((byte*) initSprites::sp#2) ← (byte) 0 [ initSprites::sp#2 ] ( main:7::initSprites:24 [ SCREEN_COPY#0 SCREEN_DIST#0 initSprites::sp#2 ] ) always clobbers reg byte a reg byte y +Statement [161] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ) always clobbers reg byte a +Statement [162] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ) always clobbers reg byte a +Statement [166] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ] -Statement [175] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ) always clobbers reg byte a -Statement [179] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ) always clobbers reg byte a +Statement [167] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ) always clobbers reg byte a +Statement [171] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:32 [ init_angle_screen::x#2 init_angle_screen::x#1 ] Removing always clobbered register reg byte a as potential for zp[1]:33 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] -Statement [180] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ) always clobbers reg byte a -Statement [181] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ) always clobbers reg byte y +Statement [172] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ) always clobbers reg byte a +Statement [173] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp[1]:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ] Removing always clobbered register reg byte y as potential for zp[1]:32 [ init_angle_screen::x#2 init_angle_screen::x#1 ] Removing always clobbered register reg byte y as potential for zp[1]:33 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] -Statement [182] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a -Statement [183] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y -Statement [184] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a -Statement [185] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a -Statement [187] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ) always clobbers reg byte a -Statement [188] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a -Statement [189] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ) always clobbers reg byte a -Statement [190] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a -Statement [191] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [174] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a +Statement [175] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y +Statement [176] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a +Statement [177] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [179] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ) always clobbers reg byte a +Statement [180] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a +Statement [181] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ) always clobbers reg byte a +Statement [182] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a +Statement [183] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp[1]:152 [ init_angle_screen::ang_w#0 ] -Statement [192] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a +Statement [184] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:152 [ init_angle_screen::ang_w#0 ] -Statement [193] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Statement [194] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a -Statement [195] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Statement [196] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ) always clobbers reg byte a -Statement [197] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ) always clobbers reg byte y -Statement [200] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a -Statement [201] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a -Statement [203] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a -Statement [204] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a -Statement [207] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a +Statement [185] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [186] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a +Statement [187] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [188] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ) always clobbers reg byte a +Statement [189] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ) always clobbers reg byte y +Statement [192] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [193] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a +Statement [195] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a +Statement [196] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a +Statement [199] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:38 [ atan2_16::i#2 atan2_16::i#1 ] -Statement [209] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a -Statement [210] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a -Statement [211] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a -Statement [213] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#11 ] ) always clobbers reg byte a -Statement [214] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#5 ] ) always clobbers reg byte a -Statement [218] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a +Statement [201] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [202] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [203] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a +Statement [205] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#11 ] ) always clobbers reg byte a +Statement [206] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#5 ] ) always clobbers reg byte a +Statement [210] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:43 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] -Statement [219] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a -Statement [223] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a -Statement [224] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a -Statement [226] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a -Statement [227] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a -Statement [228] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a -Statement [229] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] ) always clobbers reg byte a -Statement [230] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a -Statement [234] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [235] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [236] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] ) always clobbers reg byte a -Statement [237] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [238] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a -Statement [239] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a -Statement [241] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a -Statement [242] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a -Statement [244] (byte*) malloc::mem#0 ← (byte*) heap_head#5 - (word) $3e8 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] ) always clobbers reg byte a -Statement [245] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( malloc:2 [ malloc::mem#0 heap_head#1 ] malloc:4 [ malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a -Statement [250] *((const byte*) RASTER) ← (const byte) RASTER_IRQ_TOP [ ] ( [ ] ) always clobbers reg byte a -Statement [251] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_ALL)(void()) irqTop() [ ] ( [ ] ) always clobbers reg byte a -Statement [252] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER [ ] ( [ ] ) always clobbers reg byte a -Statement [253] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y -Statement [256] (byte~) processChars::$62 ← (byte) processChars::i#10 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::$62 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::$62 ] ) always clobbers reg byte a +Statement [211] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a +Statement [215] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a +Statement [216] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a +Statement [218] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a +Statement [219] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a +Statement [220] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a +Statement [221] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] ) always clobbers reg byte a +Statement [222] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a +Statement [226] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [227] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [228] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] ) always clobbers reg byte a +Statement [229] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [230] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a +Statement [231] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a +Statement [233] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a +Statement [234] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a +Statement [236] (byte*) malloc::mem#0 ← (byte*) heap_head#5 - (word) $3e8 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] ) always clobbers reg byte a +Statement [237] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( malloc:2 [ malloc::mem#0 heap_head#1 ] malloc:4 [ malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a +Statement [242] *((const byte*) RASTER) ← (const byte) RASTER_IRQ_TOP [ ] ( [ ] ) always clobbers reg byte a +Statement [243] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_ALL)(void()) irqTop() [ ] ( [ ] ) always clobbers reg byte a +Statement [244] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER [ ] ( [ ] ) always clobbers reg byte a +Statement [245] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y +Statement [248] (byte~) processChars::$62 ← (byte) processChars::i#10 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::$62 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::$62 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:50 [ processChars::i#10 processChars::i#1 ] Removing always clobbered register reg byte a as potential for zp[1]:51 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ] -Statement [257] (byte~) processChars::$63 ← (byte~) processChars::$62 + (byte) processChars::i#10 [ processChars::i#10 processChars::numActive#10 processChars::$63 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::$63 ] ) always clobbers reg byte a -Statement [258] (byte~) processChars::$64 ← (byte~) processChars::$63 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::$64 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::$64 ] ) always clobbers reg byte a -Statement [259] (byte~) processChars::$65 ← (byte~) processChars::$64 + (byte) processChars::i#10 [ processChars::i#10 processChars::numActive#10 processChars::$65 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::$65 ] ) always clobbers reg byte a -Statement [260] (byte~) processChars::$32 ← (byte~) processChars::$65 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::$32 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::$32 ] ) always clobbers reg byte a -Statement [261] (struct ProcessingSprite*) processChars::processing#0 ← (const struct ProcessingSprite*) PROCESSING + (byte~) processChars::$32 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 ] ) always clobbers reg byte a -Statement [262] (byte) processChars::bitmask#0 ← (byte) 1 << *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y +Statement [249] (byte~) processChars::$63 ← (byte~) processChars::$62 + (byte) processChars::i#10 [ processChars::i#10 processChars::numActive#10 processChars::$63 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::$63 ] ) always clobbers reg byte a +Statement [250] (byte~) processChars::$64 ← (byte~) processChars::$63 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::$64 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::$64 ] ) always clobbers reg byte a +Statement [251] (byte~) processChars::$65 ← (byte~) processChars::$64 + (byte) processChars::i#10 [ processChars::i#10 processChars::numActive#10 processChars::$65 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::$65 ] ) always clobbers reg byte a +Statement [252] (byte~) processChars::$32 ← (byte~) processChars::$65 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::$32 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::$32 ] ) always clobbers reg byte a +Statement [253] (struct ProcessingSprite*) processChars::processing#0 ← (const struct ProcessingSprite*) PROCESSING + (byte~) processChars::$32 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 ] ) always clobbers reg byte a +Statement [254] (byte) processChars::bitmask#0 ← (byte) 1 << *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp[1]:50 [ processChars::i#10 processChars::i#1 ] Removing always clobbered register reg byte y as potential for zp[1]:51 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ] -Statement [263] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)==(const byte) STATUS_FREE) goto processChars::@2 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y +Statement [255] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)==(const byte) STATUS_FREE) goto processChars::@2 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte a as potential for zp[1]:167 [ processChars::bitmask#0 ] Removing always clobbered register reg byte y as potential for zp[1]:167 [ processChars::bitmask#0 ] -Statement [264] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)!=(const byte) STATUS_NEW) goto processChars::@3 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y -Statement [265] *(*((byte**)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR)) ← (byte) ' ' [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte x reg byte y +Statement [256] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)!=(const byte) STATUS_NEW) goto processChars::@3 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y +Statement [257] *(*((byte**)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR)) ← (byte) ' ' [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte x reg byte y Removing always clobbered register reg byte x as potential for zp[1]:50 [ processChars::i#10 processChars::i#1 ] Removing always clobbered register reg byte x as potential for zp[1]:51 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ] Removing always clobbered register reg byte x as potential for zp[1]:167 [ processChars::bitmask#0 ] -Statement [266] *((const byte*) SPRITES_ENABLE) ← *((const byte*) SPRITES_ENABLE) | (byte) processChars::bitmask#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a -Statement [267] *((const byte*) SPRITES_COLS + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y -Statement [268] *((const byte*) SCREEN+(const word) SPRITE_PTRS + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y -Statement [269] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_PROCESSING [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y -Statement [270] (word) processChars::xpos#0 ← *((word*)(struct ProcessingSprite*) processChars::processing#0) >> (byte) 4 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ) always clobbers reg byte a reg byte y -Statement [271] (byte~) processChars::$9 ← > (word) processChars::xpos#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$9 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$9 ] ) always clobbers reg byte a -Statement [273] (byte~) processChars::$10 ← (byte) $ff ^ (byte) processChars::bitmask#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$10 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$10 ] ) always clobbers reg byte a -Statement [274] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) & (byte~) processChars::$10 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ) always clobbers reg byte a -Statement [275] (byte~) processChars::$15 ← (byte) processChars::i#10 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$15 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$15 ] ) always clobbers reg byte a -Statement [276] (byte~) processChars::$12 ← (byte)(word) processChars::xpos#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$15 processChars::$12 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$15 processChars::$12 ] ) always clobbers reg byte a +Statement [258] *((const byte*) SPRITES_ENABLE) ← *((const byte*) SPRITES_ENABLE) | (byte) processChars::bitmask#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a +Statement [259] *((const byte*) SPRITES_COLS + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y +Statement [260] *((const byte*) SCREEN+(const word) SPRITE_PTRS + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y +Statement [261] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_PROCESSING [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y +Statement [262] (word) processChars::xpos#0 ← *((word*)(struct ProcessingSprite*) processChars::processing#0) >> (byte) 4 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ) always clobbers reg byte a reg byte y +Statement [263] (byte~) processChars::$9 ← > (word) processChars::xpos#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$9 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$9 ] ) always clobbers reg byte a +Statement [265] (byte~) processChars::$10 ← (byte) $ff ^ (byte) processChars::bitmask#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$10 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$10 ] ) always clobbers reg byte a +Statement [266] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) & (byte~) processChars::$10 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ) always clobbers reg byte a +Statement [267] (byte~) processChars::$15 ← (byte) processChars::i#10 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$15 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$15 ] ) always clobbers reg byte a +Statement [268] (byte~) processChars::$12 ← (byte)(word) processChars::xpos#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$15 processChars::$12 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$15 processChars::$12 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:172 [ processChars::$15 ] -Statement [278] (word~) processChars::$13 ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) >> (byte) 4 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$15 processChars::$13 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$15 processChars::$13 ] ) always clobbers reg byte a reg byte y +Statement [270] (word~) processChars::$13 ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) >> (byte) 4 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$15 processChars::$13 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$15 processChars::$13 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp[1]:172 [ processChars::$15 ] -Statement [279] (byte) processChars::ypos#0 ← (byte)(word~) processChars::$13 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$15 processChars::ypos#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$15 processChars::ypos#0 ] ) always clobbers reg byte a -Statement [281] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)<(const word) XPOS_LEFTMOST) goto processChars::@6 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ) always clobbers reg byte a reg byte y +Statement [271] (byte) processChars::ypos#0 ← (byte)(word~) processChars::$13 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$15 processChars::ypos#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$15 processChars::ypos#0 ] ) always clobbers reg byte a +Statement [273] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)<(const word) XPOS_LEFTMOST) goto processChars::@6 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte a as potential for zp[1]:176 [ processChars::ypos#0 ] Removing always clobbered register reg byte y as potential for zp[1]:176 [ processChars::ypos#0 ] -Statement [282] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)>(const word) XPOS_RIGHTMOST) goto processChars::@6 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ) always clobbers reg byte a reg byte y -Statement [283] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)<(const word) YPOS_TOPMOST) goto processChars::@6 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ) always clobbers reg byte a reg byte y -Statement [284] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)>(const word) YPOS_BOTTOMMOST) goto processChars::@6 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ) always clobbers reg byte a reg byte y -Statement [285] (word~) processChars::$23 ← (word) processChars::xpos#0 >> (byte) 3 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$23 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$23 ] ) always clobbers reg byte a -Statement [286] (byte~) processChars::$24 ← (byte)(word~) processChars::$23 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$24 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$24 ] ) always clobbers reg byte a -Statement [288] (byte~) processChars::$33 ← (byte) processChars::xchar#0 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$33 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$33 ] ) always clobbers reg byte a -Statement [289] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) + *((const word*) VXSIN + (byte~) processChars::$33) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 ] ) always clobbers reg byte a reg byte y -Statement [290] *((word*)(struct ProcessingSprite*) processChars::processing#0) ← *((word*)(struct ProcessingSprite*) processChars::processing#0) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 ] ) always clobbers reg byte a reg byte y -Statement [291] (byte~) processChars::$27 ← (byte) processChars::ypos#0 >> (byte) 3 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::$27 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::$27 ] ) always clobbers reg byte a -Statement [293] (byte~) processChars::$34 ← (byte) processChars::ychar#0 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::$34 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::$34 ] ) always clobbers reg byte a -Statement [294] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) + *((const word*) VYSIN + (byte~) processChars::$34) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 ] ) always clobbers reg byte a reg byte y -Statement [295] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) [ processChars::i#10 processChars::numActive#10 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 ] ) always clobbers reg byte a reg byte y -Statement [299] if((byte) processChars::i#1!=(const byte) NUM_PROCESSING-(byte) 1+(byte) 1) goto processChars::@1 [ processChars::i#1 processChars::numActive#3 ] ( processChars:249 [ processChars::i#1 processChars::numActive#3 ] ) always clobbers reg byte a -Statement [301] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_FREE [ processChars::i#10 processChars::numActive#10 processChars::bitmask#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y -Statement [302] (byte~) processChars::$29 ← (byte) $ff ^ (byte) processChars::bitmask#0 [ processChars::i#10 processChars::numActive#10 processChars::$29 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::$29 ] ) always clobbers reg byte a -Statement [303] *((const byte*) SPRITES_ENABLE) ← *((const byte*) SPRITES_ENABLE) & (byte~) processChars::$29 [ processChars::i#10 processChars::numActive#10 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 ] ) always clobbers reg byte a -Statement [304] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) | (byte) processChars::bitmask#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ) always clobbers reg byte a -Statement [306] *((const byte*) RASTER) ← (const byte) RASTER_IRQ_MIDDLE [ ] ( [ ] ) always clobbers reg byte a -Statement [307] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_ALL)(void()) irqBottom() [ ] ( [ ] ) always clobbers reg byte a -Statement [308] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER [ ] ( [ ] ) always clobbers reg byte a -Statement [309] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y +Statement [274] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)>(const word) XPOS_RIGHTMOST) goto processChars::@6 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ) always clobbers reg byte a reg byte y +Statement [275] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)<(const word) YPOS_TOPMOST) goto processChars::@6 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ) always clobbers reg byte a reg byte y +Statement [276] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)>(const word) YPOS_BOTTOMMOST) goto processChars::@6 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ) always clobbers reg byte a reg byte y +Statement [277] (word~) processChars::$23 ← (word) processChars::xpos#0 >> (byte) 3 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$23 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$23 ] ) always clobbers reg byte a +Statement [278] (byte~) processChars::$24 ← (byte)(word~) processChars::$23 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$24 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$24 ] ) always clobbers reg byte a +Statement [280] (byte~) processChars::$33 ← (byte) processChars::xchar#0 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$33 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$33 ] ) always clobbers reg byte a +Statement [281] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) + *((const word*) VXSIN + (byte~) processChars::$33) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 ] ) always clobbers reg byte a reg byte y +Statement [282] *((word*)(struct ProcessingSprite*) processChars::processing#0) ← *((word*)(struct ProcessingSprite*) processChars::processing#0) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 ] ) always clobbers reg byte a reg byte y +Statement [283] (byte~) processChars::$27 ← (byte) processChars::ypos#0 >> (byte) 3 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::$27 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::$27 ] ) always clobbers reg byte a +Statement [285] (byte~) processChars::$34 ← (byte) processChars::ychar#0 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::$34 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::$34 ] ) always clobbers reg byte a +Statement [286] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) + *((const word*) VYSIN + (byte~) processChars::$34) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 ] ) always clobbers reg byte a reg byte y +Statement [287] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) [ processChars::i#10 processChars::numActive#10 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 ] ) always clobbers reg byte a reg byte y +Statement [291] if((byte) processChars::i#1!=(const byte) NUM_PROCESSING-(byte) 1+(byte) 1) goto processChars::@1 [ processChars::i#1 processChars::numActive#3 ] ( processChars:241 [ processChars::i#1 processChars::numActive#3 ] ) always clobbers reg byte a +Statement [293] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_FREE [ processChars::i#10 processChars::numActive#10 processChars::bitmask#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y +Statement [294] (byte~) processChars::$29 ← (byte) $ff ^ (byte) processChars::bitmask#0 [ processChars::i#10 processChars::numActive#10 processChars::$29 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::$29 ] ) always clobbers reg byte a +Statement [295] *((const byte*) SPRITES_ENABLE) ← *((const byte*) SPRITES_ENABLE) & (byte~) processChars::$29 [ processChars::i#10 processChars::numActive#10 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 ] ) always clobbers reg byte a +Statement [296] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) | (byte) processChars::bitmask#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ) always clobbers reg byte a +Statement [298] *((const byte*) RASTER) ← (const byte) RASTER_IRQ_MIDDLE [ ] ( [ ] ) always clobbers reg byte a +Statement [299] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_ALL)(void()) irqBottom() [ ] ( [ ] ) always clobbers reg byte a +Statement [300] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER [ ] ( [ ] ) always clobbers reg byte a +Statement [301] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y Statement [3] (void*) SCREEN_COPY#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_COPY#0 heap_head#1 ] ( [ SCREEN_COPY#0 heap_head#1 ] ) always clobbers reg byte a Statement [5] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ( [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a Statement [9] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::screen#0 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::screen#0 ] ) always clobbers reg byte a 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] if((byte*) main::src#2!=(const byte*) SCREEN+(word) $3e8) goto main::@2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#2 main::dst#2 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#2 main::dst#2 ] ) always clobbers reg byte a -Statement [15] (byte~) main::$20 ← (byte) main::i#2 << (byte) 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$20 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$20 ] ) always clobbers reg byte a -Statement [16] (byte~) main::$21 ← (byte~) main::$20 + (byte) main::i#2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$21 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$21 ] ) always clobbers reg byte a -Statement [17] (byte~) main::$22 ← (byte~) main::$21 << (byte) 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$22 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$22 ] ) always clobbers reg byte a -Statement [18] (byte~) main::$23 ← (byte~) main::$22 + (byte) main::i#2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$23 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$23 ] ) always clobbers reg byte a -Statement [19] (byte~) main::$10 ← (byte~) main::$23 << (byte) 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$10 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$10 ] ) always clobbers reg byte a -Statement [20] *((word*)(const struct ProcessingSprite*) PROCESSING + (byte~) main::$10) ← (word) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$10 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$10 ] ) always clobbers reg byte a -Statement [21] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$10) ← (word) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$10 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$10 ] ) always clobbers reg byte a -Statement [22] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$10) ← (word) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$10 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$10 ] ) always clobbers reg byte a -Statement [23] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$10) ← (word) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$10 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$10 ] ) always clobbers reg byte a -Statement [24] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$10) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$10 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$10 ] ) always clobbers reg byte a -Statement [25] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$10) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$10 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$10 ] ) always clobbers reg byte a -Statement [26] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) main::$10) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$10 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$10 ] ) always clobbers reg byte a -Statement [27] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$10) ← (const byte) STATUS_FREE [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$10 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$10 ] ) always clobbers reg byte a -Statement [28] *((byte**)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$10) ← (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 [44] *((const byte*) SCREEN+(word) $3e7) ← (byte) '.' [ ] ( main:7 [ ] ) always clobbers reg byte a -Statement [49] *((byte*) main::dst#2) ← *((byte*) main::src#2) [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#2 main::dst#2 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#2 main::dst#2 ] ) always clobbers reg byte a reg byte y -Statement [55] (byte~) startProcessing::$39 ← (byte) startProcessing::i#2 << (byte) 1 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$39 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$39 ] ) always clobbers reg byte a -Statement [56] (byte~) startProcessing::$40 ← (byte~) startProcessing::$39 + (byte) startProcessing::i#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$40 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$40 ] ) always clobbers reg byte a -Statement [57] (byte~) startProcessing::$41 ← (byte~) startProcessing::$40 << (byte) 1 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$41 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$41 ] ) always clobbers reg byte a -Statement [58] (byte~) startProcessing::$42 ← (byte~) startProcessing::$41 + (byte) startProcessing::i#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$42 ] ( main:7::startProcessing:48 [ 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 [59] (byte~) startProcessing::$27 ← (byte~) startProcessing::$42 << (byte) 1 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$27 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$27 ] ) always clobbers reg byte a -Statement [60] if(*((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$27)!=(const byte) STATUS_FREE) goto startProcessing::@3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 ] ) always clobbers reg byte a -Statement [63] (word~) startProcessing::$0 ← (word)(byte) startProcessing::center_y#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 ] ) always clobbers reg byte a -Statement [64] (word~) startProcessing::$44 ← (word~) startProcessing::$0 << (byte) 2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 startProcessing::$44 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 startProcessing::$44 ] ) always clobbers reg byte a -Statement [65] (word~) startProcessing::$45 ← (word~) startProcessing::$44 + (word~) startProcessing::$0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$45 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$45 ] ) always clobbers reg byte a -Statement [66] (word~) startProcessing::$1 ← (word~) startProcessing::$45 << (byte) 3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$1 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$1 ] ) always clobbers reg byte a -Statement [67] (word) startProcessing::offset#0 ← (word~) startProcessing::$1 + (byte) startProcessing::center_x#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 ] ) always clobbers reg byte a -Statement [68] (byte*) startProcessing::colPtr#0 ← (const byte*) COLS + (word) startProcessing::offset#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::colPtr#0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::colPtr#0 ] ) always clobbers reg byte a -Statement [69] (byte) startProcessing::spriteCol#0 ← *((byte*) startProcessing::colPtr#0) [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::spriteCol#0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::spriteCol#0 ] ) always clobbers reg byte a reg byte y -Statement [70] (byte*) startProcessing::screenPtr#0 ← (const byte*) SCREEN + (word) startProcessing::offset#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] ) always clobbers reg byte a -Statement [71] (word~) startProcessing::$5 ← (word)(byte) startProcessing::freeIdx#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$5 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$5 ] ) always clobbers reg byte a -Statement [72] (word~) startProcessing::$6 ← (word~) startProcessing::$5 << (byte) 6 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$6 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$6 ] ) always clobbers reg byte a -Statement [73] (byte*) startProcessing::spriteData#0 ← (const byte*) SPRITE_DATA + (word~) startProcessing::$6 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 ] ) always clobbers reg byte a -Statement [74] (byte) startProcessing::ch#0 ← *((byte*) startProcessing::screenPtr#0) [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::ch#0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::ch#0 ] ) always clobbers reg byte a reg byte y -Statement [75] (word~) startProcessing::$8 ← (word)(byte) startProcessing::ch#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$8 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$8 ] ) always clobbers reg byte a -Statement [76] (word~) startProcessing::$9 ← (word~) startProcessing::$8 << (byte) 3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$9 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$9 ] ) always clobbers reg byte a -Statement [77] (byte*) startProcessing::chargenData#0 ← (const byte*) CHARGEN + (word~) startProcessing::$9 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ) always clobbers reg byte a -Statement [79] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_CHARROM [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ) always clobbers reg byte a -Statement [81] *((byte*) startProcessing::spriteData#2) ← *((byte*) startProcessing::chargenData#2) [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::spriteData#2 startProcessing::i1#2 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::spriteData#2 startProcessing::i1#2 ] ) always clobbers reg byte a reg byte y -Statement [82] (byte*) startProcessing::spriteData#1 ← (byte*) startProcessing::spriteData#2 + (byte) 3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::i1#2 startProcessing::spriteData#1 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::i1#2 startProcessing::spriteData#1 ] ) always clobbers reg byte a -Statement [86] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] ) always clobbers reg byte a -Statement [88] (word~) startProcessing::$11 ← (word)(byte) startProcessing::center_x#0 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$11 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$11 ] ) always clobbers reg byte a -Statement [89] (word~) startProcessing::$12 ← (word~) startProcessing::$11 << (byte) 3 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$12 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$12 ] ) always clobbers reg byte a -Statement [90] (word~) startProcessing::$13 ← (const byte) BORDER_XPOS_LEFT + (word~) startProcessing::$12 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$13 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$13 ] ) always clobbers reg byte a -Statement [91] (word) startProcessing::spriteX#0 ← (word~) startProcessing::$13 << (byte) 4 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 ] ) always clobbers reg byte a -Statement [92] (word~) startProcessing::$15 ← (word)(byte) startProcessing::center_y#0 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$15 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$15 ] ) always clobbers reg byte a -Statement [93] (word~) startProcessing::$16 ← (word~) startProcessing::$15 << (byte) 3 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$16 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$16 ] ) always clobbers reg byte a -Statement [94] (word~) startProcessing::$17 ← (const byte) BORDER_YPOS_TOP + (word~) startProcessing::$16 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$17 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$17 ] ) always clobbers reg byte a -Statement [95] (word) startProcessing::spriteY#0 ← (word~) startProcessing::$17 << (byte) 4 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 ] ) always clobbers reg byte a -Statement [96] (byte) startProcessing::spritePtr#0 ← (byte)(const byte*) SPRITE_DATA/(byte) $40 + (byte) startProcessing::freeIdx#2 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 ] ) always clobbers reg byte a -Statement [97] (byte~) startProcessing::$20 ← (byte) startProcessing::freeIdx#2 << (byte) 3 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$20 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$20 ] ) always clobbers reg byte a -Statement [98] (word~) startProcessing::$21 ← (word)(byte~) startProcessing::$20 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 ] ) always clobbers reg byte a -Statement [99] (byte~) startProcessing::$47 ← (byte) startProcessing::freeIdx#2 << (byte) 1 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$47 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$47 ] ) always clobbers reg byte a -Statement [100] (byte~) startProcessing::$48 ← (byte~) startProcessing::$47 + (byte) startProcessing::freeIdx#2 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$48 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$48 ] ) always clobbers reg byte a -Statement [101] (byte~) startProcessing::$49 ← (byte~) startProcessing::$48 << (byte) 1 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$49 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$49 ] ) always clobbers reg byte a -Statement [102] (byte~) startProcessing::$50 ← (byte~) startProcessing::$49 + (byte) startProcessing::freeIdx#2 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$50 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$50 ] ) always clobbers reg byte a -Statement [103] (byte~) startProcessing::$28 ← (byte~) startProcessing::$50 << (byte) 1 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$28 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$28 ] ) always clobbers reg byte a -Statement [104] *((word*)(const struct ProcessingSprite*) PROCESSING + (byte~) startProcessing::$28) ← (word) startProcessing::spriteX#0 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$28 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$28 ] ) always clobbers reg byte a -Statement [105] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) startProcessing::$28) ← (word) startProcessing::spriteY#0 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$28 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$28 ] ) always clobbers reg byte a -Statement [106] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) startProcessing::$28) ← (word~) startProcessing::$21 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$28 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$28 ] ) always clobbers reg byte a -Statement [107] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) startProcessing::$28) ← (word) $3c [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$28 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$28 ] ) always clobbers reg byte a -Statement [108] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) startProcessing::$28) ← (byte) startProcessing::freeIdx#2 [ startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$28 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$28 ] ) always clobbers reg byte a -Statement [109] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) startProcessing::$28) ← (byte) startProcessing::spritePtr#0 [ startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$28 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$28 ] ) always clobbers reg byte a -Statement [110] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) startProcessing::$28) ← (byte) startProcessing::spriteCol#0 [ startProcessing::screenPtr#0 startProcessing::$28 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::screenPtr#0 startProcessing::$28 ] ) always clobbers reg byte a -Statement [111] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$28) ← (const byte) STATUS_NEW [ startProcessing::screenPtr#0 startProcessing::$28 ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::screenPtr#0 startProcessing::$28 ] ) always clobbers reg byte a -Statement [112] *((byte**)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) startProcessing::$28) ← (byte*) startProcessing::screenPtr#0 [ ] ( main:7::startProcessing:48 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a -Statement [118] (byte*) getCharToProcess::screen_line#0 ← (byte*)(void*) SCREEN_COPY#0 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 ] ( main:7::getCharToProcess:36 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 ] ) always clobbers reg byte a -Statement [119] (byte*) getCharToProcess::dist_line#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 getCharToProcess::dist_line#0 ] ( main:7::getCharToProcess:36 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 getCharToProcess::dist_line#0 ] ) always clobbers reg byte a -Statement [122] if(*((byte*) getCharToProcess::screen_line#4 + (byte) getCharToProcess::x#2)==(byte) ' ') goto getCharToProcess::@11 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#4 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 ] ( main:7::getCharToProcess:36 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#4 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 ] ) always clobbers reg byte a -Statement [123] (byte) getCharToProcess::dist#0 ← *((byte*) getCharToProcess::dist_line#6 + (byte) getCharToProcess::x#2) [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#4 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 getCharToProcess::dist#0 ] ( main:7::getCharToProcess:36 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#4 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 getCharToProcess::dist#0 ] ) always clobbers reg byte a -Statement [130] (byte*) getCharToProcess::screen_line#1 ← (byte*) getCharToProcess::screen_line#4 + (byte) $28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::screen_line#1 ] ( main:7::getCharToProcess:36 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::screen_line#1 ] ) always clobbers reg byte a -Statement [131] (byte*) getCharToProcess::dist_line#1 ← (byte*) getCharToProcess::dist_line#6 + (byte) $28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::y#7 getCharToProcess::screen_line#1 getCharToProcess::dist_line#1 ] ( main:7::getCharToProcess:36 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::y#7 getCharToProcess::screen_line#1 getCharToProcess::dist_line#1 ] ) always clobbers reg byte a -Statement [135] (word~) getCharToProcess::$8 ← (word)(byte) getCharToProcess::return_y#1 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$8 ] ( main:7::getCharToProcess:36 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$8 ] ) always clobbers reg byte a -Statement [136] (word~) getCharToProcess::$12 ← (word~) getCharToProcess::$8 << (byte) 2 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$8 getCharToProcess::$12 ] ( main:7::getCharToProcess:36 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$8 getCharToProcess::$12 ] ) always clobbers reg byte a -Statement [137] (word~) getCharToProcess::$13 ← (word~) getCharToProcess::$12 + (word~) getCharToProcess::$8 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$13 ] ( main:7::getCharToProcess:36 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$13 ] ) always clobbers reg byte a -Statement [138] (word~) getCharToProcess::$9 ← (word~) getCharToProcess::$13 << (byte) 3 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$9 ] ( main:7::getCharToProcess:36 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$9 ] ) always clobbers reg byte a -Statement [139] (byte*~) getCharToProcess::$10 ← (byte*)(void*) SCREEN_COPY#0 + (word~) getCharToProcess::$9 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$10 ] ( main:7::getCharToProcess:36 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$10 ] ) always clobbers reg byte a -Statement [140] *((byte*~) getCharToProcess::$10 + (byte) getCharToProcess::return_x#1) ← (byte) ' ' [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 ] ( main:7::getCharToProcess:36 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 ] ) always clobbers reg byte a -Statement [147] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:7::setupRasterIrq:34 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a -Statement [148] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO [ ] ( main:7::setupRasterIrq:34 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a -Statement [149] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR [ ] ( main:7::setupRasterIrq:34 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a -Statement [150] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) & (byte) $7f [ ] ( main:7::setupRasterIrq:34 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a -Statement [151] *((const byte*) RASTER) ← <(const byte) RASTER_IRQ_TOP [ ] ( main:7::setupRasterIrq:34 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a -Statement [152] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER [ ] ( main:7::setupRasterIrq:34 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a -Statement [153] *((const void()**) HARDWARE_IRQ) ← (const void()*) setupRasterIrq::irqRoutine#0 [ ] ( main:7::setupRasterIrq:34 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a -Statement [158] if((byte*) initSprites::sp#2<(const byte*) SPRITE_DATA+(const byte) NUM_PROCESSING*(byte) $40) goto initSprites::@2 [ initSprites::sp#2 ] ( main:7::initSprites:32 [ SCREEN_COPY#0 SCREEN_DIST#0 initSprites::sp#2 ] ) always clobbers reg byte a -Statement [160] *((const byte*) SPRITES_COLS + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE [ initSprites::i#2 ] ( main:7::initSprites:32 [ SCREEN_COPY#0 SCREEN_DIST#0 initSprites::i#2 ] ) always clobbers reg byte a -Statement [163] *((const byte*) SPRITES_MC) ← (byte) 0 [ ] ( main:7::initSprites:32 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a -Statement [164] *((const byte*) SPRITES_EXPAND_X) ← (byte) 0 [ ] ( main:7::initSprites:32 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a -Statement [165] *((const byte*) SPRITES_EXPAND_Y) ← (byte) 0 [ ] ( main:7::initSprites:32 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a -Statement [167] *((byte*) initSprites::sp#2) ← (byte) 0 [ initSprites::sp#2 ] ( main:7::initSprites:32 [ SCREEN_COPY#0 SCREEN_DIST#0 initSprites::sp#2 ] ) always clobbers reg byte a reg byte y -Statement [169] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ) always clobbers reg byte a -Statement [170] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ) always clobbers reg byte a -Statement [174] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a -Statement [175] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ) always clobbers reg byte a -Statement [179] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ) always clobbers reg byte a -Statement [180] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ) always clobbers reg byte a -Statement [181] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ) always clobbers reg byte y -Statement [182] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a -Statement [183] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y -Statement [184] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a -Statement [185] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a -Statement [187] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ) always clobbers reg byte a -Statement [188] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a -Statement [189] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ) always clobbers reg byte a -Statement [190] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a -Statement [191] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a reg byte y -Statement [192] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a -Statement [193] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Statement [194] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a -Statement [195] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Statement [196] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ) always clobbers reg byte a -Statement [197] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ) always clobbers reg byte y -Statement [200] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a -Statement [201] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a -Statement [203] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a -Statement [204] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a -Statement [207] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a -Statement [209] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a -Statement [210] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a -Statement [211] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a -Statement [213] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#11 ] ) always clobbers reg byte a -Statement [214] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#5 ] ) always clobbers reg byte a -Statement [218] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a -Statement [219] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a -Statement [223] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a -Statement [224] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a -Statement [226] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a -Statement [227] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a -Statement [228] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a -Statement [229] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] ) always clobbers reg byte a -Statement [230] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a -Statement [234] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [235] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [236] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] ) always clobbers reg byte a -Statement [237] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [238] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a -Statement [239] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a -Statement [241] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a -Statement [242] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:7::init_angle_screen:10::atan2_16:186 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a -Statement [244] (byte*) malloc::mem#0 ← (byte*) heap_head#5 - (word) $3e8 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] ) always clobbers reg byte a -Statement [245] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( malloc:2 [ malloc::mem#0 heap_head#1 ] malloc:4 [ malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a -Statement [250] *((const byte*) RASTER) ← (const byte) RASTER_IRQ_TOP [ ] ( [ ] ) always clobbers reg byte a -Statement [251] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_ALL)(void()) irqTop() [ ] ( [ ] ) always clobbers reg byte a -Statement [252] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER [ ] ( [ ] ) always clobbers reg byte a -Statement [253] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y -Statement [256] (byte~) processChars::$62 ← (byte) processChars::i#10 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::$62 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::$62 ] ) always clobbers reg byte a -Statement [257] (byte~) processChars::$63 ← (byte~) processChars::$62 + (byte) processChars::i#10 [ processChars::i#10 processChars::numActive#10 processChars::$63 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::$63 ] ) always clobbers reg byte a -Statement [258] (byte~) processChars::$64 ← (byte~) processChars::$63 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::$64 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::$64 ] ) always clobbers reg byte a -Statement [259] (byte~) processChars::$65 ← (byte~) processChars::$64 + (byte) processChars::i#10 [ processChars::i#10 processChars::numActive#10 processChars::$65 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::$65 ] ) always clobbers reg byte a -Statement [260] (byte~) processChars::$32 ← (byte~) processChars::$65 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::$32 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::$32 ] ) always clobbers reg byte a -Statement [261] (struct ProcessingSprite*) processChars::processing#0 ← (const struct ProcessingSprite*) PROCESSING + (byte~) processChars::$32 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 ] ) always clobbers reg byte a -Statement [262] (byte) processChars::bitmask#0 ← (byte) 1 << *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y -Statement [263] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)==(const byte) STATUS_FREE) goto processChars::@2 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y -Statement [264] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)!=(const byte) STATUS_NEW) goto processChars::@3 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y -Statement [265] *(*((byte**)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR)) ← (byte) ' ' [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte x reg byte y -Statement [266] *((const byte*) SPRITES_ENABLE) ← *((const byte*) SPRITES_ENABLE) | (byte) processChars::bitmask#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a -Statement [267] *((const byte*) SPRITES_COLS + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y -Statement [268] *((const byte*) SCREEN+(const word) SPRITE_PTRS + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y -Statement [269] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_PROCESSING [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y -Statement [270] (word) processChars::xpos#0 ← *((word*)(struct ProcessingSprite*) processChars::processing#0) >> (byte) 4 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ) always clobbers reg byte a reg byte y -Statement [271] (byte~) processChars::$9 ← > (word) processChars::xpos#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$9 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$9 ] ) always clobbers reg byte a -Statement [273] (byte~) processChars::$10 ← (byte) $ff ^ (byte) processChars::bitmask#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$10 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$10 ] ) always clobbers reg byte a -Statement [274] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) & (byte~) processChars::$10 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ) always clobbers reg byte a -Statement [275] (byte~) processChars::$15 ← (byte) processChars::i#10 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$15 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$15 ] ) always clobbers reg byte a -Statement [276] (byte~) processChars::$12 ← (byte)(word) processChars::xpos#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$15 processChars::$12 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$15 processChars::$12 ] ) always clobbers reg byte a -Statement [278] (word~) processChars::$13 ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) >> (byte) 4 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$15 processChars::$13 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$15 processChars::$13 ] ) always clobbers reg byte a reg byte y -Statement [279] (byte) processChars::ypos#0 ← (byte)(word~) processChars::$13 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$15 processChars::ypos#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$15 processChars::ypos#0 ] ) always clobbers reg byte a -Statement [280] *((const byte*) SPRITES_YPOS + (byte~) processChars::$15) ← (byte) processChars::ypos#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ) always clobbers reg byte a -Statement [281] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)<(const word) XPOS_LEFTMOST) goto processChars::@6 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ) always clobbers reg byte a reg byte y -Statement [282] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)>(const word) XPOS_RIGHTMOST) goto processChars::@6 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ) always clobbers reg byte a reg byte y -Statement [283] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)<(const word) YPOS_TOPMOST) goto processChars::@6 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ) always clobbers reg byte a reg byte y -Statement [284] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)>(const word) YPOS_BOTTOMMOST) goto processChars::@6 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ) always clobbers reg byte a reg byte y -Statement [285] (word~) processChars::$23 ← (word) processChars::xpos#0 >> (byte) 3 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$23 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$23 ] ) always clobbers reg byte a -Statement [286] (byte~) processChars::$24 ← (byte)(word~) processChars::$23 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$24 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$24 ] ) always clobbers reg byte a -Statement [288] (byte~) processChars::$33 ← (byte) processChars::xchar#0 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$33 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$33 ] ) always clobbers reg byte a -Statement [289] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) + *((const word*) VXSIN + (byte~) processChars::$33) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 ] ) always clobbers reg byte a reg byte y -Statement [290] *((word*)(struct ProcessingSprite*) processChars::processing#0) ← *((word*)(struct ProcessingSprite*) processChars::processing#0) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 ] ) always clobbers reg byte a reg byte y -Statement [291] (byte~) processChars::$27 ← (byte) processChars::ypos#0 >> (byte) 3 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::$27 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::$27 ] ) always clobbers reg byte a -Statement [293] (byte~) processChars::$34 ← (byte) processChars::ychar#0 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::$34 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::$34 ] ) always clobbers reg byte a -Statement [294] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) + *((const word*) VYSIN + (byte~) processChars::$34) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 ] ) always clobbers reg byte a reg byte y -Statement [295] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) [ processChars::i#10 processChars::numActive#10 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 ] ) always clobbers reg byte a reg byte y -Statement [299] if((byte) processChars::i#1!=(const byte) NUM_PROCESSING-(byte) 1+(byte) 1) goto processChars::@1 [ processChars::i#1 processChars::numActive#3 ] ( processChars:249 [ processChars::i#1 processChars::numActive#3 ] ) always clobbers reg byte a -Statement [301] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_FREE [ processChars::i#10 processChars::numActive#10 processChars::bitmask#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y -Statement [302] (byte~) processChars::$29 ← (byte) $ff ^ (byte) processChars::bitmask#0 [ processChars::i#10 processChars::numActive#10 processChars::$29 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::$29 ] ) always clobbers reg byte a -Statement [303] *((const byte*) SPRITES_ENABLE) ← *((const byte*) SPRITES_ENABLE) & (byte~) processChars::$29 [ processChars::i#10 processChars::numActive#10 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 ] ) always clobbers reg byte a -Statement [304] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) | (byte) processChars::bitmask#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ) always clobbers reg byte a -Statement [306] *((const byte*) RASTER) ← (const byte) RASTER_IRQ_MIDDLE [ ] ( [ ] ) always clobbers reg byte a -Statement [307] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_ALL)(void()) irqBottom() [ ] ( [ ] ) always clobbers reg byte a -Statement [308] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER [ ] ( [ ] ) always clobbers reg byte a -Statement [309] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y +Statement [15] (byte~) main::$11 ← (byte) main::i#2 << (byte) 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$11 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$11 ] ) always clobbers reg byte a +Statement [16] (byte~) main::$12 ← (byte~) main::$11 + (byte) main::i#2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$12 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$12 ] ) always clobbers reg byte a +Statement [17] (byte~) main::$13 ← (byte~) main::$12 << (byte) 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$13 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$13 ] ) always clobbers reg byte a +Statement [18] (byte~) main::$14 ← (byte~) main::$13 + (byte) main::i#2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$14 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$14 ] ) always clobbers reg byte a +Statement [19] (byte~) main::$10 ← (byte~) main::$14 << (byte) 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$10 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$10 ] ) always clobbers reg byte a +Statement [20] *((const struct ProcessingSprite*) PROCESSING + (byte~) main::$10) ← memcpy(*(&(const struct ProcessingSprite) $2), struct ProcessingSprite, (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE) [ 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 reg byte x reg byte y +Statement [22] if((byte) main::i#1!=(const byte) NUM_PROCESSING-(byte) 1+(byte) 1) goto main::@3 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#1 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#1 ] ) always clobbers reg byte a +Statement [36] *((const byte*) SCREEN+(word) $3e7) ← (byte) '.' [ ] ( main:7 [ ] ) always clobbers reg byte a +Statement [41] *((byte*) main::dst#2) ← *((byte*) main::src#2) [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#2 main::dst#2 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#2 main::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [47] (byte~) startProcessing::$39 ← (byte) startProcessing::i#2 << (byte) 1 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$39 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$39 ] ) always clobbers reg byte a +Statement [48] (byte~) startProcessing::$40 ← (byte~) startProcessing::$39 + (byte) startProcessing::i#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$40 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$40 ] ) always clobbers reg byte a +Statement [49] (byte~) startProcessing::$41 ← (byte~) startProcessing::$40 << (byte) 1 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$41 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$41 ] ) always clobbers reg byte a +Statement [50] (byte~) startProcessing::$42 ← (byte~) startProcessing::$41 + (byte) startProcessing::i#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$42 ] ( main:7::startProcessing:40 [ 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 [51] (byte~) startProcessing::$27 ← (byte~) startProcessing::$42 << (byte) 1 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$27 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$27 ] ) always clobbers reg byte a +Statement [52] if(*((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$27)!=(const byte) STATUS_FREE) goto startProcessing::@3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 ] ) always clobbers reg byte a +Statement [55] (word~) startProcessing::$0 ← (word)(byte) startProcessing::center_y#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 ] ) always clobbers reg byte a +Statement [56] (word~) startProcessing::$44 ← (word~) startProcessing::$0 << (byte) 2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 startProcessing::$44 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 startProcessing::$44 ] ) always clobbers reg byte a +Statement [57] (word~) startProcessing::$45 ← (word~) startProcessing::$44 + (word~) startProcessing::$0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$45 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$45 ] ) always clobbers reg byte a +Statement [58] (word~) startProcessing::$1 ← (word~) startProcessing::$45 << (byte) 3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$1 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$1 ] ) always clobbers reg byte a +Statement [59] (word) startProcessing::offset#0 ← (word~) startProcessing::$1 + (byte) startProcessing::center_x#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 ] ) always clobbers reg byte a +Statement [60] (byte*) startProcessing::colPtr#0 ← (const byte*) COLS + (word) startProcessing::offset#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::colPtr#0 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::colPtr#0 ] ) always clobbers reg byte a +Statement [61] (byte) startProcessing::spriteCol#0 ← *((byte*) startProcessing::colPtr#0) [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::spriteCol#0 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::spriteCol#0 ] ) always clobbers reg byte a reg byte y +Statement [62] (byte*) startProcessing::screenPtr#0 ← (const byte*) SCREEN + (word) startProcessing::offset#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] ) always clobbers reg byte a +Statement [63] (word~) startProcessing::$5 ← (word)(byte) startProcessing::freeIdx#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$5 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$5 ] ) always clobbers reg byte a +Statement [64] (word~) startProcessing::$6 ← (word~) startProcessing::$5 << (byte) 6 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$6 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$6 ] ) always clobbers reg byte a +Statement [65] (byte*) startProcessing::spriteData#0 ← (const byte*) SPRITE_DATA + (word~) startProcessing::$6 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 ] ) always clobbers reg byte a +Statement [66] (byte) startProcessing::ch#0 ← *((byte*) startProcessing::screenPtr#0) [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::ch#0 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::ch#0 ] ) always clobbers reg byte a reg byte y +Statement [67] (word~) startProcessing::$8 ← (word)(byte) startProcessing::ch#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$8 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$8 ] ) always clobbers reg byte a +Statement [68] (word~) startProcessing::$9 ← (word~) startProcessing::$8 << (byte) 3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$9 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$9 ] ) always clobbers reg byte a +Statement [69] (byte*) startProcessing::chargenData#0 ← (const byte*) CHARGEN + (word~) startProcessing::$9 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ) always clobbers reg byte a +Statement [71] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_CHARROM [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ) always clobbers reg byte a +Statement [73] *((byte*) startProcessing::spriteData#2) ← *((byte*) startProcessing::chargenData#2) [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::spriteData#2 startProcessing::i1#2 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::spriteData#2 startProcessing::i1#2 ] ) always clobbers reg byte a reg byte y +Statement [74] (byte*) startProcessing::spriteData#1 ← (byte*) startProcessing::spriteData#2 + (byte) 3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::i1#2 startProcessing::spriteData#1 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::i1#2 startProcessing::spriteData#1 ] ) always clobbers reg byte a +Statement [78] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] ) always clobbers reg byte a +Statement [80] (word~) startProcessing::$11 ← (word)(byte) startProcessing::center_x#0 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$11 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$11 ] ) always clobbers reg byte a +Statement [81] (word~) startProcessing::$12 ← (word~) startProcessing::$11 << (byte) 3 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$12 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$12 ] ) always clobbers reg byte a +Statement [82] (word~) startProcessing::$13 ← (const byte) BORDER_XPOS_LEFT + (word~) startProcessing::$12 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$13 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$13 ] ) always clobbers reg byte a +Statement [83] (word) startProcessing::spriteX#0 ← (word~) startProcessing::$13 << (byte) 4 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 ] ) always clobbers reg byte a +Statement [84] (word~) startProcessing::$15 ← (word)(byte) startProcessing::center_y#0 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$15 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$15 ] ) always clobbers reg byte a +Statement [85] (word~) startProcessing::$16 ← (word~) startProcessing::$15 << (byte) 3 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$16 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$16 ] ) always clobbers reg byte a +Statement [86] (word~) startProcessing::$17 ← (const byte) BORDER_YPOS_TOP + (word~) startProcessing::$16 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$17 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$17 ] ) always clobbers reg byte a +Statement [87] (word) startProcessing::spriteY#0 ← (word~) startProcessing::$17 << (byte) 4 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 ] ) always clobbers reg byte a +Statement [88] (byte) startProcessing::spritePtr#0 ← (byte)(const byte*) SPRITE_DATA/(byte) $40 + (byte) startProcessing::freeIdx#2 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 ] ) always clobbers reg byte a +Statement [89] (byte~) startProcessing::$20 ← (byte) startProcessing::freeIdx#2 << (byte) 3 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$20 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$20 ] ) always clobbers reg byte a +Statement [90] (word~) startProcessing::$21 ← (word)(byte~) startProcessing::$20 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 ] ) always clobbers reg byte a +Statement [91] (byte~) startProcessing::$47 ← (byte) startProcessing::freeIdx#2 << (byte) 1 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$47 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$47 ] ) always clobbers reg byte a +Statement [92] (byte~) startProcessing::$48 ← (byte~) startProcessing::$47 + (byte) startProcessing::freeIdx#2 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$48 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$48 ] ) always clobbers reg byte a +Statement [93] (byte~) startProcessing::$49 ← (byte~) startProcessing::$48 << (byte) 1 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$49 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$49 ] ) always clobbers reg byte a +Statement [94] (byte~) startProcessing::$50 ← (byte~) startProcessing::$49 + (byte) startProcessing::freeIdx#2 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$50 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$50 ] ) always clobbers reg byte a +Statement [95] (byte~) startProcessing::$28 ← (byte~) startProcessing::$50 << (byte) 1 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$28 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$28 ] ) always clobbers reg byte a +Statement [96] *((word*)(const struct ProcessingSprite*) PROCESSING + (byte~) startProcessing::$28) ← (word) startProcessing::spriteX#0 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$28 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$28 ] ) always clobbers reg byte a +Statement [97] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) startProcessing::$28) ← (word) startProcessing::spriteY#0 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$28 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$28 ] ) always clobbers reg byte a +Statement [98] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) startProcessing::$28) ← (word~) startProcessing::$21 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$28 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$28 ] ) always clobbers reg byte a +Statement [99] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) startProcessing::$28) ← (word) $3c [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$28 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$28 ] ) always clobbers reg byte a +Statement [100] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) startProcessing::$28) ← (byte) startProcessing::freeIdx#2 [ startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$28 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$28 ] ) always clobbers reg byte a +Statement [101] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) startProcessing::$28) ← (byte) startProcessing::spritePtr#0 [ startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$28 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$28 ] ) always clobbers reg byte a +Statement [102] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) startProcessing::$28) ← (byte) startProcessing::spriteCol#0 [ startProcessing::screenPtr#0 startProcessing::$28 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::screenPtr#0 startProcessing::$28 ] ) always clobbers reg byte a +Statement [103] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$28) ← (const byte) STATUS_NEW [ startProcessing::screenPtr#0 startProcessing::$28 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::screenPtr#0 startProcessing::$28 ] ) always clobbers reg byte a +Statement [104] *((byte**)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) startProcessing::$28) ← (byte*) startProcessing::screenPtr#0 [ ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a +Statement [110] (byte*) getCharToProcess::screen_line#0 ← (byte*)(void*) SCREEN_COPY#0 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 ] ( main:7::getCharToProcess:28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 ] ) always clobbers reg byte a +Statement [111] (byte*) getCharToProcess::dist_line#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 getCharToProcess::dist_line#0 ] ( main:7::getCharToProcess:28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 getCharToProcess::dist_line#0 ] ) always clobbers reg byte a +Statement [114] if(*((byte*) getCharToProcess::screen_line#4 + (byte) getCharToProcess::x#2)==(byte) ' ') goto getCharToProcess::@11 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#4 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 ] ( main:7::getCharToProcess:28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#4 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 ] ) always clobbers reg byte a +Statement [115] (byte) getCharToProcess::dist#0 ← *((byte*) getCharToProcess::dist_line#6 + (byte) getCharToProcess::x#2) [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#4 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 getCharToProcess::dist#0 ] ( main:7::getCharToProcess:28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#4 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 getCharToProcess::dist#0 ] ) always clobbers reg byte a +Statement [122] (byte*) getCharToProcess::screen_line#1 ← (byte*) getCharToProcess::screen_line#4 + (byte) $28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::screen_line#1 ] ( main:7::getCharToProcess:28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::screen_line#1 ] ) always clobbers reg byte a +Statement [123] (byte*) getCharToProcess::dist_line#1 ← (byte*) getCharToProcess::dist_line#6 + (byte) $28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::y#7 getCharToProcess::screen_line#1 getCharToProcess::dist_line#1 ] ( main:7::getCharToProcess:28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::y#7 getCharToProcess::screen_line#1 getCharToProcess::dist_line#1 ] ) always clobbers reg byte a +Statement [127] (word~) getCharToProcess::$8 ← (word)(byte) getCharToProcess::return_y#1 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$8 ] ( main:7::getCharToProcess:28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$8 ] ) always clobbers reg byte a +Statement [128] (word~) getCharToProcess::$12 ← (word~) getCharToProcess::$8 << (byte) 2 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$8 getCharToProcess::$12 ] ( main:7::getCharToProcess:28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$8 getCharToProcess::$12 ] ) always clobbers reg byte a +Statement [129] (word~) getCharToProcess::$13 ← (word~) getCharToProcess::$12 + (word~) getCharToProcess::$8 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$13 ] ( main:7::getCharToProcess:28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$13 ] ) always clobbers reg byte a +Statement [130] (word~) getCharToProcess::$9 ← (word~) getCharToProcess::$13 << (byte) 3 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$9 ] ( main:7::getCharToProcess:28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$9 ] ) always clobbers reg byte a +Statement [131] (byte*~) getCharToProcess::$10 ← (byte*)(void*) SCREEN_COPY#0 + (word~) getCharToProcess::$9 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$10 ] ( main:7::getCharToProcess:28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$10 ] ) always clobbers reg byte a +Statement [132] *((byte*~) getCharToProcess::$10 + (byte) getCharToProcess::return_x#1) ← (byte) ' ' [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 ] ( main:7::getCharToProcess:28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 ] ) always clobbers reg byte a +Statement [139] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:7::setupRasterIrq:26 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a +Statement [140] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO [ ] ( main:7::setupRasterIrq:26 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a +Statement [141] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR [ ] ( main:7::setupRasterIrq:26 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a +Statement [142] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) & (byte) $7f [ ] ( main:7::setupRasterIrq:26 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a +Statement [143] *((const byte*) RASTER) ← <(const byte) RASTER_IRQ_TOP [ ] ( main:7::setupRasterIrq:26 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a +Statement [144] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER [ ] ( main:7::setupRasterIrq:26 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a +Statement [145] *((const void()**) HARDWARE_IRQ) ← (const void()*) setupRasterIrq::irqRoutine#0 [ ] ( main:7::setupRasterIrq:26 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a +Statement [150] if((byte*) initSprites::sp#2<(const byte*) SPRITE_DATA+(const byte) NUM_PROCESSING*(byte) $40) goto initSprites::@2 [ initSprites::sp#2 ] ( main:7::initSprites:24 [ SCREEN_COPY#0 SCREEN_DIST#0 initSprites::sp#2 ] ) always clobbers reg byte a +Statement [152] *((const byte*) SPRITES_COLS + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE [ initSprites::i#2 ] ( main:7::initSprites:24 [ SCREEN_COPY#0 SCREEN_DIST#0 initSprites::i#2 ] ) always clobbers reg byte a +Statement [155] *((const byte*) SPRITES_MC) ← (byte) 0 [ ] ( main:7::initSprites:24 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a +Statement [156] *((const byte*) SPRITES_EXPAND_X) ← (byte) 0 [ ] ( main:7::initSprites:24 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a +Statement [157] *((const byte*) SPRITES_EXPAND_Y) ← (byte) 0 [ ] ( main:7::initSprites:24 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a +Statement [159] *((byte*) initSprites::sp#2) ← (byte) 0 [ initSprites::sp#2 ] ( main:7::initSprites:24 [ SCREEN_COPY#0 SCREEN_DIST#0 initSprites::sp#2 ] ) always clobbers reg byte a reg byte y +Statement [161] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ) always clobbers reg byte a +Statement [162] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ) always clobbers reg byte a +Statement [166] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a +Statement [167] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ) always clobbers reg byte a +Statement [171] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ) always clobbers reg byte a +Statement [172] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ) always clobbers reg byte a +Statement [173] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ) always clobbers reg byte y +Statement [174] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a +Statement [175] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y +Statement [176] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a +Statement [177] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [179] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ) always clobbers reg byte a +Statement [180] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a +Statement [181] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ) always clobbers reg byte a +Statement [182] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a +Statement [183] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a reg byte y +Statement [184] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a +Statement [185] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [186] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a +Statement [187] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [188] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ) always clobbers reg byte a +Statement [189] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ) always clobbers reg byte y +Statement [192] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [193] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a +Statement [195] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a +Statement [196] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a +Statement [199] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a +Statement [201] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [202] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [203] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a +Statement [205] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#11 ] ) always clobbers reg byte a +Statement [206] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#5 ] ) always clobbers reg byte a +Statement [210] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a +Statement [211] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a +Statement [215] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a +Statement [216] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a +Statement [218] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a +Statement [219] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a +Statement [220] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a +Statement [221] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] ) always clobbers reg byte a +Statement [222] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a +Statement [226] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [227] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [228] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] ) always clobbers reg byte a +Statement [229] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [230] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a +Statement [231] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a +Statement [233] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a +Statement [234] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:7::init_angle_screen:10::atan2_16:178 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a +Statement [236] (byte*) malloc::mem#0 ← (byte*) heap_head#5 - (word) $3e8 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] ) always clobbers reg byte a +Statement [237] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( malloc:2 [ malloc::mem#0 heap_head#1 ] malloc:4 [ malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a +Statement [242] *((const byte*) RASTER) ← (const byte) RASTER_IRQ_TOP [ ] ( [ ] ) always clobbers reg byte a +Statement [243] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_ALL)(void()) irqTop() [ ] ( [ ] ) always clobbers reg byte a +Statement [244] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER [ ] ( [ ] ) always clobbers reg byte a +Statement [245] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y +Statement [248] (byte~) processChars::$62 ← (byte) processChars::i#10 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::$62 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::$62 ] ) always clobbers reg byte a +Statement [249] (byte~) processChars::$63 ← (byte~) processChars::$62 + (byte) processChars::i#10 [ processChars::i#10 processChars::numActive#10 processChars::$63 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::$63 ] ) always clobbers reg byte a +Statement [250] (byte~) processChars::$64 ← (byte~) processChars::$63 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::$64 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::$64 ] ) always clobbers reg byte a +Statement [251] (byte~) processChars::$65 ← (byte~) processChars::$64 + (byte) processChars::i#10 [ processChars::i#10 processChars::numActive#10 processChars::$65 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::$65 ] ) always clobbers reg byte a +Statement [252] (byte~) processChars::$32 ← (byte~) processChars::$65 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::$32 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::$32 ] ) always clobbers reg byte a +Statement [253] (struct ProcessingSprite*) processChars::processing#0 ← (const struct ProcessingSprite*) PROCESSING + (byte~) processChars::$32 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 ] ) always clobbers reg byte a +Statement [254] (byte) processChars::bitmask#0 ← (byte) 1 << *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y +Statement [255] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)==(const byte) STATUS_FREE) goto processChars::@2 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y +Statement [256] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)!=(const byte) STATUS_NEW) goto processChars::@3 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y +Statement [257] *(*((byte**)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR)) ← (byte) ' ' [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte x reg byte y +Statement [258] *((const byte*) SPRITES_ENABLE) ← *((const byte*) SPRITES_ENABLE) | (byte) processChars::bitmask#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a +Statement [259] *((const byte*) SPRITES_COLS + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y +Statement [260] *((const byte*) SCREEN+(const word) SPRITE_PTRS + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y +Statement [261] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_PROCESSING [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y +Statement [262] (word) processChars::xpos#0 ← *((word*)(struct ProcessingSprite*) processChars::processing#0) >> (byte) 4 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ) always clobbers reg byte a reg byte y +Statement [263] (byte~) processChars::$9 ← > (word) processChars::xpos#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$9 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$9 ] ) always clobbers reg byte a +Statement [265] (byte~) processChars::$10 ← (byte) $ff ^ (byte) processChars::bitmask#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$10 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$10 ] ) always clobbers reg byte a +Statement [266] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) & (byte~) processChars::$10 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ) always clobbers reg byte a +Statement [267] (byte~) processChars::$15 ← (byte) processChars::i#10 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$15 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$15 ] ) always clobbers reg byte a +Statement [268] (byte~) processChars::$12 ← (byte)(word) processChars::xpos#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$15 processChars::$12 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$15 processChars::$12 ] ) always clobbers reg byte a +Statement [270] (word~) processChars::$13 ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) >> (byte) 4 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$15 processChars::$13 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$15 processChars::$13 ] ) always clobbers reg byte a reg byte y +Statement [271] (byte) processChars::ypos#0 ← (byte)(word~) processChars::$13 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$15 processChars::ypos#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$15 processChars::ypos#0 ] ) always clobbers reg byte a +Statement [272] *((const byte*) SPRITES_YPOS + (byte~) processChars::$15) ← (byte) processChars::ypos#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ) always clobbers reg byte a +Statement [273] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)<(const word) XPOS_LEFTMOST) goto processChars::@6 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ) always clobbers reg byte a reg byte y +Statement [274] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)>(const word) XPOS_RIGHTMOST) goto processChars::@6 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ) always clobbers reg byte a reg byte y +Statement [275] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)<(const word) YPOS_TOPMOST) goto processChars::@6 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ) always clobbers reg byte a reg byte y +Statement [276] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)>(const word) YPOS_BOTTOMMOST) goto processChars::@6 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ) always clobbers reg byte a reg byte y +Statement [277] (word~) processChars::$23 ← (word) processChars::xpos#0 >> (byte) 3 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$23 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$23 ] ) always clobbers reg byte a +Statement [278] (byte~) processChars::$24 ← (byte)(word~) processChars::$23 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$24 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$24 ] ) always clobbers reg byte a +Statement [280] (byte~) processChars::$33 ← (byte) processChars::xchar#0 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$33 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$33 ] ) always clobbers reg byte a +Statement [281] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) + *((const word*) VXSIN + (byte~) processChars::$33) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 ] ) always clobbers reg byte a reg byte y +Statement [282] *((word*)(struct ProcessingSprite*) processChars::processing#0) ← *((word*)(struct ProcessingSprite*) processChars::processing#0) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 ] ) always clobbers reg byte a reg byte y +Statement [283] (byte~) processChars::$27 ← (byte) processChars::ypos#0 >> (byte) 3 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::$27 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::$27 ] ) always clobbers reg byte a +Statement [285] (byte~) processChars::$34 ← (byte) processChars::ychar#0 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::$34 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::$34 ] ) always clobbers reg byte a +Statement [286] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) + *((const word*) VYSIN + (byte~) processChars::$34) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 ] ) always clobbers reg byte a reg byte y +Statement [287] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) [ processChars::i#10 processChars::numActive#10 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 ] ) always clobbers reg byte a reg byte y +Statement [291] if((byte) processChars::i#1!=(const byte) NUM_PROCESSING-(byte) 1+(byte) 1) goto processChars::@1 [ processChars::i#1 processChars::numActive#3 ] ( processChars:241 [ processChars::i#1 processChars::numActive#3 ] ) always clobbers reg byte a +Statement [293] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_FREE [ processChars::i#10 processChars::numActive#10 processChars::bitmask#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y +Statement [294] (byte~) processChars::$29 ← (byte) $ff ^ (byte) processChars::bitmask#0 [ processChars::i#10 processChars::numActive#10 processChars::$29 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::$29 ] ) always clobbers reg byte a +Statement [295] *((const byte*) SPRITES_ENABLE) ← *((const byte*) SPRITES_ENABLE) & (byte~) processChars::$29 [ processChars::i#10 processChars::numActive#10 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 ] ) always clobbers reg byte a +Statement [296] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) | (byte) processChars::bitmask#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ) always clobbers reg byte a +Statement [298] *((const byte*) RASTER) ← (const byte) RASTER_IRQ_MIDDLE [ ] ( [ ] ) always clobbers reg byte a +Statement [299] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_ALL)(void()) irqBottom() [ ] ( [ ] ) always clobbers reg byte a +Statement [300] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER [ ] ( [ ] ) always clobbers reg byte a +Statement [301] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y Potential registers zp[2]:2 [ main::src#2 main::src#1 ] : zp[2]:2 , Potential registers zp[2]:4 [ main::dst#2 main::dst#0 main::dst#1 ] : zp[2]:4 , -Potential registers zp[1]:6 [ main::i#2 main::i#1 ] : zp[1]:6 , reg byte x , reg byte y , +Potential registers zp[1]:6 [ main::i#2 main::i#1 ] : zp[1]:6 , Potential registers zp[1]:7 [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ] : zp[1]:7 , reg byte x , reg byte y , Potential registers zp[1]:8 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ] : zp[1]:8 , reg byte x , Potential registers zp[2]:9 [ startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 ] : zp[2]:9 , @@ -7414,11 +7299,11 @@ Potential registers zp[1]:51 [ processChars::numActive#10 processChars::numActiv Potential registers zp[2]:52 [ SCREEN_COPY#0 ] : zp[2]:52 , Potential registers zp[2]:54 [ SCREEN_DIST#0 ] : zp[2]:54 , Potential registers zp[2]:56 [ init_angle_screen::screen#0 ] : zp[2]:56 , -Potential registers zp[1]:58 [ main::$20 ] : zp[1]:58 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:59 [ main::$21 ] : zp[1]:59 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:60 [ main::$22 ] : zp[1]:60 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:61 [ main::$23 ] : zp[1]:61 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:62 [ main::$10 ] : zp[1]:62 , reg byte x , reg byte y , +Potential registers zp[1]:58 [ main::$11 ] : zp[1]:58 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:59 [ main::$12 ] : zp[1]:59 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:60 [ main::$13 ] : zp[1]:60 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:61 [ main::$14 ] : zp[1]:61 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:62 [ main::$10 ] : zp[1]:62 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:63 [ getCharToProcess::return_x#0 ] : zp[1]:63 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:64 [ getCharToProcess::return_y#0 ] : zp[1]:64 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:65 [ getCharToProcess::return_dist#0 ] : zp[1]:65 , reg byte a , reg byte x , reg byte y , @@ -7512,7 +7397,7 @@ Uplift Scope [getCharToProcess] 4,983.53: zp[1]:23 [ getCharToProcess::return_di Uplift Scope [startProcessing] 2,589.5: zp[1]:8 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ] 2,002: zp[1]:71 [ startProcessing::$39 ] 2,002: zp[1]:72 [ startProcessing::$40 ] 2,002: zp[1]:73 [ startProcessing::$41 ] 2,002: zp[1]:74 [ startProcessing::$42 ] 2,002: zp[1]:75 [ startProcessing::$27 ] 222.2: zp[1]:7 [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ] 203.57: zp[2]:11 [ startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 ] 202: zp[1]:13 [ startProcessing::i1#2 startProcessing::i1#1 ] 170.33: zp[2]:9 [ startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 ] 4: zp[2]:78 [ startProcessing::$44 ] 4: zp[2]:80 [ startProcessing::$45 ] 4: zp[2]:82 [ startProcessing::$1 ] 4: zp[2]:86 [ startProcessing::colPtr#0 ] 4: zp[2]:91 [ startProcessing::$5 ] 4: zp[2]:93 [ startProcessing::$6 ] 4: zp[2]:96 [ startProcessing::$8 ] 4: zp[2]:98 [ startProcessing::$9 ] 4: zp[2]:100 [ startProcessing::$11 ] 4: zp[2]:102 [ startProcessing::$12 ] 4: zp[2]:104 [ startProcessing::$13 ] 4: zp[2]:108 [ startProcessing::$15 ] 4: zp[2]:110 [ startProcessing::$16 ] 4: zp[2]:112 [ startProcessing::$17 ] 4: zp[1]:120 [ startProcessing::$47 ] 4: zp[1]:121 [ startProcessing::$48 ] 4: zp[1]:122 [ startProcessing::$49 ] 4: zp[1]:123 [ startProcessing::$50 ] 3: zp[2]:76 [ startProcessing::$0 ] 2.22: zp[1]:124 [ startProcessing::$28 ] 2: zp[2]:84 [ startProcessing::offset#0 ] 2: zp[1]:95 [ startProcessing::ch#0 ] 2: zp[1]:117 [ startProcessing::$20 ] 0.5: zp[2]:118 [ startProcessing::$21 ] 0.4: zp[2]:114 [ startProcessing::spriteY#0 ] 0.31: zp[1]:69 [ startProcessing::center_x#0 ] 0.31: zp[2]:106 [ startProcessing::spriteX#0 ] 0.31: zp[1]:116 [ startProcessing::spritePtr#0 ] 0.24: zp[1]:70 [ startProcessing::center_y#0 ] 0.14: zp[2]:89 [ startProcessing::screenPtr#0 ] 0.1: zp[1]:88 [ startProcessing::spriteCol#0 ] Uplift Scope [init_angle_screen] 220.36: zp[1]:33 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] 202: zp[1]:135 [ init_angle_screen::$3 ] 202: zp[1]:136 [ init_angle_screen::$4 ] 202: zp[1]:139 [ init_angle_screen::$7 ] 202: zp[2]:148 [ init_angle_screen::angle_w#0 ] 202: zp[2]:150 [ init_angle_screen::$11 ] 202: zp[1]:153 [ init_angle_screen::$13 ] 202: zp[1]:154 [ init_angle_screen::$14 ] 202: zp[1]:155 [ init_angle_screen::$15 ] 129.86: zp[1]:32 [ init_angle_screen::x#2 init_angle_screen::x#1 ] 84.17: zp[1]:152 [ init_angle_screen::ang_w#0 ] 50.5: zp[2]:140 [ init_angle_screen::yw#0 ] 33.67: zp[2]:137 [ init_angle_screen::xw#0 ] 21.23: zp[1]:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ] 20.37: zp[2]:30 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] 16.92: zp[2]:28 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] 3: zp[2]:56 [ init_angle_screen::screen#0 ] Uplift Scope [processChars] 33.73: zp[1]:51 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ] 22: zp[1]:160 [ processChars::$62 ] 22: zp[1]:161 [ processChars::$63 ] 22: zp[1]:162 [ processChars::$64 ] 22: zp[1]:163 [ processChars::$65 ] 22: zp[1]:164 [ processChars::$32 ] 22: zp[1]:170 [ processChars::$9 ] 22: zp[1]:171 [ processChars::$10 ] 22: zp[1]:173 [ processChars::$12 ] 22: zp[1]:179 [ processChars::$24 ] 22: zp[1]:180 [ processChars::xchar#0 ] 22: zp[1]:181 [ processChars::$33 ] 22: zp[1]:182 [ processChars::$27 ] 22: zp[1]:183 [ processChars::ychar#0 ] 22: zp[1]:184 [ processChars::$34 ] 22: zp[1]:185 [ processChars::$29 ] 17.9: zp[1]:50 [ processChars::i#10 processChars::i#1 ] 11: zp[2]:174 [ processChars::$13 ] 11: zp[2]:177 [ processChars::$23 ] 6.6: zp[1]:172 [ processChars::$15 ] 2.75: zp[1]:176 [ processChars::ypos#0 ] 2.2: zp[1]:167 [ processChars::bitmask#0 ] 2.06: zp[2]:168 [ processChars::xpos#0 ] 0.31: zp[2]:165 [ processChars::processing#0 ] -Uplift Scope [main] 34.75: zp[2]:4 [ main::dst#2 main::dst#0 main::dst#1 ] 25.67: zp[2]:2 [ main::src#2 main::src#1 ] 22: zp[1]:58 [ main::$20 ] 22: zp[1]:59 [ main::$21 ] 22: zp[1]:60 [ main::$22 ] 22: zp[1]:61 [ main::$23 ] 22: zp[1]:68 [ main::center_dist#0 ] 20.17: zp[1]:6 [ main::i#2 main::i#1 ] 12.22: zp[1]:62 [ main::$10 ] 5.5: zp[1]:66 [ main::center_x#0 ] 5.5: zp[1]:67 [ main::center_y#0 ] +Uplift Scope [main] 34.75: zp[2]:4 [ main::dst#2 main::dst#0 main::dst#1 ] 25.67: zp[2]:2 [ main::src#2 main::src#1 ] 24.36: zp[1]:6 [ main::i#2 main::i#1 ] 22: zp[1]:58 [ main::$11 ] 22: zp[1]:59 [ main::$12 ] 22: zp[1]:60 [ main::$13 ] 22: zp[1]:61 [ main::$14 ] 22: zp[1]:62 [ main::$10 ] 22: zp[1]:68 [ main::center_dist#0 ] 5.5: zp[1]:66 [ main::center_x#0 ] 5.5: zp[1]:67 [ main::center_y#0 ] Uplift Scope [initSprites] 36.67: zp[2]:24 [ initSprites::sp#2 initSprites::sp#1 ] 33: zp[1]:26 [ initSprites::i#2 initSprites::i#1 ] Uplift Scope [] 5: zp[2]:48 [ heap_head#5 heap_head#1 ] 0.03: zp[2]:54 [ SCREEN_DIST#0 ] 0.03: zp[2]:52 [ SCREEN_COPY#0 ] Uplift Scope [malloc] 0.8: zp[2]:158 [ malloc::mem#0 ] @@ -7524,142 +7409,142 @@ Uplift Scope [setupRasterIrq] Uplift Scope [irqTop] Uplift Scope [irqBottom] -Uplifting [atan2_16] best 1280132 combination reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp[2]:44 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp[2]:46 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp[2]:39 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] zp[2]:34 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] zp[2]:36 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] reg byte a [ atan2_16::$23 ] reg byte a [ atan2_16::$22 ] reg byte x [ atan2_16::i#2 atan2_16::i#1 ] zp[2]:146 [ atan2_16::return#2 ] zp[2]:41 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] zp[2]:142 [ atan2_16::x#0 ] zp[2]:144 [ atan2_16::y#0 ] +Uplifting [atan2_16] best 1279112 combination reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp[2]:44 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp[2]:46 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp[2]:39 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] zp[2]:34 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] zp[2]:36 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] reg byte a [ atan2_16::$23 ] reg byte a [ atan2_16::$22 ] reg byte x [ atan2_16::i#2 atan2_16::i#1 ] zp[2]:146 [ atan2_16::return#2 ] zp[2]:41 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] zp[2]:142 [ atan2_16::x#0 ] zp[2]:144 [ atan2_16::y#0 ] Limited combination testing to 100 combinations of 144 possible. -Uplifting [getCharToProcess] best 1266799 combination reg byte x [ getCharToProcess::return_dist#1 getCharToProcess::return_dist#5 getCharToProcess::return_dist#6 getCharToProcess::dist#0 ] zp[1]:20 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] zp[1]:22 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] zp[1]:21 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] zp[1]:19 [ getCharToProcess::x#2 getCharToProcess::x#1 ] zp[1]:18 [ getCharToProcess::y#7 getCharToProcess::y#1 ] zp[2]:16 [ getCharToProcess::dist_line#6 getCharToProcess::dist_line#0 getCharToProcess::dist_line#1 ] zp[2]:14 [ getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 ] zp[1]:63 [ getCharToProcess::return_x#0 ] zp[1]:64 [ getCharToProcess::return_y#0 ] zp[1]:65 [ getCharToProcess::return_dist#0 ] zp[2]:127 [ getCharToProcess::$12 ] zp[2]:129 [ getCharToProcess::$13 ] zp[2]:131 [ getCharToProcess::$9 ] zp[2]:133 [ getCharToProcess::$10 ] zp[2]:125 [ getCharToProcess::$8 ] +Uplifting [getCharToProcess] best 1265779 combination reg byte x [ getCharToProcess::return_dist#1 getCharToProcess::return_dist#5 getCharToProcess::return_dist#6 getCharToProcess::dist#0 ] zp[1]:20 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] zp[1]:22 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] zp[1]:21 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] zp[1]:19 [ getCharToProcess::x#2 getCharToProcess::x#1 ] zp[1]:18 [ getCharToProcess::y#7 getCharToProcess::y#1 ] zp[2]:16 [ getCharToProcess::dist_line#6 getCharToProcess::dist_line#0 getCharToProcess::dist_line#1 ] zp[2]:14 [ getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 ] zp[1]:63 [ getCharToProcess::return_x#0 ] zp[1]:64 [ getCharToProcess::return_y#0 ] zp[1]:65 [ getCharToProcess::return_dist#0 ] zp[2]:127 [ getCharToProcess::$12 ] zp[2]:129 [ getCharToProcess::$13 ] zp[2]:131 [ getCharToProcess::$9 ] zp[2]:133 [ getCharToProcess::$10 ] zp[2]:125 [ getCharToProcess::$8 ] Limited combination testing to 100 combinations of 46656 possible. -Uplifting [init_angle_screen] best 1265199 combination zp[1]:33 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] reg byte a [ init_angle_screen::$3 ] reg byte a [ init_angle_screen::$4 ] reg byte a [ init_angle_screen::$7 ] zp[2]:148 [ init_angle_screen::angle_w#0 ] zp[2]:150 [ init_angle_screen::$11 ] zp[1]:153 [ init_angle_screen::$13 ] zp[1]:154 [ init_angle_screen::$14 ] zp[1]:155 [ init_angle_screen::$15 ] zp[1]:32 [ init_angle_screen::x#2 init_angle_screen::x#1 ] zp[1]:152 [ init_angle_screen::ang_w#0 ] zp[2]:140 [ init_angle_screen::yw#0 ] zp[2]:137 [ init_angle_screen::xw#0 ] zp[1]:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ] zp[2]:30 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] zp[2]:28 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] zp[2]:56 [ init_angle_screen::screen#0 ] +Uplifting [init_angle_screen] best 1264179 combination zp[1]:33 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] reg byte a [ init_angle_screen::$3 ] reg byte a [ init_angle_screen::$4 ] reg byte a [ init_angle_screen::$7 ] zp[2]:148 [ init_angle_screen::angle_w#0 ] zp[2]:150 [ init_angle_screen::$11 ] zp[1]:153 [ init_angle_screen::$13 ] zp[1]:154 [ init_angle_screen::$14 ] zp[1]:155 [ init_angle_screen::$15 ] zp[1]:32 [ init_angle_screen::x#2 init_angle_screen::x#1 ] zp[1]:152 [ init_angle_screen::ang_w#0 ] zp[2]:140 [ init_angle_screen::yw#0 ] zp[2]:137 [ init_angle_screen::xw#0 ] zp[1]:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ] zp[2]:30 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] zp[2]:28 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] zp[2]:56 [ init_angle_screen::screen#0 ] Limited combination testing to 100 combinations of 65536 possible. -Uplifting [main] best 1264959 combination zp[2]:4 [ main::dst#2 main::dst#0 main::dst#1 ] zp[2]:2 [ main::src#2 main::src#1 ] reg byte a [ main::$20 ] reg byte a [ main::$21 ] reg byte a [ main::$22 ] reg byte a [ main::$23 ] zp[1]:68 [ main::center_dist#0 ] zp[1]:6 [ main::i#2 main::i#1 ] zp[1]:62 [ main::$10 ] zp[1]:66 [ main::center_x#0 ] zp[1]:67 [ main::center_y#0 ] -Limited combination testing to 100 combinations of 147456 possible. -Uplifting [initSprites] best 1264839 combination zp[2]:24 [ initSprites::sp#2 initSprites::sp#1 ] reg byte x [ initSprites::i#2 initSprites::i#1 ] -Uplifting [] best 1264839 combination zp[2]:48 [ heap_head#5 heap_head#1 ] zp[2]:54 [ SCREEN_DIST#0 ] zp[2]:52 [ SCREEN_COPY#0 ] -Uplifting [malloc] best 1264839 combination zp[2]:158 [ malloc::mem#0 ] -Uplifting [RADIX] best 1264839 combination -Uplifting [ProcessingChar] best 1264839 combination -Uplifting [ProcessingSprite] best 1264839 combination -Uplifting [ProcessingSprite::$0] best 1264839 combination -Uplifting [setupRasterIrq] best 1264839 combination -Uplifting [irqTop] best 1264839 combination -Uplifting [irqBottom] best 1264839 combination +Uplifting [main] best 1263939 combination zp[2]:4 [ main::dst#2 main::dst#0 main::dst#1 ] zp[2]:2 [ main::src#2 main::src#1 ] zp[1]:6 [ main::i#2 main::i#1 ] reg byte a [ main::$11 ] reg byte a [ main::$12 ] reg byte a [ main::$13 ] reg byte a [ main::$14 ] zp[1]:62 [ main::$10 ] zp[1]:68 [ main::center_dist#0 ] zp[1]:66 [ main::center_x#0 ] zp[1]:67 [ main::center_y#0 ] +Limited combination testing to 100 combinations of 65536 possible. +Uplifting [initSprites] best 1263819 combination zp[2]:24 [ initSprites::sp#2 initSprites::sp#1 ] reg byte x [ initSprites::i#2 initSprites::i#1 ] +Uplifting [] best 1263819 combination zp[2]:48 [ heap_head#5 heap_head#1 ] zp[2]:54 [ SCREEN_DIST#0 ] zp[2]:52 [ SCREEN_COPY#0 ] +Uplifting [malloc] best 1263819 combination zp[2]:158 [ malloc::mem#0 ] +Uplifting [RADIX] best 1263819 combination +Uplifting [ProcessingChar] best 1263819 combination +Uplifting [ProcessingSprite] best 1263819 combination +Uplifting [ProcessingSprite::$0] best 1263819 combination +Uplifting [setupRasterIrq] best 1263819 combination +Uplifting [irqTop] best 1263819 combination +Uplifting [irqBottom] best 1263819 combination Attempting to uplift remaining variables inzp[1]:20 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] -Uplifting [getCharToProcess] best 1264839 combination zp[1]:20 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] +Uplifting [getCharToProcess] best 1263819 combination zp[1]:20 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] Attempting to uplift remaining variables inzp[1]:22 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] -Uplifting [getCharToProcess] best 1264839 combination zp[1]:22 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] +Uplifting [getCharToProcess] best 1263819 combination zp[1]:22 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] Attempting to uplift remaining variables inzp[1]:8 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ] -Uplifting [startProcessing] best 1264839 combination zp[1]:8 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ] +Uplifting [startProcessing] best 1263819 combination zp[1]:8 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ] Attempting to uplift remaining variables inzp[1]:71 [ startProcessing::$39 ] -Uplifting [startProcessing] best 1258839 combination reg byte a [ startProcessing::$39 ] +Uplifting [startProcessing] best 1257819 combination reg byte a [ startProcessing::$39 ] Attempting to uplift remaining variables inzp[1]:72 [ startProcessing::$40 ] -Uplifting [startProcessing] best 1252839 combination reg byte a [ startProcessing::$40 ] +Uplifting [startProcessing] best 1251819 combination reg byte a [ startProcessing::$40 ] Attempting to uplift remaining variables inzp[1]:73 [ startProcessing::$41 ] -Uplifting [startProcessing] best 1246839 combination reg byte a [ startProcessing::$41 ] +Uplifting [startProcessing] best 1245819 combination reg byte a [ startProcessing::$41 ] Attempting to uplift remaining variables inzp[1]:74 [ startProcessing::$42 ] -Uplifting [startProcessing] best 1240839 combination reg byte a [ startProcessing::$42 ] +Uplifting [startProcessing] best 1239819 combination reg byte a [ startProcessing::$42 ] Attempting to uplift remaining variables inzp[1]:75 [ startProcessing::$27 ] -Uplifting [startProcessing] best 1236839 combination reg byte a [ startProcessing::$27 ] +Uplifting [startProcessing] best 1235819 combination reg byte a [ startProcessing::$27 ] Attempting to uplift remaining variables inzp[1]:21 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] -Uplifting [getCharToProcess] best 1236839 combination zp[1]:21 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] +Uplifting [getCharToProcess] best 1235819 combination zp[1]:21 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] Attempting to uplift remaining variables inzp[1]:19 [ getCharToProcess::x#2 getCharToProcess::x#1 ] -Uplifting [getCharToProcess] best 1218839 combination reg byte y [ getCharToProcess::x#2 getCharToProcess::x#1 ] +Uplifting [getCharToProcess] best 1217819 combination reg byte y [ getCharToProcess::x#2 getCharToProcess::x#1 ] Attempting to uplift remaining variables inzp[1]:7 [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ] -Uplifting [startProcessing] best 1217939 combination reg byte x [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ] +Uplifting [startProcessing] best 1216919 combination reg byte x [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ] Attempting to uplift remaining variables inzp[1]:33 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] -Uplifting [init_angle_screen] best 1217939 combination zp[1]:33 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] +Uplifting [init_angle_screen] best 1216919 combination zp[1]:33 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] Attempting to uplift remaining variables inzp[1]:13 [ startProcessing::i1#2 startProcessing::i1#1 ] -Uplifting [startProcessing] best 1217039 combination reg byte x [ startProcessing::i1#2 startProcessing::i1#1 ] +Uplifting [startProcessing] best 1216019 combination reg byte x [ startProcessing::i1#2 startProcessing::i1#1 ] Attempting to uplift remaining variables inzp[1]:153 [ init_angle_screen::$13 ] -Uplifting [init_angle_screen] best 1216439 combination reg byte a [ init_angle_screen::$13 ] +Uplifting [init_angle_screen] best 1215419 combination reg byte a [ init_angle_screen::$13 ] Attempting to uplift remaining variables inzp[1]:154 [ init_angle_screen::$14 ] -Uplifting [init_angle_screen] best 1216039 combination reg byte a [ init_angle_screen::$14 ] +Uplifting [init_angle_screen] best 1215019 combination reg byte a [ init_angle_screen::$14 ] Attempting to uplift remaining variables inzp[1]:155 [ init_angle_screen::$15 ] -Uplifting [init_angle_screen] best 1215439 combination reg byte a [ init_angle_screen::$15 ] +Uplifting [init_angle_screen] best 1214419 combination reg byte a [ init_angle_screen::$15 ] Attempting to uplift remaining variables inzp[1]:18 [ getCharToProcess::y#7 getCharToProcess::y#1 ] -Uplifting [getCharToProcess] best 1215439 combination zp[1]:18 [ getCharToProcess::y#7 getCharToProcess::y#1 ] +Uplifting [getCharToProcess] best 1214419 combination zp[1]:18 [ getCharToProcess::y#7 getCharToProcess::y#1 ] Attempting to uplift remaining variables inzp[1]:32 [ init_angle_screen::x#2 init_angle_screen::x#1 ] -Uplifting [init_angle_screen] best 1215439 combination zp[1]:32 [ init_angle_screen::x#2 init_angle_screen::x#1 ] +Uplifting [init_angle_screen] best 1214419 combination zp[1]:32 [ init_angle_screen::x#2 init_angle_screen::x#1 ] Attempting to uplift remaining variables inzp[1]:152 [ init_angle_screen::ang_w#0 ] -Uplifting [init_angle_screen] best 1215439 combination zp[1]:152 [ init_angle_screen::ang_w#0 ] +Uplifting [init_angle_screen] best 1214419 combination zp[1]:152 [ init_angle_screen::ang_w#0 ] Attempting to uplift remaining variables inzp[1]:51 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ] -Uplifting [processChars] best 1215439 combination zp[1]:51 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ] -Attempting to uplift remaining variables inzp[1]:68 [ main::center_dist#0 ] -Uplifting [main] best 1215379 combination reg byte a [ main::center_dist#0 ] -Attempting to uplift remaining variables inzp[1]:160 [ processChars::$62 ] -Uplifting [processChars] best 1215319 combination reg byte a [ processChars::$62 ] -Attempting to uplift remaining variables inzp[1]:161 [ processChars::$63 ] -Uplifting [processChars] best 1215259 combination reg byte a [ processChars::$63 ] -Attempting to uplift remaining variables inzp[1]:162 [ processChars::$64 ] -Uplifting [processChars] best 1215199 combination reg byte a [ processChars::$64 ] -Attempting to uplift remaining variables inzp[1]:163 [ processChars::$65 ] -Uplifting [processChars] best 1215139 combination reg byte a [ processChars::$65 ] -Attempting to uplift remaining variables inzp[1]:164 [ processChars::$32 ] -Uplifting [processChars] best 1215079 combination reg byte a [ processChars::$32 ] -Attempting to uplift remaining variables inzp[1]:170 [ processChars::$9 ] -Uplifting [processChars] best 1215019 combination reg byte a [ processChars::$9 ] -Attempting to uplift remaining variables inzp[1]:171 [ processChars::$10 ] -Uplifting [processChars] best 1214959 combination reg byte a [ processChars::$10 ] -Attempting to uplift remaining variables inzp[1]:173 [ processChars::$12 ] -Uplifting [processChars] best 1214899 combination reg byte a [ processChars::$12 ] -Attempting to uplift remaining variables inzp[1]:179 [ processChars::$24 ] -Uplifting [processChars] best 1214859 combination reg byte a [ processChars::$24 ] -Attempting to uplift remaining variables inzp[1]:180 [ processChars::xchar#0 ] -Uplifting [processChars] best 1214799 combination reg byte a [ processChars::xchar#0 ] -Attempting to uplift remaining variables inzp[1]:181 [ processChars::$33 ] -Uplifting [processChars] best 1214759 combination reg byte a [ processChars::$33 ] -Attempting to uplift remaining variables inzp[1]:182 [ processChars::$27 ] -Uplifting [processChars] best 1214719 combination reg byte a [ processChars::$27 ] -Attempting to uplift remaining variables inzp[1]:183 [ processChars::ychar#0 ] -Uplifting [processChars] best 1214659 combination reg byte a [ processChars::ychar#0 ] -Attempting to uplift remaining variables inzp[1]:184 [ processChars::$34 ] -Uplifting [processChars] best 1214619 combination reg byte a [ processChars::$34 ] -Attempting to uplift remaining variables inzp[1]:185 [ processChars::$29 ] -Uplifting [processChars] best 1214559 combination reg byte a [ processChars::$29 ] -Attempting to uplift remaining variables inzp[1]:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ] -Uplifting [init_angle_screen] best 1214559 combination zp[1]:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ] +Uplifting [processChars] best 1214419 combination zp[1]:51 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ] Attempting to uplift remaining variables inzp[1]:6 [ main::i#2 main::i#1 ] -Uplifting [main] best 1214519 combination reg byte x [ main::i#2 main::i#1 ] -Attempting to uplift remaining variables inzp[1]:50 [ processChars::i#10 processChars::i#1 ] -Uplifting [processChars] best 1214519 combination zp[1]:50 [ processChars::i#10 processChars::i#1 ] +Uplifting [main] best 1214419 combination zp[1]:6 [ main::i#2 main::i#1 ] Attempting to uplift remaining variables inzp[1]:62 [ main::$10 ] -Uplifting [main] best 1214239 combination reg byte y [ main::$10 ] +Uplifting [main] best 1214379 combination reg byte a [ main::$10 ] +Attempting to uplift remaining variables inzp[1]:68 [ main::center_dist#0 ] +Uplifting [main] best 1214319 combination reg byte a [ main::center_dist#0 ] +Attempting to uplift remaining variables inzp[1]:160 [ processChars::$62 ] +Uplifting [processChars] best 1214259 combination reg byte a [ processChars::$62 ] +Attempting to uplift remaining variables inzp[1]:161 [ processChars::$63 ] +Uplifting [processChars] best 1214199 combination reg byte a [ processChars::$63 ] +Attempting to uplift remaining variables inzp[1]:162 [ processChars::$64 ] +Uplifting [processChars] best 1214139 combination reg byte a [ processChars::$64 ] +Attempting to uplift remaining variables inzp[1]:163 [ processChars::$65 ] +Uplifting [processChars] best 1214079 combination reg byte a [ processChars::$65 ] +Attempting to uplift remaining variables inzp[1]:164 [ processChars::$32 ] +Uplifting [processChars] best 1214019 combination reg byte a [ processChars::$32 ] +Attempting to uplift remaining variables inzp[1]:170 [ processChars::$9 ] +Uplifting [processChars] best 1213959 combination reg byte a [ processChars::$9 ] +Attempting to uplift remaining variables inzp[1]:171 [ processChars::$10 ] +Uplifting [processChars] best 1213899 combination reg byte a [ processChars::$10 ] +Attempting to uplift remaining variables inzp[1]:173 [ processChars::$12 ] +Uplifting [processChars] best 1213839 combination reg byte a [ processChars::$12 ] +Attempting to uplift remaining variables inzp[1]:179 [ processChars::$24 ] +Uplifting [processChars] best 1213799 combination reg byte a [ processChars::$24 ] +Attempting to uplift remaining variables inzp[1]:180 [ processChars::xchar#0 ] +Uplifting [processChars] best 1213739 combination reg byte a [ processChars::xchar#0 ] +Attempting to uplift remaining variables inzp[1]:181 [ processChars::$33 ] +Uplifting [processChars] best 1213699 combination reg byte a [ processChars::$33 ] +Attempting to uplift remaining variables inzp[1]:182 [ processChars::$27 ] +Uplifting [processChars] best 1213659 combination reg byte a [ processChars::$27 ] +Attempting to uplift remaining variables inzp[1]:183 [ processChars::ychar#0 ] +Uplifting [processChars] best 1213599 combination reg byte a [ processChars::ychar#0 ] +Attempting to uplift remaining variables inzp[1]:184 [ processChars::$34 ] +Uplifting [processChars] best 1213559 combination reg byte a [ processChars::$34 ] +Attempting to uplift remaining variables inzp[1]:185 [ processChars::$29 ] +Uplifting [processChars] best 1213499 combination reg byte a [ processChars::$29 ] +Attempting to uplift remaining variables inzp[1]:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ] +Uplifting [init_angle_screen] best 1213499 combination zp[1]:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ] +Attempting to uplift remaining variables inzp[1]:50 [ processChars::i#10 processChars::i#1 ] +Uplifting [processChars] best 1213499 combination zp[1]:50 [ processChars::i#10 processChars::i#1 ] Attempting to uplift remaining variables inzp[1]:63 [ getCharToProcess::return_x#0 ] -Uplifting [getCharToProcess] best 1214179 combination reg byte y [ getCharToProcess::return_x#0 ] +Uplifting [getCharToProcess] best 1213439 combination reg byte y [ getCharToProcess::return_x#0 ] Attempting to uplift remaining variables inzp[1]:64 [ getCharToProcess::return_y#0 ] -Uplifting [getCharToProcess] best 1214119 combination reg byte a [ getCharToProcess::return_y#0 ] +Uplifting [getCharToProcess] best 1213379 combination reg byte a [ getCharToProcess::return_y#0 ] Attempting to uplift remaining variables inzp[1]:65 [ getCharToProcess::return_dist#0 ] -Uplifting [getCharToProcess] best 1214079 combination reg byte x [ getCharToProcess::return_dist#0 ] +Uplifting [getCharToProcess] best 1213339 combination reg byte x [ getCharToProcess::return_dist#0 ] Attempting to uplift remaining variables inzp[1]:172 [ processChars::$15 ] -Uplifting [processChars] best 1214009 combination reg byte x [ processChars::$15 ] +Uplifting [processChars] best 1213269 combination reg byte x [ processChars::$15 ] Attempting to uplift remaining variables inzp[1]:66 [ main::center_x#0 ] -Uplifting [main] best 1213949 combination reg byte y [ main::center_x#0 ] +Uplifting [main] best 1213209 combination reg byte y [ main::center_x#0 ] Attempting to uplift remaining variables inzp[1]:67 [ main::center_y#0 ] -Uplifting [main] best 1213949 combination zp[1]:67 [ main::center_y#0 ] +Uplifting [main] best 1213209 combination zp[1]:67 [ main::center_y#0 ] Attempting to uplift remaining variables inzp[1]:120 [ startProcessing::$47 ] -Uplifting [startProcessing] best 1213943 combination reg byte a [ startProcessing::$47 ] +Uplifting [startProcessing] best 1213203 combination reg byte a [ startProcessing::$47 ] Attempting to uplift remaining variables inzp[1]:121 [ startProcessing::$48 ] -Uplifting [startProcessing] best 1213937 combination reg byte a [ startProcessing::$48 ] +Uplifting [startProcessing] best 1213197 combination reg byte a [ startProcessing::$48 ] Attempting to uplift remaining variables inzp[1]:122 [ startProcessing::$49 ] -Uplifting [startProcessing] best 1213931 combination reg byte a [ startProcessing::$49 ] +Uplifting [startProcessing] best 1213191 combination reg byte a [ startProcessing::$49 ] Attempting to uplift remaining variables inzp[1]:123 [ startProcessing::$50 ] -Uplifting [startProcessing] best 1213925 combination reg byte a [ startProcessing::$50 ] +Uplifting [startProcessing] best 1213185 combination reg byte a [ startProcessing::$50 ] Attempting to uplift remaining variables inzp[1]:176 [ processChars::ypos#0 ] -Uplifting [processChars] best 1213925 combination zp[1]:176 [ processChars::ypos#0 ] +Uplifting [processChars] best 1213185 combination zp[1]:176 [ processChars::ypos#0 ] Attempting to uplift remaining variables inzp[1]:124 [ startProcessing::$28 ] -Uplifting [startProcessing] best 1213897 combination reg byte x [ startProcessing::$28 ] +Uplifting [startProcessing] best 1213157 combination reg byte x [ startProcessing::$28 ] Attempting to uplift remaining variables inzp[1]:167 [ processChars::bitmask#0 ] -Uplifting [processChars] best 1213897 combination zp[1]:167 [ processChars::bitmask#0 ] +Uplifting [processChars] best 1213157 combination zp[1]:167 [ processChars::bitmask#0 ] Attempting to uplift remaining variables inzp[1]:95 [ startProcessing::ch#0 ] -Uplifting [startProcessing] best 1213891 combination reg byte a [ startProcessing::ch#0 ] +Uplifting [startProcessing] best 1213151 combination reg byte a [ startProcessing::ch#0 ] Attempting to uplift remaining variables inzp[1]:117 [ startProcessing::$20 ] -Uplifting [startProcessing] best 1213885 combination reg byte a [ startProcessing::$20 ] +Uplifting [startProcessing] best 1213145 combination reg byte a [ startProcessing::$20 ] Attempting to uplift remaining variables inzp[1]:69 [ startProcessing::center_x#0 ] -Uplifting [startProcessing] best 1213885 combination zp[1]:69 [ startProcessing::center_x#0 ] +Uplifting [startProcessing] best 1213145 combination zp[1]:69 [ startProcessing::center_x#0 ] Attempting to uplift remaining variables inzp[1]:116 [ startProcessing::spritePtr#0 ] -Uplifting [startProcessing] best 1213885 combination zp[1]:116 [ startProcessing::spritePtr#0 ] +Uplifting [startProcessing] best 1213145 combination zp[1]:116 [ startProcessing::spritePtr#0 ] Attempting to uplift remaining variables inzp[1]:70 [ startProcessing::center_y#0 ] -Uplifting [startProcessing] best 1213885 combination zp[1]:70 [ startProcessing::center_y#0 ] +Uplifting [startProcessing] best 1213145 combination zp[1]:70 [ startProcessing::center_y#0 ] Attempting to uplift remaining variables inzp[1]:88 [ startProcessing::spriteCol#0 ] -Uplifting [startProcessing] best 1213885 combination zp[1]:88 [ startProcessing::spriteCol#0 ] +Uplifting [startProcessing] best 1213145 combination zp[1]:88 [ startProcessing::spriteCol#0 ] Coalescing zero page register [ zp[2]:9 [ startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 ] ] with [ zp[2]:98 [ startProcessing::$9 ] ] - score: 1 Coalescing zero page register [ zp[2]:11 [ startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 ] ] with [ zp[2]:93 [ startProcessing::$6 ] ] - score: 1 Coalescing zero page register [ zp[2]:30 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] ] with [ zp[2]:56 [ init_angle_screen::screen#0 ] ] - score: 1 @@ -7687,15 +7572,16 @@ Coalescing zero page register [ zp[2]:108 [ startProcessing::$15 startProcessing Coalescing zero page register [ zp[2]:125 [ getCharToProcess::$8 getCharToProcess::$13 ] ] with [ zp[2]:131 [ getCharToProcess::$9 getCharToProcess::$10 ] ] - score: 1 Coalescing zero page register [ zp[2]:39 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 ] ] with [ zp[2]:150 [ init_angle_screen::$11 ] ] - score: 1 Coalescing zero page register [ zp[2]:76 [ startProcessing::$0 startProcessing::$45 startProcessing::$1 startProcessing::offset#0 ] ] with [ zp[2]:89 [ startProcessing::screenPtr#0 ] ] - score: 1 +Coalescing zero page register [ zp[1]:8 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ] ] with [ zp[1]:6 [ main::i#2 main::i#1 ] ] Coalescing zero page register [ zp[2]:9 [ startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 startProcessing::$9 startProcessing::$8 ] ] with [ zp[2]:2 [ main::src#2 main::src#1 ] ] Coalescing zero page register [ zp[2]:11 [ startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 startProcessing::$6 startProcessing::$5 ] ] with [ zp[2]:4 [ main::dst#2 main::dst#0 main::dst#1 ] ] -Coalescing zero page register [ zp[1]:18 [ getCharToProcess::y#7 getCharToProcess::y#1 ] ] with [ zp[1]:8 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ] ] Coalescing zero page register [ zp[2]:24 [ initSprites::sp#2 initSprites::sp#1 ] ] with [ zp[2]:14 [ getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 ] ] -Coalescing zero page register [ zp[1]:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ] ] with [ zp[1]:20 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] ] +Coalescing zero page register [ zp[1]:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ] ] with [ zp[1]:18 [ getCharToProcess::y#7 getCharToProcess::y#1 ] ] Coalescing zero page register [ zp[2]:28 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] ] with [ zp[2]:16 [ getCharToProcess::dist_line#6 getCharToProcess::dist_line#0 getCharToProcess::dist_line#1 ] ] -Coalescing zero page register [ zp[1]:32 [ init_angle_screen::x#2 init_angle_screen::x#1 ] ] with [ zp[1]:21 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] ] -Coalescing zero page register [ zp[1]:33 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] ] with [ zp[1]:22 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] ] +Coalescing zero page register [ zp[1]:32 [ init_angle_screen::x#2 init_angle_screen::x#1 ] ] with [ zp[1]:20 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] ] +Coalescing zero page register [ zp[1]:33 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] ] with [ zp[1]:21 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] ] Coalescing zero page register [ zp[2]:48 [ heap_head#5 heap_head#1 ] ] with [ zp[2]:30 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 ] ] +Coalescing zero page register [ zp[1]:67 [ main::center_y#0 startProcessing::center_y#0 ] ] with [ zp[1]:22 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] ] Coalescing zero page register [ zp[2]:76 [ startProcessing::$0 startProcessing::$45 startProcessing::$1 startProcessing::offset#0 startProcessing::screenPtr#0 ] ] with [ zp[2]:34 [ 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 ] ] Coalescing zero page register [ zp[2]:78 [ startProcessing::$44 ] ] with [ zp[2]:36 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] ] Coalescing zero page register [ zp[2]:86 [ startProcessing::colPtr#0 ] ] with [ zp[2]:39 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$11 ] ] @@ -7703,32 +7589,32 @@ Coalescing zero page register [ zp[2]:100 [ startProcessing::$11 startProcessing Coalescing zero page register [ zp[2]:108 [ startProcessing::$15 startProcessing::$16 startProcessing::$17 startProcessing::spriteY#0 ] ] with [ zp[2]:46 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] ] Coalescing zero page register [ zp[2]:125 [ getCharToProcess::$8 getCharToProcess::$13 getCharToProcess::$9 getCharToProcess::$10 ] ] with [ zp[2]:118 [ startProcessing::$21 ] ] Coalescing zero page register [ zp[2]:137 [ init_angle_screen::xw#0 atan2_16::x#0 ] ] with [ zp[2]:127 [ getCharToProcess::$12 ] ] -Coalescing zero page register [ zp[1]:152 [ init_angle_screen::ang_w#0 ] ] with [ zp[1]:67 [ main::center_y#0 startProcessing::center_y#0 ] ] +Coalescing zero page register [ zp[1]:152 [ init_angle_screen::ang_w#0 ] ] with [ zp[1]:69 [ startProcessing::center_x#0 ] ] Coalescing zero page register [ zp[2]:24 [ initSprites::sp#2 initSprites::sp#1 getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 ] ] with [ zp[2]:9 [ startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 startProcessing::$9 startProcessing::$8 main::src#2 main::src#1 ] ] +Coalescing zero page register [ zp[1]:27 [ init_angle_screen::y#5 init_angle_screen::y#1 getCharToProcess::y#7 getCharToProcess::y#1 ] ] with [ zp[1]:8 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 main::i#2 main::i#1 ] ] Coalescing zero page register [ zp[2]:28 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 getCharToProcess::dist_line#6 getCharToProcess::dist_line#0 getCharToProcess::dist_line#1 ] ] with [ zp[2]:11 [ startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 startProcessing::$6 startProcessing::$5 main::dst#2 main::dst#0 main::dst#1 ] ] -Coalescing zero page register [ zp[1]:69 [ startProcessing::center_x#0 ] ] with [ zp[1]:27 [ init_angle_screen::y#5 init_angle_screen::y#1 getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] ] -Coalescing zero page register [ zp[1]:88 [ startProcessing::spriteCol#0 ] ] with [ zp[1]:32 [ init_angle_screen::x#2 init_angle_screen::x#1 getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] ] -Coalescing zero page register [ zp[1]:116 [ startProcessing::spritePtr#0 ] ] with [ zp[1]:33 [ init_angle_screen::xb#2 init_angle_screen::xb#1 getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] ] +Coalescing zero page register [ zp[1]:88 [ startProcessing::spriteCol#0 ] ] with [ zp[1]:32 [ init_angle_screen::x#2 init_angle_screen::x#1 getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] ] +Coalescing zero page register [ zp[1]:116 [ startProcessing::spritePtr#0 ] ] with [ zp[1]:33 [ init_angle_screen::xb#2 init_angle_screen::xb#1 getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] ] Coalescing zero page register [ zp[2]:125 [ getCharToProcess::$8 getCharToProcess::$13 getCharToProcess::$9 getCharToProcess::$10 startProcessing::$21 ] ] with [ zp[2]:48 [ heap_head#5 heap_head#1 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 ] ] Coalescing zero page register [ zp[2]:140 [ init_angle_screen::yw#0 atan2_16::y#0 ] ] with [ zp[2]:24 [ initSprites::sp#2 initSprites::sp#1 getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 startProcessing::$9 startProcessing::$8 main::src#2 main::src#1 ] ] -Allocated (was zp[1]:18) zp[1]:2 [ getCharToProcess::y#7 getCharToProcess::y#1 startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ] +Allocated (was zp[1]:27) zp[1]:2 [ init_angle_screen::y#5 init_angle_screen::y#1 getCharToProcess::y#7 getCharToProcess::y#1 startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 main::i#2 main::i#1 ] Allocated (was zp[2]:28) zp[2]:3 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 getCharToProcess::dist_line#6 getCharToProcess::dist_line#0 getCharToProcess::dist_line#1 startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 startProcessing::$6 startProcessing::$5 main::dst#2 main::dst#0 main::dst#1 ] Allocated (was zp[1]:50) zp[1]:5 [ processChars::i#10 processChars::i#1 ] Allocated (was zp[1]:51) zp[1]:6 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ] Allocated (was zp[2]:52) zp[2]:7 [ SCREEN_COPY#0 ] Allocated (was zp[2]:54) zp[2]:9 [ SCREEN_DIST#0 malloc::mem#0 ] -Allocated (was zp[1]:69) zp[1]:11 [ startProcessing::center_x#0 init_angle_screen::y#5 init_angle_screen::y#1 getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] +Allocated (was zp[1]:67) zp[1]:11 [ main::center_y#0 startProcessing::center_y#0 getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] Allocated (was zp[2]:76) zp[2]:12 [ startProcessing::$0 startProcessing::$45 startProcessing::$1 startProcessing::offset#0 startProcessing::screenPtr#0 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 ] Allocated (was zp[2]:78) zp[2]:14 [ startProcessing::$44 atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] Allocated (was zp[2]:86) zp[2]:16 [ startProcessing::colPtr#0 atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$11 ] -Allocated (was zp[1]:88) zp[1]:18 [ startProcessing::spriteCol#0 init_angle_screen::x#2 init_angle_screen::x#1 getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] +Allocated (was zp[1]:88) zp[1]:18 [ startProcessing::spriteCol#0 init_angle_screen::x#2 init_angle_screen::x#1 getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] Allocated (was zp[2]:100) zp[2]:19 [ startProcessing::$11 startProcessing::$12 startProcessing::$13 startProcessing::spriteX#0 atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] Allocated (was zp[2]:108) zp[2]:21 [ startProcessing::$15 startProcessing::$16 startProcessing::$17 startProcessing::spriteY#0 atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] -Allocated (was zp[1]:116) zp[1]:23 [ startProcessing::spritePtr#0 init_angle_screen::xb#2 init_angle_screen::xb#1 getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] +Allocated (was zp[1]:116) zp[1]:23 [ startProcessing::spritePtr#0 init_angle_screen::xb#2 init_angle_screen::xb#1 getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] Allocated (was zp[2]:125) zp[2]:24 [ getCharToProcess::$8 getCharToProcess::$13 getCharToProcess::$9 getCharToProcess::$10 startProcessing::$21 heap_head#5 heap_head#1 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 ] Allocated (was zp[2]:137) zp[2]:26 [ init_angle_screen::xw#0 atan2_16::x#0 getCharToProcess::$12 ] Allocated (was zp[2]:140) zp[2]:28 [ init_angle_screen::yw#0 atan2_16::y#0 initSprites::sp#2 initSprites::sp#1 getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 startProcessing::$9 startProcessing::$8 main::src#2 main::src#1 ] -Allocated (was zp[1]:152) zp[1]:30 [ init_angle_screen::ang_w#0 main::center_y#0 startProcessing::center_y#0 ] +Allocated (was zp[1]:152) zp[1]:30 [ init_angle_screen::ang_w#0 startProcessing::center_x#0 ] Allocated (was zp[2]:165) zp[2]:31 [ processChars::processing#0 ] Allocated (was zp[1]:167) zp[1]:33 [ processChars::bitmask#0 ] Allocated (was zp[2]:168) zp[2]:34 [ processChars::xpos#0 processChars::$23 ] @@ -7806,6 +7692,7 @@ ASSEMBLER BEFORE OPTIMIZATION .const YPOS_BOTTOMMOST = BORDER_YPOS_BOTTOM<<4 .const RASTER_IRQ_TOP = $30 .const RASTER_IRQ_MIDDLE = $ff + .const SIZEOF_STRUCT_PROCESSINGSPRITE = $e .const OFFSET_STRUCT_PROCESSINGSPRITE_Y = 2 .const OFFSET_STRUCT_PROCESSINGSPRITE_VX = 4 .const OFFSET_STRUCT_PROCESSINGSPRITE_VY = 6 @@ -7828,9 +7715,9 @@ __b1_from___bbegin: // @1 __b1: // [2] call malloc - // [243] phi from @1 to malloc [phi:@1->malloc] + // [235] phi from @1 to malloc [phi:@1->malloc] malloc_from___b1: - // [243] phi (byte*) heap_head#5 = (const byte*) HEAP_TOP [phi:@1->malloc#0] -- pbuz1=pbuc1 + // [235] phi (byte*) heap_head#5 = (const byte*) HEAP_TOP [phi:@1->malloc#0] -- pbuz1=pbuc1 lda #HEAP_TOP @@ -7845,9 +7732,9 @@ __b3: lda.z malloc.mem+1 sta.z SCREEN_COPY+1 // [4] call malloc - // [243] phi from @3 to malloc [phi:@3->malloc] + // [235] phi from @3 to malloc [phi:@3->malloc] malloc_from___b3: - // [243] phi (byte*) heap_head#5 = (byte*) heap_head#1 [phi:@3->malloc#0] -- register_copy + // [235] phi (byte*) heap_head#5 = (byte*) heap_head#1 [phi:@3->malloc#0] -- register_copy jsr malloc jmp __b4 // @4 @@ -7869,7 +7756,8 @@ __bend: main: { .label dst = 3 .label src = $1c - .label center_y = $1e + .label i = 2 + .label center_y = $b // [9] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 -- pbuz1=pbuz2 lda.z SCREEN_DIST sta.z init_angle_screen.screen @@ -7906,8 +7794,9 @@ main: { bne __b2 // [14] phi from main::@1 to main::@3 [phi:main::@1->main::@3] __b3_from___b1: - // [14] phi (byte) main::i#2 = (byte) 0 [phi:main::@1->main::@3#0] -- vbuxx=vbuc1 - ldx #0 + // [14] phi (byte) main::i#2 = (byte) 0 [phi:main::@1->main::@3#0] -- vbuz1=vbuc1 + lda #0 + sta.z i jmp __b3 // Init processing array // [14] phi from main::@3 to main::@3 [phi:main::@3->main::@3] @@ -7916,140 +7805,111 @@ main: { jmp __b3 // main::@3 __b3: - // [15] (byte~) main::$20 ← (byte) main::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 - txa + // [15] (byte~) main::$11 ← (byte) main::i#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + lda.z i asl - // [16] (byte~) main::$21 ← (byte~) main::$20 + (byte) main::i#2 -- vbuaa=vbuaa_plus_vbuxx - stx.z $ff + // [16] (byte~) main::$12 ← (byte~) main::$11 + (byte) main::i#2 -- vbuaa=vbuaa_plus_vbuz1 clc - adc.z $ff - // [17] (byte~) main::$22 ← (byte~) main::$21 << (byte) 1 -- vbuaa=vbuaa_rol_1 + adc.z i + // [17] (byte~) main::$13 ← (byte~) main::$12 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl - // [18] (byte~) main::$23 ← (byte~) main::$22 + (byte) main::i#2 -- vbuaa=vbuaa_plus_vbuxx - stx.z $ff + // [18] (byte~) main::$14 ← (byte~) main::$13 + (byte) main::i#2 -- vbuaa=vbuaa_plus_vbuz1 clc - adc.z $ff - // [19] (byte~) main::$10 ← (byte~) main::$23 << (byte) 1 -- vbuyy=vbuaa_rol_1 + adc.z i + // [19] (byte~) main::$10 ← (byte~) main::$14 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl - tay - // [20] *((word*)(const struct ProcessingSprite*) PROCESSING + (byte~) main::$10) ← (word) 0 -- pwuc1_derefidx_vbuyy=vwuc2 - lda #<0 - sta PROCESSING,y - lda #>0 - sta PROCESSING+1,y - // [21] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$10) ← (word) 0 -- pwuc1_derefidx_vbuyy=vwuc2 - lda #<0 - sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y,y - lda #>0 - sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y+1,y - // [22] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$10) ← (word) 0 -- pwuc1_derefidx_vbuyy=vwuc2 - lda #<0 - sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX,y - lda #>0 - sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX+1,y - // [23] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$10) ← (word) 0 -- pwuc1_derefidx_vbuyy=vwuc2 - lda #<0 - sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY,y - lda #>0 - sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY+1,y - // [24] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$10) ← (byte) 0 -- pbuc1_derefidx_vbuyy=vbuc2 - lda #0 - sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_ID,y - // [25] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$10) ← (byte) 0 -- pbuc1_derefidx_vbuyy=vbuc2 - lda #0 - sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_PTR,y - // [26] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) main::$10) ← (byte) 0 -- pbuc1_derefidx_vbuyy=vbuc2 - lda #0 - sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_COL,y - // [27] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$10) ← (const byte) STATUS_FREE -- pbuc1_derefidx_vbuyy=vbuc2 - lda #STATUS_FREE - sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS,y - // [28] *((byte**)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$10) ← (byte*) 0 -- pptc1_derefidx_vbuyy=pbuc2 - lda #<0 - sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR,y - lda #>0 - sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR+1,y - // [29] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx + // [20] *((const struct ProcessingSprite*) PROCESSING + (byte~) main::$10) ← memcpy(*(&(const struct ProcessingSprite) $2), struct ProcessingSprite, (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE) -- pssc1_derefidx_vbuaa=_deref_pssc2_memcpy_vbuc3 + tax + ldy #0 + !: + lda __2,y + sta PROCESSING,x inx - // [30] if((byte) main::i#1!=(const byte) NUM_PROCESSING-(byte) 1+(byte) 1) goto main::@3 -- vbuxx_neq_vbuc1_then_la1 - cpx #NUM_PROCESSING-1+1 + iny + cpy #SIZEOF_STRUCT_PROCESSINGSPRITE + bne !- + // [21] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 + inc.z i + // [22] if((byte) main::i#1!=(const byte) NUM_PROCESSING-(byte) 1+(byte) 1) goto main::@3 -- vbuz1_neq_vbuc1_then_la1 + lda #NUM_PROCESSING-1+1 + cmp.z i bne __b3_from___b3 - // [31] phi from main::@3 to main::@4 [phi:main::@3->main::@4] + // [23] phi from main::@3 to main::@4 [phi:main::@3->main::@4] __b4_from___b3: jmp __b4 // main::@4 __b4: - // [32] call initSprites - // [156] phi from main::@4 to initSprites [phi:main::@4->initSprites] + // [24] call initSprites + // [148] phi from main::@4 to initSprites [phi:main::@4->initSprites] initSprites_from___b4: jsr initSprites - // [33] phi from main::@4 to main::@10 [phi:main::@4->main::@10] + // [25] phi from main::@4 to main::@10 [phi:main::@4->main::@10] __b10_from___b4: jmp __b10 // main::@10 __b10: - // [34] call setupRasterIrq + // [26] call setupRasterIrq jsr setupRasterIrq - // [35] phi from main::@10 main::@6 to main::@5 [phi:main::@10/main::@6->main::@5] + // [27] phi from main::@10 main::@6 to main::@5 [phi:main::@10/main::@6->main::@5] __b5_from___b10: __b5_from___b6: jmp __b5 // Main loop // main::@5 __b5: - // [36] call getCharToProcess + // [28] call getCharToProcess jsr getCharToProcess - // [37] (byte) getCharToProcess::return_x#0 ← (byte) getCharToProcess::return_x#1 -- vbuyy=vbuz1 + // [29] (byte) getCharToProcess::return_x#0 ← (byte) getCharToProcess::return_x#1 -- vbuyy=vbuz1 ldy.z getCharToProcess.return_x - // [38] (byte) getCharToProcess::return_y#0 ← (byte) getCharToProcess::return_y#1 -- vbuaa=vbuz1 + // [30] (byte) getCharToProcess::return_y#0 ← (byte) getCharToProcess::return_y#1 -- vbuaa=vbuz1 lda.z getCharToProcess.return_y - // [39] (byte) getCharToProcess::return_dist#0 ← (byte) getCharToProcess::return_dist#1 + // [31] (byte) getCharToProcess::return_dist#0 ← (byte) getCharToProcess::return_dist#1 jmp __b11 // main::@11 __b11: - // [40] (byte) main::center_x#0 ← (byte) getCharToProcess::return_x#0 - // [41] (byte) main::center_y#0 ← (byte) getCharToProcess::return_y#0 -- vbuz1=vbuaa + // [32] (byte) main::center_x#0 ← (byte) getCharToProcess::return_x#0 + // [33] (byte) main::center_y#0 ← (byte) getCharToProcess::return_y#0 -- vbuz1=vbuaa sta.z center_y - // [42] (byte) main::center_dist#0 ← (byte) getCharToProcess::return_dist#0 -- vbuaa=vbuxx + // [34] (byte) main::center_dist#0 ← (byte) getCharToProcess::return_dist#0 -- vbuaa=vbuxx txa - // [43] if((byte) main::center_dist#0!=(const byte) NOT_FOUND) goto main::@6 -- vbuaa_neq_vbuc1_then_la1 + // [35] if((byte) main::center_dist#0!=(const byte) NOT_FOUND) goto main::@6 -- vbuaa_neq_vbuc1_then_la1 cmp #NOT_FOUND bne __b6 jmp __b7 // main::@7 __b7: - // [44] *((const byte*) SCREEN+(word) $3e7) ← (byte) '.' -- _deref_pbuc1=vbuc2 + // [36] *((const byte*) SCREEN+(word) $3e7) ← (byte) '.' -- _deref_pbuc1=vbuc2 lda #'.' sta SCREEN+$3e7 jmp __b8 // main::@8 __b8: - // [45] *((const byte*) COLS+(word) $3e7) ← ++ *((const byte*) COLS+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 + // [37] *((const byte*) COLS+(word) $3e7) ← ++ *((const byte*) COLS+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 inc COLS+$3e7 jmp __b8 // main::@6 __b6: - // [46] (byte) startProcessing::center_x#0 ← (byte) main::center_x#0 -- vbuz1=vbuyy + // [38] (byte) startProcessing::center_x#0 ← (byte) main::center_x#0 -- vbuz1=vbuyy sty.z startProcessing.center_x - // [47] (byte) startProcessing::center_y#0 ← (byte) main::center_y#0 - // [48] call startProcessing - // [52] phi from main::@6 to startProcessing [phi:main::@6->startProcessing] + // [39] (byte) startProcessing::center_y#0 ← (byte) main::center_y#0 + // [40] call startProcessing + // [44] phi from main::@6 to startProcessing [phi:main::@6->startProcessing] startProcessing_from___b6: jsr startProcessing jmp __b5_from___b6 // main::@2 __b2: - // [49] *((byte*) main::dst#2) ← *((byte*) main::src#2) -- _deref_pbuz1=_deref_pbuz2 + // [41] *((byte*) main::dst#2) ← *((byte*) main::src#2) -- _deref_pbuz1=_deref_pbuz2 ldy #0 lda (src),y ldy #0 sta (dst),y - // [50] (byte*) main::src#1 ← ++ (byte*) main::src#2 -- pbuz1=_inc_pbuz1 + // [42] (byte*) main::src#1 ← ++ (byte*) main::src#2 -- pbuz1=_inc_pbuz1 inc.z src bne !+ inc.z src+1 !: - // [51] (byte*) main::dst#1 ← ++ (byte*) main::dst#2 -- pbuz1=_inc_pbuz1 + // [43] (byte*) main::dst#1 ← ++ (byte*) main::dst#2 -- pbuz1=_inc_pbuz1 inc.z dst bne !+ inc.z dst+1 @@ -8062,7 +7922,7 @@ main: { } // startProcessing // Start processing a char - by inserting it into the PROCESSING array -// startProcessing(byte zp($b) center_x, byte zp($1e) center_y) +// startProcessing(byte zp($1e) center_x, byte zp($b) center_y) startProcessing: { .label __0 = $c .label __1 = $c @@ -8077,8 +7937,8 @@ startProcessing: { .label __16 = $15 .label __17 = $15 .label __21 = $18 - .label center_x = $b - .label center_y = $1e + .label center_x = $1e + .label center_y = $b .label i = 2 .label offset = $c .label colPtr = $10 @@ -8093,63 +7953,63 @@ startProcessing: { .label freeIdx = 2 .label __44 = $e .label __45 = $c - // [53] phi from startProcessing to startProcessing::@1 [phi:startProcessing->startProcessing::@1] + // [45] phi from startProcessing to startProcessing::@1 [phi:startProcessing->startProcessing::@1] __b1_from_startProcessing: - // [53] phi (byte) startProcessing::freeIdx#6 = (byte) $ff [phi:startProcessing->startProcessing::@1#0] -- vbuxx=vbuc1 + // [45] phi (byte) startProcessing::freeIdx#6 = (byte) $ff [phi:startProcessing->startProcessing::@1#0] -- vbuxx=vbuc1 ldx #$ff jmp __b1 // startProcessing::@1 __b1: - // [54] phi from startProcessing::@1 to startProcessing::@2 [phi:startProcessing::@1->startProcessing::@2] + // [46] phi from startProcessing::@1 to startProcessing::@2 [phi:startProcessing::@1->startProcessing::@2] __b2_from___b1: - // [54] phi (byte) startProcessing::i#2 = (byte) 0 [phi:startProcessing::@1->startProcessing::@2#0] -- vbuz1=vbuc1 + // [46] phi (byte) startProcessing::i#2 = (byte) 0 [phi:startProcessing::@1->startProcessing::@2#0] -- vbuz1=vbuc1 lda #0 sta.z i jmp __b2 - // [54] phi from startProcessing::@3 to startProcessing::@2 [phi:startProcessing::@3->startProcessing::@2] + // [46] phi from startProcessing::@3 to startProcessing::@2 [phi:startProcessing::@3->startProcessing::@2] __b2_from___b3: - // [54] phi (byte) startProcessing::i#2 = (byte) startProcessing::i#1 [phi:startProcessing::@3->startProcessing::@2#0] -- register_copy + // [46] phi (byte) startProcessing::i#2 = (byte) startProcessing::i#1 [phi:startProcessing::@3->startProcessing::@2#0] -- register_copy jmp __b2 // startProcessing::@2 __b2: - // [55] (byte~) startProcessing::$39 ← (byte) startProcessing::i#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [47] (byte~) startProcessing::$39 ← (byte) startProcessing::i#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda.z i asl - // [56] (byte~) startProcessing::$40 ← (byte~) startProcessing::$39 + (byte) startProcessing::i#2 -- vbuaa=vbuaa_plus_vbuz1 + // [48] (byte~) startProcessing::$40 ← (byte~) startProcessing::$39 + (byte) startProcessing::i#2 -- vbuaa=vbuaa_plus_vbuz1 clc adc.z i - // [57] (byte~) startProcessing::$41 ← (byte~) startProcessing::$40 << (byte) 1 -- vbuaa=vbuaa_rol_1 + // [49] (byte~) startProcessing::$41 ← (byte~) startProcessing::$40 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl - // [58] (byte~) startProcessing::$42 ← (byte~) startProcessing::$41 + (byte) startProcessing::i#2 -- vbuaa=vbuaa_plus_vbuz1 + // [50] (byte~) startProcessing::$42 ← (byte~) startProcessing::$41 + (byte) startProcessing::i#2 -- vbuaa=vbuaa_plus_vbuz1 clc adc.z i - // [59] (byte~) startProcessing::$27 ← (byte~) startProcessing::$42 << (byte) 1 -- vbuaa=vbuaa_rol_1 + // [51] (byte~) startProcessing::$27 ← (byte~) startProcessing::$42 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl - // [60] if(*((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$27)!=(const byte) STATUS_FREE) goto startProcessing::@3 -- pbuc1_derefidx_vbuaa_neq_vbuc2_then_la1 + // [52] if(*((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$27)!=(const byte) STATUS_FREE) goto startProcessing::@3 -- pbuc1_derefidx_vbuaa_neq_vbuc2_then_la1 tay lda #STATUS_FREE cmp PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS,y bne __b3 - // [61] phi from startProcessing::@2 startProcessing::@9 to startProcessing::@4 [phi:startProcessing::@2/startProcessing::@9->startProcessing::@4] + // [53] phi from startProcessing::@2 startProcessing::@9 to startProcessing::@4 [phi:startProcessing::@2/startProcessing::@9->startProcessing::@4] __b4_from___b2: __b4_from___b9: - // [61] phi (byte) startProcessing::freeIdx#2 = (byte) startProcessing::i#2 [phi:startProcessing::@2/startProcessing::@9->startProcessing::@4#0] -- register_copy + // [53] phi (byte) startProcessing::freeIdx#2 = (byte) startProcessing::i#2 [phi:startProcessing::@2/startProcessing::@9->startProcessing::@4#0] -- register_copy jmp __b4 // startProcessing::@4 __b4: - // [62] if((byte) startProcessing::freeIdx#2==(byte) $ff) goto startProcessing::@8 -- vbuz1_eq_vbuc1_then_la1 + // [54] if((byte) startProcessing::freeIdx#2==(byte) $ff) goto startProcessing::@8 -- vbuz1_eq_vbuc1_then_la1 lda #$ff cmp.z freeIdx beq __b8 jmp __b5 // startProcessing::@5 __b5: - // [63] (word~) startProcessing::$0 ← (word)(byte) startProcessing::center_y#0 -- vwuz1=_word_vbuz2 + // [55] (word~) startProcessing::$0 ← (word)(byte) startProcessing::center_y#0 -- vwuz1=_word_vbuz2 lda.z center_y sta.z __0 lda #0 sta.z __0+1 - // [64] (word~) startProcessing::$44 ← (word~) startProcessing::$0 << (byte) 2 -- vwuz1=vwuz2_rol_2 + // [56] (word~) startProcessing::$44 ← (word~) startProcessing::$0 << (byte) 2 -- vwuz1=vwuz2_rol_2 lda.z __0 asl sta.z __44 @@ -8158,7 +8018,7 @@ startProcessing: { sta.z __44+1 asl.z __44 rol.z __44+1 - // [65] (word~) startProcessing::$45 ← (word~) startProcessing::$44 + (word~) startProcessing::$0 -- vwuz1=vwuz2_plus_vwuz1 + // [57] (word~) startProcessing::$45 ← (word~) startProcessing::$44 + (word~) startProcessing::$0 -- vwuz1=vwuz2_plus_vwuz1 lda.z __45 clc adc.z __44 @@ -8166,14 +8026,14 @@ startProcessing: { lda.z __45+1 adc.z __44+1 sta.z __45+1 - // [66] (word~) startProcessing::$1 ← (word~) startProcessing::$45 << (byte) 3 -- vwuz1=vwuz1_rol_3 + // [58] (word~) startProcessing::$1 ← (word~) startProcessing::$45 << (byte) 3 -- vwuz1=vwuz1_rol_3 asl.z __1 rol.z __1+1 asl.z __1 rol.z __1+1 asl.z __1 rol.z __1+1 - // [67] (word) startProcessing::offset#0 ← (word~) startProcessing::$1 + (byte) startProcessing::center_x#0 -- vwuz1=vwuz1_plus_vbuz2 + // [59] (word) startProcessing::offset#0 ← (word~) startProcessing::$1 + (byte) startProcessing::center_x#0 -- vwuz1=vwuz1_plus_vbuz2 lda.z center_x clc adc.z offset @@ -8181,7 +8041,7 @@ startProcessing: { bcc !+ inc.z offset+1 !: - // [68] (byte*) startProcessing::colPtr#0 ← (const byte*) COLS + (word) startProcessing::offset#0 -- pbuz1=pbuc1_plus_vwuz2 + // [60] (byte*) startProcessing::colPtr#0 ← (const byte*) COLS + (word) startProcessing::offset#0 -- pbuz1=pbuc1_plus_vwuz2 lda.z offset clc adc #COLS sta.z colPtr+1 - // [69] (byte) startProcessing::spriteCol#0 ← *((byte*) startProcessing::colPtr#0) -- vbuz1=_deref_pbuz2 + // [61] (byte) startProcessing::spriteCol#0 ← *((byte*) startProcessing::colPtr#0) -- vbuz1=_deref_pbuz2 ldy #0 lda (colPtr),y sta.z spriteCol - // [70] (byte*) startProcessing::screenPtr#0 ← (const byte*) SCREEN + (word) startProcessing::offset#0 -- pbuz1=pbuc1_plus_vwuz1 + // [62] (byte*) startProcessing::screenPtr#0 ← (const byte*) SCREEN + (word) startProcessing::offset#0 -- pbuz1=pbuc1_plus_vwuz1 clc lda.z screenPtr adc #SCREEN sta.z screenPtr+1 - // [71] (word~) startProcessing::$5 ← (word)(byte) startProcessing::freeIdx#2 -- vwuz1=_word_vbuz2 + // [63] (word~) startProcessing::$5 ← (word)(byte) startProcessing::freeIdx#2 -- vwuz1=_word_vbuz2 lda.z freeIdx sta.z __5 lda #0 sta.z __5+1 - // [72] (word~) startProcessing::$6 ← (word~) startProcessing::$5 << (byte) 6 -- vwuz1=vwuz1_rol_6 + // [64] (word~) startProcessing::$6 ← (word~) startProcessing::$5 << (byte) 6 -- vwuz1=vwuz1_rol_6 asl.z __6 rol.z __6+1 asl.z __6 @@ -8219,7 +8079,7 @@ startProcessing: { rol.z __6+1 asl.z __6 rol.z __6+1 - // [73] (byte*) startProcessing::spriteData#0 ← (const byte*) SPRITE_DATA + (word~) startProcessing::$6 -- pbuz1=pbuc1_plus_vwuz1 + // [65] (byte*) startProcessing::spriteData#0 ← (const byte*) SPRITE_DATA + (word~) startProcessing::$6 -- pbuz1=pbuc1_plus_vwuz1 clc lda.z spriteData adc #SPRITE_DATA sta.z spriteData+1 - // [74] (byte) startProcessing::ch#0 ← *((byte*) startProcessing::screenPtr#0) -- vbuaa=_deref_pbuz1 + // [66] (byte) startProcessing::ch#0 ← *((byte*) startProcessing::screenPtr#0) -- vbuaa=_deref_pbuz1 ldy #0 lda (screenPtr),y - // [75] (word~) startProcessing::$8 ← (word)(byte) startProcessing::ch#0 -- vwuz1=_word_vbuaa + // [67] (word~) startProcessing::$8 ← (word)(byte) startProcessing::ch#0 -- vwuz1=_word_vbuaa sta.z __8 lda #0 sta.z __8+1 - // [76] (word~) startProcessing::$9 ← (word~) startProcessing::$8 << (byte) 3 -- vwuz1=vwuz1_rol_3 + // [68] (word~) startProcessing::$9 ← (word~) startProcessing::$8 << (byte) 3 -- vwuz1=vwuz1_rol_3 asl.z __9 rol.z __9+1 asl.z __9 rol.z __9+1 asl.z __9 rol.z __9+1 - // [77] (byte*) startProcessing::chargenData#0 ← (const byte*) CHARGEN + (word~) startProcessing::$9 -- pbuz1=pbuc1_plus_vwuz1 + // [69] (byte*) startProcessing::chargenData#0 ← (const byte*) CHARGEN + (word~) startProcessing::$9 -- pbuz1=pbuc1_plus_vwuz1 clc lda.z chargenData adc #startProcessing::@6] + // [72] phi from startProcessing::@5 to startProcessing::@6 [phi:startProcessing::@5->startProcessing::@6] __b6_from___b5: - // [80] phi (byte) startProcessing::i1#2 = (byte) 0 [phi:startProcessing::@5->startProcessing::@6#0] -- vbuxx=vbuc1 + // [72] phi (byte) startProcessing::i1#2 = (byte) 0 [phi:startProcessing::@5->startProcessing::@6#0] -- vbuxx=vbuc1 ldx #0 - // [80] phi (byte*) startProcessing::spriteData#2 = (byte*) startProcessing::spriteData#0 [phi:startProcessing::@5->startProcessing::@6#1] -- register_copy - // [80] phi (byte*) startProcessing::chargenData#2 = (byte*) startProcessing::chargenData#0 [phi:startProcessing::@5->startProcessing::@6#2] -- register_copy + // [72] phi (byte*) startProcessing::spriteData#2 = (byte*) startProcessing::spriteData#0 [phi:startProcessing::@5->startProcessing::@6#1] -- register_copy + // [72] phi (byte*) startProcessing::chargenData#2 = (byte*) startProcessing::chargenData#0 [phi:startProcessing::@5->startProcessing::@6#2] -- register_copy jmp __b6 - // [80] phi from startProcessing::@6 to startProcessing::@6 [phi:startProcessing::@6->startProcessing::@6] + // [72] phi from startProcessing::@6 to startProcessing::@6 [phi:startProcessing::@6->startProcessing::@6] __b6_from___b6: - // [80] phi (byte) startProcessing::i1#2 = (byte) startProcessing::i1#1 [phi:startProcessing::@6->startProcessing::@6#0] -- register_copy - // [80] phi (byte*) startProcessing::spriteData#2 = (byte*) startProcessing::spriteData#1 [phi:startProcessing::@6->startProcessing::@6#1] -- register_copy - // [80] phi (byte*) startProcessing::chargenData#2 = (byte*) startProcessing::chargenData#1 [phi:startProcessing::@6->startProcessing::@6#2] -- register_copy + // [72] phi (byte) startProcessing::i1#2 = (byte) startProcessing::i1#1 [phi:startProcessing::@6->startProcessing::@6#0] -- register_copy + // [72] phi (byte*) startProcessing::spriteData#2 = (byte*) startProcessing::spriteData#1 [phi:startProcessing::@6->startProcessing::@6#1] -- register_copy + // [72] phi (byte*) startProcessing::chargenData#2 = (byte*) startProcessing::chargenData#1 [phi:startProcessing::@6->startProcessing::@6#2] -- register_copy jmp __b6 // startProcessing::@6 __b6: - // [81] *((byte*) startProcessing::spriteData#2) ← *((byte*) startProcessing::chargenData#2) -- _deref_pbuz1=_deref_pbuz2 + // [73] *((byte*) startProcessing::spriteData#2) ← *((byte*) startProcessing::chargenData#2) -- _deref_pbuz1=_deref_pbuz2 ldy #0 lda (chargenData),y ldy #0 sta (spriteData),y - // [82] (byte*) startProcessing::spriteData#1 ← (byte*) startProcessing::spriteData#2 + (byte) 3 -- pbuz1=pbuz1_plus_vbuc1 + // [74] (byte*) startProcessing::spriteData#1 ← (byte*) startProcessing::spriteData#2 + (byte) 3 -- pbuz1=pbuz1_plus_vbuc1 lda #3 clc adc.z spriteData @@ -8282,37 +8142,37 @@ startProcessing: { bcc !+ inc.z spriteData+1 !: - // [83] (byte*) startProcessing::chargenData#1 ← ++ (byte*) startProcessing::chargenData#2 -- pbuz1=_inc_pbuz1 + // [75] (byte*) startProcessing::chargenData#1 ← ++ (byte*) startProcessing::chargenData#2 -- pbuz1=_inc_pbuz1 inc.z chargenData bne !+ inc.z chargenData+1 !: - // [84] (byte) startProcessing::i1#1 ← ++ (byte) startProcessing::i1#2 -- vbuxx=_inc_vbuxx + // [76] (byte) startProcessing::i1#1 ← ++ (byte) startProcessing::i1#2 -- vbuxx=_inc_vbuxx inx - // [85] if((byte) startProcessing::i1#1!=(byte) 8) goto startProcessing::@6 -- vbuxx_neq_vbuc1_then_la1 + // [77] if((byte) startProcessing::i1#1!=(byte) 8) goto startProcessing::@6 -- vbuxx_neq_vbuc1_then_la1 cpx #8 bne __b6_from___b6 jmp __b7 // startProcessing::@7 __b7: - // [86] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 + // [78] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 lda #PROCPORT_RAM_IO sta PROCPORT // asm { cli } cli - // [88] (word~) startProcessing::$11 ← (word)(byte) startProcessing::center_x#0 -- vwuz1=_word_vbuz2 + // [80] (word~) startProcessing::$11 ← (word)(byte) startProcessing::center_x#0 -- vwuz1=_word_vbuz2 lda.z center_x sta.z __11 lda #0 sta.z __11+1 - // [89] (word~) startProcessing::$12 ← (word~) startProcessing::$11 << (byte) 3 -- vwuz1=vwuz1_rol_3 + // [81] (word~) startProcessing::$12 ← (word~) startProcessing::$11 << (byte) 3 -- vwuz1=vwuz1_rol_3 asl.z __12 rol.z __12+1 asl.z __12 rol.z __12+1 asl.z __12 rol.z __12+1 - // [90] (word~) startProcessing::$13 ← (const byte) BORDER_XPOS_LEFT + (word~) startProcessing::$12 -- vwuz1=vbuc1_plus_vwuz1 + // [82] (word~) startProcessing::$13 ← (const byte) BORDER_XPOS_LEFT + (word~) startProcessing::$12 -- vwuz1=vbuc1_plus_vwuz1 lda #BORDER_XPOS_LEFT clc adc.z __13 @@ -8320,7 +8180,7 @@ startProcessing: { bcc !+ inc.z __13+1 !: - // [91] (word) startProcessing::spriteX#0 ← (word~) startProcessing::$13 << (byte) 4 -- vwuz1=vwuz1_rol_4 + // [83] (word) startProcessing::spriteX#0 ← (word~) startProcessing::$13 << (byte) 4 -- vwuz1=vwuz1_rol_4 asl.z spriteX rol.z spriteX+1 asl.z spriteX @@ -8329,19 +8189,19 @@ startProcessing: { rol.z spriteX+1 asl.z spriteX rol.z spriteX+1 - // [92] (word~) startProcessing::$15 ← (word)(byte) startProcessing::center_y#0 -- vwuz1=_word_vbuz2 + // [84] (word~) startProcessing::$15 ← (word)(byte) startProcessing::center_y#0 -- vwuz1=_word_vbuz2 lda.z center_y sta.z __15 lda #0 sta.z __15+1 - // [93] (word~) startProcessing::$16 ← (word~) startProcessing::$15 << (byte) 3 -- vwuz1=vwuz1_rol_3 + // [85] (word~) startProcessing::$16 ← (word~) startProcessing::$15 << (byte) 3 -- vwuz1=vwuz1_rol_3 asl.z __16 rol.z __16+1 asl.z __16 rol.z __16+1 asl.z __16 rol.z __16+1 - // [94] (word~) startProcessing::$17 ← (const byte) BORDER_YPOS_TOP + (word~) startProcessing::$16 -- vwuz1=vbuc1_plus_vwuz1 + // [86] (word~) startProcessing::$17 ← (const byte) BORDER_YPOS_TOP + (word~) startProcessing::$16 -- vwuz1=vbuc1_plus_vwuz1 lda #BORDER_YPOS_TOP clc adc.z __17 @@ -8349,7 +8209,7 @@ startProcessing: { bcc !+ inc.z __17+1 !: - // [95] (word) startProcessing::spriteY#0 ← (word~) startProcessing::$17 << (byte) 4 -- vwuz1=vwuz1_rol_4 + // [87] (word) startProcessing::spriteY#0 ← (word~) startProcessing::$17 << (byte) 4 -- vwuz1=vwuz1_rol_4 asl.z spriteY rol.z spriteY+1 asl.z spriteY @@ -8358,66 +8218,66 @@ startProcessing: { rol.z spriteY+1 asl.z spriteY rol.z spriteY+1 - // [96] (byte) startProcessing::spritePtr#0 ← (byte)(const byte*) SPRITE_DATA/(byte) $40 + (byte) startProcessing::freeIdx#2 -- vbuz1=vbuc1_plus_vbuz2 + // [88] (byte) startProcessing::spritePtr#0 ← (byte)(const byte*) SPRITE_DATA/(byte) $40 + (byte) startProcessing::freeIdx#2 -- vbuz1=vbuc1_plus_vbuz2 lax.z freeIdx axs #-[SPRITE_DATA/$40] stx.z spritePtr - // [97] (byte~) startProcessing::$20 ← (byte) startProcessing::freeIdx#2 << (byte) 3 -- vbuaa=vbuz1_rol_3 + // [89] (byte~) startProcessing::$20 ← (byte) startProcessing::freeIdx#2 << (byte) 3 -- vbuaa=vbuz1_rol_3 lda.z freeIdx asl asl asl - // [98] (word~) startProcessing::$21 ← (word)(byte~) startProcessing::$20 -- vwuz1=_word_vbuaa + // [90] (word~) startProcessing::$21 ← (word)(byte~) startProcessing::$20 -- vwuz1=_word_vbuaa sta.z __21 lda #0 sta.z __21+1 - // [99] (byte~) startProcessing::$47 ← (byte) startProcessing::freeIdx#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [91] (byte~) startProcessing::$47 ← (byte) startProcessing::freeIdx#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda.z freeIdx asl - // [100] (byte~) startProcessing::$48 ← (byte~) startProcessing::$47 + (byte) startProcessing::freeIdx#2 -- vbuaa=vbuaa_plus_vbuz1 + // [92] (byte~) startProcessing::$48 ← (byte~) startProcessing::$47 + (byte) startProcessing::freeIdx#2 -- vbuaa=vbuaa_plus_vbuz1 clc adc.z freeIdx - // [101] (byte~) startProcessing::$49 ← (byte~) startProcessing::$48 << (byte) 1 -- vbuaa=vbuaa_rol_1 + // [93] (byte~) startProcessing::$49 ← (byte~) startProcessing::$48 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl - // [102] (byte~) startProcessing::$50 ← (byte~) startProcessing::$49 + (byte) startProcessing::freeIdx#2 -- vbuaa=vbuaa_plus_vbuz1 + // [94] (byte~) startProcessing::$50 ← (byte~) startProcessing::$49 + (byte) startProcessing::freeIdx#2 -- vbuaa=vbuaa_plus_vbuz1 clc adc.z freeIdx - // [103] (byte~) startProcessing::$28 ← (byte~) startProcessing::$50 << (byte) 1 -- vbuxx=vbuaa_rol_1 + // [95] (byte~) startProcessing::$28 ← (byte~) startProcessing::$50 << (byte) 1 -- vbuxx=vbuaa_rol_1 asl tax - // [104] *((word*)(const struct ProcessingSprite*) PROCESSING + (byte~) startProcessing::$28) ← (word) startProcessing::spriteX#0 -- pwuc1_derefidx_vbuxx=vwuz1 + // [96] *((word*)(const struct ProcessingSprite*) PROCESSING + (byte~) startProcessing::$28) ← (word) startProcessing::spriteX#0 -- pwuc1_derefidx_vbuxx=vwuz1 lda.z spriteX sta PROCESSING,x lda.z spriteX+1 sta PROCESSING+1,x - // [105] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) startProcessing::$28) ← (word) startProcessing::spriteY#0 -- pwuc1_derefidx_vbuxx=vwuz1 + // [97] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) startProcessing::$28) ← (word) startProcessing::spriteY#0 -- pwuc1_derefidx_vbuxx=vwuz1 lda.z spriteY sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y,x lda.z spriteY+1 sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y+1,x - // [106] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) startProcessing::$28) ← (word~) startProcessing::$21 -- pwuc1_derefidx_vbuxx=vwuz1 + // [98] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) startProcessing::$28) ← (word~) startProcessing::$21 -- pwuc1_derefidx_vbuxx=vwuz1 lda.z __21 sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX,x lda.z __21+1 sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX+1,x - // [107] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) startProcessing::$28) ← (word) $3c -- pwuc1_derefidx_vbuxx=vwuc2 + // [99] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) startProcessing::$28) ← (word) $3c -- pwuc1_derefidx_vbuxx=vwuc2 lda #<$3c sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY,x lda #>$3c sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY+1,x - // [108] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) startProcessing::$28) ← (byte) startProcessing::freeIdx#2 -- pbuc1_derefidx_vbuxx=vbuz1 + // [100] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) startProcessing::$28) ← (byte) startProcessing::freeIdx#2 -- pbuc1_derefidx_vbuxx=vbuz1 lda.z freeIdx sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_ID,x - // [109] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) startProcessing::$28) ← (byte) startProcessing::spritePtr#0 -- pbuc1_derefidx_vbuxx=vbuz1 + // [101] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) startProcessing::$28) ← (byte) startProcessing::spritePtr#0 -- pbuc1_derefidx_vbuxx=vbuz1 lda.z spritePtr sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_PTR,x - // [110] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) startProcessing::$28) ← (byte) startProcessing::spriteCol#0 -- pbuc1_derefidx_vbuxx=vbuz1 + // [102] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) startProcessing::$28) ← (byte) startProcessing::spriteCol#0 -- pbuc1_derefidx_vbuxx=vbuz1 lda.z spriteCol sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_COL,x - // [111] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$28) ← (const byte) STATUS_NEW -- pbuc1_derefidx_vbuxx=vbuc2 + // [103] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$28) ← (const byte) STATUS_NEW -- pbuc1_derefidx_vbuxx=vbuc2 lda #STATUS_NEW sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS,x - // [112] *((byte**)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) startProcessing::$28) ← (byte*) startProcessing::screenPtr#0 -- pptc1_derefidx_vbuxx=pbuz1 + // [104] *((byte**)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) startProcessing::$28) ← (byte*) startProcessing::screenPtr#0 -- pptc1_derefidx_vbuxx=pbuz1 lda.z screenPtr sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR,x lda.z screenPtr+1 @@ -8425,28 +8285,28 @@ startProcessing: { jmp __breturn // startProcessing::@return __breturn: - // [113] return + // [105] return rts // startProcessing::@8 __b8: - // [114] (byte) startProcessing::freeIdx#7 ← (byte) startProcessing::freeIdx#2 -- vbuxx=vbuz1 + // [106] (byte) startProcessing::freeIdx#7 ← (byte) startProcessing::freeIdx#2 -- vbuxx=vbuz1 ldx.z freeIdx - // [53] phi from startProcessing::@8 to startProcessing::@1 [phi:startProcessing::@8->startProcessing::@1] + // [45] phi from startProcessing::@8 to startProcessing::@1 [phi:startProcessing::@8->startProcessing::@1] __b1_from___b8: - // [53] phi (byte) startProcessing::freeIdx#6 = (byte) startProcessing::freeIdx#7 [phi:startProcessing::@8->startProcessing::@1#0] -- register_copy + // [45] phi (byte) startProcessing::freeIdx#6 = (byte) startProcessing::freeIdx#7 [phi:startProcessing::@8->startProcessing::@1#0] -- register_copy jmp __b1 // startProcessing::@3 __b3: - // [115] (byte) startProcessing::i#1 ← ++ (byte) startProcessing::i#2 -- vbuz1=_inc_vbuz1 + // [107] (byte) startProcessing::i#1 ← ++ (byte) startProcessing::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [116] if((byte) startProcessing::i#1!=(const byte) NUM_PROCESSING-(byte) 1+(byte) 1) goto startProcessing::@2 -- vbuz1_neq_vbuc1_then_la1 + // [108] if((byte) startProcessing::i#1!=(const byte) NUM_PROCESSING-(byte) 1+(byte) 1) goto startProcessing::@2 -- vbuz1_neq_vbuc1_then_la1 lda #NUM_PROCESSING-1+1 cmp.z i bne __b2_from___b3 jmp __b9 // startProcessing::@9 __b9: - // [117] (byte) startProcessing::freeIdx#8 ← (byte) startProcessing::freeIdx#6 -- vbuz1=vbuxx + // [109] (byte) startProcessing::freeIdx#8 ← (byte) startProcessing::freeIdx#6 -- vbuz1=vbuxx stx.z freeIdx jmp __b4_from___b9 } @@ -8460,92 +8320,92 @@ getCharToProcess: { .label screen_line = $1c .label dist_line = 3 .label y = 2 - .label return_x = $12 - .label return_y = $17 - .label closest_dist = $b - .label closest_x = $12 - .label closest_y = $17 + .label return_x = $17 + .label return_y = $b + .label closest_dist = $12 + .label closest_x = $17 + .label closest_y = $b .label __12 = $1a .label __13 = $18 - // [118] (byte*) getCharToProcess::screen_line#0 ← (byte*)(void*) SCREEN_COPY#0 -- pbuz1=pbuz2 + // [110] (byte*) getCharToProcess::screen_line#0 ← (byte*)(void*) SCREEN_COPY#0 -- pbuz1=pbuz2 lda.z SCREEN_COPY sta.z screen_line lda.z SCREEN_COPY+1 sta.z screen_line+1 - // [119] (byte*) getCharToProcess::dist_line#0 ← (byte*)(void*) SCREEN_DIST#0 -- pbuz1=pbuz2 + // [111] (byte*) getCharToProcess::dist_line#0 ← (byte*)(void*) SCREEN_DIST#0 -- pbuz1=pbuz2 lda.z SCREEN_DIST sta.z dist_line lda.z SCREEN_DIST+1 sta.z dist_line+1 - // [120] phi from getCharToProcess to getCharToProcess::@1 [phi:getCharToProcess->getCharToProcess::@1] + // [112] phi from getCharToProcess to getCharToProcess::@1 [phi:getCharToProcess->getCharToProcess::@1] __b1_from_getCharToProcess: - // [120] phi (byte) getCharToProcess::closest_y#9 = (byte) 0 [phi:getCharToProcess->getCharToProcess::@1#0] -- vbuz1=vbuc1 + // [112] phi (byte) getCharToProcess::closest_y#9 = (byte) 0 [phi:getCharToProcess->getCharToProcess::@1#0] -- vbuz1=vbuc1 lda #0 sta.z closest_y - // [120] phi (byte) getCharToProcess::closest_x#9 = (byte) 0 [phi:getCharToProcess->getCharToProcess::@1#1] -- vbuz1=vbuc1 + // [112] phi (byte) getCharToProcess::closest_x#9 = (byte) 0 [phi:getCharToProcess->getCharToProcess::@1#1] -- vbuz1=vbuc1 lda #0 sta.z closest_x - // [120] phi (byte) getCharToProcess::y#7 = (byte) 0 [phi:getCharToProcess->getCharToProcess::@1#2] -- vbuz1=vbuc1 + // [112] phi (byte) getCharToProcess::y#7 = (byte) 0 [phi:getCharToProcess->getCharToProcess::@1#2] -- vbuz1=vbuc1 lda #0 sta.z y - // [120] phi (byte) getCharToProcess::closest_dist#8 = (const byte) NOT_FOUND [phi:getCharToProcess->getCharToProcess::@1#3] -- vbuz1=vbuc1 + // [112] phi (byte) getCharToProcess::closest_dist#8 = (const byte) NOT_FOUND [phi:getCharToProcess->getCharToProcess::@1#3] -- vbuz1=vbuc1 lda #NOT_FOUND sta.z closest_dist - // [120] phi (byte*) getCharToProcess::dist_line#6 = (byte*) getCharToProcess::dist_line#0 [phi:getCharToProcess->getCharToProcess::@1#4] -- register_copy - // [120] phi (byte*) getCharToProcess::screen_line#4 = (byte*) getCharToProcess::screen_line#0 [phi:getCharToProcess->getCharToProcess::@1#5] -- register_copy + // [112] phi (byte*) getCharToProcess::dist_line#6 = (byte*) getCharToProcess::dist_line#0 [phi:getCharToProcess->getCharToProcess::@1#4] -- register_copy + // [112] phi (byte*) getCharToProcess::screen_line#4 = (byte*) getCharToProcess::screen_line#0 [phi:getCharToProcess->getCharToProcess::@1#5] -- register_copy jmp __b1 // getCharToProcess::@1 __b1: - // [121] phi from getCharToProcess::@1 to getCharToProcess::@2 [phi:getCharToProcess::@1->getCharToProcess::@2] + // [113] phi from getCharToProcess::@1 to getCharToProcess::@2 [phi:getCharToProcess::@1->getCharToProcess::@2] __b2_from___b1: - // [121] phi (byte) getCharToProcess::closest_y#7 = (byte) getCharToProcess::closest_y#9 [phi:getCharToProcess::@1->getCharToProcess::@2#0] -- register_copy - // [121] phi (byte) getCharToProcess::closest_x#7 = (byte) getCharToProcess::closest_x#9 [phi:getCharToProcess::@1->getCharToProcess::@2#1] -- register_copy - // [121] phi (byte) getCharToProcess::closest_dist#2 = (byte) getCharToProcess::closest_dist#8 [phi:getCharToProcess::@1->getCharToProcess::@2#2] -- register_copy - // [121] phi (byte) getCharToProcess::x#2 = (byte) 0 [phi:getCharToProcess::@1->getCharToProcess::@2#3] -- vbuyy=vbuc1 + // [113] phi (byte) getCharToProcess::closest_y#7 = (byte) getCharToProcess::closest_y#9 [phi:getCharToProcess::@1->getCharToProcess::@2#0] -- register_copy + // [113] phi (byte) getCharToProcess::closest_x#7 = (byte) getCharToProcess::closest_x#9 [phi:getCharToProcess::@1->getCharToProcess::@2#1] -- register_copy + // [113] phi (byte) getCharToProcess::closest_dist#2 = (byte) getCharToProcess::closest_dist#8 [phi:getCharToProcess::@1->getCharToProcess::@2#2] -- register_copy + // [113] phi (byte) getCharToProcess::x#2 = (byte) 0 [phi:getCharToProcess::@1->getCharToProcess::@2#3] -- vbuyy=vbuc1 ldy #0 jmp __b2 // getCharToProcess::@2 __b2: - // [122] if(*((byte*) getCharToProcess::screen_line#4 + (byte) getCharToProcess::x#2)==(byte) ' ') goto getCharToProcess::@11 -- pbuz1_derefidx_vbuyy_eq_vbuc1_then_la1 + // [114] if(*((byte*) getCharToProcess::screen_line#4 + (byte) getCharToProcess::x#2)==(byte) ' ') goto getCharToProcess::@11 -- pbuz1_derefidx_vbuyy_eq_vbuc1_then_la1 lda #' ' cmp (screen_line),y beq __b11 jmp __b4 // getCharToProcess::@4 __b4: - // [123] (byte) getCharToProcess::dist#0 ← *((byte*) getCharToProcess::dist_line#6 + (byte) getCharToProcess::x#2) -- vbuxx=pbuz1_derefidx_vbuyy + // [115] (byte) getCharToProcess::dist#0 ← *((byte*) getCharToProcess::dist_line#6 + (byte) getCharToProcess::x#2) -- vbuxx=pbuz1_derefidx_vbuyy lda (dist_line),y tax - // [124] if((byte) getCharToProcess::dist#0>=(byte) getCharToProcess::closest_dist#2) goto getCharToProcess::@12 -- vbuxx_ge_vbuz1_then_la1 + // [116] if((byte) getCharToProcess::dist#0>=(byte) getCharToProcess::closest_dist#2) goto getCharToProcess::@12 -- vbuxx_ge_vbuz1_then_la1 cpx.z closest_dist bcs __b12 jmp __b5 // getCharToProcess::@5 __b5: - // [125] (byte) getCharToProcess::return_x#7 ← (byte) getCharToProcess::x#2 -- vbuz1=vbuyy + // [117] (byte) getCharToProcess::return_x#7 ← (byte) getCharToProcess::x#2 -- vbuz1=vbuyy sty.z return_x - // [126] (byte) getCharToProcess::return_y#7 ← (byte) getCharToProcess::y#7 -- vbuz1=vbuz2 + // [118] (byte) getCharToProcess::return_y#7 ← (byte) getCharToProcess::y#7 -- vbuz1=vbuz2 lda.z y sta.z return_y - // [127] phi from getCharToProcess::@11 getCharToProcess::@12 getCharToProcess::@5 to getCharToProcess::@3 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3] + // [119] phi from getCharToProcess::@11 getCharToProcess::@12 getCharToProcess::@5 to getCharToProcess::@3 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3] __b3_from___b11: __b3_from___b12: __b3_from___b5: - // [127] phi (byte) getCharToProcess::return_y#1 = (byte) getCharToProcess::closest_y#7 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#0] -- register_copy - // [127] phi (byte) getCharToProcess::return_x#1 = (byte) getCharToProcess::closest_x#7 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#1] -- register_copy - // [127] phi (byte) getCharToProcess::return_dist#1 = (byte) getCharToProcess::return_dist#5 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#2] -- register_copy + // [119] phi (byte) getCharToProcess::return_y#1 = (byte) getCharToProcess::closest_y#7 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#0] -- register_copy + // [119] phi (byte) getCharToProcess::return_x#1 = (byte) getCharToProcess::closest_x#7 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#1] -- register_copy + // [119] phi (byte) getCharToProcess::return_dist#1 = (byte) getCharToProcess::return_dist#5 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#2] -- register_copy jmp __b3 // getCharToProcess::@3 __b3: - // [128] (byte) getCharToProcess::x#1 ← ++ (byte) getCharToProcess::x#2 -- vbuyy=_inc_vbuyy + // [120] (byte) getCharToProcess::x#1 ← ++ (byte) getCharToProcess::x#2 -- vbuyy=_inc_vbuyy iny - // [129] if((byte) getCharToProcess::x#1!=(byte) $28) goto getCharToProcess::@10 -- vbuyy_neq_vbuc1_then_la1 + // [121] if((byte) getCharToProcess::x#1!=(byte) $28) goto getCharToProcess::@10 -- vbuyy_neq_vbuc1_then_la1 cpy #$28 bne __b10 jmp __b6 // getCharToProcess::@6 __b6: - // [130] (byte*) getCharToProcess::screen_line#1 ← (byte*) getCharToProcess::screen_line#4 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [122] (byte*) getCharToProcess::screen_line#1 ← (byte*) getCharToProcess::screen_line#4 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc.z screen_line @@ -8553,7 +8413,7 @@ getCharToProcess: { bcc !+ inc.z screen_line+1 !: - // [131] (byte*) getCharToProcess::dist_line#1 ← (byte*) getCharToProcess::dist_line#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [123] (byte*) getCharToProcess::dist_line#1 ← (byte*) getCharToProcess::dist_line#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc.z dist_line @@ -8561,27 +8421,27 @@ getCharToProcess: { bcc !+ inc.z dist_line+1 !: - // [132] (byte) getCharToProcess::y#1 ← ++ (byte) getCharToProcess::y#7 -- vbuz1=_inc_vbuz1 + // [124] (byte) getCharToProcess::y#1 ← ++ (byte) getCharToProcess::y#7 -- vbuz1=_inc_vbuz1 inc.z y - // [133] if((byte) getCharToProcess::y#1!=(byte) $19) goto getCharToProcess::@9 -- vbuz1_neq_vbuc1_then_la1 + // [125] if((byte) getCharToProcess::y#1!=(byte) $19) goto getCharToProcess::@9 -- vbuz1_neq_vbuc1_then_la1 lda #$19 cmp.z y bne __b9 jmp __b7 // getCharToProcess::@7 __b7: - // [134] if((byte) getCharToProcess::return_dist#1==(const byte) NOT_FOUND) goto getCharToProcess::@return -- vbuxx_eq_vbuc1_then_la1 + // [126] if((byte) getCharToProcess::return_dist#1==(const byte) NOT_FOUND) goto getCharToProcess::@return -- vbuxx_eq_vbuc1_then_la1 cpx #NOT_FOUND beq __breturn jmp __b8 // getCharToProcess::@8 __b8: - // [135] (word~) getCharToProcess::$8 ← (word)(byte) getCharToProcess::return_y#1 -- vwuz1=_word_vbuz2 + // [127] (word~) getCharToProcess::$8 ← (word)(byte) getCharToProcess::return_y#1 -- vwuz1=_word_vbuz2 lda.z return_y sta.z __8 lda #0 sta.z __8+1 - // [136] (word~) getCharToProcess::$12 ← (word~) getCharToProcess::$8 << (byte) 2 -- vwuz1=vwuz2_rol_2 + // [128] (word~) getCharToProcess::$12 ← (word~) getCharToProcess::$8 << (byte) 2 -- vwuz1=vwuz2_rol_2 lda.z __8 asl sta.z __12 @@ -8590,7 +8450,7 @@ getCharToProcess: { sta.z __12+1 asl.z __12 rol.z __12+1 - // [137] (word~) getCharToProcess::$13 ← (word~) getCharToProcess::$12 + (word~) getCharToProcess::$8 -- vwuz1=vwuz2_plus_vwuz1 + // [129] (word~) getCharToProcess::$13 ← (word~) getCharToProcess::$12 + (word~) getCharToProcess::$8 -- vwuz1=vwuz2_plus_vwuz1 lda.z __13 clc adc.z __12 @@ -8598,14 +8458,14 @@ getCharToProcess: { lda.z __13+1 adc.z __12+1 sta.z __13+1 - // [138] (word~) getCharToProcess::$9 ← (word~) getCharToProcess::$13 << (byte) 3 -- vwuz1=vwuz1_rol_3 + // [130] (word~) getCharToProcess::$9 ← (word~) getCharToProcess::$13 << (byte) 3 -- vwuz1=vwuz1_rol_3 asl.z __9 rol.z __9+1 asl.z __9 rol.z __9+1 asl.z __9 rol.z __9+1 - // [139] (byte*~) getCharToProcess::$10 ← (byte*)(void*) SCREEN_COPY#0 + (word~) getCharToProcess::$9 -- pbuz1=pbuz2_plus_vwuz1 + // [131] (byte*~) getCharToProcess::$10 ← (byte*)(void*) SCREEN_COPY#0 + (word~) getCharToProcess::$9 -- pbuz1=pbuz2_plus_vwuz1 lda.z __10 clc adc.z SCREEN_COPY @@ -8613,7 +8473,7 @@ getCharToProcess: { lda.z __10+1 adc.z SCREEN_COPY+1 sta.z __10+1 - // [140] *((byte*~) getCharToProcess::$10 + (byte) getCharToProcess::return_x#1) ← (byte) ' ' -- pbuz1_derefidx_vbuz2=vbuc1 + // [132] *((byte*~) getCharToProcess::$10 + (byte) getCharToProcess::return_x#1) ← (byte) ' ' -- pbuz1_derefidx_vbuz2=vbuc1 // clear the found char on the screen copy lda #' ' ldy.z return_x @@ -8621,40 +8481,40 @@ getCharToProcess: { jmp __breturn // getCharToProcess::@return __breturn: - // [141] return + // [133] return rts // getCharToProcess::@9 __b9: - // [142] (byte) getCharToProcess::closest_dist#10 ← (byte) getCharToProcess::return_dist#1 -- vbuz1=vbuxx + // [134] (byte) getCharToProcess::closest_dist#10 ← (byte) getCharToProcess::return_dist#1 -- vbuz1=vbuxx stx.z closest_dist - // [120] phi from getCharToProcess::@9 to getCharToProcess::@1 [phi:getCharToProcess::@9->getCharToProcess::@1] + // [112] phi from getCharToProcess::@9 to getCharToProcess::@1 [phi:getCharToProcess::@9->getCharToProcess::@1] __b1_from___b9: - // [120] phi (byte) getCharToProcess::closest_y#9 = (byte) getCharToProcess::return_y#1 [phi:getCharToProcess::@9->getCharToProcess::@1#0] -- register_copy - // [120] phi (byte) getCharToProcess::closest_x#9 = (byte) getCharToProcess::return_x#1 [phi:getCharToProcess::@9->getCharToProcess::@1#1] -- register_copy - // [120] phi (byte) getCharToProcess::y#7 = (byte) getCharToProcess::y#1 [phi:getCharToProcess::@9->getCharToProcess::@1#2] -- register_copy - // [120] phi (byte) getCharToProcess::closest_dist#8 = (byte) getCharToProcess::closest_dist#10 [phi:getCharToProcess::@9->getCharToProcess::@1#3] -- register_copy - // [120] phi (byte*) getCharToProcess::dist_line#6 = (byte*) getCharToProcess::dist_line#1 [phi:getCharToProcess::@9->getCharToProcess::@1#4] -- register_copy - // [120] phi (byte*) getCharToProcess::screen_line#4 = (byte*) getCharToProcess::screen_line#1 [phi:getCharToProcess::@9->getCharToProcess::@1#5] -- register_copy + // [112] phi (byte) getCharToProcess::closest_y#9 = (byte) getCharToProcess::return_y#1 [phi:getCharToProcess::@9->getCharToProcess::@1#0] -- register_copy + // [112] phi (byte) getCharToProcess::closest_x#9 = (byte) getCharToProcess::return_x#1 [phi:getCharToProcess::@9->getCharToProcess::@1#1] -- register_copy + // [112] phi (byte) getCharToProcess::y#7 = (byte) getCharToProcess::y#1 [phi:getCharToProcess::@9->getCharToProcess::@1#2] -- register_copy + // [112] phi (byte) getCharToProcess::closest_dist#8 = (byte) getCharToProcess::closest_dist#10 [phi:getCharToProcess::@9->getCharToProcess::@1#3] -- register_copy + // [112] phi (byte*) getCharToProcess::dist_line#6 = (byte*) getCharToProcess::dist_line#1 [phi:getCharToProcess::@9->getCharToProcess::@1#4] -- register_copy + // [112] phi (byte*) getCharToProcess::screen_line#4 = (byte*) getCharToProcess::screen_line#1 [phi:getCharToProcess::@9->getCharToProcess::@1#5] -- register_copy jmp __b1 // getCharToProcess::@10 __b10: - // [143] (byte) getCharToProcess::closest_dist#12 ← (byte) getCharToProcess::return_dist#1 -- vbuz1=vbuxx + // [135] (byte) getCharToProcess::closest_dist#12 ← (byte) getCharToProcess::return_dist#1 -- vbuz1=vbuxx stx.z closest_dist - // [121] phi from getCharToProcess::@10 to getCharToProcess::@2 [phi:getCharToProcess::@10->getCharToProcess::@2] + // [113] phi from getCharToProcess::@10 to getCharToProcess::@2 [phi:getCharToProcess::@10->getCharToProcess::@2] __b2_from___b10: - // [121] phi (byte) getCharToProcess::closest_y#7 = (byte) getCharToProcess::return_y#1 [phi:getCharToProcess::@10->getCharToProcess::@2#0] -- register_copy - // [121] phi (byte) getCharToProcess::closest_x#7 = (byte) getCharToProcess::return_x#1 [phi:getCharToProcess::@10->getCharToProcess::@2#1] -- register_copy - // [121] phi (byte) getCharToProcess::closest_dist#2 = (byte) getCharToProcess::closest_dist#12 [phi:getCharToProcess::@10->getCharToProcess::@2#2] -- register_copy - // [121] phi (byte) getCharToProcess::x#2 = (byte) getCharToProcess::x#1 [phi:getCharToProcess::@10->getCharToProcess::@2#3] -- register_copy + // [113] phi (byte) getCharToProcess::closest_y#7 = (byte) getCharToProcess::return_y#1 [phi:getCharToProcess::@10->getCharToProcess::@2#0] -- register_copy + // [113] phi (byte) getCharToProcess::closest_x#7 = (byte) getCharToProcess::return_x#1 [phi:getCharToProcess::@10->getCharToProcess::@2#1] -- register_copy + // [113] phi (byte) getCharToProcess::closest_dist#2 = (byte) getCharToProcess::closest_dist#12 [phi:getCharToProcess::@10->getCharToProcess::@2#2] -- register_copy + // [113] phi (byte) getCharToProcess::x#2 = (byte) getCharToProcess::x#1 [phi:getCharToProcess::@10->getCharToProcess::@2#3] -- register_copy jmp __b2 // getCharToProcess::@12 __b12: - // [144] (byte) getCharToProcess::return_dist#6 ← (byte) getCharToProcess::closest_dist#2 -- vbuxx=vbuz1 + // [136] (byte) getCharToProcess::return_dist#6 ← (byte) getCharToProcess::closest_dist#2 -- vbuxx=vbuz1 ldx.z closest_dist jmp __b3_from___b12 // getCharToProcess::@11 __b11: - // [145] (byte) getCharToProcess::return_dist#5 ← (byte) getCharToProcess::closest_dist#2 -- vbuxx=vbuz1 + // [137] (byte) getCharToProcess::return_dist#5 ← (byte) getCharToProcess::closest_dist#2 -- vbuxx=vbuz1 ldx.z closest_dist jmp __b3_from___b11 } @@ -8664,35 +8524,35 @@ setupRasterIrq: { .label irqRoutine = irqTop // asm { sei } sei - // [147] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK -- _deref_pbuc1=vbuc2 + // [139] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK -- _deref_pbuc1=vbuc2 // Disable kernal & basic lda #PROCPORT_DDR_MEMORY_MASK sta PROCPORT_DDR - // [148] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 + // [140] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 lda #PROCPORT_RAM_IO sta PROCPORT - // [149] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // [141] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR sta CIA1_INTERRUPT jmp __b1 // setupRasterIrq::@1 __b1: - // [150] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 + // [142] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 lda #$7f and VIC_CONTROL sta VIC_CONTROL jmp __b2 // setupRasterIrq::@2 __b2: - // [151] *((const byte*) RASTER) ← <(const byte) RASTER_IRQ_TOP -- _deref_pbuc1=vbuc2 + // [143] *((const byte*) RASTER) ← <(const byte) RASTER_IRQ_TOP -- _deref_pbuc1=vbuc2 lda #RASTER_IRQ_TOP sta RASTER - // [152] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 + // [144] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 // Enable Raster Interrupt lda #IRQ_RASTER sta IRQ_ENABLE - // [153] *((const void()**) HARDWARE_IRQ) ← (const void()*) setupRasterIrq::irqRoutine#0 -- _deref_pptc1=pprc2 + // [145] *((const void()**) HARDWARE_IRQ) ← (const void()*) setupRasterIrq::irqRoutine#0 -- _deref_pptc1=pprc2 // Set the IRQ routine lda #initSprites::@1] + // [149] phi from initSprites to initSprites::@1 [phi:initSprites->initSprites::@1] __b1_from_initSprites: - // [157] phi (byte*) initSprites::sp#2 = (const byte*) SPRITE_DATA [phi:initSprites->initSprites::@1#0] -- pbuz1=pbuc1 + // [149] phi (byte*) initSprites::sp#2 = (const byte*) SPRITE_DATA [phi:initSprites->initSprites::@1#0] -- pbuz1=pbuc1 lda #SPRITE_DATA @@ -8721,7 +8581,7 @@ initSprites: { // Clear sprite data // initSprites::@1 __b1: - // [158] if((byte*) initSprites::sp#2<(const byte*) SPRITE_DATA+(const byte) NUM_PROCESSING*(byte) $40) goto initSprites::@2 -- pbuz1_lt_pbuc1_then_la1 + // [150] if((byte*) initSprites::sp#2<(const byte*) SPRITE_DATA+(const byte) NUM_PROCESSING*(byte) $40) goto initSprites::@2 -- pbuz1_lt_pbuc1_then_la1 lda.z sp+1 cmp #>SPRITE_DATA+NUM_PROCESSING*$40 bcc __b2 @@ -8730,57 +8590,57 @@ initSprites: { cmp #initSprites::@3] + // [151] phi from initSprites::@1 to initSprites::@3 [phi:initSprites::@1->initSprites::@3] __b3_from___b1: - // [159] phi (byte) initSprites::i#2 = (byte) 0 [phi:initSprites::@1->initSprites::@3#0] -- vbuxx=vbuc1 + // [151] phi (byte) initSprites::i#2 = (byte) 0 [phi:initSprites::@1->initSprites::@3#0] -- vbuxx=vbuc1 ldx #0 jmp __b3 // Initialize sprite registers - // [159] phi from initSprites::@3 to initSprites::@3 [phi:initSprites::@3->initSprites::@3] + // [151] phi from initSprites::@3 to initSprites::@3 [phi:initSprites::@3->initSprites::@3] __b3_from___b3: - // [159] phi (byte) initSprites::i#2 = (byte) initSprites::i#1 [phi:initSprites::@3->initSprites::@3#0] -- register_copy + // [151] phi (byte) initSprites::i#2 = (byte) initSprites::i#1 [phi:initSprites::@3->initSprites::@3#0] -- register_copy jmp __b3 // initSprites::@3 __b3: - // [160] *((const byte*) SPRITES_COLS + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE -- pbuc1_derefidx_vbuxx=vbuc2 + // [152] *((const byte*) SPRITES_COLS + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE -- pbuc1_derefidx_vbuxx=vbuc2 lda #LIGHT_BLUE sta SPRITES_COLS,x - // [161] (byte) initSprites::i#1 ← ++ (byte) initSprites::i#2 -- vbuxx=_inc_vbuxx + // [153] (byte) initSprites::i#1 ← ++ (byte) initSprites::i#2 -- vbuxx=_inc_vbuxx inx - // [162] if((byte) initSprites::i#1!=(byte) 8) goto initSprites::@3 -- vbuxx_neq_vbuc1_then_la1 + // [154] if((byte) initSprites::i#1!=(byte) 8) goto initSprites::@3 -- vbuxx_neq_vbuc1_then_la1 cpx #8 bne __b3_from___b3 jmp __b4 // initSprites::@4 __b4: - // [163] *((const byte*) SPRITES_MC) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [155] *((const byte*) SPRITES_MC) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta SPRITES_MC - // [164] *((const byte*) SPRITES_EXPAND_X) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [156] *((const byte*) SPRITES_EXPAND_X) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta SPRITES_EXPAND_X - // [165] *((const byte*) SPRITES_EXPAND_Y) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [157] *((const byte*) SPRITES_EXPAND_Y) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta SPRITES_EXPAND_Y jmp __breturn // initSprites::@return __breturn: - // [166] return + // [158] return rts // initSprites::@2 __b2: - // [167] *((byte*) initSprites::sp#2) ← (byte) 0 -- _deref_pbuz1=vbuc1 + // [159] *((byte*) initSprites::sp#2) ← (byte) 0 -- _deref_pbuz1=vbuc1 lda #0 ldy #0 sta (sp),y - // [168] (byte*) initSprites::sp#1 ← ++ (byte*) initSprites::sp#2 -- pbuz1=_inc_pbuz1 + // [160] (byte*) initSprites::sp#1 ← ++ (byte*) initSprites::sp#2 -- pbuz1=_inc_pbuz1 inc.z sp bne !+ inc.z sp+1 !: - // [157] phi from initSprites::@2 to initSprites::@1 [phi:initSprites::@2->initSprites::@1] + // [149] phi from initSprites::@2 to initSprites::@1 [phi:initSprites::@2->initSprites::@1] __b1_from___b2: - // [157] phi (byte*) initSprites::sp#2 = (byte*) initSprites::sp#1 [phi:initSprites::@2->initSprites::@1#0] -- register_copy + // [149] phi (byte*) initSprites::sp#2 = (byte*) initSprites::sp#1 [phi:initSprites::@2->initSprites::@1#0] -- register_copy jmp __b1 } // init_angle_screen @@ -8798,8 +8658,8 @@ init_angle_screen: { .label ang_w = $1e .label x = $12 .label xb = $17 - .label y = $b - // [169] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz2_plus_vwuc1 + .label y = 2 + // [161] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz2_plus_vwuc1 lda.z screen clc adc #<$28*$c @@ -8807,7 +8667,7 @@ init_angle_screen: { lda.z screen+1 adc #>$28*$c sta.z screen_topline+1 - // [170] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz1_plus_vwuc1 + // [162] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz1_plus_vwuc1 clc lda.z screen_bottomline adc #<$28*$c @@ -8815,41 +8675,41 @@ init_angle_screen: { lda.z screen_bottomline+1 adc #>$28*$c sta.z screen_bottomline+1 - // [171] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1] + // [163] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1] __b1_from_init_angle_screen: - // [171] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#0 [phi:init_angle_screen->init_angle_screen::@1#0] -- register_copy - // [171] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#0 [phi:init_angle_screen->init_angle_screen::@1#1] -- register_copy - // [171] phi (byte) init_angle_screen::y#5 = (byte) 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1 + // [163] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#0 [phi:init_angle_screen->init_angle_screen::@1#0] -- register_copy + // [163] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#0 [phi:init_angle_screen->init_angle_screen::@1#1] -- register_copy + // [163] phi (byte) init_angle_screen::y#5 = (byte) 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1 lda #0 sta.z y jmp __b1 - // [171] phi from init_angle_screen::@4 to init_angle_screen::@1 [phi:init_angle_screen::@4->init_angle_screen::@1] + // [163] phi from init_angle_screen::@4 to init_angle_screen::@1 [phi:init_angle_screen::@4->init_angle_screen::@1] __b1_from___b4: - // [171] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#0] -- register_copy - // [171] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#1] -- register_copy - // [171] phi (byte) init_angle_screen::y#5 = (byte) init_angle_screen::y#1 [phi:init_angle_screen::@4->init_angle_screen::@1#2] -- register_copy + // [163] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#0] -- register_copy + // [163] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#1] -- register_copy + // [163] phi (byte) init_angle_screen::y#5 = (byte) init_angle_screen::y#1 [phi:init_angle_screen::@4->init_angle_screen::@1#2] -- register_copy jmp __b1 // init_angle_screen::@1 __b1: - // [172] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2] + // [164] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2] __b2_from___b1: - // [172] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 + // [164] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 lda #$27 sta.z xb - // [172] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 + // [164] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 lda #0 sta.z x jmp __b2 // init_angle_screen::@2 __b2: - // [173] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 + // [165] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 lda.z x cmp #$13+1 bcc __b3 jmp __b4 // init_angle_screen::@4 __b4: - // [174] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + // [166] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 lda.z screen_topline sec sbc #<$28 @@ -8857,7 +8717,7 @@ init_angle_screen: { lda.z screen_topline+1 sbc #>$28 sta.z screen_topline+1 - // [175] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [167] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc.z screen_bottomline @@ -8865,47 +8725,47 @@ init_angle_screen: { bcc !+ inc.z screen_bottomline+1 !: - // [176] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 + // [168] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 inc.z y - // [177] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + // [169] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$d cmp.z y bne __b1_from___b4 jmp __breturn // init_angle_screen::@return __breturn: - // [178] return + // [170] return rts // init_angle_screen::@3 __b3: - // [179] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [171] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda.z x asl - // [180] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa + // [172] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa eor #$ff clc adc #$27+1 - // [181] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 + // [173] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 ldy #0 sta.z xw+1 sty.z xw - // [182] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [174] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda.z y asl - // [183] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 + // [175] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 ldy #0 sta.z yw+1 sty.z yw - // [184] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 - // [185] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 - // [186] call atan2_16 + // [176] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 + // [177] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 + // [178] call atan2_16 jsr atan2_16 - // [187] (word) atan2_16::return#2 ← (word) atan2_16::return#0 + // [179] (word) atan2_16::return#2 ← (word) atan2_16::return#0 jmp __b5 // init_angle_screen::@5 __b5: - // [188] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 - // [189] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 + // [180] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 + // [181] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 lda #$80 clc adc.z __11 @@ -8913,43 +8773,43 @@ init_angle_screen: { bcc !+ inc.z __11+1 !: - // [190] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 + // [182] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 lda.z __11+1 sta.z ang_w - // [191] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [183] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 lda.z ang_w ldy.z xb sta (screen_bottomline),y - // [192] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 + // [184] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 lda.z ang_w eor #$ff clc adc #1 - // [193] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa + // [185] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa ldy.z xb sta (screen_topline),y - // [194] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1 + // [186] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1 lda #$80 clc adc.z ang_w - // [195] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa + // [187] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa ldy.z x sta (screen_topline),y - // [196] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1 + // [188] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1 lda #$80 sec sbc.z ang_w - // [197] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuaa + // [189] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuaa ldy.z x sta (screen_bottomline),y - // [198] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 + // [190] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 inc.z x - // [199] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [191] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 dec.z xb - // [172] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2] + // [164] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2] __b2_from___b5: - // [172] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@5->init_angle_screen::@2#0] -- register_copy - // [172] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@5->init_angle_screen::@2#1] -- register_copy + // [164] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@5->init_angle_screen::@2#0] -- register_copy + // [164] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@5->init_angle_screen::@2#1] -- register_copy jmp __b2 } // atan2_16 @@ -8968,13 +8828,13 @@ atan2_16: { .label return = $10 .label x = $1a .label y = $1c - // [200] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1 + // [192] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1 lda.z y+1 bpl __b1 jmp __b2 // atan2_16::@2 __b2: - // [201] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2 + // [193] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2 sec lda #0 sbc.z y @@ -8982,20 +8842,20 @@ atan2_16: { lda #0 sbc.z y+1 sta.z __2+1 - // [202] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3] + // [194] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3] __b3_from___b1: __b3_from___b2: - // [202] phi (signed word) atan2_16::yi#0 = (signed word) atan2_16::yi#16 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3#0] -- register_copy + // [194] phi (signed word) atan2_16::yi#0 = (signed word) atan2_16::yi#16 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3#0] -- register_copy jmp __b3 // atan2_16::@3 __b3: - // [203] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1 + // [195] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1 lda.z x+1 bpl __b4 jmp __b5 // atan2_16::@5 __b5: - // [204] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2 + // [196] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2 sec lda #0 sbc.z x @@ -9003,49 +8863,49 @@ atan2_16: { lda #0 sbc.z x+1 sta.z __7+1 - // [205] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6] + // [197] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6] __b6_from___b4: __b6_from___b5: - // [205] phi (signed word) atan2_16::xi#0 = (signed word) atan2_16::xi#13 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy + // [197] phi (signed word) atan2_16::xi#0 = (signed word) atan2_16::xi#13 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy jmp __b6 // atan2_16::@6 __b6: - // [206] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] + // [198] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] __b10_from___b6: - // [206] phi (word) atan2_16::angle#12 = (word) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1 + // [198] phi (word) atan2_16::angle#12 = (word) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1 lda #<0 sta.z angle lda #>0 sta.z angle+1 - // [206] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1 + // [198] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1 ldx #0 - // [206] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy - // [206] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy + // [198] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy + // [198] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy jmp __b10 // atan2_16::@10 __b10: - // [207] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1 + // [199] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1 lda.z yi+1 bne __b11 lda.z yi bne __b11 - // [208] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12] + // [200] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12] __b12_from___b10: __b12_from___b19: - // [208] phi (word) atan2_16::angle#6 = (word) atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12#0] -- register_copy + // [200] phi (word) atan2_16::angle#6 = (word) atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12#0] -- register_copy jmp __b12 // atan2_16::@12 __b12: - // [209] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz1_ror_1 + // [201] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz1_ror_1 lsr.z angle+1 ror.z angle - // [210] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1 + // [202] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1 lda.z x+1 bpl __b7_from___b12 jmp __b21 // atan2_16::@21 __b21: - // [211] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1 + // [203] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1 sec lda #<$8000 sbc.z angle @@ -9053,20 +8913,20 @@ atan2_16: { lda #>$8000 sbc.z angle+1 sta.z angle+1 - // [212] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7] + // [204] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7] __b7_from___b12: __b7_from___b21: - // [212] phi (word) atan2_16::angle#11 = (word) atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7#0] -- register_copy + // [204] phi (word) atan2_16::angle#11 = (word) atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7#0] -- register_copy jmp __b7 // atan2_16::@7 __b7: - // [213] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1 + // [205] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1 lda.z y+1 bpl __b8_from___b7 jmp __b9 // atan2_16::@9 __b9: - // [214] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1 + // [206] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1 sec lda #0 sbc.z angle @@ -9074,79 +8934,79 @@ atan2_16: { lda #0 sbc.z angle+1 sta.z angle+1 - // [215] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8] + // [207] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8] __b8_from___b7: __b8_from___b9: - // [215] phi (word) atan2_16::return#0 = (word) atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy + // [207] phi (word) atan2_16::return#0 = (word) atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy jmp __b8 // atan2_16::@8 __b8: jmp __breturn // atan2_16::@return __breturn: - // [216] return + // [208] return rts // atan2_16::@11 __b11: - // [217] (byte) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuyy=vbuxx + // [209] (byte) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuyy=vbuxx txa tay - // [218] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2 + // [210] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2 lda.z xi sta.z xd lda.z xi+1 sta.z xd+1 - // [219] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2 + // [211] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2 lda.z yi sta.z yd lda.z yi+1 sta.z yd+1 - // [220] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13] + // [212] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13] __b13_from___b11: __b13_from___b14: - // [220] phi (signed word) atan2_16::yd#3 = (signed word) atan2_16::yd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#0] -- register_copy - // [220] phi (signed word) atan2_16::xd#3 = (signed word) atan2_16::xd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#1] -- register_copy - // [220] phi (byte) atan2_16::shift#2 = (byte) atan2_16::shift#5 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#2] -- register_copy + // [212] phi (signed word) atan2_16::yd#3 = (signed word) atan2_16::yd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#0] -- register_copy + // [212] phi (signed word) atan2_16::xd#3 = (signed word) atan2_16::xd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#1] -- register_copy + // [212] phi (byte) atan2_16::shift#2 = (byte) atan2_16::shift#5 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#2] -- register_copy jmp __b13 // atan2_16::@13 __b13: - // [221] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 -- vbuyy_ge_vbuc1_then_la1 + // [213] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 -- vbuyy_ge_vbuc1_then_la1 cpy #2 bcs __b14 jmp __b15 // atan2_16::@15 __b15: - // [222] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 -- vbuc1_eq_vbuyy_then_la1 + // [214] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 -- vbuc1_eq_vbuyy_then_la1 cpy #0 beq __b17_from___b15 jmp __b16 // atan2_16::@16 __b16: - // [223] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 + // [215] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 lda.z xd+1 cmp #$80 ror.z xd+1 ror.z xd - // [224] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 + // [216] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 lda.z yd+1 cmp #$80 ror.z yd+1 ror.z yd - // [225] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17] + // [217] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17] __b17_from___b15: __b17_from___b16: - // [225] phi (signed word) atan2_16::xd#5 = (signed word) atan2_16::xd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#0] -- register_copy - // [225] phi (signed word) atan2_16::yd#5 = (signed word) atan2_16::yd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#1] -- register_copy + // [217] phi (signed word) atan2_16::xd#5 = (signed word) atan2_16::xd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#0] -- register_copy + // [217] phi (signed word) atan2_16::yd#5 = (signed word) atan2_16::yd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#1] -- register_copy jmp __b17 // atan2_16::@17 __b17: - // [226] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1 + // [218] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1 lda.z yi+1 bpl __b18 jmp __b20 // atan2_16::@20 __b20: - // [227] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_minus_vwsz2 + // [219] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_minus_vwsz2 lda.z xi sec sbc.z yd @@ -9154,7 +9014,7 @@ atan2_16: { lda.z xi+1 sbc.z yd+1 sta.z xi+1 - // [228] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2 + // [220] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2 lda.z yi clc adc.z xd @@ -9162,10 +9022,10 @@ atan2_16: { lda.z yi+1 adc.z xd+1 sta.z yi+1 - // [229] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [221] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl - // [230] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuaa + // [222] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuaa tay sec lda.z angle @@ -9174,30 +9034,30 @@ atan2_16: { lda.z angle+1 sbc CORDIC_ATAN2_ANGLES_16+1,y sta.z angle+1 - // [231] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19] + // [223] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19] __b19_from___b18: __b19_from___b20: - // [231] phi (signed word) atan2_16::xi#8 = (signed word) atan2_16::xi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#0] -- register_copy - // [231] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy - // [231] phi (signed word) atan2_16::yi#8 = (signed word) atan2_16::yi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#2] -- register_copy + // [223] phi (signed word) atan2_16::xi#8 = (signed word) atan2_16::xi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#0] -- register_copy + // [223] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy + // [223] phi (signed word) atan2_16::yi#8 = (signed word) atan2_16::yi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#2] -- register_copy jmp __b19 // atan2_16::@19 __b19: - // [232] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuxx=_inc_vbuxx + // [224] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuxx=_inc_vbuxx inx - // [233] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16-(byte) 1+(byte) 1) goto atan2_16::@12 -- vbuxx_eq_vbuc1_then_la1 + // [225] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16-(byte) 1+(byte) 1) goto atan2_16::@12 -- vbuxx_eq_vbuc1_then_la1 cpx #CORDIC_ITERATIONS_16-1+1 beq __b12_from___b19 - // [206] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10] + // [198] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10] __b10_from___b19: - // [206] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy - // [206] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy - // [206] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy - // [206] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#8 [phi:atan2_16::@19->atan2_16::@10#3] -- register_copy + // [198] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy + // [198] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy + // [198] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy + // [198] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#8 [phi:atan2_16::@19->atan2_16::@10#3] -- register_copy jmp __b10 // atan2_16::@18 __b18: - // [234] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2 + // [226] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2 lda.z xi clc adc.z yd @@ -9205,7 +9065,7 @@ atan2_16: { lda.z xi+1 adc.z yd+1 sta.z xi+1 - // [235] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_minus_vwsz2 + // [227] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_minus_vwsz2 lda.z yi sec sbc.z xd @@ -9213,10 +9073,10 @@ atan2_16: { lda.z yi+1 sbc.z xd+1 sta.z yi+1 - // [236] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [228] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl - // [237] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuaa + // [229] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuaa tay clc lda.z angle @@ -9228,7 +9088,7 @@ atan2_16: { jmp __b19_from___b18 // atan2_16::@14 __b14: - // [238] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 + // [230] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 lda.z xd+1 cmp #$80 ror.z xd+1 @@ -9237,7 +9097,7 @@ atan2_16: { cmp #$80 ror.z xd+1 ror.z xd - // [239] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 + // [231] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 lda.z yd+1 cmp #$80 ror.z yd+1 @@ -9246,13 +9106,13 @@ atan2_16: { cmp #$80 ror.z yd+1 ror.z yd - // [240] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuyy=vbuyy_minus_2 + // [232] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuyy=vbuyy_minus_2 dey dey jmp __b13_from___b14 // atan2_16::@4 __b4: - // [241] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2 + // [233] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2 lda.z x sta.z xi lda.z x+1 @@ -9260,7 +9120,7 @@ atan2_16: { jmp __b6_from___b4 // atan2_16::@1 __b1: - // [242] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2 + // [234] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2 lda.z y sta.z yi lda.z y+1 @@ -9272,7 +9132,7 @@ atan2_16: { // The content of the newly allocated block of memory is not initialized, remaining with indeterminate values. malloc: { .label mem = 9 - // [244] (byte*) malloc::mem#0 ← (byte*) heap_head#5 - (word) $3e8 -- pbuz1=pbuz2_minus_vwuc1 + // [236] (byte*) malloc::mem#0 ← (byte*) heap_head#5 - (word) $3e8 -- pbuz1=pbuz2_minus_vwuc1 lda.z heap_head sec sbc #<$3e8 @@ -9280,7 +9140,7 @@ malloc: { lda.z heap_head+1 sbc #>$3e8 sta.z mem+1 - // [245] (byte*) heap_head#1 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2 + // [237] (byte*) heap_head#1 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2 lda.z mem sta.z heap_head lda.z mem+1 @@ -9288,7 +9148,7 @@ malloc: { jmp __breturn // malloc::@return __breturn: - // [246] return + // [238] return rts } // irqBottom @@ -9298,35 +9158,35 @@ irqBottom: { sta rega+1 stx regx+1 sty regy+1 - // [248] phi from irqBottom to irqBottom::@1 [phi:irqBottom->irqBottom::@1] + // [240] phi from irqBottom to irqBottom::@1 [phi:irqBottom->irqBottom::@1] __b1_from_irqBottom: jmp __b1 // irqBottom::@1 __b1: - // [249] call processChars - // [254] phi from irqBottom::@1 to processChars [phi:irqBottom::@1->processChars] + // [241] call processChars + // [246] phi from irqBottom::@1 to processChars [phi:irqBottom::@1->processChars] processChars_from___b1: jsr processChars jmp __b2 // irqBottom::@2 __b2: - // [250] *((const byte*) RASTER) ← (const byte) RASTER_IRQ_TOP -- _deref_pbuc1=vbuc2 + // [242] *((const byte*) RASTER) ← (const byte) RASTER_IRQ_TOP -- _deref_pbuc1=vbuc2 // Trigger IRQ at the top of the screen lda #RASTER_IRQ_TOP sta RASTER - // [251] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_ALL)(void()) irqTop() -- _deref_pptc1=pprc2 + // [243] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_ALL)(void()) irqTop() -- _deref_pptc1=pprc2 lda #irqTop sta HARDWARE_IRQ+1 - // [252] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 + // [244] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 // Acknowledge the IRQ lda #IRQ_RASTER sta IRQ_STATUS jmp __breturn // irqBottom::@return __breturn: - // [253] return - exit interrupt(HARDWARE_ALL) + // [245] return - exit interrupt(HARDWARE_ALL) rega: lda #00 regx: @@ -9346,43 +9206,43 @@ processChars: { .label xpos = $22 .label ypos = $26 .label numActive = 6 - // [255] phi from processChars to processChars::@1 [phi:processChars->processChars::@1] + // [247] phi from processChars to processChars::@1 [phi:processChars->processChars::@1] __b1_from_processChars: - // [255] phi (byte) processChars::numActive#10 = (byte) 0 [phi:processChars->processChars::@1#0] -- vbuz1=vbuc1 + // [247] phi (byte) processChars::numActive#10 = (byte) 0 [phi:processChars->processChars::@1#0] -- vbuz1=vbuc1 lda #0 sta.z numActive - // [255] phi (byte) processChars::i#10 = (byte) 0 [phi:processChars->processChars::@1#1] -- vbuz1=vbuc1 + // [247] phi (byte) processChars::i#10 = (byte) 0 [phi:processChars->processChars::@1#1] -- vbuz1=vbuc1 lda #0 sta.z i jmp __b1 - // [255] phi from processChars::@2 to processChars::@1 [phi:processChars::@2->processChars::@1] + // [247] phi from processChars::@2 to processChars::@1 [phi:processChars::@2->processChars::@1] __b1_from___b2: - // [255] phi (byte) processChars::numActive#10 = (byte) processChars::numActive#3 [phi:processChars::@2->processChars::@1#0] -- register_copy - // [255] phi (byte) processChars::i#10 = (byte) processChars::i#1 [phi:processChars::@2->processChars::@1#1] -- register_copy + // [247] phi (byte) processChars::numActive#10 = (byte) processChars::numActive#3 [phi:processChars::@2->processChars::@1#0] -- register_copy + // [247] phi (byte) processChars::i#10 = (byte) processChars::i#1 [phi:processChars::@2->processChars::@1#1] -- register_copy jmp __b1 // processChars::@1 __b1: - // [256] (byte~) processChars::$62 ← (byte) processChars::i#10 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [248] (byte~) processChars::$62 ← (byte) processChars::i#10 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda.z i asl - // [257] (byte~) processChars::$63 ← (byte~) processChars::$62 + (byte) processChars::i#10 -- vbuaa=vbuaa_plus_vbuz1 + // [249] (byte~) processChars::$63 ← (byte~) processChars::$62 + (byte) processChars::i#10 -- vbuaa=vbuaa_plus_vbuz1 clc adc.z i - // [258] (byte~) processChars::$64 ← (byte~) processChars::$63 << (byte) 1 -- vbuaa=vbuaa_rol_1 + // [250] (byte~) processChars::$64 ← (byte~) processChars::$63 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl - // [259] (byte~) processChars::$65 ← (byte~) processChars::$64 + (byte) processChars::i#10 -- vbuaa=vbuaa_plus_vbuz1 + // [251] (byte~) processChars::$65 ← (byte~) processChars::$64 + (byte) processChars::i#10 -- vbuaa=vbuaa_plus_vbuz1 clc adc.z i - // [260] (byte~) processChars::$32 ← (byte~) processChars::$65 << (byte) 1 -- vbuaa=vbuaa_rol_1 + // [252] (byte~) processChars::$32 ← (byte~) processChars::$65 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl - // [261] (struct ProcessingSprite*) processChars::processing#0 ← (const struct ProcessingSprite*) PROCESSING + (byte~) processChars::$32 -- pssz1=pssc1_plus_vbuaa + // [253] (struct ProcessingSprite*) processChars::processing#0 ← (const struct ProcessingSprite*) PROCESSING + (byte~) processChars::$32 -- pssz1=pssc1_plus_vbuaa clc adc #PROCESSING adc #0 sta.z processing+1 - // [262] (byte) processChars::bitmask#0 ← (byte) 1 << *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID) -- vbuz1=vbuc1_rol_pbuz2_derefidx_vbuc2 + // [254] (byte) processChars::bitmask#0 ← (byte) 1 << *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID) -- vbuz1=vbuc1_rol_pbuz2_derefidx_vbuc2 ldy #OFFSET_STRUCT_PROCESSINGSPRITE_ID lda (processing),y tay @@ -9395,7 +9255,7 @@ processChars: { bne !- !e: sta.z bitmask - // [263] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)==(const byte) STATUS_FREE) goto processChars::@2 -- pbuz1_derefidx_vbuc1_eq_vbuc2_then_la1 + // [255] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)==(const byte) STATUS_FREE) goto processChars::@2 -- pbuz1_derefidx_vbuc1_eq_vbuc2_then_la1 lda #STATUS_FREE ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS cmp (processing),y @@ -9403,7 +9263,7 @@ processChars: { jmp __b10 // processChars::@10 __b10: - // [264] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)!=(const byte) STATUS_NEW) goto processChars::@3 -- pbuz1_derefidx_vbuc1_neq_vbuc2_then_la1 + // [256] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)!=(const byte) STATUS_NEW) goto processChars::@3 -- pbuz1_derefidx_vbuc1_neq_vbuc2_then_la1 ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS lda (processing),y cmp #STATUS_NEW @@ -9411,7 +9271,7 @@ processChars: { jmp __b11 // processChars::@11 __b11: - // [265] *(*((byte**)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR)) ← (byte) ' ' -- _deref_(pptz1_derefidx_vbuc1)=vbuc2 + // [257] *(*((byte**)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR)) ← (byte) ' ' -- _deref_(pptz1_derefidx_vbuc1)=vbuc2 // Clear the char on the screen ldx #' ' ldy #OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR @@ -9422,12 +9282,12 @@ processChars: { sta !+ +2 !: stx $ffff - // [266] *((const byte*) SPRITES_ENABLE) ← *((const byte*) SPRITES_ENABLE) | (byte) processChars::bitmask#0 -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1 + // [258] *((const byte*) SPRITES_ENABLE) ← *((const byte*) SPRITES_ENABLE) | (byte) processChars::bitmask#0 -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1 // Enable the sprite lda SPRITES_ENABLE ora.z bitmask sta SPRITES_ENABLE - // [267] *((const byte*) SPRITES_COLS + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL) -- pbuc1_derefidx_(pbuz1_derefidx_vbuc2)=pbuz1_derefidx_vbuc3 + // [259] *((const byte*) SPRITES_COLS + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL) -- pbuc1_derefidx_(pbuz1_derefidx_vbuc2)=pbuz1_derefidx_vbuc3 // Set the sprite color ldy #OFFSET_STRUCT_PROCESSINGSPRITE_COL lda (processing),y @@ -9437,7 +9297,7 @@ processChars: { tay pla sta SPRITES_COLS,y - // [268] *((const byte*) SCREEN+(const word) SPRITE_PTRS + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR) -- pbuc1_derefidx_(pbuz1_derefidx_vbuc2)=pbuz1_derefidx_vbuc3 + // [260] *((const byte*) SCREEN+(const word) SPRITE_PTRS + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR) -- pbuc1_derefidx_(pbuz1_derefidx_vbuc2)=pbuz1_derefidx_vbuc3 // Set sprite pointer ldy #OFFSET_STRUCT_PROCESSINGSPRITE_PTR lda (processing),y @@ -9447,7 +9307,7 @@ processChars: { tay pla sta SCREEN+SPRITE_PTRS,y - // [269] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_PROCESSING -- pbuz1_derefidx_vbuc1=vbuc2 + // [261] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_PROCESSING -- pbuz1_derefidx_vbuc1=vbuc2 // Set status lda #STATUS_PROCESSING ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS @@ -9455,7 +9315,7 @@ processChars: { jmp __b3 // processChars::@3 __b3: - // [270] (word) processChars::xpos#0 ← *((word*)(struct ProcessingSprite*) processChars::processing#0) >> (byte) 4 -- vwuz1=_deref_pwuz2_ror_4 + // [262] (word) processChars::xpos#0 ← *((word*)(struct ProcessingSprite*) processChars::processing#0) >> (byte) 4 -- vwuz1=_deref_pwuz2_ror_4 ldy #0 lda (processing),y sta.z xpos @@ -9470,33 +9330,33 @@ processChars: { ror.z xpos lsr.z xpos+1 ror.z xpos - // [271] (byte~) processChars::$9 ← > (word) processChars::xpos#0 -- vbuaa=_hi_vwuz1 + // [263] (byte~) processChars::$9 ← > (word) processChars::xpos#0 -- vbuaa=_hi_vwuz1 lda.z xpos+1 - // [272] if((byte) 0!=(byte~) processChars::$9) goto processChars::@4 -- vbuc1_neq_vbuaa_then_la1 + // [264] if((byte) 0!=(byte~) processChars::$9) goto processChars::@4 -- vbuc1_neq_vbuaa_then_la1 // Set sprite position cmp #0 bne __b4 jmp __b8 // processChars::@8 __b8: - // [273] (byte~) processChars::$10 ← (byte) $ff ^ (byte) processChars::bitmask#0 -- vbuaa=vbuc1_bxor_vbuz1 + // [265] (byte~) processChars::$10 ← (byte) $ff ^ (byte) processChars::bitmask#0 -- vbuaa=vbuc1_bxor_vbuz1 lda #$ff eor.z bitmask - // [274] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) & (byte~) processChars::$10 -- _deref_pbuc1=_deref_pbuc1_band_vbuaa + // [266] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) & (byte~) processChars::$10 -- _deref_pbuc1=_deref_pbuc1_band_vbuaa and SPRITES_XMSB sta SPRITES_XMSB jmp __b5 // processChars::@5 __b5: - // [275] (byte~) processChars::$15 ← (byte) processChars::i#10 << (byte) 1 -- vbuxx=vbuz1_rol_1 + // [267] (byte~) processChars::$15 ← (byte) processChars::i#10 << (byte) 1 -- vbuxx=vbuz1_rol_1 lda.z i asl tax - // [276] (byte~) processChars::$12 ← (byte)(word) processChars::xpos#0 -- vbuaa=_byte_vwuz1 + // [268] (byte~) processChars::$12 ← (byte)(word) processChars::xpos#0 -- vbuaa=_byte_vwuz1 lda.z xpos - // [277] *((const byte*) SPRITES_XPOS + (byte~) processChars::$15) ← (byte~) processChars::$12 -- pbuc1_derefidx_vbuxx=vbuaa + // [269] *((const byte*) SPRITES_XPOS + (byte~) processChars::$15) ← (byte~) processChars::$12 -- pbuc1_derefidx_vbuxx=vbuaa sta SPRITES_XPOS,x - // [278] (word~) processChars::$13 ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) >> (byte) 4 -- vwuz1=pwuz2_derefidx_vbuc1_ror_4 + // [270] (word~) processChars::$13 ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) >> (byte) 4 -- vwuz1=pwuz2_derefidx_vbuc1_ror_4 ldy #OFFSET_STRUCT_PROCESSINGSPRITE_Y lda (processing),y sta.z __13 @@ -9511,13 +9371,13 @@ processChars: { ror.z __13 lsr.z __13+1 ror.z __13 - // [279] (byte) processChars::ypos#0 ← (byte)(word~) processChars::$13 -- vbuz1=_byte_vwuz2 + // [271] (byte) processChars::ypos#0 ← (byte)(word~) processChars::$13 -- vbuz1=_byte_vwuz2 lda.z __13 sta.z ypos - // [280] *((const byte*) SPRITES_YPOS + (byte~) processChars::$15) ← (byte) processChars::ypos#0 -- pbuc1_derefidx_vbuxx=vbuz1 + // [272] *((const byte*) SPRITES_YPOS + (byte~) processChars::$15) ← (byte) processChars::ypos#0 -- pbuc1_derefidx_vbuxx=vbuz1 lda.z ypos sta SPRITES_YPOS,x - // [281] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)<(const word) XPOS_LEFTMOST) goto processChars::@6 -- _deref_pwuz1_lt_vwuc1_then_la1 + // [273] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)<(const word) XPOS_LEFTMOST) goto processChars::@6 -- _deref_pwuz1_lt_vwuc1_then_la1 // Move sprite ldy #1 lda (processing),y @@ -9532,7 +9392,7 @@ processChars: { jmp __b14 // processChars::@14 __b14: - // [282] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)>(const word) XPOS_RIGHTMOST) goto processChars::@6 -- _deref_pwuz1_gt_vwuc1_then_la1 + // [274] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)>(const word) XPOS_RIGHTMOST) goto processChars::@6 -- _deref_pwuz1_gt_vwuc1_then_la1 ldy #1 lda #>XPOS_RIGHTMOST cmp (processing),y @@ -9546,7 +9406,7 @@ processChars: { jmp __b13 // processChars::@13 __b13: - // [283] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)<(const word) YPOS_TOPMOST) goto processChars::@6 -- pwuz1_derefidx_vbuc1_lt_vwuc2_then_la1 + // [275] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)<(const word) YPOS_TOPMOST) goto processChars::@6 -- pwuz1_derefidx_vbuc1_lt_vwuc2_then_la1 ldy #OFFSET_STRUCT_PROCESSINGSPRITE_Y iny lda (processing),y @@ -9561,7 +9421,7 @@ processChars: { jmp __b12 // processChars::@12 __b12: - // [284] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)>(const word) YPOS_BOTTOMMOST) goto processChars::@6 -- pwuz1_derefidx_vbuc1_gt_vwuc2_then_la1 + // [276] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)>(const word) YPOS_BOTTOMMOST) goto processChars::@6 -- pwuz1_derefidx_vbuc1_gt_vwuc2_then_la1 ldy #OFFSET_STRUCT_PROCESSINGSPRITE_Y iny lda #>YPOS_BOTTOMMOST @@ -9576,21 +9436,21 @@ processChars: { jmp __b9 // processChars::@9 __b9: - // [285] (word~) processChars::$23 ← (word) processChars::xpos#0 >> (byte) 3 -- vwuz1=vwuz1_ror_3 + // [277] (word~) processChars::$23 ← (word) processChars::xpos#0 >> (byte) 3 -- vwuz1=vwuz1_ror_3 lsr.z __23+1 ror.z __23 lsr.z __23+1 ror.z __23 lsr.z __23+1 ror.z __23 - // [286] (byte~) processChars::$24 ← (byte)(word~) processChars::$23 -- vbuaa=_byte_vwuz1 + // [278] (byte~) processChars::$24 ← (byte)(word~) processChars::$23 -- vbuaa=_byte_vwuz1 lda.z __23 - // [287] (byte) processChars::xchar#0 ← (byte~) processChars::$24 - (const byte) BORDER_XPOS_LEFT/(byte) 8 -- vbuaa=vbuaa_minus_vbuc1 + // [279] (byte) processChars::xchar#0 ← (byte~) processChars::$24 - (const byte) BORDER_XPOS_LEFT/(byte) 8 -- vbuaa=vbuaa_minus_vbuc1 sec sbc #BORDER_XPOS_LEFT/8 - // [288] (byte~) processChars::$33 ← (byte) processChars::xchar#0 << (byte) 1 -- vbuaa=vbuaa_rol_1 + // [280] (byte~) processChars::$33 ← (byte) processChars::xchar#0 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl - // [289] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) + *((const word*) VXSIN + (byte~) processChars::$33) -- pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuc2_derefidx_vbuaa + // [281] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) + *((const word*) VXSIN + (byte~) processChars::$33) -- pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuc2_derefidx_vbuaa ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VX tax clc @@ -9601,7 +9461,7 @@ processChars: { lda (processing),y adc VXSIN+1,x sta (processing),y - // [290] *((word*)(struct ProcessingSprite*) processChars::processing#0) ← *((word*)(struct ProcessingSprite*) processChars::processing#0) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) -- _deref_pwuz1=_deref_pwuz1_plus_pwuz1_derefidx_vbuc1 + // [282] *((word*)(struct ProcessingSprite*) processChars::processing#0) ← *((word*)(struct ProcessingSprite*) processChars::processing#0) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) -- _deref_pwuz1=_deref_pwuz1_plus_pwuz1_derefidx_vbuc1 ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VX sty.z $ff clc @@ -9615,17 +9475,17 @@ processChars: { ldy #1 adc (processing),y sta (processing),y - // [291] (byte~) processChars::$27 ← (byte) processChars::ypos#0 >> (byte) 3 -- vbuaa=vbuz1_ror_3 + // [283] (byte~) processChars::$27 ← (byte) processChars::ypos#0 >> (byte) 3 -- vbuaa=vbuz1_ror_3 lda.z ypos lsr lsr lsr - // [292] (byte) processChars::ychar#0 ← (byte~) processChars::$27 - (const byte) BORDER_YPOS_TOP/(byte) 8 -- vbuaa=vbuaa_minus_vbuc1 + // [284] (byte) processChars::ychar#0 ← (byte~) processChars::$27 - (const byte) BORDER_YPOS_TOP/(byte) 8 -- vbuaa=vbuaa_minus_vbuc1 sec sbc #BORDER_YPOS_TOP/8 - // [293] (byte~) processChars::$34 ← (byte) processChars::ychar#0 << (byte) 1 -- vbuaa=vbuaa_rol_1 + // [285] (byte~) processChars::$34 ← (byte) processChars::ychar#0 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl - // [294] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) + *((const word*) VYSIN + (byte~) processChars::$34) -- pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuc2_derefidx_vbuaa + // [286] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) + *((const word*) VYSIN + (byte~) processChars::$34) -- pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuc2_derefidx_vbuaa ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VY tax clc @@ -9636,7 +9496,7 @@ processChars: { lda (processing),y adc VYSIN+1,x sta (processing),y - // [295] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) -- pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuz1_derefidx_vbuc2 + // [287] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) -- pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuz1_derefidx_vbuc2 ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VY clc lda (processing),y @@ -9651,44 +9511,44 @@ processChars: { jmp __b7 // processChars::@7 __b7: - // [296] (byte) processChars::numActive#1 ← ++ (byte) processChars::numActive#10 -- vbuz1=_inc_vbuz1 + // [288] (byte) processChars::numActive#1 ← ++ (byte) processChars::numActive#10 -- vbuz1=_inc_vbuz1 inc.z numActive - // [297] phi from processChars::@1 processChars::@7 to processChars::@2 [phi:processChars::@1/processChars::@7->processChars::@2] + // [289] phi from processChars::@1 processChars::@7 to processChars::@2 [phi:processChars::@1/processChars::@7->processChars::@2] __b2_from___b1: __b2_from___b7: - // [297] phi (byte) processChars::numActive#3 = (byte) processChars::numActive#10 [phi:processChars::@1/processChars::@7->processChars::@2#0] -- register_copy + // [289] phi (byte) processChars::numActive#3 = (byte) processChars::numActive#10 [phi:processChars::@1/processChars::@7->processChars::@2#0] -- register_copy jmp __b2 // processChars::@2 __b2: - // [298] (byte) processChars::i#1 ← ++ (byte) processChars::i#10 -- vbuz1=_inc_vbuz1 + // [290] (byte) processChars::i#1 ← ++ (byte) processChars::i#10 -- vbuz1=_inc_vbuz1 inc.z i - // [299] if((byte) processChars::i#1!=(const byte) NUM_PROCESSING-(byte) 1+(byte) 1) goto processChars::@1 -- vbuz1_neq_vbuc1_then_la1 + // [291] if((byte) processChars::i#1!=(const byte) NUM_PROCESSING-(byte) 1+(byte) 1) goto processChars::@1 -- vbuz1_neq_vbuc1_then_la1 lda #NUM_PROCESSING-1+1 cmp.z i bne __b1_from___b2 jmp __breturn // processChars::@return __breturn: - // [300] return + // [292] return rts // processChars::@6 __b6: - // [301] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_FREE -- pbuz1_derefidx_vbuc1=vbuc2 + // [293] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_FREE -- pbuz1_derefidx_vbuc1=vbuc2 // Set status to FREE lda #STATUS_FREE ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS sta (processing),y - // [302] (byte~) processChars::$29 ← (byte) $ff ^ (byte) processChars::bitmask#0 -- vbuaa=vbuc1_bxor_vbuz1 + // [294] (byte~) processChars::$29 ← (byte) $ff ^ (byte) processChars::bitmask#0 -- vbuaa=vbuc1_bxor_vbuz1 lda #$ff eor.z bitmask - // [303] *((const byte*) SPRITES_ENABLE) ← *((const byte*) SPRITES_ENABLE) & (byte~) processChars::$29 -- _deref_pbuc1=_deref_pbuc1_band_vbuaa + // [295] *((const byte*) SPRITES_ENABLE) ← *((const byte*) SPRITES_ENABLE) & (byte~) processChars::$29 -- _deref_pbuc1=_deref_pbuc1_band_vbuaa // Disable the sprite and SPRITES_ENABLE sta SPRITES_ENABLE jmp __b7 // processChars::@4 __b4: - // [304] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) | (byte) processChars::bitmask#0 -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1 + // [296] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) | (byte) processChars::bitmask#0 -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1 lda SPRITES_XMSB ora.z bitmask sta SPRITES_XMSB @@ -9704,23 +9564,23 @@ irqTop: { jmp __b1 // irqTop::@1 __b1: - // [306] *((const byte*) RASTER) ← (const byte) RASTER_IRQ_MIDDLE -- _deref_pbuc1=vbuc2 + // [298] *((const byte*) RASTER) ← (const byte) RASTER_IRQ_MIDDLE -- _deref_pbuc1=vbuc2 // Trigger IRQ at the middle of the screen lda #RASTER_IRQ_MIDDLE sta RASTER - // [307] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_ALL)(void()) irqBottom() -- _deref_pptc1=pprc2 + // [299] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_ALL)(void()) irqBottom() -- _deref_pptc1=pprc2 lda #irqBottom sta HARDWARE_IRQ+1 - // [308] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 + // [300] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 // Acknowledge the IRQ lda #IRQ_RASTER sta IRQ_STATUS jmp __breturn // irqTop::@return __breturn: - // [309] return - exit interrupt(HARDWARE_ALL) + // [301] return - exit interrupt(HARDWARE_ALL) rega: lda #00 regx: @@ -9749,6 +9609,9 @@ VYSIN: // Sprites currently being processed in the interrupt PROCESSING: .fill $e*NUM_PROCESSING, 0 + __2: .word 0, 0, 0, 0 + .byte 0, 0, 0, STATUS_FREE + .word 0 ASSEMBLER OPTIMIZATIONS Removing instruction jmp __b1 @@ -9831,17 +9694,6 @@ Removing instruction jmp __breturn Removing instruction jmp __b1 Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination -Removing instruction lda #>0 -Removing instruction lda #<0 -Removing instruction lda #>0 -Removing instruction lda #<0 -Removing instruction lda #>0 -Removing instruction lda #<0 -Removing instruction lda #>0 -Removing instruction lda #0 -Removing instruction lda #0 -Removing instruction lda #0 -Removing instruction lda #>0 Removing instruction ldy #0 Replacing instruction lda #0 with TYA Removing instruction ldy #0 @@ -10007,25 +9859,26 @@ Removing instruction jmp __b1 Succesful ASM optimization Pass5NextJumpElimination Removing instruction ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS Succesful ASM optimization Pass5UnnecesaryLoadElimination -Fixing long branch [459] bne __b2 to beq -Fixing long branch [874] beq __b12 to bne -Fixing long branch [1217] bne __b1 to beq -Fixing long branch [235] bne __b3 to beq -Fixing long branch [241] beq __b8 to bne -Fixing long branch [504] beq __b11 to bne -Fixing long branch [774] bpl __b1 to bmi -Fixing long branch [786] bpl __b4 to bmi -Fixing long branch [1031] beq __b2 to bne -Fixing long branch [1091] bne __b4 to beq +Fixing long branch [452] bne __b2 to beq +Fixing long branch [867] beq __b12 to bne +Fixing long branch [1210] bne __b1 to beq +Fixing long branch [228] bne __b3 to beq +Fixing long branch [234] beq __b8 to bne +Fixing long branch [497] beq __b11 to bne +Fixing long branch [767] bpl __b1 to bmi +Fixing long branch [779] bpl __b4 to bmi +Fixing long branch [1024] beq __b2 to bne +Fixing long branch [1084] bne __b4 to beq +Fixing long branch [1118] bcc __b6 to bcs Fixing long branch [1125] bcc __b6 to bcs Fixing long branch [1132] bcc __b6 to bcs Fixing long branch [1139] bcc __b6 to bcs -Fixing long branch [1146] bcc __b6 to bcs +Fixing long branch [1147] bcc __b6 to bcs Fixing long branch [1154] bcc __b6 to bcs -Fixing long branch [1161] bcc __b6 to bcs -Fixing long branch [1169] bcc __b6 to bcs +Fixing long branch [1162] bcc __b6 to bcs FINAL SYMBOL TABLE +(const struct ProcessingSprite) $2 = { x: (word) 0, y: (word) 0, vx: (word) 0, vy: (word) 0, id: (byte) 0, ptr: (byte) 0, col: (byte) 0, status: (const byte) STATUS_FREE, screenPtr: (byte*) 0 } (label) @1 (label) @2 (label) @3 @@ -10087,9 +9940,10 @@ FINAL SYMBOL TABLE (const byte) RASTER_IRQ_TOP = (byte) $30 (const byte*) SCREEN = (byte*) 1024 (byte*) SCREEN_COPY -(void*) SCREEN_COPY#0 SCREEN_COPY zp[2]:7 0.0273972602739726 +(void*) SCREEN_COPY#0 SCREEN_COPY zp[2]:7 0.03076923076923077 (byte*) SCREEN_DIST -(void*) SCREEN_DIST#0 SCREEN_DIST zp[2]:9 0.028169014084507043 +(void*) SCREEN_DIST#0 SCREEN_DIST zp[2]:9 0.031746031746031744 +(const byte) SIZEOF_STRUCT_PROCESSINGSPRITE = (byte) $e (const byte*) SPRITES_COLS = (byte*) 53287 (const byte*) SPRITES_ENABLE = (byte*) 53269 (const byte*) SPRITES_EXPAND_X = (byte*) 53277 @@ -10213,16 +10067,16 @@ FINAL SYMBOL TABLE (label) getCharToProcess::@9 (label) getCharToProcess::@return (byte) getCharToProcess::closest_dist -(byte) getCharToProcess::closest_dist#10 closest_dist zp[1]:11 202.0 -(byte) getCharToProcess::closest_dist#12 closest_dist zp[1]:11 2002.0 -(byte) getCharToProcess::closest_dist#2 closest_dist zp[1]:11 1026.25 -(byte) getCharToProcess::closest_dist#8 closest_dist zp[1]:11 202.0 +(byte) getCharToProcess::closest_dist#10 closest_dist zp[1]:18 202.0 +(byte) getCharToProcess::closest_dist#12 closest_dist zp[1]:18 2002.0 +(byte) getCharToProcess::closest_dist#2 closest_dist zp[1]:18 1026.25 +(byte) getCharToProcess::closest_dist#8 closest_dist zp[1]:18 202.0 (byte) getCharToProcess::closest_x -(byte) getCharToProcess::closest_x#7 closest_x zp[1]:18 517.3333333333334 -(byte) getCharToProcess::closest_x#9 closest_x zp[1]:18 202.0 +(byte) getCharToProcess::closest_x#7 closest_x zp[1]:23 517.3333333333334 +(byte) getCharToProcess::closest_x#9 closest_x zp[1]:23 202.0 (byte) getCharToProcess::closest_y -(byte) getCharToProcess::closest_y#7 closest_y zp[1]:23 517.3333333333334 -(byte) getCharToProcess::closest_y#9 closest_y zp[1]:23 202.0 +(byte) getCharToProcess::closest_y#7 closest_y zp[1]:11 517.3333333333334 +(byte) getCharToProcess::closest_y#9 closest_y zp[1]:11 202.0 (byte) getCharToProcess::dist (byte) getCharToProcess::dist#0 reg byte x 750.75 (byte*) getCharToProcess::dist_line @@ -10237,12 +10091,12 @@ FINAL SYMBOL TABLE (byte) getCharToProcess::return_dist#6 reg byte x 2002.0 (byte) getCharToProcess::return_x (byte) getCharToProcess::return_x#0 reg byte y 7.333333333333333 -(byte) getCharToProcess::return_x#1 return_x zp[1]:18 228.7777777777778 -(byte) getCharToProcess::return_x#7 return_x zp[1]:18 1001.0 +(byte) getCharToProcess::return_x#1 return_x zp[1]:23 228.7777777777778 +(byte) getCharToProcess::return_x#7 return_x zp[1]:23 1001.0 (byte) getCharToProcess::return_y (byte) getCharToProcess::return_y#0 reg byte a 7.333333333333333 -(byte) getCharToProcess::return_y#1 return_y zp[1]:23 216.6315789473684 -(byte) getCharToProcess::return_y#7 return_y zp[1]:23 2002.0 +(byte) getCharToProcess::return_y#1 return_y zp[1]:11 216.6315789473684 +(byte) getCharToProcess::return_y#7 return_y zp[1]:11 2002.0 (byte*) getCharToProcess::screen_line (byte*) getCharToProcess::screen_line#0 screen_line zp[2]:28 2.0 (byte*) getCharToProcess::screen_line#1 screen_line zp[2]:28 40.4 @@ -10305,8 +10159,8 @@ FINAL SYMBOL TABLE (signed word) init_angle_screen::xw (word) init_angle_screen::xw#0 xw zp[2]:26 33.666666666666664 (byte) init_angle_screen::y -(byte) init_angle_screen::y#1 y zp[1]:11 16.5 -(byte) init_angle_screen::y#5 y zp[1]:11 4.730769230769231 +(byte) init_angle_screen::y#1 y zp[1]:2 16.5 +(byte) init_angle_screen::y#5 y zp[1]:2 4.730769230769231 (signed word) init_angle_screen::yw (word) init_angle_screen::yw#0 yw zp[2]:28 50.5 interrupt(HARDWARE_ALL)(void()) irqBottom() @@ -10320,11 +10174,11 @@ interrupt(HARDWARE_ALL)(void()) irqTop() (byte) irqTop::i (byte) irqTop::i1 (void()) main() -(byte~) main::$10 reg byte y 12.222222222222221 -(byte~) main::$20 reg byte a 22.0 -(byte~) main::$21 reg byte a 22.0 -(byte~) main::$22 reg byte a 22.0 -(byte~) main::$23 reg byte a 22.0 +(byte~) main::$10 reg byte a 22.0 +(byte~) main::$11 reg byte a 22.0 +(byte~) main::$12 reg byte a 22.0 +(byte~) main::$13 reg byte a 22.0 +(byte~) main::$14 reg byte a 22.0 (struct ProcessingChar~) main::$5 (label) main::@1 (label) main::@10 @@ -10342,14 +10196,14 @@ interrupt(HARDWARE_ALL)(void()) irqTop() (byte) main::center_x (byte) main::center_x#0 reg byte y 5.5 (byte) main::center_y -(byte) main::center_y#0 center_y zp[1]:30 5.5 +(byte) main::center_y#0 center_y zp[1]:11 5.5 (byte*) main::dst (byte*) main::dst#0 dst zp[2]:3 4.0 (byte*) main::dst#1 dst zp[2]:3 22.0 (byte*) main::dst#2 dst zp[2]:3 8.75 (byte) main::i -(byte) main::i#1 reg byte x 16.5 -(byte) main::i#2 reg byte x 3.6666666666666665 +(byte) main::i#1 i zp[1]:2 16.5 +(byte) main::i#2 i zp[1]:2 7.857142857142857 (byte*) main::src (byte*) main::src#1 src zp[2]:28 11.0 (byte*) main::src#2 src zp[2]:28 14.666666666666666 @@ -10457,9 +10311,9 @@ interrupt(HARDWARE_ALL)(void()) irqTop() (struct ProcessingChar) startProcessing::center (byte) startProcessing::center_dist (byte) startProcessing::center_x -(byte) startProcessing::center_x#0 center_x zp[1]:11 0.30952380952380953 +(byte) startProcessing::center_x#0 center_x zp[1]:30 0.30952380952380953 (byte) startProcessing::center_y -(byte) startProcessing::center_y#0 center_y zp[1]:30 0.24444444444444444 +(byte) startProcessing::center_y#0 center_y zp[1]:11 0.24444444444444444 (byte) startProcessing::ch (byte) startProcessing::ch#0 reg byte a 2.0 (byte*) startProcessing::chargenData @@ -10497,13 +10351,12 @@ interrupt(HARDWARE_ALL)(void()) irqTop() (word) startProcessing::spriteY (word) startProcessing::spriteY#0 spriteY zp[2]:21 0.4 -reg byte x [ main::i#2 main::i#1 ] reg byte x [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ] reg byte x [ startProcessing::i1#2 startProcessing::i1#1 ] -zp[1]:2 [ getCharToProcess::y#7 getCharToProcess::y#1 startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ] reg byte y [ getCharToProcess::x#2 getCharToProcess::x#1 ] reg byte x [ getCharToProcess::return_dist#1 getCharToProcess::return_dist#5 getCharToProcess::return_dist#6 getCharToProcess::dist#0 ] reg byte x [ initSprites::i#2 initSprites::i#1 ] +zp[1]:2 [ init_angle_screen::y#5 init_angle_screen::y#1 getCharToProcess::y#7 getCharToProcess::y#1 startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 main::i#2 main::i#1 ] zp[2]:3 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 getCharToProcess::dist_line#6 getCharToProcess::dist_line#0 getCharToProcess::dist_line#1 startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 startProcessing::$6 startProcessing::$5 main::dst#2 main::dst#0 main::dst#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 ] @@ -10511,17 +10364,17 @@ zp[1]:5 [ processChars::i#10 processChars::i#1 ] zp[1]:6 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ] zp[2]:7 [ SCREEN_COPY#0 ] zp[2]:9 [ SCREEN_DIST#0 malloc::mem#0 ] -reg byte a [ main::$20 ] -reg byte a [ main::$21 ] -reg byte a [ main::$22 ] -reg byte a [ main::$23 ] -reg byte y [ main::$10 ] +reg byte a [ main::$11 ] +reg byte a [ main::$12 ] +reg byte a [ main::$13 ] +reg byte a [ main::$14 ] +reg byte a [ main::$10 ] reg byte y [ getCharToProcess::return_x#0 ] reg byte a [ getCharToProcess::return_y#0 ] reg byte x [ getCharToProcess::return_dist#0 ] reg byte y [ main::center_x#0 ] +zp[1]:11 [ main::center_y#0 startProcessing::center_y#0 getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] reg byte a [ main::center_dist#0 ] -zp[1]:11 [ startProcessing::center_x#0 init_angle_screen::y#5 init_angle_screen::y#1 getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] reg byte a [ startProcessing::$39 ] reg byte a [ startProcessing::$40 ] reg byte a [ startProcessing::$41 ] @@ -10530,11 +10383,11 @@ reg byte a [ startProcessing::$27 ] zp[2]:12 [ startProcessing::$0 startProcessing::$45 startProcessing::$1 startProcessing::offset#0 startProcessing::screenPtr#0 atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] zp[2]:14 [ startProcessing::$44 atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] zp[2]:16 [ startProcessing::colPtr#0 atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$11 ] -zp[1]:18 [ startProcessing::spriteCol#0 init_angle_screen::x#2 init_angle_screen::x#1 getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] +zp[1]:18 [ startProcessing::spriteCol#0 init_angle_screen::x#2 init_angle_screen::x#1 getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] reg byte a [ startProcessing::ch#0 ] zp[2]:19 [ startProcessing::$11 startProcessing::$12 startProcessing::$13 startProcessing::spriteX#0 atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp[2]:21 [ startProcessing::$15 startProcessing::$16 startProcessing::$17 startProcessing::spriteY#0 atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] -zp[1]:23 [ startProcessing::spritePtr#0 init_angle_screen::xb#2 init_angle_screen::xb#1 getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] +zp[1]:23 [ startProcessing::spritePtr#0 init_angle_screen::xb#2 init_angle_screen::xb#1 getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] reg byte a [ startProcessing::$20 ] reg byte a [ startProcessing::$47 ] reg byte a [ startProcessing::$48 ] @@ -10547,7 +10400,7 @@ reg byte a [ init_angle_screen::$4 ] zp[2]:26 [ init_angle_screen::xw#0 atan2_16::x#0 getCharToProcess::$12 ] reg byte a [ init_angle_screen::$7 ] zp[2]:28 [ init_angle_screen::yw#0 atan2_16::y#0 initSprites::sp#2 initSprites::sp#1 getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 startProcessing::$9 startProcessing::$8 main::src#2 main::src#1 ] -zp[1]:30 [ init_angle_screen::ang_w#0 main::center_y#0 startProcessing::center_y#0 ] +zp[1]:30 [ init_angle_screen::ang_w#0 startProcessing::center_x#0 ] reg byte a [ init_angle_screen::$13 ] reg byte a [ init_angle_screen::$14 ] reg byte a [ init_angle_screen::$15 ] @@ -10577,7 +10430,7 @@ reg byte a [ processChars::$29 ] FINAL ASSEMBLER -Score: 1113882 +Score: 1113362 // File Comments // Clears start screen throwing around the letters (by turning them into sprites) @@ -10649,6 +10502,7 @@ Score: 1113882 .const YPOS_BOTTOMMOST = BORDER_YPOS_BOTTOM<<4 .const RASTER_IRQ_TOP = $30 .const RASTER_IRQ_MIDDLE = $ff + .const SIZEOF_STRUCT_PROCESSINGSPRITE = $e .const OFFSET_STRUCT_PROCESSINGSPRITE_Y = 2 .const OFFSET_STRUCT_PROCESSINGSPRITE_VX = 4 .const OFFSET_STRUCT_PROCESSINGSPRITE_VY = 6 @@ -10669,8 +10523,8 @@ Score: 1113882 __b1: // malloc(1000) // [2] call malloc - // [243] phi from @1 to malloc [phi:@1->malloc] - // [243] phi (byte*) heap_head#5 = (const byte*) HEAP_TOP [phi:@1->malloc#0] -- pbuz1=pbuc1 + // [235] phi from @1 to malloc [phi:@1->malloc] + // [235] phi (byte*) heap_head#5 = (const byte*) HEAP_TOP [phi:@1->malloc#0] -- pbuz1=pbuc1 lda #HEAP_TOP @@ -10684,8 +10538,8 @@ __b1: lda.z malloc.mem+1 sta.z SCREEN_COPY+1 // [4] call malloc - // [243] phi from @3 to malloc [phi:@3->malloc] - // [243] phi (byte*) heap_head#5 = (byte*) heap_head#1 [phi:@3->malloc#0] -- register_copy + // [235] phi from @3 to malloc [phi:@3->malloc] + // [235] phi (byte*) heap_head#5 = (byte*) heap_head#1 [phi:@3->malloc#0] -- register_copy jsr malloc // @4 // malloc(1000) @@ -10701,7 +10555,8 @@ __b1: main: { .label dst = 3 .label src = $1c - .label center_y = $1e + .label i = 2 + .label center_y = $b // init_angle_screen(SCREEN_DIST) // [9] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 -- pbuz1=pbuz2 lda.z SCREEN_DIST @@ -10736,131 +10591,114 @@ main: { cmp #main::@3] - // [14] phi (byte) main::i#2 = (byte) 0 [phi:main::@1->main::@3#0] -- vbuxx=vbuc1 - ldx #0 + // [14] phi (byte) main::i#2 = (byte) 0 [phi:main::@1->main::@3#0] -- vbuz1=vbuc1 + lda #0 + sta.z i // Init processing array // [14] phi from main::@3 to main::@3 [phi:main::@3->main::@3] // [14] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@3->main::@3#0] -- register_copy // main::@3 __b3: // PROCESSING[i] = { 0, 0, 0, 0, 0, 0, 0, STATUS_FREE, 0} - // [15] (byte~) main::$20 ← (byte) main::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 - txa + // [15] (byte~) main::$11 ← (byte) main::i#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + lda.z i asl - // [16] (byte~) main::$21 ← (byte~) main::$20 + (byte) main::i#2 -- vbuaa=vbuaa_plus_vbuxx - stx.z $ff + // [16] (byte~) main::$12 ← (byte~) main::$11 + (byte) main::i#2 -- vbuaa=vbuaa_plus_vbuz1 clc - adc.z $ff - // [17] (byte~) main::$22 ← (byte~) main::$21 << (byte) 1 -- vbuaa=vbuaa_rol_1 + adc.z i + // [17] (byte~) main::$13 ← (byte~) main::$12 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl - // [18] (byte~) main::$23 ← (byte~) main::$22 + (byte) main::i#2 -- vbuaa=vbuaa_plus_vbuxx - stx.z $ff + // [18] (byte~) main::$14 ← (byte~) main::$13 + (byte) main::i#2 -- vbuaa=vbuaa_plus_vbuz1 clc - adc.z $ff - // [19] (byte~) main::$10 ← (byte~) main::$23 << (byte) 1 -- vbuyy=vbuaa_rol_1 + adc.z i + // [19] (byte~) main::$10 ← (byte~) main::$14 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl - tay - // [20] *((word*)(const struct ProcessingSprite*) PROCESSING + (byte~) main::$10) ← (word) 0 -- pwuc1_derefidx_vbuyy=vwuc2 - lda #<0 - sta PROCESSING,y - sta PROCESSING+1,y - // [21] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$10) ← (word) 0 -- pwuc1_derefidx_vbuyy=vwuc2 - sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y,y - sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y+1,y - // [22] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$10) ← (word) 0 -- pwuc1_derefidx_vbuyy=vwuc2 - sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX,y - sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX+1,y - // [23] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$10) ← (word) 0 -- pwuc1_derefidx_vbuyy=vwuc2 - sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY,y - sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY+1,y - // [24] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$10) ← (byte) 0 -- pbuc1_derefidx_vbuyy=vbuc2 - sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_ID,y - // [25] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$10) ← (byte) 0 -- pbuc1_derefidx_vbuyy=vbuc2 - sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_PTR,y - // [26] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) main::$10) ← (byte) 0 -- pbuc1_derefidx_vbuyy=vbuc2 - sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_COL,y - // [27] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$10) ← (const byte) STATUS_FREE -- pbuc1_derefidx_vbuyy=vbuc2 - lda #STATUS_FREE - sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS,y - // [28] *((byte**)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$10) ← (byte*) 0 -- pptc1_derefidx_vbuyy=pbuc2 - lda #<0 - sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR,y - sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR+1,y - // for( byte i: 0..NUM_PROCESSING-1 ) - // [29] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx + // [20] *((const struct ProcessingSprite*) PROCESSING + (byte~) main::$10) ← memcpy(*(&(const struct ProcessingSprite) $2), struct ProcessingSprite, (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE) -- pssc1_derefidx_vbuaa=_deref_pssc2_memcpy_vbuc3 + tax + ldy #0 + !: + lda __2,y + sta PROCESSING,x inx - // [30] if((byte) main::i#1!=(const byte) NUM_PROCESSING-(byte) 1+(byte) 1) goto main::@3 -- vbuxx_neq_vbuc1_then_la1 - cpx #NUM_PROCESSING-1+1 + iny + cpy #SIZEOF_STRUCT_PROCESSINGSPRITE + bne !- + // for( byte i: 0..NUM_PROCESSING-1 ) + // [21] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 + inc.z i + // [22] if((byte) main::i#1!=(const byte) NUM_PROCESSING-(byte) 1+(byte) 1) goto main::@3 -- vbuz1_neq_vbuc1_then_la1 + lda #NUM_PROCESSING-1+1 + cmp.z i bne __b3 - // [31] phi from main::@3 to main::@4 [phi:main::@3->main::@4] + // [23] phi from main::@3 to main::@4 [phi:main::@3->main::@4] // main::@4 // initSprites() - // [32] call initSprites - // [156] phi from main::@4 to initSprites [phi:main::@4->initSprites] + // [24] call initSprites + // [148] phi from main::@4 to initSprites [phi:main::@4->initSprites] jsr initSprites - // [33] phi from main::@4 to main::@10 [phi:main::@4->main::@10] + // [25] phi from main::@4 to main::@10 [phi:main::@4->main::@10] // main::@10 // setupRasterIrq(RASTER_IRQ_TOP, &irqTop) - // [34] call setupRasterIrq + // [26] call setupRasterIrq jsr setupRasterIrq - // [35] phi from main::@10 main::@6 to main::@5 [phi:main::@10/main::@6->main::@5] + // [27] phi from main::@10 main::@6 to main::@5 [phi:main::@10/main::@6->main::@5] b1: // Main loop // main::@5 // getCharToProcess() - // [36] call getCharToProcess + // [28] call getCharToProcess jsr getCharToProcess - // [37] (byte) getCharToProcess::return_x#0 ← (byte) getCharToProcess::return_x#1 -- vbuyy=vbuz1 + // [29] (byte) getCharToProcess::return_x#0 ← (byte) getCharToProcess::return_x#1 -- vbuyy=vbuz1 ldy.z getCharToProcess.return_x - // [38] (byte) getCharToProcess::return_y#0 ← (byte) getCharToProcess::return_y#1 -- vbuaa=vbuz1 + // [30] (byte) getCharToProcess::return_y#0 ← (byte) getCharToProcess::return_y#1 -- vbuaa=vbuz1 lda.z getCharToProcess.return_y - // [39] (byte) getCharToProcess::return_dist#0 ← (byte) getCharToProcess::return_dist#1 + // [31] (byte) getCharToProcess::return_dist#0 ← (byte) getCharToProcess::return_dist#1 // main::@11 // center = getCharToProcess() - // [40] (byte) main::center_x#0 ← (byte) getCharToProcess::return_x#0 - // [41] (byte) main::center_y#0 ← (byte) getCharToProcess::return_y#0 -- vbuz1=vbuaa + // [32] (byte) main::center_x#0 ← (byte) getCharToProcess::return_x#0 + // [33] (byte) main::center_y#0 ← (byte) getCharToProcess::return_y#0 -- vbuz1=vbuaa sta.z center_y - // [42] (byte) main::center_dist#0 ← (byte) getCharToProcess::return_dist#0 -- vbuaa=vbuxx + // [34] (byte) main::center_dist#0 ← (byte) getCharToProcess::return_dist#0 -- vbuaa=vbuxx txa // if(center.dist==NOT_FOUND) - // [43] if((byte) main::center_dist#0!=(const byte) NOT_FOUND) goto main::@6 -- vbuaa_neq_vbuc1_then_la1 + // [35] if((byte) main::center_dist#0!=(const byte) NOT_FOUND) goto main::@6 -- vbuaa_neq_vbuc1_then_la1 cmp #NOT_FOUND bne __b6 // main::@7 // (*(SCREEN+999)) = '.' - // [44] *((const byte*) SCREEN+(word) $3e7) ← (byte) '.' -- _deref_pbuc1=vbuc2 + // [36] *((const byte*) SCREEN+(word) $3e7) ← (byte) '.' -- _deref_pbuc1=vbuc2 lda #'.' sta SCREEN+$3e7 // main::@8 __b8: // (*(COLS+999))++; - // [45] *((const byte*) COLS+(word) $3e7) ← ++ *((const byte*) COLS+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 + // [37] *((const byte*) COLS+(word) $3e7) ← ++ *((const byte*) COLS+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 inc COLS+$3e7 jmp __b8 // main::@6 __b6: // startProcessing(center) - // [46] (byte) startProcessing::center_x#0 ← (byte) main::center_x#0 -- vbuz1=vbuyy + // [38] (byte) startProcessing::center_x#0 ← (byte) main::center_x#0 -- vbuz1=vbuyy sty.z startProcessing.center_x - // [47] (byte) startProcessing::center_y#0 ← (byte) main::center_y#0 - // [48] call startProcessing - // [52] phi from main::@6 to startProcessing [phi:main::@6->startProcessing] + // [39] (byte) startProcessing::center_y#0 ← (byte) main::center_y#0 + // [40] call startProcessing + // [44] phi from main::@6 to startProcessing [phi:main::@6->startProcessing] jsr startProcessing jmp b1 // main::@2 __b2: // *dst = *src - // [49] *((byte*) main::dst#2) ← *((byte*) main::src#2) -- _deref_pbuz1=_deref_pbuz2 + // [41] *((byte*) main::dst#2) ← *((byte*) main::src#2) -- _deref_pbuz1=_deref_pbuz2 ldy #0 lda (src),y sta (dst),y // for( byte* src=SCREEN, dst=SCREEN_COPY; src!=SCREEN+1000; src++, dst++) - // [50] (byte*) main::src#1 ← ++ (byte*) main::src#2 -- pbuz1=_inc_pbuz1 + // [42] (byte*) main::src#1 ← ++ (byte*) main::src#2 -- pbuz1=_inc_pbuz1 inc.z src bne !+ inc.z src+1 !: - // [51] (byte*) main::dst#1 ← ++ (byte*) main::dst#2 -- pbuz1=_inc_pbuz1 + // [43] (byte*) main::dst#1 ← ++ (byte*) main::dst#2 -- pbuz1=_inc_pbuz1 inc.z dst bne !+ inc.z dst+1 @@ -10872,7 +10710,7 @@ main: { } // startProcessing // Start processing a char - by inserting it into the PROCESSING array -// startProcessing(byte zp($b) center_x, byte zp($1e) center_y) +// startProcessing(byte zp($1e) center_x, byte zp($b) center_y) startProcessing: { .label __0 = $c .label __1 = $c @@ -10887,8 +10725,8 @@ startProcessing: { .label __16 = $15 .label __17 = $15 .label __21 = $18 - .label center_x = $b - .label center_y = $1e + .label center_x = $1e + .label center_y = $b .label i = 2 .label offset = $c .label colPtr = $10 @@ -10903,47 +10741,47 @@ startProcessing: { .label freeIdx = 2 .label __44 = $e .label __45 = $c - // [53] phi from startProcessing to startProcessing::@1 [phi:startProcessing->startProcessing::@1] - // [53] phi (byte) startProcessing::freeIdx#6 = (byte) $ff [phi:startProcessing->startProcessing::@1#0] -- vbuxx=vbuc1 + // [45] phi from startProcessing to startProcessing::@1 [phi:startProcessing->startProcessing::@1] + // [45] phi (byte) startProcessing::freeIdx#6 = (byte) $ff [phi:startProcessing->startProcessing::@1#0] -- vbuxx=vbuc1 ldx #$ff // startProcessing::@1 __b1: - // [54] phi from startProcessing::@1 to startProcessing::@2 [phi:startProcessing::@1->startProcessing::@2] - // [54] phi (byte) startProcessing::i#2 = (byte) 0 [phi:startProcessing::@1->startProcessing::@2#0] -- vbuz1=vbuc1 + // [46] phi from startProcessing::@1 to startProcessing::@2 [phi:startProcessing::@1->startProcessing::@2] + // [46] phi (byte) startProcessing::i#2 = (byte) 0 [phi:startProcessing::@1->startProcessing::@2#0] -- vbuz1=vbuc1 lda #0 sta.z i - // [54] phi from startProcessing::@3 to startProcessing::@2 [phi:startProcessing::@3->startProcessing::@2] - // [54] phi (byte) startProcessing::i#2 = (byte) startProcessing::i#1 [phi:startProcessing::@3->startProcessing::@2#0] -- register_copy + // [46] phi from startProcessing::@3 to startProcessing::@2 [phi:startProcessing::@3->startProcessing::@2] + // [46] phi (byte) startProcessing::i#2 = (byte) startProcessing::i#1 [phi:startProcessing::@3->startProcessing::@2#0] -- register_copy // startProcessing::@2 __b2: // PROCESSING[i].status==STATUS_FREE - // [55] (byte~) startProcessing::$39 ← (byte) startProcessing::i#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [47] (byte~) startProcessing::$39 ← (byte) startProcessing::i#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda.z i asl - // [56] (byte~) startProcessing::$40 ← (byte~) startProcessing::$39 + (byte) startProcessing::i#2 -- vbuaa=vbuaa_plus_vbuz1 + // [48] (byte~) startProcessing::$40 ← (byte~) startProcessing::$39 + (byte) startProcessing::i#2 -- vbuaa=vbuaa_plus_vbuz1 clc adc.z i - // [57] (byte~) startProcessing::$41 ← (byte~) startProcessing::$40 << (byte) 1 -- vbuaa=vbuaa_rol_1 + // [49] (byte~) startProcessing::$41 ← (byte~) startProcessing::$40 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl - // [58] (byte~) startProcessing::$42 ← (byte~) startProcessing::$41 + (byte) startProcessing::i#2 -- vbuaa=vbuaa_plus_vbuz1 + // [50] (byte~) startProcessing::$42 ← (byte~) startProcessing::$41 + (byte) startProcessing::i#2 -- vbuaa=vbuaa_plus_vbuz1 clc adc.z i - // [59] (byte~) startProcessing::$27 ← (byte~) startProcessing::$42 << (byte) 1 -- vbuaa=vbuaa_rol_1 + // [51] (byte~) startProcessing::$27 ← (byte~) startProcessing::$42 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl // if(PROCESSING[i].status==STATUS_FREE) - // [60] if(*((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$27)!=(const byte) STATUS_FREE) goto startProcessing::@3 -- pbuc1_derefidx_vbuaa_neq_vbuc2_then_la1 + // [52] if(*((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$27)!=(const byte) STATUS_FREE) goto startProcessing::@3 -- pbuc1_derefidx_vbuaa_neq_vbuc2_then_la1 tay lda #STATUS_FREE cmp PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS,y beq !__b3+ jmp __b3 !__b3: - // [61] phi from startProcessing::@2 startProcessing::@9 to startProcessing::@4 [phi:startProcessing::@2/startProcessing::@9->startProcessing::@4] - // [61] phi (byte) startProcessing::freeIdx#2 = (byte) startProcessing::i#2 [phi:startProcessing::@2/startProcessing::@9->startProcessing::@4#0] -- register_copy + // [53] phi from startProcessing::@2 startProcessing::@9 to startProcessing::@4 [phi:startProcessing::@2/startProcessing::@9->startProcessing::@4] + // [53] phi (byte) startProcessing::freeIdx#2 = (byte) startProcessing::i#2 [phi:startProcessing::@2/startProcessing::@9->startProcessing::@4#0] -- register_copy // startProcessing::@4 __b4: // while (freeIdx==0xff) - // [62] if((byte) startProcessing::freeIdx#2==(byte) $ff) goto startProcessing::@8 -- vbuz1_eq_vbuc1_then_la1 + // [54] if((byte) startProcessing::freeIdx#2==(byte) $ff) goto startProcessing::@8 -- vbuz1_eq_vbuc1_then_la1 lda #$ff cmp.z freeIdx bne !__b8+ @@ -10951,13 +10789,13 @@ startProcessing: { !__b8: // startProcessing::@5 // (word)center.y - // [63] (word~) startProcessing::$0 ← (word)(byte) startProcessing::center_y#0 -- vwuz1=_word_vbuz2 + // [55] (word~) startProcessing::$0 ← (word)(byte) startProcessing::center_y#0 -- vwuz1=_word_vbuz2 lda.z center_y sta.z __0 lda #0 sta.z __0+1 // (word)center.y*40 - // [64] (word~) startProcessing::$44 ← (word~) startProcessing::$0 << (byte) 2 -- vwuz1=vwuz2_rol_2 + // [56] (word~) startProcessing::$44 ← (word~) startProcessing::$0 << (byte) 2 -- vwuz1=vwuz2_rol_2 lda.z __0 asl sta.z __44 @@ -10966,7 +10804,7 @@ startProcessing: { sta.z __44+1 asl.z __44 rol.z __44+1 - // [65] (word~) startProcessing::$45 ← (word~) startProcessing::$44 + (word~) startProcessing::$0 -- vwuz1=vwuz2_plus_vwuz1 + // [57] (word~) startProcessing::$45 ← (word~) startProcessing::$44 + (word~) startProcessing::$0 -- vwuz1=vwuz2_plus_vwuz1 lda.z __45 clc adc.z __44 @@ -10974,7 +10812,7 @@ startProcessing: { lda.z __45+1 adc.z __44+1 sta.z __45+1 - // [66] (word~) startProcessing::$1 ← (word~) startProcessing::$45 << (byte) 3 -- vwuz1=vwuz1_rol_3 + // [58] (word~) startProcessing::$1 ← (word~) startProcessing::$45 << (byte) 3 -- vwuz1=vwuz1_rol_3 asl.z __1 rol.z __1+1 asl.z __1 @@ -10982,7 +10820,7 @@ startProcessing: { asl.z __1 rol.z __1+1 // offset = (word)center.y*40+center.x - // [67] (word) startProcessing::offset#0 ← (word~) startProcessing::$1 + (byte) startProcessing::center_x#0 -- vwuz1=vwuz1_plus_vbuz2 + // [59] (word) startProcessing::offset#0 ← (word~) startProcessing::$1 + (byte) startProcessing::center_x#0 -- vwuz1=vwuz1_plus_vbuz2 lda.z center_x clc adc.z offset @@ -10991,7 +10829,7 @@ startProcessing: { inc.z offset+1 !: // colPtr = COLS+offset - // [68] (byte*) startProcessing::colPtr#0 ← (const byte*) COLS + (word) startProcessing::offset#0 -- pbuz1=pbuc1_plus_vwuz2 + // [60] (byte*) startProcessing::colPtr#0 ← (const byte*) COLS + (word) startProcessing::offset#0 -- pbuz1=pbuc1_plus_vwuz2 lda.z offset clc adc #COLS sta.z colPtr+1 // spriteCol = *colPtr - // [69] (byte) startProcessing::spriteCol#0 ← *((byte*) startProcessing::colPtr#0) -- vbuz1=_deref_pbuz2 + // [61] (byte) startProcessing::spriteCol#0 ← *((byte*) startProcessing::colPtr#0) -- vbuz1=_deref_pbuz2 ldy #0 lda (colPtr),y sta.z spriteCol // screenPtr = SCREEN+offset - // [70] (byte*) startProcessing::screenPtr#0 ← (const byte*) SCREEN + (word) startProcessing::offset#0 -- pbuz1=pbuc1_plus_vwuz1 + // [62] (byte*) startProcessing::screenPtr#0 ← (const byte*) SCREEN + (word) startProcessing::offset#0 -- pbuz1=pbuc1_plus_vwuz1 clc lda.z screenPtr adc #SCREEN sta.z screenPtr+1 // (word)spriteIdx - // [71] (word~) startProcessing::$5 ← (word)(byte) startProcessing::freeIdx#2 -- vwuz1=_word_vbuz2 + // [63] (word~) startProcessing::$5 ← (word)(byte) startProcessing::freeIdx#2 -- vwuz1=_word_vbuz2 lda.z freeIdx sta.z __5 tya sta.z __5+1 // (word)spriteIdx*64 - // [72] (word~) startProcessing::$6 ← (word~) startProcessing::$5 << (byte) 6 -- vwuz1=vwuz1_rol_6 + // [64] (word~) startProcessing::$6 ← (word~) startProcessing::$5 << (byte) 6 -- vwuz1=vwuz1_rol_6 asl.z __6 rol.z __6+1 asl.z __6 @@ -11034,7 +10872,7 @@ startProcessing: { asl.z __6 rol.z __6+1 // spriteData = SPRITE_DATA+(word)spriteIdx*64 - // [73] (byte*) startProcessing::spriteData#0 ← (const byte*) SPRITE_DATA + (word~) startProcessing::$6 -- pbuz1=pbuc1_plus_vwuz1 + // [65] (byte*) startProcessing::spriteData#0 ← (const byte*) SPRITE_DATA + (word~) startProcessing::$6 -- pbuz1=pbuc1_plus_vwuz1 clc lda.z spriteData adc #SPRITE_DATA sta.z spriteData+1 // ch = (*screenPtr) - // [74] (byte) startProcessing::ch#0 ← *((byte*) startProcessing::screenPtr#0) -- vbuaa=_deref_pbuz1 + // [66] (byte) startProcessing::ch#0 ← *((byte*) startProcessing::screenPtr#0) -- vbuaa=_deref_pbuz1 lda (screenPtr),y // (word)ch - // [75] (word~) startProcessing::$8 ← (word)(byte) startProcessing::ch#0 -- vwuz1=_word_vbuaa + // [67] (word~) startProcessing::$8 ← (word)(byte) startProcessing::ch#0 -- vwuz1=_word_vbuaa sta.z __8 tya sta.z __8+1 // (word)ch*8 - // [76] (word~) startProcessing::$9 ← (word~) startProcessing::$8 << (byte) 3 -- vwuz1=vwuz1_rol_3 + // [68] (word~) startProcessing::$9 ← (word~) startProcessing::$8 << (byte) 3 -- vwuz1=vwuz1_rol_3 asl.z __9 rol.z __9+1 asl.z __9 @@ -11059,7 +10897,7 @@ startProcessing: { asl.z __9 rol.z __9+1 // chargenData = CHARGEN+(word)ch*8 - // [77] (byte*) startProcessing::chargenData#0 ← (const byte*) CHARGEN + (word~) startProcessing::$9 -- pbuz1=pbuc1_plus_vwuz1 + // [69] (byte*) startProcessing::chargenData#0 ← (const byte*) CHARGEN + (word~) startProcessing::$9 -- pbuz1=pbuc1_plus_vwuz1 clc lda.z chargenData adc #startProcessing::@6] - // [80] phi (byte) startProcessing::i1#2 = (byte) 0 [phi:startProcessing::@5->startProcessing::@6#0] -- vbuxx=vbuc1 + // [72] phi from startProcessing::@5 to startProcessing::@6 [phi:startProcessing::@5->startProcessing::@6] + // [72] phi (byte) startProcessing::i1#2 = (byte) 0 [phi:startProcessing::@5->startProcessing::@6#0] -- vbuxx=vbuc1 ldx #0 - // [80] phi (byte*) startProcessing::spriteData#2 = (byte*) startProcessing::spriteData#0 [phi:startProcessing::@5->startProcessing::@6#1] -- register_copy - // [80] phi (byte*) startProcessing::chargenData#2 = (byte*) startProcessing::chargenData#0 [phi:startProcessing::@5->startProcessing::@6#2] -- register_copy - // [80] phi from startProcessing::@6 to startProcessing::@6 [phi:startProcessing::@6->startProcessing::@6] - // [80] phi (byte) startProcessing::i1#2 = (byte) startProcessing::i1#1 [phi:startProcessing::@6->startProcessing::@6#0] -- register_copy - // [80] phi (byte*) startProcessing::spriteData#2 = (byte*) startProcessing::spriteData#1 [phi:startProcessing::@6->startProcessing::@6#1] -- register_copy - // [80] phi (byte*) startProcessing::chargenData#2 = (byte*) startProcessing::chargenData#1 [phi:startProcessing::@6->startProcessing::@6#2] -- register_copy + // [72] phi (byte*) startProcessing::spriteData#2 = (byte*) startProcessing::spriteData#0 [phi:startProcessing::@5->startProcessing::@6#1] -- register_copy + // [72] phi (byte*) startProcessing::chargenData#2 = (byte*) startProcessing::chargenData#0 [phi:startProcessing::@5->startProcessing::@6#2] -- register_copy + // [72] phi from startProcessing::@6 to startProcessing::@6 [phi:startProcessing::@6->startProcessing::@6] + // [72] phi (byte) startProcessing::i1#2 = (byte) startProcessing::i1#1 [phi:startProcessing::@6->startProcessing::@6#0] -- register_copy + // [72] phi (byte*) startProcessing::spriteData#2 = (byte*) startProcessing::spriteData#1 [phi:startProcessing::@6->startProcessing::@6#1] -- register_copy + // [72] phi (byte*) startProcessing::chargenData#2 = (byte*) startProcessing::chargenData#1 [phi:startProcessing::@6->startProcessing::@6#2] -- register_copy // startProcessing::@6 __b6: // *spriteData = *chargenData - // [81] *((byte*) startProcessing::spriteData#2) ← *((byte*) startProcessing::chargenData#2) -- _deref_pbuz1=_deref_pbuz2 + // [73] *((byte*) startProcessing::spriteData#2) ← *((byte*) startProcessing::chargenData#2) -- _deref_pbuz1=_deref_pbuz2 ldy #0 lda (chargenData),y sta (spriteData),y // spriteData += 3 - // [82] (byte*) startProcessing::spriteData#1 ← (byte*) startProcessing::spriteData#2 + (byte) 3 -- pbuz1=pbuz1_plus_vbuc1 + // [74] (byte*) startProcessing::spriteData#1 ← (byte*) startProcessing::spriteData#2 + (byte) 3 -- pbuz1=pbuz1_plus_vbuc1 lda #3 clc adc.z spriteData @@ -11100,33 +10938,33 @@ startProcessing: { inc.z spriteData+1 !: // chargenData++; - // [83] (byte*) startProcessing::chargenData#1 ← ++ (byte*) startProcessing::chargenData#2 -- pbuz1=_inc_pbuz1 + // [75] (byte*) startProcessing::chargenData#1 ← ++ (byte*) startProcessing::chargenData#2 -- pbuz1=_inc_pbuz1 inc.z chargenData bne !+ inc.z chargenData+1 !: // for( byte i: 0..7) - // [84] (byte) startProcessing::i1#1 ← ++ (byte) startProcessing::i1#2 -- vbuxx=_inc_vbuxx + // [76] (byte) startProcessing::i1#1 ← ++ (byte) startProcessing::i1#2 -- vbuxx=_inc_vbuxx inx - // [85] if((byte) startProcessing::i1#1!=(byte) 8) goto startProcessing::@6 -- vbuxx_neq_vbuc1_then_la1 + // [77] if((byte) startProcessing::i1#1!=(byte) 8) goto startProcessing::@6 -- vbuxx_neq_vbuc1_then_la1 cpx #8 bne __b6 // startProcessing::@7 // *PROCPORT = PROCPORT_RAM_IO - // [86] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 + // [78] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 lda #PROCPORT_RAM_IO sta PROCPORT // asm // asm { cli } cli // (word)center.x - // [88] (word~) startProcessing::$11 ← (word)(byte) startProcessing::center_x#0 -- vwuz1=_word_vbuz2 + // [80] (word~) startProcessing::$11 ← (word)(byte) startProcessing::center_x#0 -- vwuz1=_word_vbuz2 lda.z center_x sta.z __11 lda #0 sta.z __11+1 // (word)center.x*8 - // [89] (word~) startProcessing::$12 ← (word~) startProcessing::$11 << (byte) 3 -- vwuz1=vwuz1_rol_3 + // [81] (word~) startProcessing::$12 ← (word~) startProcessing::$11 << (byte) 3 -- vwuz1=vwuz1_rol_3 asl.z __12 rol.z __12+1 asl.z __12 @@ -11134,7 +10972,7 @@ startProcessing: { asl.z __12 rol.z __12+1 // BORDER_XPOS_LEFT + (word)center.x*8 - // [90] (word~) startProcessing::$13 ← (const byte) BORDER_XPOS_LEFT + (word~) startProcessing::$12 -- vwuz1=vbuc1_plus_vwuz1 + // [82] (word~) startProcessing::$13 ← (const byte) BORDER_XPOS_LEFT + (word~) startProcessing::$12 -- vwuz1=vbuc1_plus_vwuz1 lda #BORDER_XPOS_LEFT clc adc.z __13 @@ -11143,7 +10981,7 @@ startProcessing: { inc.z __13+1 !: // spriteX = (BORDER_XPOS_LEFT + (word)center.x*8) << 4 - // [91] (word) startProcessing::spriteX#0 ← (word~) startProcessing::$13 << (byte) 4 -- vwuz1=vwuz1_rol_4 + // [83] (word) startProcessing::spriteX#0 ← (word~) startProcessing::$13 << (byte) 4 -- vwuz1=vwuz1_rol_4 asl.z spriteX rol.z spriteX+1 asl.z spriteX @@ -11153,13 +10991,13 @@ startProcessing: { asl.z spriteX rol.z spriteX+1 // (word)center.y - // [92] (word~) startProcessing::$15 ← (word)(byte) startProcessing::center_y#0 -- vwuz1=_word_vbuz2 + // [84] (word~) startProcessing::$15 ← (word)(byte) startProcessing::center_y#0 -- vwuz1=_word_vbuz2 lda.z center_y sta.z __15 lda #0 sta.z __15+1 // (word)center.y*8 - // [93] (word~) startProcessing::$16 ← (word~) startProcessing::$15 << (byte) 3 -- vwuz1=vwuz1_rol_3 + // [85] (word~) startProcessing::$16 ← (word~) startProcessing::$15 << (byte) 3 -- vwuz1=vwuz1_rol_3 asl.z __16 rol.z __16+1 asl.z __16 @@ -11167,7 +11005,7 @@ startProcessing: { asl.z __16 rol.z __16+1 // BORDER_YPOS_TOP + (word)center.y*8 - // [94] (word~) startProcessing::$17 ← (const byte) BORDER_YPOS_TOP + (word~) startProcessing::$16 -- vwuz1=vbuc1_plus_vwuz1 + // [86] (word~) startProcessing::$17 ← (const byte) BORDER_YPOS_TOP + (word~) startProcessing::$16 -- vwuz1=vbuc1_plus_vwuz1 lda #BORDER_YPOS_TOP clc adc.z __17 @@ -11176,7 +11014,7 @@ startProcessing: { inc.z __17+1 !: // spriteY = (BORDER_YPOS_TOP + (word)center.y*8) << 4 - // [95] (word) startProcessing::spriteY#0 ← (word~) startProcessing::$17 << (byte) 4 -- vwuz1=vwuz1_rol_4 + // [87] (word) startProcessing::spriteY#0 ← (word~) startProcessing::$17 << (byte) 4 -- vwuz1=vwuz1_rol_4 asl.z spriteY rol.z spriteY+1 asl.z spriteY @@ -11186,97 +11024,97 @@ startProcessing: { asl.z spriteY rol.z spriteY+1 // spritePtr = (byte)(SPRITE_DATA/64)+spriteIdx - // [96] (byte) startProcessing::spritePtr#0 ← (byte)(const byte*) SPRITE_DATA/(byte) $40 + (byte) startProcessing::freeIdx#2 -- vbuz1=vbuc1_plus_vbuz2 + // [88] (byte) startProcessing::spritePtr#0 ← (byte)(const byte*) SPRITE_DATA/(byte) $40 + (byte) startProcessing::freeIdx#2 -- vbuz1=vbuc1_plus_vbuz2 lax.z freeIdx axs #-[SPRITE_DATA/$40] stx.z spritePtr // spriteIdx*8 - // [97] (byte~) startProcessing::$20 ← (byte) startProcessing::freeIdx#2 << (byte) 3 -- vbuaa=vbuz1_rol_3 + // [89] (byte~) startProcessing::$20 ← (byte) startProcessing::freeIdx#2 << (byte) 3 -- vbuaa=vbuz1_rol_3 lda.z freeIdx asl asl asl // (word)(spriteIdx*8) - // [98] (word~) startProcessing::$21 ← (word)(byte~) startProcessing::$20 -- vwuz1=_word_vbuaa + // [90] (word~) startProcessing::$21 ← (word)(byte~) startProcessing::$20 -- vwuz1=_word_vbuaa sta.z __21 lda #0 sta.z __21+1 // PROCESSING[spriteIdx] = { spriteX, spriteY, (word)(spriteIdx*8), 60, spriteIdx, spritePtr, spriteCol, STATUS_NEW, screenPtr } - // [99] (byte~) startProcessing::$47 ← (byte) startProcessing::freeIdx#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [91] (byte~) startProcessing::$47 ← (byte) startProcessing::freeIdx#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda.z freeIdx asl - // [100] (byte~) startProcessing::$48 ← (byte~) startProcessing::$47 + (byte) startProcessing::freeIdx#2 -- vbuaa=vbuaa_plus_vbuz1 + // [92] (byte~) startProcessing::$48 ← (byte~) startProcessing::$47 + (byte) startProcessing::freeIdx#2 -- vbuaa=vbuaa_plus_vbuz1 clc adc.z freeIdx - // [101] (byte~) startProcessing::$49 ← (byte~) startProcessing::$48 << (byte) 1 -- vbuaa=vbuaa_rol_1 + // [93] (byte~) startProcessing::$49 ← (byte~) startProcessing::$48 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl - // [102] (byte~) startProcessing::$50 ← (byte~) startProcessing::$49 + (byte) startProcessing::freeIdx#2 -- vbuaa=vbuaa_plus_vbuz1 + // [94] (byte~) startProcessing::$50 ← (byte~) startProcessing::$49 + (byte) startProcessing::freeIdx#2 -- vbuaa=vbuaa_plus_vbuz1 clc adc.z freeIdx - // [103] (byte~) startProcessing::$28 ← (byte~) startProcessing::$50 << (byte) 1 -- vbuxx=vbuaa_rol_1 + // [95] (byte~) startProcessing::$28 ← (byte~) startProcessing::$50 << (byte) 1 -- vbuxx=vbuaa_rol_1 asl tax - // [104] *((word*)(const struct ProcessingSprite*) PROCESSING + (byte~) startProcessing::$28) ← (word) startProcessing::spriteX#0 -- pwuc1_derefidx_vbuxx=vwuz1 + // [96] *((word*)(const struct ProcessingSprite*) PROCESSING + (byte~) startProcessing::$28) ← (word) startProcessing::spriteX#0 -- pwuc1_derefidx_vbuxx=vwuz1 lda.z spriteX sta PROCESSING,x lda.z spriteX+1 sta PROCESSING+1,x - // [105] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) startProcessing::$28) ← (word) startProcessing::spriteY#0 -- pwuc1_derefidx_vbuxx=vwuz1 + // [97] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) startProcessing::$28) ← (word) startProcessing::spriteY#0 -- pwuc1_derefidx_vbuxx=vwuz1 lda.z spriteY sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y,x lda.z spriteY+1 sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y+1,x - // [106] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) startProcessing::$28) ← (word~) startProcessing::$21 -- pwuc1_derefidx_vbuxx=vwuz1 + // [98] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) startProcessing::$28) ← (word~) startProcessing::$21 -- pwuc1_derefidx_vbuxx=vwuz1 lda.z __21 sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX,x lda.z __21+1 sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX+1,x - // [107] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) startProcessing::$28) ← (word) $3c -- pwuc1_derefidx_vbuxx=vwuc2 + // [99] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) startProcessing::$28) ← (word) $3c -- pwuc1_derefidx_vbuxx=vwuc2 lda #<$3c sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY,x lda #>$3c sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY+1,x - // [108] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) startProcessing::$28) ← (byte) startProcessing::freeIdx#2 -- pbuc1_derefidx_vbuxx=vbuz1 + // [100] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) startProcessing::$28) ← (byte) startProcessing::freeIdx#2 -- pbuc1_derefidx_vbuxx=vbuz1 lda.z freeIdx sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_ID,x - // [109] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) startProcessing::$28) ← (byte) startProcessing::spritePtr#0 -- pbuc1_derefidx_vbuxx=vbuz1 + // [101] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) startProcessing::$28) ← (byte) startProcessing::spritePtr#0 -- pbuc1_derefidx_vbuxx=vbuz1 lda.z spritePtr sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_PTR,x - // [110] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) startProcessing::$28) ← (byte) startProcessing::spriteCol#0 -- pbuc1_derefidx_vbuxx=vbuz1 + // [102] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) startProcessing::$28) ← (byte) startProcessing::spriteCol#0 -- pbuc1_derefidx_vbuxx=vbuz1 lda.z spriteCol sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_COL,x - // [111] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$28) ← (const byte) STATUS_NEW -- pbuc1_derefidx_vbuxx=vbuc2 + // [103] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$28) ← (const byte) STATUS_NEW -- pbuc1_derefidx_vbuxx=vbuc2 lda #STATUS_NEW sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS,x - // [112] *((byte**)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) startProcessing::$28) ← (byte*) startProcessing::screenPtr#0 -- pptc1_derefidx_vbuxx=pbuz1 + // [104] *((byte**)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) startProcessing::$28) ← (byte*) startProcessing::screenPtr#0 -- pptc1_derefidx_vbuxx=pbuz1 lda.z screenPtr sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR,x lda.z screenPtr+1 sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR+1,x // startProcessing::@return // } - // [113] return + // [105] return rts // startProcessing::@8 __b8: - // [114] (byte) startProcessing::freeIdx#7 ← (byte) startProcessing::freeIdx#2 -- vbuxx=vbuz1 + // [106] (byte) startProcessing::freeIdx#7 ← (byte) startProcessing::freeIdx#2 -- vbuxx=vbuz1 ldx.z freeIdx - // [53] phi from startProcessing::@8 to startProcessing::@1 [phi:startProcessing::@8->startProcessing::@1] - // [53] phi (byte) startProcessing::freeIdx#6 = (byte) startProcessing::freeIdx#7 [phi:startProcessing::@8->startProcessing::@1#0] -- register_copy + // [45] phi from startProcessing::@8 to startProcessing::@1 [phi:startProcessing::@8->startProcessing::@1] + // [45] phi (byte) startProcessing::freeIdx#6 = (byte) startProcessing::freeIdx#7 [phi:startProcessing::@8->startProcessing::@1#0] -- register_copy jmp __b1 // startProcessing::@3 __b3: // for( byte i: 0..NUM_PROCESSING-1 ) - // [115] (byte) startProcessing::i#1 ← ++ (byte) startProcessing::i#2 -- vbuz1=_inc_vbuz1 + // [107] (byte) startProcessing::i#1 ← ++ (byte) startProcessing::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [116] if((byte) startProcessing::i#1!=(const byte) NUM_PROCESSING-(byte) 1+(byte) 1) goto startProcessing::@2 -- vbuz1_neq_vbuc1_then_la1 + // [108] if((byte) startProcessing::i#1!=(const byte) NUM_PROCESSING-(byte) 1+(byte) 1) goto startProcessing::@2 -- vbuz1_neq_vbuc1_then_la1 lda #NUM_PROCESSING-1+1 cmp.z i beq !__b2+ jmp __b2 !__b2: // startProcessing::@9 - // [117] (byte) startProcessing::freeIdx#8 ← (byte) startProcessing::freeIdx#6 -- vbuz1=vbuxx + // [109] (byte) startProcessing::freeIdx#8 ← (byte) startProcessing::freeIdx#6 -- vbuz1=vbuxx stx.z freeIdx jmp __b4 } @@ -11290,50 +11128,50 @@ getCharToProcess: { .label screen_line = $1c .label dist_line = 3 .label y = 2 - .label return_x = $12 - .label return_y = $17 - .label closest_dist = $b - .label closest_x = $12 - .label closest_y = $17 + .label return_x = $17 + .label return_y = $b + .label closest_dist = $12 + .label closest_x = $17 + .label closest_y = $b .label __12 = $1a .label __13 = $18 // screen_line = SCREEN_COPY - // [118] (byte*) getCharToProcess::screen_line#0 ← (byte*)(void*) SCREEN_COPY#0 -- pbuz1=pbuz2 + // [110] (byte*) getCharToProcess::screen_line#0 ← (byte*)(void*) SCREEN_COPY#0 -- pbuz1=pbuz2 lda.z SCREEN_COPY sta.z screen_line lda.z SCREEN_COPY+1 sta.z screen_line+1 // dist_line = SCREEN_DIST - // [119] (byte*) getCharToProcess::dist_line#0 ← (byte*)(void*) SCREEN_DIST#0 -- pbuz1=pbuz2 + // [111] (byte*) getCharToProcess::dist_line#0 ← (byte*)(void*) SCREEN_DIST#0 -- pbuz1=pbuz2 lda.z SCREEN_DIST sta.z dist_line lda.z SCREEN_DIST+1 sta.z dist_line+1 - // [120] phi from getCharToProcess to getCharToProcess::@1 [phi:getCharToProcess->getCharToProcess::@1] - // [120] phi (byte) getCharToProcess::closest_y#9 = (byte) 0 [phi:getCharToProcess->getCharToProcess::@1#0] -- vbuz1=vbuc1 + // [112] phi from getCharToProcess to getCharToProcess::@1 [phi:getCharToProcess->getCharToProcess::@1] + // [112] phi (byte) getCharToProcess::closest_y#9 = (byte) 0 [phi:getCharToProcess->getCharToProcess::@1#0] -- vbuz1=vbuc1 lda #0 sta.z closest_y - // [120] phi (byte) getCharToProcess::closest_x#9 = (byte) 0 [phi:getCharToProcess->getCharToProcess::@1#1] -- vbuz1=vbuc1 + // [112] phi (byte) getCharToProcess::closest_x#9 = (byte) 0 [phi:getCharToProcess->getCharToProcess::@1#1] -- vbuz1=vbuc1 sta.z closest_x - // [120] phi (byte) getCharToProcess::y#7 = (byte) 0 [phi:getCharToProcess->getCharToProcess::@1#2] -- vbuz1=vbuc1 + // [112] phi (byte) getCharToProcess::y#7 = (byte) 0 [phi:getCharToProcess->getCharToProcess::@1#2] -- vbuz1=vbuc1 sta.z y - // [120] phi (byte) getCharToProcess::closest_dist#8 = (const byte) NOT_FOUND [phi:getCharToProcess->getCharToProcess::@1#3] -- vbuz1=vbuc1 + // [112] phi (byte) getCharToProcess::closest_dist#8 = (const byte) NOT_FOUND [phi:getCharToProcess->getCharToProcess::@1#3] -- vbuz1=vbuc1 lda #NOT_FOUND sta.z closest_dist - // [120] phi (byte*) getCharToProcess::dist_line#6 = (byte*) getCharToProcess::dist_line#0 [phi:getCharToProcess->getCharToProcess::@1#4] -- register_copy - // [120] phi (byte*) getCharToProcess::screen_line#4 = (byte*) getCharToProcess::screen_line#0 [phi:getCharToProcess->getCharToProcess::@1#5] -- register_copy + // [112] phi (byte*) getCharToProcess::dist_line#6 = (byte*) getCharToProcess::dist_line#0 [phi:getCharToProcess->getCharToProcess::@1#4] -- register_copy + // [112] phi (byte*) getCharToProcess::screen_line#4 = (byte*) getCharToProcess::screen_line#0 [phi:getCharToProcess->getCharToProcess::@1#5] -- register_copy // getCharToProcess::@1 __b1: - // [121] phi from getCharToProcess::@1 to getCharToProcess::@2 [phi:getCharToProcess::@1->getCharToProcess::@2] - // [121] phi (byte) getCharToProcess::closest_y#7 = (byte) getCharToProcess::closest_y#9 [phi:getCharToProcess::@1->getCharToProcess::@2#0] -- register_copy - // [121] phi (byte) getCharToProcess::closest_x#7 = (byte) getCharToProcess::closest_x#9 [phi:getCharToProcess::@1->getCharToProcess::@2#1] -- register_copy - // [121] phi (byte) getCharToProcess::closest_dist#2 = (byte) getCharToProcess::closest_dist#8 [phi:getCharToProcess::@1->getCharToProcess::@2#2] -- register_copy - // [121] phi (byte) getCharToProcess::x#2 = (byte) 0 [phi:getCharToProcess::@1->getCharToProcess::@2#3] -- vbuyy=vbuc1 + // [113] phi from getCharToProcess::@1 to getCharToProcess::@2 [phi:getCharToProcess::@1->getCharToProcess::@2] + // [113] phi (byte) getCharToProcess::closest_y#7 = (byte) getCharToProcess::closest_y#9 [phi:getCharToProcess::@1->getCharToProcess::@2#0] -- register_copy + // [113] phi (byte) getCharToProcess::closest_x#7 = (byte) getCharToProcess::closest_x#9 [phi:getCharToProcess::@1->getCharToProcess::@2#1] -- register_copy + // [113] phi (byte) getCharToProcess::closest_dist#2 = (byte) getCharToProcess::closest_dist#8 [phi:getCharToProcess::@1->getCharToProcess::@2#2] -- register_copy + // [113] phi (byte) getCharToProcess::x#2 = (byte) 0 [phi:getCharToProcess::@1->getCharToProcess::@2#3] -- vbuyy=vbuc1 ldy #0 // getCharToProcess::@2 __b2: // if(screen_line[x]!=' ') - // [122] if(*((byte*) getCharToProcess::screen_line#4 + (byte) getCharToProcess::x#2)==(byte) ' ') goto getCharToProcess::@11 -- pbuz1_derefidx_vbuyy_eq_vbuc1_then_la1 + // [114] if(*((byte*) getCharToProcess::screen_line#4 + (byte) getCharToProcess::x#2)==(byte) ' ') goto getCharToProcess::@11 -- pbuz1_derefidx_vbuyy_eq_vbuc1_then_la1 lda #' ' cmp (screen_line),y bne !__b11+ @@ -11341,34 +11179,34 @@ getCharToProcess: { !__b11: // getCharToProcess::@4 // dist = dist_line[x] - // [123] (byte) getCharToProcess::dist#0 ← *((byte*) getCharToProcess::dist_line#6 + (byte) getCharToProcess::x#2) -- vbuxx=pbuz1_derefidx_vbuyy + // [115] (byte) getCharToProcess::dist#0 ← *((byte*) getCharToProcess::dist_line#6 + (byte) getCharToProcess::x#2) -- vbuxx=pbuz1_derefidx_vbuyy lda (dist_line),y tax // if(dist=(byte) getCharToProcess::closest_dist#2) goto getCharToProcess::@12 -- vbuxx_ge_vbuz1_then_la1 + // [116] if((byte) getCharToProcess::dist#0>=(byte) getCharToProcess::closest_dist#2) goto getCharToProcess::@12 -- vbuxx_ge_vbuz1_then_la1 cpx.z closest_dist bcs __b12 // getCharToProcess::@5 - // [125] (byte) getCharToProcess::return_x#7 ← (byte) getCharToProcess::x#2 -- vbuz1=vbuyy + // [117] (byte) getCharToProcess::return_x#7 ← (byte) getCharToProcess::x#2 -- vbuz1=vbuyy sty.z return_x - // [126] (byte) getCharToProcess::return_y#7 ← (byte) getCharToProcess::y#7 -- vbuz1=vbuz2 + // [118] (byte) getCharToProcess::return_y#7 ← (byte) getCharToProcess::y#7 -- vbuz1=vbuz2 lda.z y sta.z return_y - // [127] phi from getCharToProcess::@11 getCharToProcess::@12 getCharToProcess::@5 to getCharToProcess::@3 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3] - // [127] phi (byte) getCharToProcess::return_y#1 = (byte) getCharToProcess::closest_y#7 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#0] -- register_copy - // [127] phi (byte) getCharToProcess::return_x#1 = (byte) getCharToProcess::closest_x#7 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#1] -- register_copy - // [127] phi (byte) getCharToProcess::return_dist#1 = (byte) getCharToProcess::return_dist#5 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#2] -- register_copy + // [119] phi from getCharToProcess::@11 getCharToProcess::@12 getCharToProcess::@5 to getCharToProcess::@3 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3] + // [119] phi (byte) getCharToProcess::return_y#1 = (byte) getCharToProcess::closest_y#7 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#0] -- register_copy + // [119] phi (byte) getCharToProcess::return_x#1 = (byte) getCharToProcess::closest_x#7 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#1] -- register_copy + // [119] phi (byte) getCharToProcess::return_dist#1 = (byte) getCharToProcess::return_dist#5 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#2] -- register_copy // getCharToProcess::@3 __b3: // for( byte x: 0..39) - // [128] (byte) getCharToProcess::x#1 ← ++ (byte) getCharToProcess::x#2 -- vbuyy=_inc_vbuyy + // [120] (byte) getCharToProcess::x#1 ← ++ (byte) getCharToProcess::x#2 -- vbuyy=_inc_vbuyy iny - // [129] if((byte) getCharToProcess::x#1!=(byte) $28) goto getCharToProcess::@10 -- vbuyy_neq_vbuc1_then_la1 + // [121] if((byte) getCharToProcess::x#1!=(byte) $28) goto getCharToProcess::@10 -- vbuyy_neq_vbuc1_then_la1 cpy #$28 bne __b10 // getCharToProcess::@6 // screen_line += 40 - // [130] (byte*) getCharToProcess::screen_line#1 ← (byte*) getCharToProcess::screen_line#4 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [122] (byte*) getCharToProcess::screen_line#1 ← (byte*) getCharToProcess::screen_line#4 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc.z screen_line @@ -11377,7 +11215,7 @@ getCharToProcess: { inc.z screen_line+1 !: // dist_line += 40 - // [131] (byte*) getCharToProcess::dist_line#1 ← (byte*) getCharToProcess::dist_line#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [123] (byte*) getCharToProcess::dist_line#1 ← (byte*) getCharToProcess::dist_line#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc.z dist_line @@ -11386,26 +11224,26 @@ getCharToProcess: { inc.z dist_line+1 !: // for( byte y: 0..24) - // [132] (byte) getCharToProcess::y#1 ← ++ (byte) getCharToProcess::y#7 -- vbuz1=_inc_vbuz1 + // [124] (byte) getCharToProcess::y#1 ← ++ (byte) getCharToProcess::y#7 -- vbuz1=_inc_vbuz1 inc.z y - // [133] if((byte) getCharToProcess::y#1!=(byte) $19) goto getCharToProcess::@9 -- vbuz1_neq_vbuc1_then_la1 + // [125] if((byte) getCharToProcess::y#1!=(byte) $19) goto getCharToProcess::@9 -- vbuz1_neq_vbuc1_then_la1 lda #$19 cmp.z y bne __b9 // getCharToProcess::@7 // if(closest.dist != NOT_FOUND) - // [134] if((byte) getCharToProcess::return_dist#1==(const byte) NOT_FOUND) goto getCharToProcess::@return -- vbuxx_eq_vbuc1_then_la1 + // [126] if((byte) getCharToProcess::return_dist#1==(const byte) NOT_FOUND) goto getCharToProcess::@return -- vbuxx_eq_vbuc1_then_la1 cpx #NOT_FOUND beq __breturn // getCharToProcess::@8 // (word)closest.y - // [135] (word~) getCharToProcess::$8 ← (word)(byte) getCharToProcess::return_y#1 -- vwuz1=_word_vbuz2 + // [127] (word~) getCharToProcess::$8 ← (word)(byte) getCharToProcess::return_y#1 -- vwuz1=_word_vbuz2 lda.z return_y sta.z __8 lda #0 sta.z __8+1 // (word)closest.y*40 - // [136] (word~) getCharToProcess::$12 ← (word~) getCharToProcess::$8 << (byte) 2 -- vwuz1=vwuz2_rol_2 + // [128] (word~) getCharToProcess::$12 ← (word~) getCharToProcess::$8 << (byte) 2 -- vwuz1=vwuz2_rol_2 lda.z __8 asl sta.z __12 @@ -11414,7 +11252,7 @@ getCharToProcess: { sta.z __12+1 asl.z __12 rol.z __12+1 - // [137] (word~) getCharToProcess::$13 ← (word~) getCharToProcess::$12 + (word~) getCharToProcess::$8 -- vwuz1=vwuz2_plus_vwuz1 + // [129] (word~) getCharToProcess::$13 ← (word~) getCharToProcess::$12 + (word~) getCharToProcess::$8 -- vwuz1=vwuz2_plus_vwuz1 lda.z __13 clc adc.z __12 @@ -11422,7 +11260,7 @@ getCharToProcess: { lda.z __13+1 adc.z __12+1 sta.z __13+1 - // [138] (word~) getCharToProcess::$9 ← (word~) getCharToProcess::$13 << (byte) 3 -- vwuz1=vwuz1_rol_3 + // [130] (word~) getCharToProcess::$9 ← (word~) getCharToProcess::$13 << (byte) 3 -- vwuz1=vwuz1_rol_3 asl.z __9 rol.z __9+1 asl.z __9 @@ -11430,7 +11268,7 @@ getCharToProcess: { asl.z __9 rol.z __9+1 // SCREEN_COPY+(word)closest.y*40 - // [139] (byte*~) getCharToProcess::$10 ← (byte*)(void*) SCREEN_COPY#0 + (word~) getCharToProcess::$9 -- pbuz1=pbuz2_plus_vwuz1 + // [131] (byte*~) getCharToProcess::$10 ← (byte*)(void*) SCREEN_COPY#0 + (word~) getCharToProcess::$9 -- pbuz1=pbuz2_plus_vwuz1 lda.z __10 clc adc.z SCREEN_COPY @@ -11439,7 +11277,7 @@ getCharToProcess: { adc.z SCREEN_COPY+1 sta.z __10+1 // *(SCREEN_COPY+(word)closest.y*40+closest.x) = ' ' - // [140] *((byte*~) getCharToProcess::$10 + (byte) getCharToProcess::return_x#1) ← (byte) ' ' -- pbuz1_derefidx_vbuz2=vbuc1 + // [132] *((byte*~) getCharToProcess::$10 + (byte) getCharToProcess::return_x#1) ← (byte) ' ' -- pbuz1_derefidx_vbuz2=vbuc1 // clear the found char on the screen copy lda #' ' ldy.z return_x @@ -11447,38 +11285,38 @@ getCharToProcess: { // getCharToProcess::@return __breturn: // } - // [141] return + // [133] return rts // getCharToProcess::@9 __b9: - // [142] (byte) getCharToProcess::closest_dist#10 ← (byte) getCharToProcess::return_dist#1 -- vbuz1=vbuxx + // [134] (byte) getCharToProcess::closest_dist#10 ← (byte) getCharToProcess::return_dist#1 -- vbuz1=vbuxx stx.z closest_dist - // [120] phi from getCharToProcess::@9 to getCharToProcess::@1 [phi:getCharToProcess::@9->getCharToProcess::@1] - // [120] phi (byte) getCharToProcess::closest_y#9 = (byte) getCharToProcess::return_y#1 [phi:getCharToProcess::@9->getCharToProcess::@1#0] -- register_copy - // [120] phi (byte) getCharToProcess::closest_x#9 = (byte) getCharToProcess::return_x#1 [phi:getCharToProcess::@9->getCharToProcess::@1#1] -- register_copy - // [120] phi (byte) getCharToProcess::y#7 = (byte) getCharToProcess::y#1 [phi:getCharToProcess::@9->getCharToProcess::@1#2] -- register_copy - // [120] phi (byte) getCharToProcess::closest_dist#8 = (byte) getCharToProcess::closest_dist#10 [phi:getCharToProcess::@9->getCharToProcess::@1#3] -- register_copy - // [120] phi (byte*) getCharToProcess::dist_line#6 = (byte*) getCharToProcess::dist_line#1 [phi:getCharToProcess::@9->getCharToProcess::@1#4] -- register_copy - // [120] phi (byte*) getCharToProcess::screen_line#4 = (byte*) getCharToProcess::screen_line#1 [phi:getCharToProcess::@9->getCharToProcess::@1#5] -- register_copy + // [112] phi from getCharToProcess::@9 to getCharToProcess::@1 [phi:getCharToProcess::@9->getCharToProcess::@1] + // [112] phi (byte) getCharToProcess::closest_y#9 = (byte) getCharToProcess::return_y#1 [phi:getCharToProcess::@9->getCharToProcess::@1#0] -- register_copy + // [112] phi (byte) getCharToProcess::closest_x#9 = (byte) getCharToProcess::return_x#1 [phi:getCharToProcess::@9->getCharToProcess::@1#1] -- register_copy + // [112] phi (byte) getCharToProcess::y#7 = (byte) getCharToProcess::y#1 [phi:getCharToProcess::@9->getCharToProcess::@1#2] -- register_copy + // [112] phi (byte) getCharToProcess::closest_dist#8 = (byte) getCharToProcess::closest_dist#10 [phi:getCharToProcess::@9->getCharToProcess::@1#3] -- register_copy + // [112] phi (byte*) getCharToProcess::dist_line#6 = (byte*) getCharToProcess::dist_line#1 [phi:getCharToProcess::@9->getCharToProcess::@1#4] -- register_copy + // [112] phi (byte*) getCharToProcess::screen_line#4 = (byte*) getCharToProcess::screen_line#1 [phi:getCharToProcess::@9->getCharToProcess::@1#5] -- register_copy jmp __b1 // getCharToProcess::@10 __b10: - // [143] (byte) getCharToProcess::closest_dist#12 ← (byte) getCharToProcess::return_dist#1 -- vbuz1=vbuxx + // [135] (byte) getCharToProcess::closest_dist#12 ← (byte) getCharToProcess::return_dist#1 -- vbuz1=vbuxx stx.z closest_dist - // [121] phi from getCharToProcess::@10 to getCharToProcess::@2 [phi:getCharToProcess::@10->getCharToProcess::@2] - // [121] phi (byte) getCharToProcess::closest_y#7 = (byte) getCharToProcess::return_y#1 [phi:getCharToProcess::@10->getCharToProcess::@2#0] -- register_copy - // [121] phi (byte) getCharToProcess::closest_x#7 = (byte) getCharToProcess::return_x#1 [phi:getCharToProcess::@10->getCharToProcess::@2#1] -- register_copy - // [121] phi (byte) getCharToProcess::closest_dist#2 = (byte) getCharToProcess::closest_dist#12 [phi:getCharToProcess::@10->getCharToProcess::@2#2] -- register_copy - // [121] phi (byte) getCharToProcess::x#2 = (byte) getCharToProcess::x#1 [phi:getCharToProcess::@10->getCharToProcess::@2#3] -- register_copy + // [113] phi from getCharToProcess::@10 to getCharToProcess::@2 [phi:getCharToProcess::@10->getCharToProcess::@2] + // [113] phi (byte) getCharToProcess::closest_y#7 = (byte) getCharToProcess::return_y#1 [phi:getCharToProcess::@10->getCharToProcess::@2#0] -- register_copy + // [113] phi (byte) getCharToProcess::closest_x#7 = (byte) getCharToProcess::return_x#1 [phi:getCharToProcess::@10->getCharToProcess::@2#1] -- register_copy + // [113] phi (byte) getCharToProcess::closest_dist#2 = (byte) getCharToProcess::closest_dist#12 [phi:getCharToProcess::@10->getCharToProcess::@2#2] -- register_copy + // [113] phi (byte) getCharToProcess::x#2 = (byte) getCharToProcess::x#1 [phi:getCharToProcess::@10->getCharToProcess::@2#3] -- register_copy jmp __b2 // getCharToProcess::@12 __b12: - // [144] (byte) getCharToProcess::return_dist#6 ← (byte) getCharToProcess::closest_dist#2 -- vbuxx=vbuz1 + // [136] (byte) getCharToProcess::return_dist#6 ← (byte) getCharToProcess::closest_dist#2 -- vbuxx=vbuz1 ldx.z closest_dist jmp __b3 // getCharToProcess::@11 __b11: - // [145] (byte) getCharToProcess::return_dist#5 ← (byte) getCharToProcess::closest_dist#2 -- vbuxx=vbuz1 + // [137] (byte) getCharToProcess::return_dist#5 ← (byte) getCharToProcess::closest_dist#2 -- vbuxx=vbuz1 ldx.z closest_dist jmp __b3 } @@ -11490,37 +11328,37 @@ setupRasterIrq: { // asm { sei } sei // *PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK - // [147] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK -- _deref_pbuc1=vbuc2 + // [139] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK -- _deref_pbuc1=vbuc2 // Disable kernal & basic lda #PROCPORT_DDR_MEMORY_MASK sta PROCPORT_DDR // *PROCPORT = PROCPORT_RAM_IO - // [148] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 + // [140] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 lda #PROCPORT_RAM_IO sta PROCPORT // *CIA1_INTERRUPT = CIA_INTERRUPT_CLEAR - // [149] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // [141] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR sta CIA1_INTERRUPT // setupRasterIrq::@1 // *VIC_CONTROL &=0x7f - // [150] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 + // [142] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 lda #$7f and VIC_CONTROL sta VIC_CONTROL // setupRasterIrq::@2 // *RASTER = initSprites::@1] - // [157] phi (byte*) initSprites::sp#2 = (const byte*) SPRITE_DATA [phi:initSprites->initSprites::@1#0] -- pbuz1=pbuc1 + // [149] phi from initSprites to initSprites::@1 [phi:initSprites->initSprites::@1] + // [149] phi (byte*) initSprites::sp#2 = (const byte*) SPRITE_DATA [phi:initSprites->initSprites::@1#0] -- pbuz1=pbuc1 lda #SPRITE_DATA @@ -11548,7 +11386,7 @@ initSprites: { // initSprites::@1 __b1: // for( byte* sp = SPRITE_DATA; spSPRITE_DATA+NUM_PROCESSING*$40 bcc __b2 @@ -11557,54 +11395,54 @@ initSprites: { cmp #initSprites::@3] - // [159] phi (byte) initSprites::i#2 = (byte) 0 [phi:initSprites::@1->initSprites::@3#0] -- vbuxx=vbuc1 + // [151] phi from initSprites::@1 to initSprites::@3 [phi:initSprites::@1->initSprites::@3] + // [151] phi (byte) initSprites::i#2 = (byte) 0 [phi:initSprites::@1->initSprites::@3#0] -- vbuxx=vbuc1 ldx #0 // Initialize sprite registers - // [159] phi from initSprites::@3 to initSprites::@3 [phi:initSprites::@3->initSprites::@3] - // [159] phi (byte) initSprites::i#2 = (byte) initSprites::i#1 [phi:initSprites::@3->initSprites::@3#0] -- register_copy + // [151] phi from initSprites::@3 to initSprites::@3 [phi:initSprites::@3->initSprites::@3] + // [151] phi (byte) initSprites::i#2 = (byte) initSprites::i#1 [phi:initSprites::@3->initSprites::@3#0] -- register_copy // initSprites::@3 __b3: // SPRITES_COLS[i] = LIGHT_BLUE - // [160] *((const byte*) SPRITES_COLS + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE -- pbuc1_derefidx_vbuxx=vbuc2 + // [152] *((const byte*) SPRITES_COLS + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE -- pbuc1_derefidx_vbuxx=vbuc2 lda #LIGHT_BLUE sta SPRITES_COLS,x // for( byte i: 0..7) - // [161] (byte) initSprites::i#1 ← ++ (byte) initSprites::i#2 -- vbuxx=_inc_vbuxx + // [153] (byte) initSprites::i#1 ← ++ (byte) initSprites::i#2 -- vbuxx=_inc_vbuxx inx - // [162] if((byte) initSprites::i#1!=(byte) 8) goto initSprites::@3 -- vbuxx_neq_vbuc1_then_la1 + // [154] if((byte) initSprites::i#1!=(byte) 8) goto initSprites::@3 -- vbuxx_neq_vbuc1_then_la1 cpx #8 bne __b3 // initSprites::@4 // *SPRITES_MC = 0 - // [163] *((const byte*) SPRITES_MC) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [155] *((const byte*) SPRITES_MC) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta SPRITES_MC // *SPRITES_EXPAND_X = 0 - // [164] *((const byte*) SPRITES_EXPAND_X) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [156] *((const byte*) SPRITES_EXPAND_X) ← (byte) 0 -- _deref_pbuc1=vbuc2 sta SPRITES_EXPAND_X // *SPRITES_EXPAND_Y = 0 - // [165] *((const byte*) SPRITES_EXPAND_Y) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [157] *((const byte*) SPRITES_EXPAND_Y) ← (byte) 0 -- _deref_pbuc1=vbuc2 sta SPRITES_EXPAND_Y // initSprites::@return // } - // [166] return + // [158] return rts // initSprites::@2 __b2: // *sp = 0 - // [167] *((byte*) initSprites::sp#2) ← (byte) 0 -- _deref_pbuz1=vbuc1 + // [159] *((byte*) initSprites::sp#2) ← (byte) 0 -- _deref_pbuz1=vbuc1 lda #0 tay sta (sp),y // for( byte* sp = SPRITE_DATA; spinitSprites::@1] - // [157] phi (byte*) initSprites::sp#2 = (byte*) initSprites::sp#1 [phi:initSprites::@2->initSprites::@1#0] -- register_copy + // [149] phi from initSprites::@2 to initSprites::@1 [phi:initSprites::@2->initSprites::@1] + // [149] phi (byte*) initSprites::sp#2 = (byte*) initSprites::sp#1 [phi:initSprites::@2->initSprites::@1#0] -- register_copy jmp __b1 } // init_angle_screen @@ -11622,9 +11460,9 @@ init_angle_screen: { .label ang_w = $1e .label x = $12 .label xb = $17 - .label y = $b + .label y = 2 // screen_topline = screen+40*12 - // [169] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz2_plus_vwuc1 + // [161] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz2_plus_vwuc1 lda.z screen clc adc #<$28*$c @@ -11633,7 +11471,7 @@ init_angle_screen: { adc #>$28*$c sta.z screen_topline+1 // screen_bottomline = screen+40*12 - // [170] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz1_plus_vwuc1 + // [162] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz1_plus_vwuc1 clc lda.z screen_bottomline adc #<$28*$c @@ -11641,35 +11479,35 @@ init_angle_screen: { lda.z screen_bottomline+1 adc #>$28*$c sta.z screen_bottomline+1 - // [171] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1] - // [171] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#0 [phi:init_angle_screen->init_angle_screen::@1#0] -- register_copy - // [171] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#0 [phi:init_angle_screen->init_angle_screen::@1#1] -- register_copy - // [171] phi (byte) init_angle_screen::y#5 = (byte) 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1 + // [163] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1] + // [163] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#0 [phi:init_angle_screen->init_angle_screen::@1#0] -- register_copy + // [163] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#0 [phi:init_angle_screen->init_angle_screen::@1#1] -- register_copy + // [163] phi (byte) init_angle_screen::y#5 = (byte) 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1 lda #0 sta.z y - // [171] phi from init_angle_screen::@4 to init_angle_screen::@1 [phi:init_angle_screen::@4->init_angle_screen::@1] - // [171] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#0] -- register_copy - // [171] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#1] -- register_copy - // [171] phi (byte) init_angle_screen::y#5 = (byte) init_angle_screen::y#1 [phi:init_angle_screen::@4->init_angle_screen::@1#2] -- register_copy + // [163] phi from init_angle_screen::@4 to init_angle_screen::@1 [phi:init_angle_screen::@4->init_angle_screen::@1] + // [163] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#0] -- register_copy + // [163] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#1] -- register_copy + // [163] phi (byte) init_angle_screen::y#5 = (byte) init_angle_screen::y#1 [phi:init_angle_screen::@4->init_angle_screen::@1#2] -- register_copy // init_angle_screen::@1 __b1: - // [172] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2] - // [172] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 + // [164] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2] + // [164] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 lda #$27 sta.z xb - // [172] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 + // [164] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 lda #0 sta.z x // init_angle_screen::@2 __b2: // for( byte x=0,xb=39; x<=19; x++, xb--) - // [173] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 + // [165] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 lda.z x cmp #$13+1 bcc __b3 // init_angle_screen::@4 // screen_topline -= 40 - // [174] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + // [166] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 lda.z screen_topline sec sbc #<$28 @@ -11678,7 +11516,7 @@ init_angle_screen: { sbc #>$28 sta.z screen_topline+1 // screen_bottomline += 40 - // [175] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [167] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc.z screen_bottomline @@ -11687,51 +11525,51 @@ init_angle_screen: { inc.z screen_bottomline+1 !: // for(byte y: 0..12) - // [176] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 + // [168] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 inc.z y - // [177] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + // [169] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$d cmp.z y bne __b1 // init_angle_screen::@return // } - // [178] return + // [170] return rts // init_angle_screen::@3 __b3: // x*2 - // [179] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [171] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda.z x asl // 39-x*2 - // [180] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa + // [172] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa eor #$ff clc adc #$27+1 // (word){ 39-x*2, 0 } - // [181] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 + // [173] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 ldy #0 sta.z xw+1 sty.z xw // y*2 - // [182] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [174] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda.z y asl // (word){ y*2, 0 } - // [183] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 + // [175] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 sta.z yw+1 sty.z yw // atan2_16(xw, yw) - // [184] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 - // [185] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 - // [186] call atan2_16 + // [176] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 + // [177] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 + // [178] call atan2_16 jsr atan2_16 - // [187] (word) atan2_16::return#2 ← (word) atan2_16::return#0 + // [179] (word) atan2_16::return#2 ← (word) atan2_16::return#0 // init_angle_screen::@5 // angle_w = atan2_16(xw, yw) - // [188] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 + // [180] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 // angle_w+0x0080 - // [189] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 + // [181] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 lda #$80 clc adc.z __11 @@ -11740,46 +11578,46 @@ init_angle_screen: { inc.z __11+1 !: // ang_w = >(angle_w+0x0080) - // [190] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 + // [182] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 lda.z __11+1 sta.z ang_w // screen_bottomline[xb] = ang_w - // [191] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [183] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 ldy.z xb sta (screen_bottomline),y // -ang_w - // [192] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 + // [184] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 eor #$ff clc adc #1 // screen_topline[xb] = -ang_w - // [193] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa + // [185] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa sta (screen_topline),y // 0x80+ang_w - // [194] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1 + // [186] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1 lda #$80 clc adc.z ang_w // screen_topline[x] = 0x80+ang_w - // [195] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa + // [187] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa ldy.z x sta (screen_topline),y // 0x80-ang_w - // [196] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1 + // [188] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1 lda #$80 sec sbc.z ang_w // screen_bottomline[x] = 0x80-ang_w - // [197] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuaa + // [189] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuaa sta (screen_bottomline),y // for( byte x=0,xb=39; x<=19; x++, xb--) - // [198] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 + // [190] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 inc.z x - // [199] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [191] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 dec.z xb - // [172] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2] - // [172] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@5->init_angle_screen::@2#0] -- register_copy - // [172] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@5->init_angle_screen::@2#1] -- register_copy + // [164] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2] + // [164] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@5->init_angle_screen::@2#0] -- register_copy + // [164] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@5->init_angle_screen::@2#1] -- register_copy jmp __b2 } // atan2_16 @@ -11799,13 +11637,13 @@ atan2_16: { .label x = $1a .label y = $1c // (y>=0)?y:-y - // [200] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1 + // [192] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1 lda.z y+1 bmi !__b1+ jmp __b1 !__b1: // atan2_16::@2 - // [201] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2 + // [193] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2 sec lda #0 sbc.z y @@ -11813,18 +11651,18 @@ atan2_16: { lda #0 sbc.z y+1 sta.z __2+1 - // [202] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3] - // [202] phi (signed word) atan2_16::yi#0 = (signed word) atan2_16::yi#16 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3#0] -- register_copy + // [194] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3] + // [194] phi (signed word) atan2_16::yi#0 = (signed word) atan2_16::yi#16 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3#0] -- register_copy // atan2_16::@3 __b3: // (x>=0)?x:-x - // [203] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1 + // [195] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1 lda.z x+1 bmi !__b4+ jmp __b4 !__b4: // atan2_16::@5 - // [204] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2 + // [196] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2 sec lda #0 sbc.z x @@ -11832,42 +11670,42 @@ atan2_16: { lda #0 sbc.z x+1 sta.z __7+1 - // [205] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6] - // [205] phi (signed word) atan2_16::xi#0 = (signed word) atan2_16::xi#13 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy + // [197] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6] + // [197] phi (signed word) atan2_16::xi#0 = (signed word) atan2_16::xi#13 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy // atan2_16::@6 __b6: - // [206] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] - // [206] phi (word) atan2_16::angle#12 = (word) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1 + // [198] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] + // [198] phi (word) atan2_16::angle#12 = (word) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1 lda #<0 sta.z angle sta.z angle+1 - // [206] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1 + // [198] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1 tax - // [206] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy - // [206] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy + // [198] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy + // [198] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy // atan2_16::@10 __b10: // if(yi==0) - // [207] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1 + // [199] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1 lda.z yi+1 bne __b11 lda.z yi bne __b11 - // [208] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12] - // [208] phi (word) atan2_16::angle#6 = (word) atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12#0] -- register_copy + // [200] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12] + // [200] phi (word) atan2_16::angle#6 = (word) atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12#0] -- register_copy // atan2_16::@12 __b12: // angle /=2 - // [209] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz1_ror_1 + // [201] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz1_ror_1 lsr.z angle+1 ror.z angle // if(x<0) - // [210] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1 + // [202] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1 lda.z x+1 bpl __b7 // atan2_16::@21 // angle = 0x8000-angle - // [211] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1 + // [203] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1 sec lda #<$8000 sbc.z angle @@ -11875,17 +11713,17 @@ atan2_16: { lda #>$8000 sbc.z angle+1 sta.z angle+1 - // [212] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7] - // [212] phi (word) atan2_16::angle#11 = (word) atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7#0] -- register_copy + // [204] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7] + // [204] phi (word) atan2_16::angle#11 = (word) atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7#0] -- register_copy // atan2_16::@7 __b7: // if(y<0) - // [213] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1 + // [205] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1 lda.z y+1 bpl __b8 // atan2_16::@9 // angle = -angle - // [214] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1 + // [206] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1 sec lda #0 sbc.z angle @@ -11893,69 +11731,69 @@ atan2_16: { lda #0 sbc.z angle+1 sta.z angle+1 - // [215] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8] - // [215] phi (word) atan2_16::return#0 = (word) atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy + // [207] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8] + // [207] phi (word) atan2_16::return#0 = (word) atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy // atan2_16::@8 __b8: // atan2_16::@return // } - // [216] return + // [208] return rts // atan2_16::@11 __b11: - // [217] (byte) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuyy=vbuxx + // [209] (byte) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuyy=vbuxx txa tay - // [218] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2 + // [210] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2 lda.z xi sta.z xd lda.z xi+1 sta.z xd+1 - // [219] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2 + // [211] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2 lda.z yi sta.z yd lda.z yi+1 sta.z yd+1 - // [220] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13] - // [220] phi (signed word) atan2_16::yd#3 = (signed word) atan2_16::yd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#0] -- register_copy - // [220] phi (signed word) atan2_16::xd#3 = (signed word) atan2_16::xd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#1] -- register_copy - // [220] phi (byte) atan2_16::shift#2 = (byte) atan2_16::shift#5 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#2] -- register_copy + // [212] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13] + // [212] phi (signed word) atan2_16::yd#3 = (signed word) atan2_16::yd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#0] -- register_copy + // [212] phi (signed word) atan2_16::xd#3 = (signed word) atan2_16::xd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#1] -- register_copy + // [212] phi (byte) atan2_16::shift#2 = (byte) atan2_16::shift#5 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#2] -- register_copy // atan2_16::@13 __b13: // while(shift>=2) - // [221] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 -- vbuyy_ge_vbuc1_then_la1 + // [213] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 -- vbuyy_ge_vbuc1_then_la1 cpy #2 bcs __b14 // atan2_16::@15 // if(shift) - // [222] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 -- vbuc1_eq_vbuyy_then_la1 + // [214] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 -- vbuc1_eq_vbuyy_then_la1 cpy #0 beq __b17 // atan2_16::@16 // xd >>= 1 - // [223] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 + // [215] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 lda.z xd+1 cmp #$80 ror.z xd+1 ror.z xd // yd >>= 1 - // [224] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 + // [216] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 lda.z yd+1 cmp #$80 ror.z yd+1 ror.z yd - // [225] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17] - // [225] phi (signed word) atan2_16::xd#5 = (signed word) atan2_16::xd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#0] -- register_copy - // [225] phi (signed word) atan2_16::yd#5 = (signed word) atan2_16::yd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#1] -- register_copy + // [217] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17] + // [217] phi (signed word) atan2_16::xd#5 = (signed word) atan2_16::xd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#0] -- register_copy + // [217] phi (signed word) atan2_16::yd#5 = (signed word) atan2_16::yd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#1] -- register_copy // atan2_16::@17 __b17: // if(yi>=0) - // [226] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1 + // [218] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1 lda.z yi+1 bpl __b18 // atan2_16::@20 // xi -= yd - // [227] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_minus_vwsz2 + // [219] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_minus_vwsz2 lda.z xi sec sbc.z yd @@ -11964,7 +11802,7 @@ atan2_16: { sbc.z yd+1 sta.z xi+1 // yi += xd - // [228] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2 + // [220] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2 lda.z yi clc adc.z xd @@ -11973,10 +11811,10 @@ atan2_16: { adc.z xd+1 sta.z yi+1 // angle -= CORDIC_ATAN2_ANGLES_16[i] - // [229] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [221] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl - // [230] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuaa + // [222] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuaa tay sec lda.z angle @@ -11985,30 +11823,30 @@ atan2_16: { lda.z angle+1 sbc CORDIC_ATAN2_ANGLES_16+1,y sta.z angle+1 - // [231] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19] - // [231] phi (signed word) atan2_16::xi#8 = (signed word) atan2_16::xi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#0] -- register_copy - // [231] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy - // [231] phi (signed word) atan2_16::yi#8 = (signed word) atan2_16::yi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#2] -- register_copy + // [223] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19] + // [223] phi (signed word) atan2_16::xi#8 = (signed word) atan2_16::xi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#0] -- register_copy + // [223] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy + // [223] phi (signed word) atan2_16::yi#8 = (signed word) atan2_16::yi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#2] -- register_copy // atan2_16::@19 __b19: // for( byte i: 0..CORDIC_ITERATIONS_16-1) - // [232] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuxx=_inc_vbuxx + // [224] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuxx=_inc_vbuxx inx - // [233] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16-(byte) 1+(byte) 1) goto atan2_16::@12 -- vbuxx_eq_vbuc1_then_la1 + // [225] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16-(byte) 1+(byte) 1) goto atan2_16::@12 -- vbuxx_eq_vbuc1_then_la1 cpx #CORDIC_ITERATIONS_16-1+1 bne !__b12+ jmp __b12 !__b12: - // [206] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10] - // [206] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy - // [206] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy - // [206] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy - // [206] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#8 [phi:atan2_16::@19->atan2_16::@10#3] -- register_copy + // [198] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10] + // [198] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy + // [198] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy + // [198] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy + // [198] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#8 [phi:atan2_16::@19->atan2_16::@10#3] -- register_copy jmp __b10 // atan2_16::@18 __b18: // xi += yd - // [234] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2 + // [226] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2 lda.z xi clc adc.z yd @@ -12017,7 +11855,7 @@ atan2_16: { adc.z yd+1 sta.z xi+1 // yi -= xd - // [235] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_minus_vwsz2 + // [227] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_minus_vwsz2 lda.z yi sec sbc.z xd @@ -12026,10 +11864,10 @@ atan2_16: { sbc.z xd+1 sta.z yi+1 // angle += CORDIC_ATAN2_ANGLES_16[i] - // [236] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [228] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl - // [237] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuaa + // [229] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuaa tay clc lda.z angle @@ -12042,7 +11880,7 @@ atan2_16: { // atan2_16::@14 __b14: // xd >>= 2 - // [238] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 + // [230] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 lda.z xd+1 cmp #$80 ror.z xd+1 @@ -12052,7 +11890,7 @@ atan2_16: { ror.z xd+1 ror.z xd // yd >>= 2 - // [239] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 + // [231] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 lda.z yd+1 cmp #$80 ror.z yd+1 @@ -12062,13 +11900,13 @@ atan2_16: { ror.z yd+1 ror.z yd // shift -=2 - // [240] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuyy=vbuyy_minus_2 + // [232] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuyy=vbuyy_minus_2 dey dey jmp __b13 // atan2_16::@4 __b4: - // [241] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2 + // [233] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2 lda.z x sta.z xi lda.z x+1 @@ -12076,7 +11914,7 @@ atan2_16: { jmp __b6 // atan2_16::@1 __b1: - // [242] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2 + // [234] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2 lda.z y sta.z yi lda.z y+1 @@ -12089,7 +11927,7 @@ atan2_16: { malloc: { .label mem = 9 // mem = heap_head-size - // [244] (byte*) malloc::mem#0 ← (byte*) heap_head#5 - (word) $3e8 -- pbuz1=pbuz2_minus_vwuc1 + // [236] (byte*) malloc::mem#0 ← (byte*) heap_head#5 - (word) $3e8 -- pbuz1=pbuz2_minus_vwuc1 lda.z heap_head sec sbc #<$3e8 @@ -12098,14 +11936,14 @@ malloc: { sbc #>$3e8 sta.z mem+1 // heap_head = mem - // [245] (byte*) heap_head#1 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2 + // [237] (byte*) heap_head#1 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2 lda.z mem sta.z heap_head lda.z mem+1 sta.z heap_head+1 // malloc::@return // } - // [246] return + // [238] return rts } // irqBottom @@ -12115,32 +11953,32 @@ irqBottom: { sta rega+1 stx regx+1 sty regy+1 - // [248] phi from irqBottom to irqBottom::@1 [phi:irqBottom->irqBottom::@1] + // [240] phi from irqBottom to irqBottom::@1 [phi:irqBottom->irqBottom::@1] // irqBottom::@1 // processChars() - // [249] call processChars - // [254] phi from irqBottom::@1 to processChars [phi:irqBottom::@1->processChars] + // [241] call processChars + // [246] phi from irqBottom::@1 to processChars [phi:irqBottom::@1->processChars] jsr processChars // irqBottom::@2 // *RASTER = RASTER_IRQ_TOP - // [250] *((const byte*) RASTER) ← (const byte) RASTER_IRQ_TOP -- _deref_pbuc1=vbuc2 + // [242] *((const byte*) RASTER) ← (const byte) RASTER_IRQ_TOP -- _deref_pbuc1=vbuc2 // Trigger IRQ at the top of the screen lda #RASTER_IRQ_TOP sta RASTER // *HARDWARE_IRQ = &irqTop - // [251] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_ALL)(void()) irqTop() -- _deref_pptc1=pprc2 + // [243] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_ALL)(void()) irqTop() -- _deref_pptc1=pprc2 lda #irqTop sta HARDWARE_IRQ+1 // *IRQ_STATUS = IRQ_RASTER - // [252] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 + // [244] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 // Acknowledge the IRQ lda #IRQ_RASTER sta IRQ_STATUS // irqBottom::@return // } - // [253] return - exit interrupt(HARDWARE_ALL) + // [245] return - exit interrupt(HARDWARE_ALL) rega: lda #00 regx: @@ -12160,33 +11998,33 @@ processChars: { .label xpos = $22 .label ypos = $26 .label numActive = 6 - // [255] phi from processChars to processChars::@1 [phi:processChars->processChars::@1] - // [255] phi (byte) processChars::numActive#10 = (byte) 0 [phi:processChars->processChars::@1#0] -- vbuz1=vbuc1 + // [247] phi from processChars to processChars::@1 [phi:processChars->processChars::@1] + // [247] phi (byte) processChars::numActive#10 = (byte) 0 [phi:processChars->processChars::@1#0] -- vbuz1=vbuc1 lda #0 sta.z numActive - // [255] phi (byte) processChars::i#10 = (byte) 0 [phi:processChars->processChars::@1#1] -- vbuz1=vbuc1 + // [247] phi (byte) processChars::i#10 = (byte) 0 [phi:processChars->processChars::@1#1] -- vbuz1=vbuc1 sta.z i - // [255] phi from processChars::@2 to processChars::@1 [phi:processChars::@2->processChars::@1] - // [255] phi (byte) processChars::numActive#10 = (byte) processChars::numActive#3 [phi:processChars::@2->processChars::@1#0] -- register_copy - // [255] phi (byte) processChars::i#10 = (byte) processChars::i#1 [phi:processChars::@2->processChars::@1#1] -- register_copy + // [247] phi from processChars::@2 to processChars::@1 [phi:processChars::@2->processChars::@1] + // [247] phi (byte) processChars::numActive#10 = (byte) processChars::numActive#3 [phi:processChars::@2->processChars::@1#0] -- register_copy + // [247] phi (byte) processChars::i#10 = (byte) processChars::i#1 [phi:processChars::@2->processChars::@1#1] -- register_copy // processChars::@1 __b1: // PROCESSING+i - // [256] (byte~) processChars::$62 ← (byte) processChars::i#10 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [248] (byte~) processChars::$62 ← (byte) processChars::i#10 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda.z i asl - // [257] (byte~) processChars::$63 ← (byte~) processChars::$62 + (byte) processChars::i#10 -- vbuaa=vbuaa_plus_vbuz1 + // [249] (byte~) processChars::$63 ← (byte~) processChars::$62 + (byte) processChars::i#10 -- vbuaa=vbuaa_plus_vbuz1 clc adc.z i - // [258] (byte~) processChars::$64 ← (byte~) processChars::$63 << (byte) 1 -- vbuaa=vbuaa_rol_1 + // [250] (byte~) processChars::$64 ← (byte~) processChars::$63 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl - // [259] (byte~) processChars::$65 ← (byte~) processChars::$64 + (byte) processChars::i#10 -- vbuaa=vbuaa_plus_vbuz1 + // [251] (byte~) processChars::$65 ← (byte~) processChars::$64 + (byte) processChars::i#10 -- vbuaa=vbuaa_plus_vbuz1 clc adc.z i - // [260] (byte~) processChars::$32 ← (byte~) processChars::$65 << (byte) 1 -- vbuaa=vbuaa_rol_1 + // [252] (byte~) processChars::$32 ← (byte~) processChars::$65 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl // processing = PROCESSING+i - // [261] (struct ProcessingSprite*) processChars::processing#0 ← (const struct ProcessingSprite*) PROCESSING + (byte~) processChars::$32 -- pssz1=pssc1_plus_vbuaa + // [253] (struct ProcessingSprite*) processChars::processing#0 ← (const struct ProcessingSprite*) PROCESSING + (byte~) processChars::$32 -- pssz1=pssc1_plus_vbuaa clc adc #id - // [262] (byte) processChars::bitmask#0 ← (byte) 1 << *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID) -- vbuz1=vbuc1_rol_pbuz2_derefidx_vbuc2 + // [254] (byte) processChars::bitmask#0 ← (byte) 1 << *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID) -- vbuz1=vbuc1_rol_pbuz2_derefidx_vbuc2 ldy #OFFSET_STRUCT_PROCESSINGSPRITE_ID lda (processing),y tay @@ -12208,7 +12046,7 @@ processChars: { !e: sta.z bitmask // if(processing->status!=STATUS_FREE) - // [263] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)==(const byte) STATUS_FREE) goto processChars::@2 -- pbuz1_derefidx_vbuc1_eq_vbuc2_then_la1 + // [255] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)==(const byte) STATUS_FREE) goto processChars::@2 -- pbuz1_derefidx_vbuc1_eq_vbuc2_then_la1 lda #STATUS_FREE ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS cmp (processing),y @@ -12217,13 +12055,13 @@ processChars: { !__b2: // processChars::@10 // if(processing->status==STATUS_NEW) - // [264] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)!=(const byte) STATUS_NEW) goto processChars::@3 -- pbuz1_derefidx_vbuc1_neq_vbuc2_then_la1 + // [256] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)!=(const byte) STATUS_NEW) goto processChars::@3 -- pbuz1_derefidx_vbuc1_neq_vbuc2_then_la1 lda (processing),y cmp #STATUS_NEW bne __b3 // processChars::@11 // *(processing->screenPtr) = ' ' - // [265] *(*((byte**)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR)) ← (byte) ' ' -- _deref_(pptz1_derefidx_vbuc1)=vbuc2 + // [257] *(*((byte**)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR)) ← (byte) ' ' -- _deref_(pptz1_derefidx_vbuc1)=vbuc2 // Clear the char on the screen ldx #' ' ldy #OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR @@ -12235,13 +12073,13 @@ processChars: { !: stx $ffff // *SPRITES_ENABLE |= bitmask - // [266] *((const byte*) SPRITES_ENABLE) ← *((const byte*) SPRITES_ENABLE) | (byte) processChars::bitmask#0 -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1 + // [258] *((const byte*) SPRITES_ENABLE) ← *((const byte*) SPRITES_ENABLE) | (byte) processChars::bitmask#0 -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1 // Enable the sprite lda SPRITES_ENABLE ora.z bitmask sta SPRITES_ENABLE // SPRITES_COLS[processing->id] = processing->col - // [267] *((const byte*) SPRITES_COLS + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL) -- pbuc1_derefidx_(pbuz1_derefidx_vbuc2)=pbuz1_derefidx_vbuc3 + // [259] *((const byte*) SPRITES_COLS + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL) -- pbuc1_derefidx_(pbuz1_derefidx_vbuc2)=pbuz1_derefidx_vbuc3 // Set the sprite color ldy #OFFSET_STRUCT_PROCESSINGSPRITE_COL lda (processing),y @@ -12252,7 +12090,7 @@ processChars: { pla sta SPRITES_COLS,y // *(SCREEN+SPRITE_PTRS+processing->id) = processing->ptr - // [268] *((const byte*) SCREEN+(const word) SPRITE_PTRS + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR) -- pbuc1_derefidx_(pbuz1_derefidx_vbuc2)=pbuz1_derefidx_vbuc3 + // [260] *((const byte*) SCREEN+(const word) SPRITE_PTRS + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR) -- pbuc1_derefidx_(pbuz1_derefidx_vbuc2)=pbuz1_derefidx_vbuc3 // Set sprite pointer ldy #OFFSET_STRUCT_PROCESSINGSPRITE_PTR lda (processing),y @@ -12263,7 +12101,7 @@ processChars: { pla sta SCREEN+SPRITE_PTRS,y // processing->status = STATUS_PROCESSING - // [269] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_PROCESSING -- pbuz1_derefidx_vbuc1=vbuc2 + // [261] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_PROCESSING -- pbuz1_derefidx_vbuc1=vbuc2 // Set status lda #STATUS_PROCESSING ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS @@ -12271,7 +12109,7 @@ processChars: { // processChars::@3 __b3: // xpos = processing->x >> 4 - // [270] (word) processChars::xpos#0 ← *((word*)(struct ProcessingSprite*) processChars::processing#0) >> (byte) 4 -- vwuz1=_deref_pwuz2_ror_4 + // [262] (word) processChars::xpos#0 ← *((word*)(struct ProcessingSprite*) processChars::processing#0) >> (byte) 4 -- vwuz1=_deref_pwuz2_ror_4 ldy #0 lda (processing),y sta.z xpos @@ -12287,10 +12125,10 @@ processChars: { lsr.z xpos+1 ror.z xpos // >xpos - // [271] (byte~) processChars::$9 ← > (word) processChars::xpos#0 -- vbuaa=_hi_vwuz1 + // [263] (byte~) processChars::$9 ← > (word) processChars::xpos#0 -- vbuaa=_hi_vwuz1 lda.z xpos+1 // if(>xpos) - // [272] if((byte) 0!=(byte~) processChars::$9) goto processChars::@4 -- vbuc1_neq_vbuaa_then_la1 + // [264] if((byte) 0!=(byte~) processChars::$9) goto processChars::@4 -- vbuc1_neq_vbuaa_then_la1 // Set sprite position cmp #0 beq !__b4+ @@ -12298,28 +12136,28 @@ processChars: { !__b4: // processChars::@8 // 0xff ^ bitmask - // [273] (byte~) processChars::$10 ← (byte) $ff ^ (byte) processChars::bitmask#0 -- vbuaa=vbuc1_bxor_vbuz1 + // [265] (byte~) processChars::$10 ← (byte) $ff ^ (byte) processChars::bitmask#0 -- vbuaa=vbuc1_bxor_vbuz1 lda #$ff eor.z bitmask // *SPRITES_XMSB &= 0xff ^ bitmask - // [274] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) & (byte~) processChars::$10 -- _deref_pbuc1=_deref_pbuc1_band_vbuaa + // [266] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) & (byte~) processChars::$10 -- _deref_pbuc1=_deref_pbuc1_band_vbuaa and SPRITES_XMSB sta SPRITES_XMSB // processChars::@5 __b5: // i*2 - // [275] (byte~) processChars::$15 ← (byte) processChars::i#10 << (byte) 1 -- vbuxx=vbuz1_rol_1 + // [267] (byte~) processChars::$15 ← (byte) processChars::i#10 << (byte) 1 -- vbuxx=vbuz1_rol_1 lda.z i asl tax // (byte)xpos - // [276] (byte~) processChars::$12 ← (byte)(word) processChars::xpos#0 -- vbuaa=_byte_vwuz1 + // [268] (byte~) processChars::$12 ← (byte)(word) processChars::xpos#0 -- vbuaa=_byte_vwuz1 lda.z xpos // SPRITES_XPOS[i*2] = (byte)xpos - // [277] *((const byte*) SPRITES_XPOS + (byte~) processChars::$15) ← (byte~) processChars::$12 -- pbuc1_derefidx_vbuxx=vbuaa + // [269] *((const byte*) SPRITES_XPOS + (byte~) processChars::$15) ← (byte~) processChars::$12 -- pbuc1_derefidx_vbuxx=vbuaa sta SPRITES_XPOS,x // processing->y>>4 - // [278] (word~) processChars::$13 ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) >> (byte) 4 -- vwuz1=pwuz2_derefidx_vbuc1_ror_4 + // [270] (word~) processChars::$13 ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) >> (byte) 4 -- vwuz1=pwuz2_derefidx_vbuc1_ror_4 ldy #OFFSET_STRUCT_PROCESSINGSPRITE_Y lda (processing),y sta.z __13 @@ -12335,14 +12173,14 @@ processChars: { lsr.z __13+1 ror.z __13 // ypos = (byte)(processing->y>>4) - // [279] (byte) processChars::ypos#0 ← (byte)(word~) processChars::$13 -- vbuz1=_byte_vwuz2 + // [271] (byte) processChars::ypos#0 ← (byte)(word~) processChars::$13 -- vbuz1=_byte_vwuz2 lda.z __13 sta.z ypos // SPRITES_YPOS[i*2] = ypos - // [280] *((const byte*) SPRITES_YPOS + (byte~) processChars::$15) ← (byte) processChars::ypos#0 -- pbuc1_derefidx_vbuxx=vbuz1 + // [272] *((const byte*) SPRITES_YPOS + (byte~) processChars::$15) ← (byte) processChars::ypos#0 -- pbuc1_derefidx_vbuxx=vbuz1 sta SPRITES_YPOS,x // if(processing->x < XPOS_LEFTMOST || processing->x > XPOS_RIGHTMOST || processing->y < YPOS_TOPMOST|| processing->y > YPOS_BOTTOMMOST ) - // [281] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)<(const word) XPOS_LEFTMOST) goto processChars::@6 -- _deref_pwuz1_lt_vwuc1_then_la1 + // [273] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)<(const word) XPOS_LEFTMOST) goto processChars::@6 -- _deref_pwuz1_lt_vwuc1_then_la1 // Move sprite ldy #1 lda (processing),y @@ -12359,7 +12197,7 @@ processChars: { !__b6: !: // processChars::@14 - // [282] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)>(const word) XPOS_RIGHTMOST) goto processChars::@6 -- _deref_pwuz1_gt_vwuc1_then_la1 + // [274] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)>(const word) XPOS_RIGHTMOST) goto processChars::@6 -- _deref_pwuz1_gt_vwuc1_then_la1 ldy #1 lda #>XPOS_RIGHTMOST cmp (processing),y @@ -12375,7 +12213,7 @@ processChars: { !__b6: !: // processChars::@13 - // [283] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)<(const word) YPOS_TOPMOST) goto processChars::@6 -- pwuz1_derefidx_vbuc1_lt_vwuc2_then_la1 + // [275] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)<(const word) YPOS_TOPMOST) goto processChars::@6 -- pwuz1_derefidx_vbuc1_lt_vwuc2_then_la1 ldy #OFFSET_STRUCT_PROCESSINGSPRITE_Y iny lda (processing),y @@ -12392,7 +12230,7 @@ processChars: { !__b6: !: // processChars::@12 - // [284] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)>(const word) YPOS_BOTTOMMOST) goto processChars::@6 -- pwuz1_derefidx_vbuc1_gt_vwuc2_then_la1 + // [276] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)>(const word) YPOS_BOTTOMMOST) goto processChars::@6 -- pwuz1_derefidx_vbuc1_gt_vwuc2_then_la1 ldy #OFFSET_STRUCT_PROCESSINGSPRITE_Y iny lda #>YPOS_BOTTOMMOST @@ -12408,7 +12246,7 @@ processChars: { !: // processChars::@9 // xpos/8 - // [285] (word~) processChars::$23 ← (word) processChars::xpos#0 >> (byte) 3 -- vwuz1=vwuz1_ror_3 + // [277] (word~) processChars::$23 ← (word) processChars::xpos#0 >> (byte) 3 -- vwuz1=vwuz1_ror_3 lsr.z __23+1 ror.z __23 lsr.z __23+1 @@ -12416,16 +12254,16 @@ processChars: { lsr.z __23+1 ror.z __23 // (byte)(xpos/8) - // [286] (byte~) processChars::$24 ← (byte)(word~) processChars::$23 -- vbuaa=_byte_vwuz1 + // [278] (byte~) processChars::$24 ← (byte)(word~) processChars::$23 -- vbuaa=_byte_vwuz1 lda.z __23 // xchar = (byte)(xpos/8) - BORDER_XPOS_LEFT/8 - // [287] (byte) processChars::xchar#0 ← (byte~) processChars::$24 - (const byte) BORDER_XPOS_LEFT/(byte) 8 -- vbuaa=vbuaa_minus_vbuc1 + // [279] (byte) processChars::xchar#0 ← (byte~) processChars::$24 - (const byte) BORDER_XPOS_LEFT/(byte) 8 -- vbuaa=vbuaa_minus_vbuc1 sec sbc #BORDER_XPOS_LEFT/8 // processing->vx += VXSIN[xchar] - // [288] (byte~) processChars::$33 ← (byte) processChars::xchar#0 << (byte) 1 -- vbuaa=vbuaa_rol_1 + // [280] (byte~) processChars::$33 ← (byte) processChars::xchar#0 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl - // [289] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) + *((const word*) VXSIN + (byte~) processChars::$33) -- pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuc2_derefidx_vbuaa + // [281] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) + *((const word*) VXSIN + (byte~) processChars::$33) -- pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuc2_derefidx_vbuaa ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VX tax clc @@ -12437,7 +12275,7 @@ processChars: { adc VXSIN+1,x sta (processing),y // processing->x += processing->vx - // [290] *((word*)(struct ProcessingSprite*) processChars::processing#0) ← *((word*)(struct ProcessingSprite*) processChars::processing#0) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) -- _deref_pwuz1=_deref_pwuz1_plus_pwuz1_derefidx_vbuc1 + // [282] *((word*)(struct ProcessingSprite*) processChars::processing#0) ← *((word*)(struct ProcessingSprite*) processChars::processing#0) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) -- _deref_pwuz1=_deref_pwuz1_plus_pwuz1_derefidx_vbuc1 ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VX sty.z $ff clc @@ -12452,19 +12290,19 @@ processChars: { adc (processing),y sta (processing),y // (byte)(ypos/8) - // [291] (byte~) processChars::$27 ← (byte) processChars::ypos#0 >> (byte) 3 -- vbuaa=vbuz1_ror_3 + // [283] (byte~) processChars::$27 ← (byte) processChars::ypos#0 >> (byte) 3 -- vbuaa=vbuz1_ror_3 lda.z ypos lsr lsr lsr // ychar = (byte)(ypos/8) - BORDER_YPOS_TOP/8 - // [292] (byte) processChars::ychar#0 ← (byte~) processChars::$27 - (const byte) BORDER_YPOS_TOP/(byte) 8 -- vbuaa=vbuaa_minus_vbuc1 + // [284] (byte) processChars::ychar#0 ← (byte~) processChars::$27 - (const byte) BORDER_YPOS_TOP/(byte) 8 -- vbuaa=vbuaa_minus_vbuc1 sec sbc #BORDER_YPOS_TOP/8 // processing->vy += VYSIN[ychar] - // [293] (byte~) processChars::$34 ← (byte) processChars::ychar#0 << (byte) 1 -- vbuaa=vbuaa_rol_1 + // [285] (byte~) processChars::$34 ← (byte) processChars::ychar#0 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl - // [294] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) + *((const word*) VYSIN + (byte~) processChars::$34) -- pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuc2_derefidx_vbuaa + // [286] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) + *((const word*) VYSIN + (byte~) processChars::$34) -- pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuc2_derefidx_vbuaa ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VY tax clc @@ -12476,7 +12314,7 @@ processChars: { adc VYSIN+1,x sta (processing),y // processing->y += processing->vy - // [295] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) -- pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuz1_derefidx_vbuc2 + // [287] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) -- pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuz1_derefidx_vbuc2 ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VY clc lda (processing),y @@ -12491,16 +12329,16 @@ processChars: { // processChars::@7 __b7: // numActive++; - // [296] (byte) processChars::numActive#1 ← ++ (byte) processChars::numActive#10 -- vbuz1=_inc_vbuz1 + // [288] (byte) processChars::numActive#1 ← ++ (byte) processChars::numActive#10 -- vbuz1=_inc_vbuz1 inc.z numActive - // [297] phi from processChars::@1 processChars::@7 to processChars::@2 [phi:processChars::@1/processChars::@7->processChars::@2] - // [297] phi (byte) processChars::numActive#3 = (byte) processChars::numActive#10 [phi:processChars::@1/processChars::@7->processChars::@2#0] -- register_copy + // [289] phi from processChars::@1 processChars::@7 to processChars::@2 [phi:processChars::@1/processChars::@7->processChars::@2] + // [289] phi (byte) processChars::numActive#3 = (byte) processChars::numActive#10 [phi:processChars::@1/processChars::@7->processChars::@2#0] -- register_copy // processChars::@2 __b2: // for( byte i: 0..NUM_PROCESSING-1 ) - // [298] (byte) processChars::i#1 ← ++ (byte) processChars::i#10 -- vbuz1=_inc_vbuz1 + // [290] (byte) processChars::i#1 ← ++ (byte) processChars::i#10 -- vbuz1=_inc_vbuz1 inc.z i - // [299] if((byte) processChars::i#1!=(const byte) NUM_PROCESSING-(byte) 1+(byte) 1) goto processChars::@1 -- vbuz1_neq_vbuc1_then_la1 + // [291] if((byte) processChars::i#1!=(const byte) NUM_PROCESSING-(byte) 1+(byte) 1) goto processChars::@1 -- vbuz1_neq_vbuc1_then_la1 lda #NUM_PROCESSING-1+1 cmp.z i beq !__b1+ @@ -12508,22 +12346,22 @@ processChars: { !__b1: // processChars::@return // } - // [300] return + // [292] return rts // processChars::@6 __b6: // processing->status = STATUS_FREE - // [301] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_FREE -- pbuz1_derefidx_vbuc1=vbuc2 + // [293] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_FREE -- pbuz1_derefidx_vbuc1=vbuc2 // Set status to FREE lda #STATUS_FREE ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS sta (processing),y // 0xff ^ bitmask - // [302] (byte~) processChars::$29 ← (byte) $ff ^ (byte) processChars::bitmask#0 -- vbuaa=vbuc1_bxor_vbuz1 + // [294] (byte~) processChars::$29 ← (byte) $ff ^ (byte) processChars::bitmask#0 -- vbuaa=vbuc1_bxor_vbuz1 lda #$ff eor.z bitmask // *SPRITES_ENABLE &= 0xff ^ bitmask - // [303] *((const byte*) SPRITES_ENABLE) ← *((const byte*) SPRITES_ENABLE) & (byte~) processChars::$29 -- _deref_pbuc1=_deref_pbuc1_band_vbuaa + // [295] *((const byte*) SPRITES_ENABLE) ← *((const byte*) SPRITES_ENABLE) & (byte~) processChars::$29 -- _deref_pbuc1=_deref_pbuc1_band_vbuaa // Disable the sprite and SPRITES_ENABLE sta SPRITES_ENABLE @@ -12531,7 +12369,7 @@ processChars: { // processChars::@4 __b4: // *SPRITES_XMSB |= bitmask - // [304] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) | (byte) processChars::bitmask#0 -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1 + // [296] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) | (byte) processChars::bitmask#0 -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1 lda SPRITES_XMSB ora.z bitmask sta SPRITES_XMSB @@ -12546,24 +12384,24 @@ irqTop: { sty regy+1 // irqTop::@1 // *RASTER = RASTER_IRQ_MIDDLE - // [306] *((const byte*) RASTER) ← (const byte) RASTER_IRQ_MIDDLE -- _deref_pbuc1=vbuc2 + // [298] *((const byte*) RASTER) ← (const byte) RASTER_IRQ_MIDDLE -- _deref_pbuc1=vbuc2 // Trigger IRQ at the middle of the screen lda #RASTER_IRQ_MIDDLE sta RASTER // *HARDWARE_IRQ = &irqBottom - // [307] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_ALL)(void()) irqBottom() -- _deref_pptc1=pprc2 + // [299] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_ALL)(void()) irqBottom() -- _deref_pptc1=pprc2 lda #irqBottom sta HARDWARE_IRQ+1 // *IRQ_STATUS = IRQ_RASTER - // [308] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 + // [300] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 // Acknowledge the IRQ lda #IRQ_RASTER sta IRQ_STATUS // irqTop::@return // } - // [309] return - exit interrupt(HARDWARE_ALL) + // [301] return - exit interrupt(HARDWARE_ALL) rega: lda #00 regx: @@ -12592,4 +12430,7 @@ VYSIN: // Sprites currently being processed in the interrupt PROCESSING: .fill $e*NUM_PROCESSING, 0 + __2: .word 0, 0, 0, 0 + .byte 0, 0, 0, STATUS_FREE + .word 0 diff --git a/src/test/ref/complex/clearscreen/clearscreen.sym b/src/test/ref/complex/clearscreen/clearscreen.sym index f213a3c28..2ec859c0a 100644 --- a/src/test/ref/complex/clearscreen/clearscreen.sym +++ b/src/test/ref/complex/clearscreen/clearscreen.sym @@ -1,3 +1,4 @@ +(const struct ProcessingSprite) $2 = { x: (word) 0, y: (word) 0, vx: (word) 0, vy: (word) 0, id: (byte) 0, ptr: (byte) 0, col: (byte) 0, status: (const byte) STATUS_FREE, screenPtr: (byte*) 0 } (label) @1 (label) @2 (label) @3 @@ -59,9 +60,10 @@ (const byte) RASTER_IRQ_TOP = (byte) $30 (const byte*) SCREEN = (byte*) 1024 (byte*) SCREEN_COPY -(void*) SCREEN_COPY#0 SCREEN_COPY zp[2]:7 0.0273972602739726 +(void*) SCREEN_COPY#0 SCREEN_COPY zp[2]:7 0.03076923076923077 (byte*) SCREEN_DIST -(void*) SCREEN_DIST#0 SCREEN_DIST zp[2]:9 0.028169014084507043 +(void*) SCREEN_DIST#0 SCREEN_DIST zp[2]:9 0.031746031746031744 +(const byte) SIZEOF_STRUCT_PROCESSINGSPRITE = (byte) $e (const byte*) SPRITES_COLS = (byte*) 53287 (const byte*) SPRITES_ENABLE = (byte*) 53269 (const byte*) SPRITES_EXPAND_X = (byte*) 53277 @@ -185,16 +187,16 @@ (label) getCharToProcess::@9 (label) getCharToProcess::@return (byte) getCharToProcess::closest_dist -(byte) getCharToProcess::closest_dist#10 closest_dist zp[1]:11 202.0 -(byte) getCharToProcess::closest_dist#12 closest_dist zp[1]:11 2002.0 -(byte) getCharToProcess::closest_dist#2 closest_dist zp[1]:11 1026.25 -(byte) getCharToProcess::closest_dist#8 closest_dist zp[1]:11 202.0 +(byte) getCharToProcess::closest_dist#10 closest_dist zp[1]:18 202.0 +(byte) getCharToProcess::closest_dist#12 closest_dist zp[1]:18 2002.0 +(byte) getCharToProcess::closest_dist#2 closest_dist zp[1]:18 1026.25 +(byte) getCharToProcess::closest_dist#8 closest_dist zp[1]:18 202.0 (byte) getCharToProcess::closest_x -(byte) getCharToProcess::closest_x#7 closest_x zp[1]:18 517.3333333333334 -(byte) getCharToProcess::closest_x#9 closest_x zp[1]:18 202.0 +(byte) getCharToProcess::closest_x#7 closest_x zp[1]:23 517.3333333333334 +(byte) getCharToProcess::closest_x#9 closest_x zp[1]:23 202.0 (byte) getCharToProcess::closest_y -(byte) getCharToProcess::closest_y#7 closest_y zp[1]:23 517.3333333333334 -(byte) getCharToProcess::closest_y#9 closest_y zp[1]:23 202.0 +(byte) getCharToProcess::closest_y#7 closest_y zp[1]:11 517.3333333333334 +(byte) getCharToProcess::closest_y#9 closest_y zp[1]:11 202.0 (byte) getCharToProcess::dist (byte) getCharToProcess::dist#0 reg byte x 750.75 (byte*) getCharToProcess::dist_line @@ -209,12 +211,12 @@ (byte) getCharToProcess::return_dist#6 reg byte x 2002.0 (byte) getCharToProcess::return_x (byte) getCharToProcess::return_x#0 reg byte y 7.333333333333333 -(byte) getCharToProcess::return_x#1 return_x zp[1]:18 228.7777777777778 -(byte) getCharToProcess::return_x#7 return_x zp[1]:18 1001.0 +(byte) getCharToProcess::return_x#1 return_x zp[1]:23 228.7777777777778 +(byte) getCharToProcess::return_x#7 return_x zp[1]:23 1001.0 (byte) getCharToProcess::return_y (byte) getCharToProcess::return_y#0 reg byte a 7.333333333333333 -(byte) getCharToProcess::return_y#1 return_y zp[1]:23 216.6315789473684 -(byte) getCharToProcess::return_y#7 return_y zp[1]:23 2002.0 +(byte) getCharToProcess::return_y#1 return_y zp[1]:11 216.6315789473684 +(byte) getCharToProcess::return_y#7 return_y zp[1]:11 2002.0 (byte*) getCharToProcess::screen_line (byte*) getCharToProcess::screen_line#0 screen_line zp[2]:28 2.0 (byte*) getCharToProcess::screen_line#1 screen_line zp[2]:28 40.4 @@ -277,8 +279,8 @@ (signed word) init_angle_screen::xw (word) init_angle_screen::xw#0 xw zp[2]:26 33.666666666666664 (byte) init_angle_screen::y -(byte) init_angle_screen::y#1 y zp[1]:11 16.5 -(byte) init_angle_screen::y#5 y zp[1]:11 4.730769230769231 +(byte) init_angle_screen::y#1 y zp[1]:2 16.5 +(byte) init_angle_screen::y#5 y zp[1]:2 4.730769230769231 (signed word) init_angle_screen::yw (word) init_angle_screen::yw#0 yw zp[2]:28 50.5 interrupt(HARDWARE_ALL)(void()) irqBottom() @@ -292,11 +294,11 @@ interrupt(HARDWARE_ALL)(void()) irqTop() (byte) irqTop::i (byte) irqTop::i1 (void()) main() -(byte~) main::$10 reg byte y 12.222222222222221 -(byte~) main::$20 reg byte a 22.0 -(byte~) main::$21 reg byte a 22.0 -(byte~) main::$22 reg byte a 22.0 -(byte~) main::$23 reg byte a 22.0 +(byte~) main::$10 reg byte a 22.0 +(byte~) main::$11 reg byte a 22.0 +(byte~) main::$12 reg byte a 22.0 +(byte~) main::$13 reg byte a 22.0 +(byte~) main::$14 reg byte a 22.0 (struct ProcessingChar~) main::$5 (label) main::@1 (label) main::@10 @@ -314,14 +316,14 @@ interrupt(HARDWARE_ALL)(void()) irqTop() (byte) main::center_x (byte) main::center_x#0 reg byte y 5.5 (byte) main::center_y -(byte) main::center_y#0 center_y zp[1]:30 5.5 +(byte) main::center_y#0 center_y zp[1]:11 5.5 (byte*) main::dst (byte*) main::dst#0 dst zp[2]:3 4.0 (byte*) main::dst#1 dst zp[2]:3 22.0 (byte*) main::dst#2 dst zp[2]:3 8.75 (byte) main::i -(byte) main::i#1 reg byte x 16.5 -(byte) main::i#2 reg byte x 3.6666666666666665 +(byte) main::i#1 i zp[1]:2 16.5 +(byte) main::i#2 i zp[1]:2 7.857142857142857 (byte*) main::src (byte*) main::src#1 src zp[2]:28 11.0 (byte*) main::src#2 src zp[2]:28 14.666666666666666 @@ -429,9 +431,9 @@ interrupt(HARDWARE_ALL)(void()) irqTop() (struct ProcessingChar) startProcessing::center (byte) startProcessing::center_dist (byte) startProcessing::center_x -(byte) startProcessing::center_x#0 center_x zp[1]:11 0.30952380952380953 +(byte) startProcessing::center_x#0 center_x zp[1]:30 0.30952380952380953 (byte) startProcessing::center_y -(byte) startProcessing::center_y#0 center_y zp[1]:30 0.24444444444444444 +(byte) startProcessing::center_y#0 center_y zp[1]:11 0.24444444444444444 (byte) startProcessing::ch (byte) startProcessing::ch#0 reg byte a 2.0 (byte*) startProcessing::chargenData @@ -469,13 +471,12 @@ interrupt(HARDWARE_ALL)(void()) irqTop() (word) startProcessing::spriteY (word) startProcessing::spriteY#0 spriteY zp[2]:21 0.4 -reg byte x [ main::i#2 main::i#1 ] reg byte x [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ] reg byte x [ startProcessing::i1#2 startProcessing::i1#1 ] -zp[1]:2 [ getCharToProcess::y#7 getCharToProcess::y#1 startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ] reg byte y [ getCharToProcess::x#2 getCharToProcess::x#1 ] reg byte x [ getCharToProcess::return_dist#1 getCharToProcess::return_dist#5 getCharToProcess::return_dist#6 getCharToProcess::dist#0 ] reg byte x [ initSprites::i#2 initSprites::i#1 ] +zp[1]:2 [ init_angle_screen::y#5 init_angle_screen::y#1 getCharToProcess::y#7 getCharToProcess::y#1 startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 main::i#2 main::i#1 ] zp[2]:3 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 getCharToProcess::dist_line#6 getCharToProcess::dist_line#0 getCharToProcess::dist_line#1 startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 startProcessing::$6 startProcessing::$5 main::dst#2 main::dst#0 main::dst#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 ] @@ -483,17 +484,17 @@ zp[1]:5 [ processChars::i#10 processChars::i#1 ] zp[1]:6 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ] zp[2]:7 [ SCREEN_COPY#0 ] zp[2]:9 [ SCREEN_DIST#0 malloc::mem#0 ] -reg byte a [ main::$20 ] -reg byte a [ main::$21 ] -reg byte a [ main::$22 ] -reg byte a [ main::$23 ] -reg byte y [ main::$10 ] +reg byte a [ main::$11 ] +reg byte a [ main::$12 ] +reg byte a [ main::$13 ] +reg byte a [ main::$14 ] +reg byte a [ main::$10 ] reg byte y [ getCharToProcess::return_x#0 ] reg byte a [ getCharToProcess::return_y#0 ] reg byte x [ getCharToProcess::return_dist#0 ] reg byte y [ main::center_x#0 ] +zp[1]:11 [ main::center_y#0 startProcessing::center_y#0 getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] reg byte a [ main::center_dist#0 ] -zp[1]:11 [ startProcessing::center_x#0 init_angle_screen::y#5 init_angle_screen::y#1 getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] reg byte a [ startProcessing::$39 ] reg byte a [ startProcessing::$40 ] reg byte a [ startProcessing::$41 ] @@ -502,11 +503,11 @@ reg byte a [ startProcessing::$27 ] zp[2]:12 [ startProcessing::$0 startProcessing::$45 startProcessing::$1 startProcessing::offset#0 startProcessing::screenPtr#0 atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] zp[2]:14 [ startProcessing::$44 atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] zp[2]:16 [ startProcessing::colPtr#0 atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$11 ] -zp[1]:18 [ startProcessing::spriteCol#0 init_angle_screen::x#2 init_angle_screen::x#1 getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] +zp[1]:18 [ startProcessing::spriteCol#0 init_angle_screen::x#2 init_angle_screen::x#1 getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] reg byte a [ startProcessing::ch#0 ] zp[2]:19 [ startProcessing::$11 startProcessing::$12 startProcessing::$13 startProcessing::spriteX#0 atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp[2]:21 [ startProcessing::$15 startProcessing::$16 startProcessing::$17 startProcessing::spriteY#0 atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] -zp[1]:23 [ startProcessing::spritePtr#0 init_angle_screen::xb#2 init_angle_screen::xb#1 getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] +zp[1]:23 [ startProcessing::spritePtr#0 init_angle_screen::xb#2 init_angle_screen::xb#1 getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] reg byte a [ startProcessing::$20 ] reg byte a [ startProcessing::$47 ] reg byte a [ startProcessing::$48 ] @@ -519,7 +520,7 @@ reg byte a [ init_angle_screen::$4 ] zp[2]:26 [ init_angle_screen::xw#0 atan2_16::x#0 getCharToProcess::$12 ] reg byte a [ init_angle_screen::$7 ] zp[2]:28 [ init_angle_screen::yw#0 atan2_16::y#0 initSprites::sp#2 initSprites::sp#1 getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 startProcessing::$9 startProcessing::$8 main::src#2 main::src#1 ] -zp[1]:30 [ init_angle_screen::ang_w#0 main::center_y#0 startProcessing::center_y#0 ] +zp[1]:30 [ init_angle_screen::ang_w#0 startProcessing::center_x#0 ] reg byte a [ init_angle_screen::$13 ] reg byte a [ init_angle_screen::$14 ] reg byte a [ init_angle_screen::$15 ] diff --git a/src/test/ref/struct-19.asm b/src/test/ref/struct-19.asm index 9a9afb281..8fae9dc33 100644 --- a/src/test/ref/struct-19.asm +++ b/src/test/ref/struct-19.asm @@ -29,14 +29,18 @@ main: { sta p2-1,y dey bne !- - lda.z p1 - sta.z v - lda p1+OFFSET_STRUCT_POINT_Y - sta v+OFFSET_STRUCT_POINT_Y - lda.z p2 - sta v+OFFSET_STRUCT_VECTOR_Q - lda p2+OFFSET_STRUCT_POINT_Y - sta v+OFFSET_STRUCT_VECTOR_Q+OFFSET_STRUCT_POINT_Y + ldy #SIZEOF_STRUCT_POINT + !: + lda p1-1,y + sta v-1,y + dey + bne !- + ldy #SIZEOF_STRUCT_POINT + !: + lda p2-1,y + sta v+OFFSET_STRUCT_VECTOR_Q-1,y + dey + bne !- lda.z v sta SCREEN lda v+OFFSET_STRUCT_POINT_Y diff --git a/src/test/ref/struct-19.cfg b/src/test/ref/struct-19.cfg index 376d40c4e..61769f265 100644 --- a/src/test/ref/struct-19.cfg +++ b/src/test/ref/struct-19.cfg @@ -13,15 +13,13 @@ main: scope:[main] from @1 [4] *(&(struct Vector) main::v) ← memset(struct Vector, (const byte) SIZEOF_STRUCT_VECTOR) [5] *(&(struct Point) main::p1) ← memcpy(*(&(const struct Point) $0), struct Point, (const byte) SIZEOF_STRUCT_POINT) [6] *(&(struct Point) main::p2) ← memcpy(*(&(const struct Point) $1), struct Point, (const byte) SIZEOF_STRUCT_POINT) - [7] *((byte*)(struct Point*)&(struct Vector) main::v) ← *((byte*)&(struct Point) main::p1) - [8] *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_POINT_Y) ← *((byte*)&(struct Point) main::p1+(const byte) OFFSET_STRUCT_POINT_Y) - [9] *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) ← *((byte*)&(struct Point) main::p2) - [10] *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y) ← *((byte*)&(struct Point) main::p2+(const byte) OFFSET_STRUCT_POINT_Y) - [11] *((const byte*) SCREEN) ← *((byte*)(struct Point*)&(struct Vector) main::v) - [12] *((const byte*) SCREEN+(byte) 1) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_POINT_Y) - [13] *((const byte*) SCREEN+(byte) 2) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) - [14] *((const byte*) SCREEN+(byte) 3) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y) + [7] *((struct Point*)&(struct Vector) main::v) ← memcpy(*(&(struct Point) main::p1), struct Point, (const byte) SIZEOF_STRUCT_POINT) + [8] *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) ← memcpy(*(&(struct Point) main::p2), struct Point, (const byte) SIZEOF_STRUCT_POINT) + [9] *((const byte*) SCREEN) ← *((byte*)(struct Point*)&(struct Vector) main::v) + [10] *((const byte*) SCREEN+(byte) 1) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_POINT_Y) + [11] *((const byte*) SCREEN+(byte) 2) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) + [12] *((const byte*) SCREEN+(byte) 3) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y) to:main::@return main::@return: scope:[main] from main - [15] return + [13] return to:@return diff --git a/src/test/ref/struct-19.log b/src/test/ref/struct-19.log index 5c21525a3..4364524a7 100644 --- a/src/test/ref/struct-19.log +++ b/src/test/ref/struct-19.log @@ -7,10 +7,8 @@ Replacing struct member reference (struct Vector) main::v.p with member unwindin Replacing struct member reference (struct Vector) main::v.p with member unwinding reference *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P) Replacing struct member reference (struct Vector) main::v.q with member unwinding reference *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) Replacing struct member reference (struct Vector) main::v.q with member unwinding reference *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) -Adding struct value member variable copy *((byte*~) main::$0) ← *((byte*)&(struct Point) main::p1+(const byte) OFFSET_STRUCT_POINT_X) -Adding struct value member variable copy *((byte*~) main::$1) ← *((byte*)&(struct Point) main::p1+(const byte) OFFSET_STRUCT_POINT_Y) -Adding struct value member variable copy *((byte*~) main::$2) ← *((byte*)&(struct Point) main::p2+(const byte) OFFSET_STRUCT_POINT_X) -Adding struct value member variable copy *((byte*~) main::$3) ← *((byte*)&(struct Point) main::p2+(const byte) OFFSET_STRUCT_POINT_Y) +Adding struct value member variable copy *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P) ← memcpy(*(&(struct Point) main::p1), struct Point, (const byte) SIZEOF_STRUCT_POINT) +Adding struct value member variable copy *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) ← memcpy(*(&(struct Point) main::p2), struct Point, (const byte) SIZEOF_STRUCT_POINT) Rewriting struct pointer member access *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P).x Rewriting struct pointer member access *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P).y Rewriting struct pointer member access *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q).x @@ -25,22 +23,16 @@ main: scope:[main] from @1 *(&(struct Vector) main::v) ← memset(struct Vector, (const byte) SIZEOF_STRUCT_VECTOR) *(&(struct Point) main::p1) ← memcpy(*(&(const struct Point) $0), struct Point, (const byte) SIZEOF_STRUCT_POINT) *(&(struct Point) main::p2) ← memcpy(*(&(const struct Point) $1), struct Point, (const byte) SIZEOF_STRUCT_POINT) + *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P) ← memcpy(*(&(struct Point) main::p1), struct Point, (const byte) SIZEOF_STRUCT_POINT) + *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) ← memcpy(*(&(struct Point) main::p2), struct Point, (const byte) SIZEOF_STRUCT_POINT) (byte*~) main::$0 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P + (const byte) OFFSET_STRUCT_POINT_X - *((byte*~) main::$0) ← *((byte*)&(struct Point) main::p1+(const byte) OFFSET_STRUCT_POINT_X) + *((const byte*) SCREEN + (number) 0) ← *((byte*~) main::$0) (byte*~) main::$1 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P + (const byte) OFFSET_STRUCT_POINT_Y - *((byte*~) main::$1) ← *((byte*)&(struct Point) main::p1+(const byte) OFFSET_STRUCT_POINT_Y) + *((const byte*) SCREEN + (number) 1) ← *((byte*~) main::$1) (byte*~) main::$2 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q + (const byte) OFFSET_STRUCT_POINT_X - *((byte*~) main::$2) ← *((byte*)&(struct Point) main::p2+(const byte) OFFSET_STRUCT_POINT_X) + *((const byte*) SCREEN + (number) 2) ← *((byte*~) main::$2) (byte*~) main::$3 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q + (const byte) OFFSET_STRUCT_POINT_Y - *((byte*~) main::$3) ← *((byte*)&(struct Point) main::p2+(const byte) OFFSET_STRUCT_POINT_Y) - (byte*~) main::$4 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P + (const byte) OFFSET_STRUCT_POINT_X - *((const byte*) SCREEN + (number) 0) ← *((byte*~) main::$4) - (byte*~) main::$5 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P + (const byte) OFFSET_STRUCT_POINT_Y - *((const byte*) SCREEN + (number) 1) ← *((byte*~) main::$5) - (byte*~) main::$6 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q + (const byte) OFFSET_STRUCT_POINT_X - *((const byte*) SCREEN + (number) 2) ← *((byte*~) main::$6) - (byte*~) main::$7 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q + (const byte) OFFSET_STRUCT_POINT_Y - *((const byte*) SCREEN + (number) 3) ← *((byte*~) main::$7) + *((const byte*) SCREEN + (number) 3) ← *((byte*~) main::$3) to:main::@return main::@return: scope:[main] from main return @@ -75,19 +67,15 @@ SYMBOL TABLE SSA (byte*~) main::$1 (byte*~) main::$2 (byte*~) main::$3 -(byte*~) main::$4 -(byte*~) main::$5 -(byte*~) main::$6 -(byte*~) main::$7 (label) main::@return (struct Point) main::p1 loadstore (struct Point) main::p2 loadstore (struct Vector) main::v loadstore -Adding number conversion cast (unumber) 0 in *((const byte*) SCREEN + (number) 0) ← *((byte*~) main::$4) -Adding number conversion cast (unumber) 1 in *((const byte*) SCREEN + (number) 1) ← *((byte*~) main::$5) -Adding number conversion cast (unumber) 2 in *((const byte*) SCREEN + (number) 2) ← *((byte*~) main::$6) -Adding number conversion cast (unumber) 3 in *((const byte*) SCREEN + (number) 3) ← *((byte*~) main::$7) +Adding number conversion cast (unumber) 0 in *((const byte*) SCREEN + (number) 0) ← *((byte*~) main::$0) +Adding number conversion cast (unumber) 1 in *((const byte*) SCREEN + (number) 1) ← *((byte*~) main::$1) +Adding number conversion cast (unumber) 2 in *((const byte*) SCREEN + (number) 2) ← *((byte*~) main::$2) +Adding number conversion cast (unumber) 3 in *((const byte*) SCREEN + (number) 3) ← *((byte*~) main::$3) Successful SSA optimization PassNAddNumberTypeConversions Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 @@ -100,47 +88,30 @@ Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 3 Successful SSA optimization PassNFinalizeNumberTypeConversions -Constant right-side identified [3] (byte*~) main::$0 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P + (const byte) OFFSET_STRUCT_POINT_X -Constant right-side identified [5] (byte*~) main::$1 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P + (const byte) OFFSET_STRUCT_POINT_Y -Constant right-side identified [7] (byte*~) main::$2 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q + (const byte) OFFSET_STRUCT_POINT_X -Constant right-side identified [9] (byte*~) main::$3 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q + (const byte) OFFSET_STRUCT_POINT_Y -Constant right-side identified [11] (byte*~) main::$4 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P + (const byte) OFFSET_STRUCT_POINT_X -Constant right-side identified [13] (byte*~) main::$5 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P + (const byte) OFFSET_STRUCT_POINT_Y -Constant right-side identified [15] (byte*~) main::$6 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q + (const byte) OFFSET_STRUCT_POINT_X -Constant right-side identified [17] (byte*~) main::$7 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q + (const byte) OFFSET_STRUCT_POINT_Y +Constant right-side identified [5] (byte*~) main::$0 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P + (const byte) OFFSET_STRUCT_POINT_X +Constant right-side identified [7] (byte*~) main::$1 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P + (const byte) OFFSET_STRUCT_POINT_Y +Constant right-side identified [9] (byte*~) main::$2 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q + (const byte) OFFSET_STRUCT_POINT_X +Constant right-side identified [11] (byte*~) main::$3 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q + (const byte) OFFSET_STRUCT_POINT_Y Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte*) main::$0 = (byte*)(struct Point*)&main::v+OFFSET_STRUCT_VECTOR_P+OFFSET_STRUCT_POINT_X Constant (const byte*) main::$1 = (byte*)(struct Point*)&main::v+OFFSET_STRUCT_VECTOR_P+OFFSET_STRUCT_POINT_Y Constant (const byte*) main::$2 = (byte*)(struct Point*)&main::v+OFFSET_STRUCT_VECTOR_Q+OFFSET_STRUCT_POINT_X Constant (const byte*) main::$3 = (byte*)(struct Point*)&main::v+OFFSET_STRUCT_VECTOR_Q+OFFSET_STRUCT_POINT_Y -Constant (const byte*) main::$4 = (byte*)(struct Point*)&main::v+OFFSET_STRUCT_VECTOR_P+OFFSET_STRUCT_POINT_X -Constant (const byte*) main::$5 = (byte*)(struct Point*)&main::v+OFFSET_STRUCT_VECTOR_P+OFFSET_STRUCT_POINT_Y -Constant (const byte*) main::$6 = (byte*)(struct Point*)&main::v+OFFSET_STRUCT_VECTOR_Q+OFFSET_STRUCT_POINT_X -Constant (const byte*) main::$7 = (byte*)(struct Point*)&main::v+OFFSET_STRUCT_VECTOR_Q+OFFSET_STRUCT_POINT_Y Successful SSA optimization Pass2ConstantIdentification Simplifying expression containing zero (byte*)(struct Point*)&main::v+OFFSET_STRUCT_VECTOR_P in Simplifying expression containing zero (struct Point*)&main::v in Simplifying expression containing zero (struct Point*)&main::v in Simplifying expression containing zero (byte*)(struct Point*)&main::v+OFFSET_STRUCT_VECTOR_Q in -Simplifying expression containing zero (byte*)(struct Point*)&main::v+OFFSET_STRUCT_VECTOR_P in -Simplifying expression containing zero (struct Point*)&main::v in -Simplifying expression containing zero (struct Point*)&main::v in -Simplifying expression containing zero (byte*)(struct Point*)&main::v+OFFSET_STRUCT_VECTOR_Q in -Simplifying expression containing zero (byte*)&main::p1 in [4] *((const byte*) main::$0) ← *((byte*)&(struct Point) main::p1+(const byte) OFFSET_STRUCT_POINT_X) -Simplifying expression containing zero (byte*)&main::p2 in [8] *((const byte*) main::$2) ← *((byte*)&(struct Point) main::p2+(const byte) OFFSET_STRUCT_POINT_X) -Simplifying expression containing zero SCREEN in [12] *((const byte*) SCREEN + (byte) 0) ← *((const byte*) main::$4) +Simplifying expression containing zero (struct Point*)&main::v in [3] *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P) ← memcpy(*(&(struct Point) main::p1), struct Point, (const byte) SIZEOF_STRUCT_POINT) +Simplifying expression containing zero SCREEN in [6] *((const byte*) SCREEN + (byte) 0) ← *((const byte*) main::$0) Successful SSA optimization PassNSimplifyExpressionWithZero Eliminating unused constant (const byte) OFFSET_STRUCT_VECTOR_P Eliminating unused constant (const byte) OFFSET_STRUCT_POINT_X Successful SSA optimization PassNEliminateUnusedVars +Constant inlined main::$3 = (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y Constant inlined main::$1 = (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_POINT_Y Constant inlined main::$2 = (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q Constant inlined main::$0 = (byte*)(struct Point*)&(struct Vector) main::v -Constant inlined main::$5 = (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_POINT_Y -Constant inlined main::$6 = (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q -Constant inlined main::$3 = (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y -Constant inlined main::$4 = (byte*)(struct Point*)&(struct Vector) main::v -Constant inlined main::$7 = (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y Successful SSA optimization Pass2ConstantInlining Consolidated array index constant in *(SCREEN+1) Consolidated array index constant in *(SCREEN+2) @@ -176,17 +147,15 @@ main: scope:[main] from @1 [4] *(&(struct Vector) main::v) ← memset(struct Vector, (const byte) SIZEOF_STRUCT_VECTOR) [5] *(&(struct Point) main::p1) ← memcpy(*(&(const struct Point) $0), struct Point, (const byte) SIZEOF_STRUCT_POINT) [6] *(&(struct Point) main::p2) ← memcpy(*(&(const struct Point) $1), struct Point, (const byte) SIZEOF_STRUCT_POINT) - [7] *((byte*)(struct Point*)&(struct Vector) main::v) ← *((byte*)&(struct Point) main::p1) - [8] *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_POINT_Y) ← *((byte*)&(struct Point) main::p1+(const byte) OFFSET_STRUCT_POINT_Y) - [9] *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) ← *((byte*)&(struct Point) main::p2) - [10] *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y) ← *((byte*)&(struct Point) main::p2+(const byte) OFFSET_STRUCT_POINT_Y) - [11] *((const byte*) SCREEN) ← *((byte*)(struct Point*)&(struct Vector) main::v) - [12] *((const byte*) SCREEN+(byte) 1) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_POINT_Y) - [13] *((const byte*) SCREEN+(byte) 2) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) - [14] *((const byte*) SCREEN+(byte) 3) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y) + [7] *((struct Point*)&(struct Vector) main::v) ← memcpy(*(&(struct Point) main::p1), struct Point, (const byte) SIZEOF_STRUCT_POINT) + [8] *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) ← memcpy(*(&(struct Point) main::p2), struct Point, (const byte) SIZEOF_STRUCT_POINT) + [9] *((const byte*) SCREEN) ← *((byte*)(struct Point*)&(struct Vector) main::v) + [10] *((const byte*) SCREEN+(byte) 1) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_POINT_Y) + [11] *((const byte*) SCREEN+(byte) 2) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) + [12] *((const byte*) SCREEN+(byte) 3) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y) to:main::@return main::@return: scope:[main] from main - [15] return + [13] return to:@return @@ -266,34 +235,36 @@ main: { sta p2-1,y dey bne !- - // [7] *((byte*)(struct Point*)&(struct Vector) main::v) ← *((byte*)&(struct Point) main::p1) -- _deref_pbuc1=_deref_pbuc2 - lda.z p1 - sta.z v - // [8] *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_POINT_Y) ← *((byte*)&(struct Point) main::p1+(const byte) OFFSET_STRUCT_POINT_Y) -- _deref_pbuc1=_deref_pbuc2 - lda p1+OFFSET_STRUCT_POINT_Y - sta v+OFFSET_STRUCT_POINT_Y - // [9] *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) ← *((byte*)&(struct Point) main::p2) -- _deref_pbuc1=_deref_pbuc2 - lda.z p2 - sta v+OFFSET_STRUCT_VECTOR_Q - // [10] *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y) ← *((byte*)&(struct Point) main::p2+(const byte) OFFSET_STRUCT_POINT_Y) -- _deref_pbuc1=_deref_pbuc2 - lda p2+OFFSET_STRUCT_POINT_Y - sta v+OFFSET_STRUCT_VECTOR_Q+OFFSET_STRUCT_POINT_Y - // [11] *((const byte*) SCREEN) ← *((byte*)(struct Point*)&(struct Vector) main::v) -- _deref_pbuc1=_deref_pbuc2 + // [7] *((struct Point*)&(struct Vector) main::v) ← memcpy(*(&(struct Point) main::p1), struct Point, (const byte) SIZEOF_STRUCT_POINT) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3 + ldy #SIZEOF_STRUCT_POINT + !: + lda p1-1,y + sta v-1,y + dey + bne !- + // [8] *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) ← memcpy(*(&(struct Point) main::p2), struct Point, (const byte) SIZEOF_STRUCT_POINT) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3 + ldy #SIZEOF_STRUCT_POINT + !: + lda p2-1,y + sta v+OFFSET_STRUCT_VECTOR_Q-1,y + dey + bne !- + // [9] *((const byte*) SCREEN) ← *((byte*)(struct Point*)&(struct Vector) main::v) -- _deref_pbuc1=_deref_pbuc2 lda.z v sta SCREEN - // [12] *((const byte*) SCREEN+(byte) 1) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_POINT_Y) -- _deref_pbuc1=_deref_pbuc2 + // [10] *((const byte*) SCREEN+(byte) 1) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_POINT_Y) -- _deref_pbuc1=_deref_pbuc2 lda v+OFFSET_STRUCT_POINT_Y sta SCREEN+1 - // [13] *((const byte*) SCREEN+(byte) 2) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) -- _deref_pbuc1=_deref_pbuc2 + // [11] *((const byte*) SCREEN+(byte) 2) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) -- _deref_pbuc1=_deref_pbuc2 lda v+OFFSET_STRUCT_VECTOR_Q sta SCREEN+2 - // [14] *((const byte*) SCREEN+(byte) 3) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y) -- _deref_pbuc1=_deref_pbuc2 + // [12] *((const byte*) SCREEN+(byte) 3) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y) -- _deref_pbuc1=_deref_pbuc2 lda v+OFFSET_STRUCT_VECTOR_Q+OFFSET_STRUCT_POINT_Y sta SCREEN+3 jmp __breturn // main::@return __breturn: - // [15] return + // [13] return rts } // File Data @@ -304,14 +275,12 @@ REGISTER UPLIFT POTENTIAL REGISTERS Statement [4] *(&(struct Vector) main::v) ← memset(struct Vector, (const byte) SIZEOF_STRUCT_VECTOR) [ main::v main::p1 main::p2 ] ( main:2 [ main::v main::p1 main::p2 ] ) always clobbers reg byte a reg byte y Statement [5] *(&(struct Point) main::p1) ← memcpy(*(&(const struct Point) $0), struct Point, (const byte) SIZEOF_STRUCT_POINT) [ main::v main::p1 main::p2 ] ( main:2 [ main::v main::p1 main::p2 ] ) always clobbers reg byte a reg byte y Statement [6] *(&(struct Point) main::p2) ← memcpy(*(&(const struct Point) $1), struct Point, (const byte) SIZEOF_STRUCT_POINT) [ main::v main::p1 main::p2 ] ( main:2 [ main::v main::p1 main::p2 ] ) always clobbers reg byte a reg byte y -Statement [7] *((byte*)(struct Point*)&(struct Vector) main::v) ← *((byte*)&(struct Point) main::p1) [ main::v main::p1 main::p2 ] ( main:2 [ main::v main::p1 main::p2 ] ) always clobbers reg byte a -Statement [8] *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_POINT_Y) ← *((byte*)&(struct Point) main::p1+(const byte) OFFSET_STRUCT_POINT_Y) [ main::v main::p2 ] ( main:2 [ main::v main::p2 ] ) always clobbers reg byte a -Statement [9] *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) ← *((byte*)&(struct Point) main::p2) [ main::v main::p2 ] ( main:2 [ main::v main::p2 ] ) always clobbers reg byte a -Statement [10] *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y) ← *((byte*)&(struct Point) main::p2+(const byte) OFFSET_STRUCT_POINT_Y) [ main::v ] ( main:2 [ main::v ] ) always clobbers reg byte a -Statement [11] *((const byte*) SCREEN) ← *((byte*)(struct Point*)&(struct Vector) main::v) [ main::v ] ( main:2 [ main::v ] ) always clobbers reg byte a -Statement [12] *((const byte*) SCREEN+(byte) 1) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_POINT_Y) [ main::v ] ( main:2 [ main::v ] ) always clobbers reg byte a -Statement [13] *((const byte*) SCREEN+(byte) 2) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) [ main::v ] ( main:2 [ main::v ] ) always clobbers reg byte a -Statement [14] *((const byte*) SCREEN+(byte) 3) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y) [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [7] *((struct Point*)&(struct Vector) main::v) ← memcpy(*(&(struct Point) main::p1), struct Point, (const byte) SIZEOF_STRUCT_POINT) [ main::v main::p2 ] ( main:2 [ main::v main::p2 ] ) always clobbers reg byte a reg byte y +Statement [8] *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) ← memcpy(*(&(struct Point) main::p2), struct Point, (const byte) SIZEOF_STRUCT_POINT) [ main::v ] ( main:2 [ main::v ] ) always clobbers reg byte a reg byte y +Statement [9] *((const byte*) SCREEN) ← *((byte*)(struct Point*)&(struct Vector) main::v) [ main::v ] ( main:2 [ main::v ] ) always clobbers reg byte a +Statement [10] *((const byte*) SCREEN+(byte) 1) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_POINT_Y) [ main::v ] ( main:2 [ main::v ] ) always clobbers reg byte a +Statement [11] *((const byte*) SCREEN+(byte) 2) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) [ main::v ] ( main:2 [ main::v ] ) always clobbers reg byte a +Statement [12] *((const byte*) SCREEN+(byte) 3) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y) [ ] ( main:2 [ ] ) always clobbers reg byte a Potential registers zp[4]:2 [ main::v ] : zp[4]:2 , Potential registers zp[2]:6 [ main::p1 ] : zp[2]:6 , Potential registers zp[2]:8 [ main::p2 ] : zp[2]:8 , @@ -322,10 +291,10 @@ Uplift Scope [Vector] Uplift Scope [main] 0: zp[4]:2 [ main::v ] 0: zp[2]:6 [ main::p1 ] 0: zp[2]:8 [ main::p2 ] Uplift Scope [] -Uplifting [Point] best 126 combination -Uplifting [Vector] best 126 combination -Uplifting [main] best 126 combination zp[4]:2 [ main::v ] zp[2]:6 [ main::p1 ] zp[2]:8 [ main::p2 ] -Uplifting [] best 126 combination +Uplifting [Point] best 129 combination +Uplifting [Vector] best 129 combination +Uplifting [main] best 129 combination zp[4]:2 [ main::v ] zp[2]:6 [ main::p1 ] zp[2]:8 [ main::p2 ] +Uplifting [] best 129 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -380,34 +349,36 @@ main: { sta p2-1,y dey bne !- - // [7] *((byte*)(struct Point*)&(struct Vector) main::v) ← *((byte*)&(struct Point) main::p1) -- _deref_pbuc1=_deref_pbuc2 - lda.z p1 - sta.z v - // [8] *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_POINT_Y) ← *((byte*)&(struct Point) main::p1+(const byte) OFFSET_STRUCT_POINT_Y) -- _deref_pbuc1=_deref_pbuc2 - lda p1+OFFSET_STRUCT_POINT_Y - sta v+OFFSET_STRUCT_POINT_Y - // [9] *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) ← *((byte*)&(struct Point) main::p2) -- _deref_pbuc1=_deref_pbuc2 - lda.z p2 - sta v+OFFSET_STRUCT_VECTOR_Q - // [10] *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y) ← *((byte*)&(struct Point) main::p2+(const byte) OFFSET_STRUCT_POINT_Y) -- _deref_pbuc1=_deref_pbuc2 - lda p2+OFFSET_STRUCT_POINT_Y - sta v+OFFSET_STRUCT_VECTOR_Q+OFFSET_STRUCT_POINT_Y - // [11] *((const byte*) SCREEN) ← *((byte*)(struct Point*)&(struct Vector) main::v) -- _deref_pbuc1=_deref_pbuc2 + // [7] *((struct Point*)&(struct Vector) main::v) ← memcpy(*(&(struct Point) main::p1), struct Point, (const byte) SIZEOF_STRUCT_POINT) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3 + ldy #SIZEOF_STRUCT_POINT + !: + lda p1-1,y + sta v-1,y + dey + bne !- + // [8] *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) ← memcpy(*(&(struct Point) main::p2), struct Point, (const byte) SIZEOF_STRUCT_POINT) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3 + ldy #SIZEOF_STRUCT_POINT + !: + lda p2-1,y + sta v+OFFSET_STRUCT_VECTOR_Q-1,y + dey + bne !- + // [9] *((const byte*) SCREEN) ← *((byte*)(struct Point*)&(struct Vector) main::v) -- _deref_pbuc1=_deref_pbuc2 lda.z v sta SCREEN - // [12] *((const byte*) SCREEN+(byte) 1) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_POINT_Y) -- _deref_pbuc1=_deref_pbuc2 + // [10] *((const byte*) SCREEN+(byte) 1) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_POINT_Y) -- _deref_pbuc1=_deref_pbuc2 lda v+OFFSET_STRUCT_POINT_Y sta SCREEN+1 - // [13] *((const byte*) SCREEN+(byte) 2) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) -- _deref_pbuc1=_deref_pbuc2 + // [11] *((const byte*) SCREEN+(byte) 2) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) -- _deref_pbuc1=_deref_pbuc2 lda v+OFFSET_STRUCT_VECTOR_Q sta SCREEN+2 - // [14] *((const byte*) SCREEN+(byte) 3) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y) -- _deref_pbuc1=_deref_pbuc2 + // [12] *((const byte*) SCREEN+(byte) 3) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y) -- _deref_pbuc1=_deref_pbuc2 lda v+OFFSET_STRUCT_VECTOR_Q+OFFSET_STRUCT_POINT_Y sta SCREEN+3 jmp __breturn // main::@return __breturn: - // [15] return + // [13] return rts } // File Data @@ -460,7 +431,7 @@ zp[2]:8 [ main::p2 ] FINAL ASSEMBLER -Score: 111 +Score: 114 // File Comments // Minimal struct with C-Standard behavior - struct containing struct with assignment of sub-struct @@ -510,38 +481,40 @@ main: { dey bne !- // v.p = p1 - // [7] *((byte*)(struct Point*)&(struct Vector) main::v) ← *((byte*)&(struct Point) main::p1) -- _deref_pbuc1=_deref_pbuc2 - lda.z p1 - sta.z v - // [8] *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_POINT_Y) ← *((byte*)&(struct Point) main::p1+(const byte) OFFSET_STRUCT_POINT_Y) -- _deref_pbuc1=_deref_pbuc2 - lda p1+OFFSET_STRUCT_POINT_Y - sta v+OFFSET_STRUCT_POINT_Y + // [7] *((struct Point*)&(struct Vector) main::v) ← memcpy(*(&(struct Point) main::p1), struct Point, (const byte) SIZEOF_STRUCT_POINT) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3 + ldy #SIZEOF_STRUCT_POINT + !: + lda p1-1,y + sta v-1,y + dey + bne !- // v.q = p2 - // [9] *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) ← *((byte*)&(struct Point) main::p2) -- _deref_pbuc1=_deref_pbuc2 - lda.z p2 - sta v+OFFSET_STRUCT_VECTOR_Q - // [10] *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y) ← *((byte*)&(struct Point) main::p2+(const byte) OFFSET_STRUCT_POINT_Y) -- _deref_pbuc1=_deref_pbuc2 - lda p2+OFFSET_STRUCT_POINT_Y - sta v+OFFSET_STRUCT_VECTOR_Q+OFFSET_STRUCT_POINT_Y + // [8] *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) ← memcpy(*(&(struct Point) main::p2), struct Point, (const byte) SIZEOF_STRUCT_POINT) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3 + ldy #SIZEOF_STRUCT_POINT + !: + lda p2-1,y + sta v+OFFSET_STRUCT_VECTOR_Q-1,y + dey + bne !- // SCREEN[0] = v.p.x - // [11] *((const byte*) SCREEN) ← *((byte*)(struct Point*)&(struct Vector) main::v) -- _deref_pbuc1=_deref_pbuc2 + // [9] *((const byte*) SCREEN) ← *((byte*)(struct Point*)&(struct Vector) main::v) -- _deref_pbuc1=_deref_pbuc2 lda.z v sta SCREEN // SCREEN[1] = v.p.y - // [12] *((const byte*) SCREEN+(byte) 1) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_POINT_Y) -- _deref_pbuc1=_deref_pbuc2 + // [10] *((const byte*) SCREEN+(byte) 1) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_POINT_Y) -- _deref_pbuc1=_deref_pbuc2 lda v+OFFSET_STRUCT_POINT_Y sta SCREEN+1 // SCREEN[2] = v.q.x - // [13] *((const byte*) SCREEN+(byte) 2) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) -- _deref_pbuc1=_deref_pbuc2 + // [11] *((const byte*) SCREEN+(byte) 2) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) -- _deref_pbuc1=_deref_pbuc2 lda v+OFFSET_STRUCT_VECTOR_Q sta SCREEN+2 // SCREEN[3] = v.q.y - // [14] *((const byte*) SCREEN+(byte) 3) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y) -- _deref_pbuc1=_deref_pbuc2 + // [12] *((const byte*) SCREEN+(byte) 3) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y) -- _deref_pbuc1=_deref_pbuc2 lda v+OFFSET_STRUCT_VECTOR_Q+OFFSET_STRUCT_POINT_Y sta SCREEN+3 // main::@return // } - // [15] return + // [13] return rts } // File Data diff --git a/src/test/ref/struct-20.asm b/src/test/ref/struct-20.asm index fb3086932..20258aaaf 100644 --- a/src/test/ref/struct-20.asm +++ b/src/test/ref/struct-20.asm @@ -22,14 +22,18 @@ main: { sta p2-1,y dey bne !- - lda.z p1 - sta.z v - lda p1+OFFSET_STRUCT_POINT_Y - sta v+OFFSET_STRUCT_POINT_Y - lda.z p2 - sta v+OFFSET_STRUCT_VECTOR_Q - lda p2+OFFSET_STRUCT_POINT_Y - sta v+OFFSET_STRUCT_VECTOR_Q+OFFSET_STRUCT_POINT_Y + ldy #SIZEOF_STRUCT_POINT + !: + lda p1-1,y + sta v-1,y + dey + bne !- + ldy #SIZEOF_STRUCT_POINT + !: + lda p2-1,y + sta v+OFFSET_STRUCT_VECTOR_Q-1,y + dey + bne !- lda.z v sta SCREEN lda v+OFFSET_STRUCT_POINT_Y diff --git a/src/test/ref/struct-20.cfg b/src/test/ref/struct-20.cfg index c02e6805d..bc46e8bd5 100644 --- a/src/test/ref/struct-20.cfg +++ b/src/test/ref/struct-20.cfg @@ -12,15 +12,13 @@ main: scope:[main] from @1 [4] *(&(struct Point) main::p1) ← memcpy(*(&(const struct Point) $0), struct Point, (const byte) SIZEOF_STRUCT_POINT) [5] *(&(struct Point) main::p2) ← memcpy(*(&(const struct Point) $1), struct Point, (const byte) SIZEOF_STRUCT_POINT) - [6] *((byte*)(struct Point*)&(struct Vector) main::v) ← *((byte*)&(struct Point) main::p1) - [7] *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_POINT_Y) ← *((byte*)&(struct Point) main::p1+(const byte) OFFSET_STRUCT_POINT_Y) - [8] *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) ← *((byte*)&(struct Point) main::p2) - [9] *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y) ← *((byte*)&(struct Point) main::p2+(const byte) OFFSET_STRUCT_POINT_Y) - [10] *((const byte*) SCREEN) ← *((byte*)(struct Point*)&(struct Vector) main::v) - [11] *((const byte*) SCREEN+(byte) 1) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_POINT_Y) - [12] *((const byte*) SCREEN+(byte) 2) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) - [13] *((const byte*) SCREEN+(byte) 3) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y) + [6] *((struct Point*)&(struct Vector) main::v) ← memcpy(*(&(struct Point) main::p1), struct Point, (const byte) SIZEOF_STRUCT_POINT) + [7] *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) ← memcpy(*(&(struct Point) main::p2), struct Point, (const byte) SIZEOF_STRUCT_POINT) + [8] *((const byte*) SCREEN) ← *((byte*)(struct Point*)&(struct Vector) main::v) + [9] *((const byte*) SCREEN+(byte) 1) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_POINT_Y) + [10] *((const byte*) SCREEN+(byte) 2) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) + [11] *((const byte*) SCREEN+(byte) 3) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y) to:main::@return main::@return: scope:[main] from main - [14] return + [12] return to:@return diff --git a/src/test/ref/struct-20.log b/src/test/ref/struct-20.log index 0376222f0..3488e8677 100644 --- a/src/test/ref/struct-20.log +++ b/src/test/ref/struct-20.log @@ -6,10 +6,8 @@ Replacing struct member reference (struct Vector) main::v.p with member unwindin Replacing struct member reference (struct Vector) main::v.p with member unwinding reference *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P) Replacing struct member reference (struct Vector) main::v.q with member unwinding reference *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) Replacing struct member reference (struct Vector) main::v.q with member unwinding reference *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) -Adding struct value member variable copy *((byte*~) main::$0) ← *((byte*)&(struct Point) main::p1+(const byte) OFFSET_STRUCT_POINT_X) -Adding struct value member variable copy *((byte*~) main::$1) ← *((byte*)&(struct Point) main::p1+(const byte) OFFSET_STRUCT_POINT_Y) -Adding struct value member variable copy *((byte*~) main::$2) ← *((byte*)&(struct Point) main::p2+(const byte) OFFSET_STRUCT_POINT_X) -Adding struct value member variable copy *((byte*~) main::$3) ← *((byte*)&(struct Point) main::p2+(const byte) OFFSET_STRUCT_POINT_Y) +Adding struct value member variable copy *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P) ← memcpy(*(&(struct Point) main::p1), struct Point, (const byte) SIZEOF_STRUCT_POINT) +Adding struct value member variable copy *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) ← memcpy(*(&(struct Point) main::p2), struct Point, (const byte) SIZEOF_STRUCT_POINT) Rewriting struct pointer member access *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P).x Rewriting struct pointer member access *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P).y Rewriting struct pointer member access *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q).x @@ -23,23 +21,17 @@ CONTROL FLOW GRAPH SSA main: scope:[main] from @1 *(&(struct Point) main::p1) ← memcpy(*(&(const struct Point) $0), struct Point, (const byte) SIZEOF_STRUCT_POINT) *(&(struct Point) main::p2) ← memcpy(*(&(const struct Point) $1), struct Point, (const byte) SIZEOF_STRUCT_POINT) - (byte*~) main::$0 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P + (const byte) OFFSET_STRUCT_POINT_X - *((byte*~) main::$0) ← *((byte*)&(struct Point) main::p1+(const byte) OFFSET_STRUCT_POINT_X) - (byte*~) main::$1 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P + (const byte) OFFSET_STRUCT_POINT_Y - *((byte*~) main::$1) ← *((byte*)&(struct Point) main::p1+(const byte) OFFSET_STRUCT_POINT_Y) - (byte*~) main::$2 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q + (const byte) OFFSET_STRUCT_POINT_X - *((byte*~) main::$2) ← *((byte*)&(struct Point) main::p2+(const byte) OFFSET_STRUCT_POINT_X) - (byte*~) main::$3 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q + (const byte) OFFSET_STRUCT_POINT_Y - *((byte*~) main::$3) ← *((byte*)&(struct Point) main::p2+(const byte) OFFSET_STRUCT_POINT_Y) + *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P) ← memcpy(*(&(struct Point) main::p1), struct Point, (const byte) SIZEOF_STRUCT_POINT) + *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) ← memcpy(*(&(struct Point) main::p2), struct Point, (const byte) SIZEOF_STRUCT_POINT) (struct Vector) main::v ← struct-unwound {*((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P), *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q)} - (byte*~) main::$4 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P + (const byte) OFFSET_STRUCT_POINT_X - *((const byte*) SCREEN + (number) 0) ← *((byte*~) main::$4) - (byte*~) main::$5 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P + (const byte) OFFSET_STRUCT_POINT_Y - *((const byte*) SCREEN + (number) 1) ← *((byte*~) main::$5) - (byte*~) main::$6 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q + (const byte) OFFSET_STRUCT_POINT_X - *((const byte*) SCREEN + (number) 2) ← *((byte*~) main::$6) - (byte*~) main::$7 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q + (const byte) OFFSET_STRUCT_POINT_Y - *((const byte*) SCREEN + (number) 3) ← *((byte*~) main::$7) + (byte*~) main::$0 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P + (const byte) OFFSET_STRUCT_POINT_X + *((const byte*) SCREEN + (number) 0) ← *((byte*~) main::$0) + (byte*~) main::$1 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P + (const byte) OFFSET_STRUCT_POINT_Y + *((const byte*) SCREEN + (number) 1) ← *((byte*~) main::$1) + (byte*~) main::$2 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q + (const byte) OFFSET_STRUCT_POINT_X + *((const byte*) SCREEN + (number) 2) ← *((byte*~) main::$2) + (byte*~) main::$3 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q + (const byte) OFFSET_STRUCT_POINT_Y + *((const byte*) SCREEN + (number) 3) ← *((byte*~) main::$3) to:main::@return main::@return: scope:[main] from main return @@ -73,19 +65,15 @@ SYMBOL TABLE SSA (byte*~) main::$1 (byte*~) main::$2 (byte*~) main::$3 -(byte*~) main::$4 -(byte*~) main::$5 -(byte*~) main::$6 -(byte*~) main::$7 (label) main::@return (struct Point) main::p1 loadstore (struct Point) main::p2 loadstore (struct Vector) main::v loadstore -Adding number conversion cast (unumber) 0 in *((const byte*) SCREEN + (number) 0) ← *((byte*~) main::$4) -Adding number conversion cast (unumber) 1 in *((const byte*) SCREEN + (number) 1) ← *((byte*~) main::$5) -Adding number conversion cast (unumber) 2 in *((const byte*) SCREEN + (number) 2) ← *((byte*~) main::$6) -Adding number conversion cast (unumber) 3 in *((const byte*) SCREEN + (number) 3) ← *((byte*~) main::$7) +Adding number conversion cast (unumber) 0 in *((const byte*) SCREEN + (number) 0) ← *((byte*~) main::$0) +Adding number conversion cast (unumber) 1 in *((const byte*) SCREEN + (number) 1) ← *((byte*~) main::$1) +Adding number conversion cast (unumber) 2 in *((const byte*) SCREEN + (number) 2) ← *((byte*~) main::$2) +Adding number conversion cast (unumber) 3 in *((const byte*) SCREEN + (number) 3) ← *((byte*~) main::$3) Successful SSA optimization PassNAddNumberTypeConversions Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 @@ -98,48 +86,31 @@ Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 3 Successful SSA optimization PassNFinalizeNumberTypeConversions -Removing C-classic struct-unwound assignment [10] (struct Vector) main::v ← struct-unwound {*((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P), *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q)} -Constant right-side identified [2] (byte*~) main::$0 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P + (const byte) OFFSET_STRUCT_POINT_X -Constant right-side identified [4] (byte*~) main::$1 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P + (const byte) OFFSET_STRUCT_POINT_Y -Constant right-side identified [6] (byte*~) main::$2 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q + (const byte) OFFSET_STRUCT_POINT_X -Constant right-side identified [8] (byte*~) main::$3 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q + (const byte) OFFSET_STRUCT_POINT_Y -Constant right-side identified [11] (byte*~) main::$4 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P + (const byte) OFFSET_STRUCT_POINT_X -Constant right-side identified [13] (byte*~) main::$5 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P + (const byte) OFFSET_STRUCT_POINT_Y -Constant right-side identified [15] (byte*~) main::$6 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q + (const byte) OFFSET_STRUCT_POINT_X -Constant right-side identified [17] (byte*~) main::$7 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q + (const byte) OFFSET_STRUCT_POINT_Y +Removing C-classic struct-unwound assignment [4] (struct Vector) main::v ← struct-unwound {*((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P), *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q)} +Constant right-side identified [5] (byte*~) main::$0 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P + (const byte) OFFSET_STRUCT_POINT_X +Constant right-side identified [7] (byte*~) main::$1 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P + (const byte) OFFSET_STRUCT_POINT_Y +Constant right-side identified [9] (byte*~) main::$2 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q + (const byte) OFFSET_STRUCT_POINT_X +Constant right-side identified [11] (byte*~) main::$3 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q + (const byte) OFFSET_STRUCT_POINT_Y Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte*) main::$0 = (byte*)(struct Point*)&main::v+OFFSET_STRUCT_VECTOR_P+OFFSET_STRUCT_POINT_X Constant (const byte*) main::$1 = (byte*)(struct Point*)&main::v+OFFSET_STRUCT_VECTOR_P+OFFSET_STRUCT_POINT_Y Constant (const byte*) main::$2 = (byte*)(struct Point*)&main::v+OFFSET_STRUCT_VECTOR_Q+OFFSET_STRUCT_POINT_X Constant (const byte*) main::$3 = (byte*)(struct Point*)&main::v+OFFSET_STRUCT_VECTOR_Q+OFFSET_STRUCT_POINT_Y -Constant (const byte*) main::$4 = (byte*)(struct Point*)&main::v+OFFSET_STRUCT_VECTOR_P+OFFSET_STRUCT_POINT_X -Constant (const byte*) main::$5 = (byte*)(struct Point*)&main::v+OFFSET_STRUCT_VECTOR_P+OFFSET_STRUCT_POINT_Y -Constant (const byte*) main::$6 = (byte*)(struct Point*)&main::v+OFFSET_STRUCT_VECTOR_Q+OFFSET_STRUCT_POINT_X -Constant (const byte*) main::$7 = (byte*)(struct Point*)&main::v+OFFSET_STRUCT_VECTOR_Q+OFFSET_STRUCT_POINT_Y Successful SSA optimization Pass2ConstantIdentification Simplifying expression containing zero (byte*)(struct Point*)&main::v+OFFSET_STRUCT_VECTOR_P in Simplifying expression containing zero (struct Point*)&main::v in Simplifying expression containing zero (struct Point*)&main::v in Simplifying expression containing zero (byte*)(struct Point*)&main::v+OFFSET_STRUCT_VECTOR_Q in -Simplifying expression containing zero (byte*)(struct Point*)&main::v+OFFSET_STRUCT_VECTOR_P in -Simplifying expression containing zero (struct Point*)&main::v in -Simplifying expression containing zero (struct Point*)&main::v in -Simplifying expression containing zero (byte*)(struct Point*)&main::v+OFFSET_STRUCT_VECTOR_Q in -Simplifying expression containing zero (byte*)&main::p1 in [3] *((const byte*) main::$0) ← *((byte*)&(struct Point) main::p1+(const byte) OFFSET_STRUCT_POINT_X) -Simplifying expression containing zero (byte*)&main::p2 in [7] *((const byte*) main::$2) ← *((byte*)&(struct Point) main::p2+(const byte) OFFSET_STRUCT_POINT_X) -Simplifying expression containing zero SCREEN in [12] *((const byte*) SCREEN + (byte) 0) ← *((const byte*) main::$4) +Simplifying expression containing zero (struct Point*)&main::v in [2] *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P) ← memcpy(*(&(struct Point) main::p1), struct Point, (const byte) SIZEOF_STRUCT_POINT) +Simplifying expression containing zero SCREEN in [6] *((const byte*) SCREEN + (byte) 0) ← *((const byte*) main::$0) Successful SSA optimization PassNSimplifyExpressionWithZero Eliminating unused constant (const byte) OFFSET_STRUCT_VECTOR_P Eliminating unused constant (const byte) OFFSET_STRUCT_POINT_X Successful SSA optimization PassNEliminateUnusedVars +Constant inlined main::$3 = (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y Constant inlined main::$1 = (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_POINT_Y Constant inlined main::$2 = (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q Constant inlined main::$0 = (byte*)(struct Point*)&(struct Vector) main::v -Constant inlined main::$5 = (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_POINT_Y -Constant inlined main::$6 = (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q -Constant inlined main::$3 = (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y -Constant inlined main::$4 = (byte*)(struct Point*)&(struct Vector) main::v -Constant inlined main::$7 = (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y Successful SSA optimization Pass2ConstantInlining Consolidated array index constant in *(SCREEN+1) Consolidated array index constant in *(SCREEN+2) @@ -174,17 +145,15 @@ FINAL CONTROL FLOW GRAPH main: scope:[main] from @1 [4] *(&(struct Point) main::p1) ← memcpy(*(&(const struct Point) $0), struct Point, (const byte) SIZEOF_STRUCT_POINT) [5] *(&(struct Point) main::p2) ← memcpy(*(&(const struct Point) $1), struct Point, (const byte) SIZEOF_STRUCT_POINT) - [6] *((byte*)(struct Point*)&(struct Vector) main::v) ← *((byte*)&(struct Point) main::p1) - [7] *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_POINT_Y) ← *((byte*)&(struct Point) main::p1+(const byte) OFFSET_STRUCT_POINT_Y) - [8] *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) ← *((byte*)&(struct Point) main::p2) - [9] *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y) ← *((byte*)&(struct Point) main::p2+(const byte) OFFSET_STRUCT_POINT_Y) - [10] *((const byte*) SCREEN) ← *((byte*)(struct Point*)&(struct Vector) main::v) - [11] *((const byte*) SCREEN+(byte) 1) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_POINT_Y) - [12] *((const byte*) SCREEN+(byte) 2) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) - [13] *((const byte*) SCREEN+(byte) 3) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y) + [6] *((struct Point*)&(struct Vector) main::v) ← memcpy(*(&(struct Point) main::p1), struct Point, (const byte) SIZEOF_STRUCT_POINT) + [7] *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) ← memcpy(*(&(struct Point) main::p2), struct Point, (const byte) SIZEOF_STRUCT_POINT) + [8] *((const byte*) SCREEN) ← *((byte*)(struct Point*)&(struct Vector) main::v) + [9] *((const byte*) SCREEN+(byte) 1) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_POINT_Y) + [10] *((const byte*) SCREEN+(byte) 2) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) + [11] *((const byte*) SCREEN+(byte) 3) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y) to:main::@return main::@return: scope:[main] from main - [14] return + [12] return to:@return @@ -256,34 +225,36 @@ main: { sta p2-1,y dey bne !- - // [6] *((byte*)(struct Point*)&(struct Vector) main::v) ← *((byte*)&(struct Point) main::p1) -- _deref_pbuc1=_deref_pbuc2 - lda.z p1 - sta.z v - // [7] *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_POINT_Y) ← *((byte*)&(struct Point) main::p1+(const byte) OFFSET_STRUCT_POINT_Y) -- _deref_pbuc1=_deref_pbuc2 - lda p1+OFFSET_STRUCT_POINT_Y - sta v+OFFSET_STRUCT_POINT_Y - // [8] *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) ← *((byte*)&(struct Point) main::p2) -- _deref_pbuc1=_deref_pbuc2 - lda.z p2 - sta v+OFFSET_STRUCT_VECTOR_Q - // [9] *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y) ← *((byte*)&(struct Point) main::p2+(const byte) OFFSET_STRUCT_POINT_Y) -- _deref_pbuc1=_deref_pbuc2 - lda p2+OFFSET_STRUCT_POINT_Y - sta v+OFFSET_STRUCT_VECTOR_Q+OFFSET_STRUCT_POINT_Y - // [10] *((const byte*) SCREEN) ← *((byte*)(struct Point*)&(struct Vector) main::v) -- _deref_pbuc1=_deref_pbuc2 + // [6] *((struct Point*)&(struct Vector) main::v) ← memcpy(*(&(struct Point) main::p1), struct Point, (const byte) SIZEOF_STRUCT_POINT) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3 + ldy #SIZEOF_STRUCT_POINT + !: + lda p1-1,y + sta v-1,y + dey + bne !- + // [7] *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) ← memcpy(*(&(struct Point) main::p2), struct Point, (const byte) SIZEOF_STRUCT_POINT) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3 + ldy #SIZEOF_STRUCT_POINT + !: + lda p2-1,y + sta v+OFFSET_STRUCT_VECTOR_Q-1,y + dey + bne !- + // [8] *((const byte*) SCREEN) ← *((byte*)(struct Point*)&(struct Vector) main::v) -- _deref_pbuc1=_deref_pbuc2 lda.z v sta SCREEN - // [11] *((const byte*) SCREEN+(byte) 1) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_POINT_Y) -- _deref_pbuc1=_deref_pbuc2 + // [9] *((const byte*) SCREEN+(byte) 1) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_POINT_Y) -- _deref_pbuc1=_deref_pbuc2 lda v+OFFSET_STRUCT_POINT_Y sta SCREEN+1 - // [12] *((const byte*) SCREEN+(byte) 2) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) -- _deref_pbuc1=_deref_pbuc2 + // [10] *((const byte*) SCREEN+(byte) 2) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) -- _deref_pbuc1=_deref_pbuc2 lda v+OFFSET_STRUCT_VECTOR_Q sta SCREEN+2 - // [13] *((const byte*) SCREEN+(byte) 3) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y) -- _deref_pbuc1=_deref_pbuc2 + // [11] *((const byte*) SCREEN+(byte) 3) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y) -- _deref_pbuc1=_deref_pbuc2 lda v+OFFSET_STRUCT_VECTOR_Q+OFFSET_STRUCT_POINT_Y sta SCREEN+3 jmp __breturn // main::@return __breturn: - // [14] return + // [12] return rts } // File Data @@ -293,14 +264,12 @@ main: { REGISTER UPLIFT POTENTIAL REGISTERS Statement [4] *(&(struct Point) main::p1) ← memcpy(*(&(const struct Point) $0), struct Point, (const byte) SIZEOF_STRUCT_POINT) [ main::p1 main::p2 main::v ] ( main:2 [ main::p1 main::p2 main::v ] ) always clobbers reg byte a reg byte y Statement [5] *(&(struct Point) main::p2) ← memcpy(*(&(const struct Point) $1), struct Point, (const byte) SIZEOF_STRUCT_POINT) [ main::p1 main::p2 main::v ] ( main:2 [ main::p1 main::p2 main::v ] ) always clobbers reg byte a reg byte y -Statement [6] *((byte*)(struct Point*)&(struct Vector) main::v) ← *((byte*)&(struct Point) main::p1) [ main::p1 main::p2 main::v ] ( main:2 [ main::p1 main::p2 main::v ] ) always clobbers reg byte a -Statement [7] *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_POINT_Y) ← *((byte*)&(struct Point) main::p1+(const byte) OFFSET_STRUCT_POINT_Y) [ main::p2 main::v ] ( main:2 [ main::p2 main::v ] ) always clobbers reg byte a -Statement [8] *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) ← *((byte*)&(struct Point) main::p2) [ main::p2 main::v ] ( main:2 [ main::p2 main::v ] ) always clobbers reg byte a -Statement [9] *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y) ← *((byte*)&(struct Point) main::p2+(const byte) OFFSET_STRUCT_POINT_Y) [ main::v ] ( main:2 [ main::v ] ) always clobbers reg byte a -Statement [10] *((const byte*) SCREEN) ← *((byte*)(struct Point*)&(struct Vector) main::v) [ main::v ] ( main:2 [ main::v ] ) always clobbers reg byte a -Statement [11] *((const byte*) SCREEN+(byte) 1) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_POINT_Y) [ main::v ] ( main:2 [ main::v ] ) always clobbers reg byte a -Statement [12] *((const byte*) SCREEN+(byte) 2) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) [ main::v ] ( main:2 [ main::v ] ) always clobbers reg byte a -Statement [13] *((const byte*) SCREEN+(byte) 3) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y) [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [6] *((struct Point*)&(struct Vector) main::v) ← memcpy(*(&(struct Point) main::p1), struct Point, (const byte) SIZEOF_STRUCT_POINT) [ main::p2 main::v ] ( main:2 [ main::p2 main::v ] ) always clobbers reg byte a reg byte y +Statement [7] *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) ← memcpy(*(&(struct Point) main::p2), struct Point, (const byte) SIZEOF_STRUCT_POINT) [ main::v ] ( main:2 [ main::v ] ) always clobbers reg byte a reg byte y +Statement [8] *((const byte*) SCREEN) ← *((byte*)(struct Point*)&(struct Vector) main::v) [ main::v ] ( main:2 [ main::v ] ) always clobbers reg byte a +Statement [9] *((const byte*) SCREEN+(byte) 1) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_POINT_Y) [ main::v ] ( main:2 [ main::v ] ) always clobbers reg byte a +Statement [10] *((const byte*) SCREEN+(byte) 2) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) [ main::v ] ( main:2 [ main::v ] ) always clobbers reg byte a +Statement [11] *((const byte*) SCREEN+(byte) 3) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y) [ ] ( main:2 [ ] ) always clobbers reg byte a Potential registers zp[2]:2 [ main::p1 ] : zp[2]:2 , Potential registers zp[2]:4 [ main::p2 ] : zp[2]:4 , Potential registers zp[4]:6 [ main::v ] : zp[4]:6 , @@ -311,10 +280,10 @@ Uplift Scope [Vector] Uplift Scope [main] 0: zp[2]:2 [ main::p1 ] 0: zp[2]:4 [ main::p2 ] 0: zp[4]:6 [ main::v ] Uplift Scope [] -Uplifting [Point] best 113 combination -Uplifting [Vector] best 113 combination -Uplifting [main] best 113 combination zp[2]:2 [ main::p1 ] zp[2]:4 [ main::p2 ] zp[4]:6 [ main::v ] -Uplifting [] best 113 combination +Uplifting [Point] best 116 combination +Uplifting [Vector] best 116 combination +Uplifting [main] best 116 combination zp[2]:2 [ main::p1 ] zp[2]:4 [ main::p2 ] zp[4]:6 [ main::v ] +Uplifting [] best 116 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -361,34 +330,36 @@ main: { sta p2-1,y dey bne !- - // [6] *((byte*)(struct Point*)&(struct Vector) main::v) ← *((byte*)&(struct Point) main::p1) -- _deref_pbuc1=_deref_pbuc2 - lda.z p1 - sta.z v - // [7] *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_POINT_Y) ← *((byte*)&(struct Point) main::p1+(const byte) OFFSET_STRUCT_POINT_Y) -- _deref_pbuc1=_deref_pbuc2 - lda p1+OFFSET_STRUCT_POINT_Y - sta v+OFFSET_STRUCT_POINT_Y - // [8] *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) ← *((byte*)&(struct Point) main::p2) -- _deref_pbuc1=_deref_pbuc2 - lda.z p2 - sta v+OFFSET_STRUCT_VECTOR_Q - // [9] *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y) ← *((byte*)&(struct Point) main::p2+(const byte) OFFSET_STRUCT_POINT_Y) -- _deref_pbuc1=_deref_pbuc2 - lda p2+OFFSET_STRUCT_POINT_Y - sta v+OFFSET_STRUCT_VECTOR_Q+OFFSET_STRUCT_POINT_Y - // [10] *((const byte*) SCREEN) ← *((byte*)(struct Point*)&(struct Vector) main::v) -- _deref_pbuc1=_deref_pbuc2 + // [6] *((struct Point*)&(struct Vector) main::v) ← memcpy(*(&(struct Point) main::p1), struct Point, (const byte) SIZEOF_STRUCT_POINT) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3 + ldy #SIZEOF_STRUCT_POINT + !: + lda p1-1,y + sta v-1,y + dey + bne !- + // [7] *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) ← memcpy(*(&(struct Point) main::p2), struct Point, (const byte) SIZEOF_STRUCT_POINT) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3 + ldy #SIZEOF_STRUCT_POINT + !: + lda p2-1,y + sta v+OFFSET_STRUCT_VECTOR_Q-1,y + dey + bne !- + // [8] *((const byte*) SCREEN) ← *((byte*)(struct Point*)&(struct Vector) main::v) -- _deref_pbuc1=_deref_pbuc2 lda.z v sta SCREEN - // [11] *((const byte*) SCREEN+(byte) 1) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_POINT_Y) -- _deref_pbuc1=_deref_pbuc2 + // [9] *((const byte*) SCREEN+(byte) 1) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_POINT_Y) -- _deref_pbuc1=_deref_pbuc2 lda v+OFFSET_STRUCT_POINT_Y sta SCREEN+1 - // [12] *((const byte*) SCREEN+(byte) 2) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) -- _deref_pbuc1=_deref_pbuc2 + // [10] *((const byte*) SCREEN+(byte) 2) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) -- _deref_pbuc1=_deref_pbuc2 lda v+OFFSET_STRUCT_VECTOR_Q sta SCREEN+2 - // [13] *((const byte*) SCREEN+(byte) 3) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y) -- _deref_pbuc1=_deref_pbuc2 + // [11] *((const byte*) SCREEN+(byte) 3) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y) -- _deref_pbuc1=_deref_pbuc2 lda v+OFFSET_STRUCT_VECTOR_Q+OFFSET_STRUCT_POINT_Y sta SCREEN+3 jmp __breturn // main::@return __breturn: - // [14] return + // [12] return rts } // File Data @@ -440,7 +411,7 @@ zp[4]:6 [ main::v ] FINAL ASSEMBLER -Score: 98 +Score: 101 // File Comments // Minimal struct with C-Standard behavior - struct containing struct with initializer using sub-struct value @@ -481,37 +452,39 @@ main: { dey bne !- // v = { p1, p2 } - // [6] *((byte*)(struct Point*)&(struct Vector) main::v) ← *((byte*)&(struct Point) main::p1) -- _deref_pbuc1=_deref_pbuc2 - lda.z p1 - sta.z v - // [7] *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_POINT_Y) ← *((byte*)&(struct Point) main::p1+(const byte) OFFSET_STRUCT_POINT_Y) -- _deref_pbuc1=_deref_pbuc2 - lda p1+OFFSET_STRUCT_POINT_Y - sta v+OFFSET_STRUCT_POINT_Y - // [8] *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) ← *((byte*)&(struct Point) main::p2) -- _deref_pbuc1=_deref_pbuc2 - lda.z p2 - sta v+OFFSET_STRUCT_VECTOR_Q - // [9] *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y) ← *((byte*)&(struct Point) main::p2+(const byte) OFFSET_STRUCT_POINT_Y) -- _deref_pbuc1=_deref_pbuc2 - lda p2+OFFSET_STRUCT_POINT_Y - sta v+OFFSET_STRUCT_VECTOR_Q+OFFSET_STRUCT_POINT_Y + // [6] *((struct Point*)&(struct Vector) main::v) ← memcpy(*(&(struct Point) main::p1), struct Point, (const byte) SIZEOF_STRUCT_POINT) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3 + ldy #SIZEOF_STRUCT_POINT + !: + lda p1-1,y + sta v-1,y + dey + bne !- + // [7] *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) ← memcpy(*(&(struct Point) main::p2), struct Point, (const byte) SIZEOF_STRUCT_POINT) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3 + ldy #SIZEOF_STRUCT_POINT + !: + lda p2-1,y + sta v+OFFSET_STRUCT_VECTOR_Q-1,y + dey + bne !- // SCREEN[0] = v.p.x - // [10] *((const byte*) SCREEN) ← *((byte*)(struct Point*)&(struct Vector) main::v) -- _deref_pbuc1=_deref_pbuc2 + // [8] *((const byte*) SCREEN) ← *((byte*)(struct Point*)&(struct Vector) main::v) -- _deref_pbuc1=_deref_pbuc2 lda.z v sta SCREEN // SCREEN[1] = v.p.y - // [11] *((const byte*) SCREEN+(byte) 1) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_POINT_Y) -- _deref_pbuc1=_deref_pbuc2 + // [9] *((const byte*) SCREEN+(byte) 1) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_POINT_Y) -- _deref_pbuc1=_deref_pbuc2 lda v+OFFSET_STRUCT_POINT_Y sta SCREEN+1 // SCREEN[2] = v.q.x - // [12] *((const byte*) SCREEN+(byte) 2) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) -- _deref_pbuc1=_deref_pbuc2 + // [10] *((const byte*) SCREEN+(byte) 2) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) -- _deref_pbuc1=_deref_pbuc2 lda v+OFFSET_STRUCT_VECTOR_Q sta SCREEN+2 // SCREEN[3] = v.q.y - // [13] *((const byte*) SCREEN+(byte) 3) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y) -- _deref_pbuc1=_deref_pbuc2 + // [11] *((const byte*) SCREEN+(byte) 3) ← *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y) -- _deref_pbuc1=_deref_pbuc2 lda v+OFFSET_STRUCT_VECTOR_Q+OFFSET_STRUCT_POINT_Y sta SCREEN+3 // main::@return // } - // [14] return + // [12] return rts } // File Data diff --git a/src/test/ref/struct-35.asm b/src/test/ref/struct-35.asm new file mode 100644 index 000000000..6e1c8a015 --- /dev/null +++ b/src/test/ref/struct-35.asm @@ -0,0 +1,23 @@ +// Minimal struct with C-Standard behavior - copy assignment through struct pointer +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" + .label SCREEN = $400 + .const SIZEOF_STRUCT_POINT = 2 + .const OFFSET_STRUCT_POINT_Y = 1 +main: { + .label p2 = point2 + ldy #SIZEOF_STRUCT_POINT + !: + lda point1-1,y + sta p2-1,y + dey + bne !- + lda point2 + sta SCREEN + lda point2+OFFSET_STRUCT_POINT_Y + sta SCREEN+1 + rts +} + point1: .byte 2, 3 + point2: .fill SIZEOF_STRUCT_POINT, 0 diff --git a/src/test/ref/struct-35.cfg b/src/test/ref/struct-35.cfg new file mode 100644 index 000000000..683bb6fe5 --- /dev/null +++ b/src/test/ref/struct-35.cfg @@ -0,0 +1,19 @@ +@begin: scope:[] from + [0] phi() + to:@1 +@1: scope:[] from @begin + [1] phi() + [2] call main + to:@end +@end: scope:[] from @1 + [3] phi() + +(void()) main() +main: scope:[main] from @1 + [4] *((const struct Point*) main::p2) ← memcpy(*(&(struct Point) point1), struct Point, (const byte) SIZEOF_STRUCT_POINT) + [5] *((const byte*) SCREEN) ← *((byte*)&(struct Point) point2) + [6] *((const byte*) SCREEN+(byte) 1) ← *((byte*)&(struct Point) point2+(const byte) OFFSET_STRUCT_POINT_Y) + to:main::@return +main::@return: scope:[main] from main + [7] return + to:@return diff --git a/src/test/ref/struct-35.log b/src/test/ref/struct-35.log new file mode 100644 index 000000000..122418a83 --- /dev/null +++ b/src/test/ref/struct-35.log @@ -0,0 +1,316 @@ +Setting inferred volatile on symbol affected by address-of (struct Point*) main::p2 ← &(struct Point) point2 +Adding struct value member variable copy *((struct Point*) main::p2) ← memcpy(*(&(struct Point) point1), struct Point, (const byte) SIZEOF_STRUCT_POINT) +Replacing struct member reference (struct Point) point2.x with member unwinding reference *((byte*)&(struct Point) point2+(const byte) OFFSET_STRUCT_POINT_X) +Replacing struct member reference (struct Point) point2.y with member unwinding reference *((byte*)&(struct Point) point2+(const byte) OFFSET_STRUCT_POINT_Y) +Identified constant variable (struct Point*) main::p2 + +CONTROL FLOW GRAPH SSA +@begin: scope:[] from + to:@1 + +(void()) main() +main: scope:[main] from @1 + *((const struct Point*) main::p2) ← memcpy(*(&(struct Point) point1), struct Point, (const byte) SIZEOF_STRUCT_POINT) + *((const byte*) SCREEN + (number) 0) ← *((byte*)&(struct Point) point2+(const byte) OFFSET_STRUCT_POINT_X) + *((const byte*) SCREEN + (number) 1) ← *((byte*)&(struct Point) point2+(const byte) OFFSET_STRUCT_POINT_Y) + to:main::@return +main::@return: scope:[main] from main + return + to:@return +@1: scope:[] from @begin + call main + to:@2 +@2: scope:[] from @1 + to:@end +@end: scope:[] from @2 + +SYMBOL TABLE SSA +(label) @1 +(label) @2 +(label) @begin +(label) @end +(const byte) OFFSET_STRUCT_POINT_X = (byte) 0 +(const byte) OFFSET_STRUCT_POINT_Y = (byte) 1 +(byte) Point::x +(byte) Point::y +(const byte*) SCREEN = (byte*)(number) $400 +(const byte) SIZEOF_STRUCT_POINT = (byte) 2 +(void()) main() +(label) main::@return +(const struct Point*) main::p2 = &(struct Point) point2 +(struct Point) point1 loadstore = { x: (byte) 2, y: (byte) 3 } +(struct Point) point2 loadstore = {} + +Adding number conversion cast (unumber) 0 in *((const byte*) SCREEN + (number) 0) ← *((byte*)&(struct Point) point2+(const byte) OFFSET_STRUCT_POINT_X) +Adding number conversion cast (unumber) 1 in *((const byte*) SCREEN + (number) 1) ← *((byte*)&(struct Point) point2+(const byte) OFFSET_STRUCT_POINT_Y) +Successful SSA optimization PassNAddNumberTypeConversions +Simplifying constant pointer cast (byte*) 1024 +Simplifying constant integer cast 0 +Simplifying constant integer cast 1 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 1 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Simplifying expression containing zero (byte*)&point2 in [1] *((const byte*) SCREEN + (byte) 0) ← *((byte*)&(struct Point) point2+(const byte) OFFSET_STRUCT_POINT_X) +Simplifying expression containing zero SCREEN in [1] *((const byte*) SCREEN + (byte) 0) ← *((byte*)&(struct Point) point2) +Successful SSA optimization PassNSimplifyExpressionWithZero +Eliminating unused constant (const byte) OFFSET_STRUCT_POINT_X +Successful SSA optimization PassNEliminateUnusedVars +Consolidated array index constant in *(SCREEN+1) +Successful SSA optimization Pass2ConstantAdditionElimination +Adding NOP phi() at start of @begin +Adding NOP phi() at start of @1 +Adding NOP phi() at start of @2 +Adding NOP phi() at start of @end +CALL GRAPH +Calls in [] to main:2 + +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes +Culled Empty Block (label) @2 +Adding NOP phi() at start of @begin +Adding NOP phi() at start of @1 +Adding NOP phi() at start of @end + +FINAL CONTROL FLOW GRAPH +@begin: scope:[] from + [0] phi() + to:@1 +@1: scope:[] from @begin + [1] phi() + [2] call main + to:@end +@end: scope:[] from @1 + [3] phi() + +(void()) main() +main: scope:[main] from @1 + [4] *((const struct Point*) main::p2) ← memcpy(*(&(struct Point) point1), struct Point, (const byte) SIZEOF_STRUCT_POINT) + [5] *((const byte*) SCREEN) ← *((byte*)&(struct Point) point2) + [6] *((const byte*) SCREEN+(byte) 1) ← *((byte*)&(struct Point) point2+(const byte) OFFSET_STRUCT_POINT_Y) + to:main::@return +main::@return: scope:[main] from main + [7] return + to:@return + + +VARIABLE REGISTER WEIGHTS +(byte) Point::x +(byte) Point::y +(void()) main() +(struct Point) point1 loadstore = { x: (byte) 2, y: (byte) 3 } +(struct Point) point2 loadstore = {} + +Initial phi equivalence classes +Added variable point1 to live range equivalence class [ point1 ] +Added variable point2 to live range equivalence class [ point2 ] +Complete equivalence classes +[ point1 ] +[ point2 ] +Allocated mem[2] [ point1 ] +Allocated mem[2] [ point2 ] + +INITIAL ASM +Target platform is c64basic / MOS6502X + // File Comments +// Minimal struct with C-Standard behavior - copy assignment through struct pointer + // Upstart +.pc = $801 "Basic" +:BasicUpstart(__bbegin) +.pc = $80d "Program" + // Global Constants & labels + .label SCREEN = $400 + .const SIZEOF_STRUCT_POINT = 2 + .const OFFSET_STRUCT_POINT_Y = 1 + // @begin +__bbegin: + // [1] phi from @begin to @1 [phi:@begin->@1] +__b1_from___bbegin: + jmp __b1 + // @1 +__b1: + // [2] call main + jsr main + // [3] phi from @1 to @end [phi:@1->@end] +__bend_from___b1: + jmp __bend + // @end +__bend: + // main +main: { + .label p2 = point2 + // [4] *((const struct Point*) main::p2) ← memcpy(*(&(struct Point) point1), struct Point, (const byte) SIZEOF_STRUCT_POINT) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3 + ldy #SIZEOF_STRUCT_POINT + !: + lda point1-1,y + sta p2-1,y + dey + bne !- + // [5] *((const byte*) SCREEN) ← *((byte*)&(struct Point) point2) -- _deref_pbuc1=_deref_pbuc2 + lda point2 + sta SCREEN + // [6] *((const byte*) SCREEN+(byte) 1) ← *((byte*)&(struct Point) point2+(const byte) OFFSET_STRUCT_POINT_Y) -- _deref_pbuc1=_deref_pbuc2 + lda point2+OFFSET_STRUCT_POINT_Y + sta SCREEN+1 + jmp __breturn + // main::@return + __breturn: + // [7] return + rts +} + // File Data + point1: .byte 2, 3 + point2: .fill SIZEOF_STRUCT_POINT, 0 + +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [4] *((const struct Point*) main::p2) ← memcpy(*(&(struct Point) point1), struct Point, (const byte) SIZEOF_STRUCT_POINT) [ point2 ] ( main:2 [ point2 ] ) always clobbers reg byte a reg byte y +Statement [5] *((const byte*) SCREEN) ← *((byte*)&(struct Point) point2) [ point2 ] ( main:2 [ point2 ] ) always clobbers reg byte a +Statement [6] *((const byte*) SCREEN+(byte) 1) ← *((byte*)&(struct Point) point2+(const byte) OFFSET_STRUCT_POINT_Y) [ ] ( main:2 [ ] ) always clobbers reg byte a +Potential registers mem[2] [ point1 ] : mem[2] , +Potential registers mem[2] [ point2 ] : mem[2] , + +REGISTER UPLIFT SCOPES +Uplift Scope [Point] +Uplift Scope [main] +Uplift Scope [] 0: mem[2] [ point1 ] 0: mem[2] [ point2 ] + +Uplifting [Point] best 53 combination +Uplifting [main] best 53 combination +Uplifting [] best 53 combination mem[2] [ point1 ] mem[2] [ point2 ] + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Minimal struct with C-Standard behavior - copy assignment through struct pointer + // Upstart +.pc = $801 "Basic" +:BasicUpstart(__bbegin) +.pc = $80d "Program" + // Global Constants & labels + .label SCREEN = $400 + .const SIZEOF_STRUCT_POINT = 2 + .const OFFSET_STRUCT_POINT_Y = 1 + // @begin +__bbegin: + // [1] phi from @begin to @1 [phi:@begin->@1] +__b1_from___bbegin: + jmp __b1 + // @1 +__b1: + // [2] call main + jsr main + // [3] phi from @1 to @end [phi:@1->@end] +__bend_from___b1: + jmp __bend + // @end +__bend: + // main +main: { + .label p2 = point2 + // [4] *((const struct Point*) main::p2) ← memcpy(*(&(struct Point) point1), struct Point, (const byte) SIZEOF_STRUCT_POINT) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3 + ldy #SIZEOF_STRUCT_POINT + !: + lda point1-1,y + sta p2-1,y + dey + bne !- + // [5] *((const byte*) SCREEN) ← *((byte*)&(struct Point) point2) -- _deref_pbuc1=_deref_pbuc2 + lda point2 + sta SCREEN + // [6] *((const byte*) SCREEN+(byte) 1) ← *((byte*)&(struct Point) point2+(const byte) OFFSET_STRUCT_POINT_Y) -- _deref_pbuc1=_deref_pbuc2 + lda point2+OFFSET_STRUCT_POINT_Y + sta SCREEN+1 + jmp __breturn + // main::@return + __breturn: + // [7] return + rts +} + // File Data + point1: .byte 2, 3 + point2: .fill SIZEOF_STRUCT_POINT, 0 + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b1 +Removing instruction jmp __bend +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Replacing label __bbegin with __b1 +Removing instruction __bbegin: +Removing instruction __b1_from___bbegin: +Removing instruction __bend_from___b1: +Succesful ASM optimization Pass5RedundantLabelElimination +Removing instruction __bend: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination +Updating BasicUpstart to call main directly +Removing instruction jsr main +Succesful ASM optimization Pass5SkipBegin +Removing instruction __b1: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +(label) @1 +(label) @begin +(label) @end +(const byte) OFFSET_STRUCT_POINT_Y = (byte) 1 +(byte) Point::x +(byte) Point::y +(const byte*) SCREEN = (byte*) 1024 +(const byte) SIZEOF_STRUCT_POINT = (byte) 2 +(void()) main() +(label) main::@return +(const struct Point*) main::p2 = &(struct Point) point2 +(struct Point) point1 loadstore mem[2] = { x: (byte) 2, y: (byte) 3 } +(struct Point) point2 loadstore mem[2] = {} + +mem[2] [ point1 ] +mem[2] [ point2 ] + + +FINAL ASSEMBLER +Score: 38 + + // File Comments +// Minimal struct with C-Standard behavior - copy assignment through struct pointer + // Upstart +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" + // Global Constants & labels + .label SCREEN = $400 + .const SIZEOF_STRUCT_POINT = 2 + .const OFFSET_STRUCT_POINT_Y = 1 + // @begin + // [1] phi from @begin to @1 [phi:@begin->@1] + // @1 + // [2] call main + // [3] phi from @1 to @end [phi:@1->@end] + // @end + // main +main: { + .label p2 = point2 + // *p2 = point1 + // [4] *((const struct Point*) main::p2) ← memcpy(*(&(struct Point) point1), struct Point, (const byte) SIZEOF_STRUCT_POINT) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3 + ldy #SIZEOF_STRUCT_POINT + !: + lda point1-1,y + sta p2-1,y + dey + bne !- + // SCREEN[0] = point2.x + // [5] *((const byte*) SCREEN) ← *((byte*)&(struct Point) point2) -- _deref_pbuc1=_deref_pbuc2 + lda point2 + sta SCREEN + // SCREEN[1] = point2.y + // [6] *((const byte*) SCREEN+(byte) 1) ← *((byte*)&(struct Point) point2+(const byte) OFFSET_STRUCT_POINT_Y) -- _deref_pbuc1=_deref_pbuc2 + lda point2+OFFSET_STRUCT_POINT_Y + sta SCREEN+1 + // main::@return + // } + // [7] return + rts +} + // File Data + point1: .byte 2, 3 + point2: .fill SIZEOF_STRUCT_POINT, 0 + diff --git a/src/test/ref/struct-35.sym b/src/test/ref/struct-35.sym new file mode 100644 index 000000000..6db0b6e90 --- /dev/null +++ b/src/test/ref/struct-35.sym @@ -0,0 +1,16 @@ +(label) @1 +(label) @begin +(label) @end +(const byte) OFFSET_STRUCT_POINT_Y = (byte) 1 +(byte) Point::x +(byte) Point::y +(const byte*) SCREEN = (byte*) 1024 +(const byte) SIZEOF_STRUCT_POINT = (byte) 2 +(void()) main() +(label) main::@return +(const struct Point*) main::p2 = &(struct Point) point2 +(struct Point) point1 loadstore mem[2] = { x: (byte) 2, y: (byte) 3 } +(struct Point) point2 loadstore mem[2] = {} + +mem[2] [ point1 ] +mem[2] [ point2 ] diff --git a/src/test/ref/struct-ptr-10.asm b/src/test/ref/struct-ptr-10.asm index 5d0fe253e..23bd59bf6 100644 --- a/src/test/ref/struct-ptr-10.asm +++ b/src/test/ref/struct-ptr-10.asm @@ -2,6 +2,7 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" + .const SIZEOF_STRUCT_POINT = 2 .const OFFSET_STRUCT_POINT_Y = 1 main: { .label SCREEN = $400 @@ -9,12 +10,10 @@ main: { .label __4 = $a .label i = 2 .label i1 = 4 - .label __11 = 8 - .label __12 = 6 - .label __13 = $c - .label __14 = $e - .label __15 = $10 - .label __16 = $a + .label __7 = 8 + .label __8 = 6 + .label __9 = $c + .label __10 = $a lda #<0 sta.z i sta.z i+1 @@ -29,22 +28,22 @@ main: { lda.z __3 clc adc #points - sta.z __11+1 + sta.z __7+1 lda #2 ldy #0 - sta (__11),y + sta (__7),y clc - lda.z __12 + lda.z __8 adc #points+OFFSET_STRUCT_POINT_Y - sta.z __12+1 + sta.z __8+1 txa - sta (__12),y + sta (__8),y inc.z i bne !+ inc.z i+1 @@ -68,36 +67,24 @@ main: { lda.z __4 clc adc #points - sta.z __13+1 - lda.z __4 + sta.z __9+1 clc + lda.z __10 adc #SCREEN - sta.z __14+1 + sta.z __10+1 ldy #0 - lda (__13),y - sta (__14),y - lda.z __4 - clc - adc #points+OFFSET_STRUCT_POINT_Y - sta.z __15+1 - clc - lda.z __16 - adc #SCREEN+OFFSET_STRUCT_POINT_Y - sta.z __16+1 - lda (__15),y - sta (__16),y + !: + lda (__9),y + sta (__10),y + iny + cpy #SIZEOF_STRUCT_POINT + bne !- inc.z i1 bne !+ inc.z i1+1 diff --git a/src/test/ref/struct-ptr-10.cfg b/src/test/ref/struct-ptr-10.cfg index c04e514e1..50dae0af9 100644 --- a/src/test/ref/struct-ptr-10.cfg +++ b/src/test/ref/struct-ptr-10.cfg @@ -16,25 +16,22 @@ main::@1: scope:[main] from main main::@1 [5] (word) main::i#2 ← phi( main/(word) 0 main::@1/(word) main::i#1 ) [6] (byte~) main::$0 ← (byte)(word) main::i#2 [7] (word~) main::$3 ← (word) main::i#2 << (byte) 1 - [8] (byte*~) main::$11 ← (byte*)(const struct Point*) points + (word~) main::$3 - [9] *((byte*~) main::$11) ← (byte) 2 - [10] (byte*~) main::$12 ← (byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (word~) main::$3 - [11] *((byte*~) main::$12) ← (byte~) main::$0 + [8] (byte*~) main::$7 ← (byte*)(const struct Point*) points + (word~) main::$3 + [9] *((byte*~) main::$7) ← (byte) 2 + [10] (byte*~) main::$8 ← (byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (word~) main::$3 + [11] *((byte*~) main::$8) ← (byte~) main::$0 [12] (word) main::i#1 ← ++ (word) main::i#2 [13] if((word) main::i#1!=(word) $1f4) goto main::@1 to:main::@2 main::@2: scope:[main] from main::@1 main::@2 [14] (word) main::i1#2 ← phi( main::@1/(word) 0 main::@2/(word) main::i1#1 ) [15] (word~) main::$4 ← (word) main::i1#2 << (byte) 1 - [16] (byte*~) main::$13 ← (byte*)(const struct Point*) points + (word~) main::$4 - [17] (byte*~) main::$14 ← (byte*)(const struct Point*) main::SCREEN + (word~) main::$4 - [18] *((byte*~) main::$14) ← *((byte*~) main::$13) - [19] (byte*~) main::$15 ← (byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (word~) main::$4 - [20] (byte*~) main::$16 ← (byte*)(const struct Point*) main::SCREEN+(const byte) OFFSET_STRUCT_POINT_Y + (word~) main::$4 - [21] *((byte*~) main::$16) ← *((byte*~) main::$15) - [22] (word) main::i1#1 ← ++ (word) main::i1#2 - [23] if((word) main::i1#1!=(word) $1f4) goto main::@2 + [16] (struct Point*~) main::$9 ← (const struct Point*) points + (word~) main::$4 + [17] (struct Point*~) main::$10 ← (const struct Point*) main::SCREEN + (word~) main::$4 + [18] *((struct Point*~) main::$10) ← memcpy(*((struct Point*~) main::$9), struct Point, (const byte) SIZEOF_STRUCT_POINT) + [19] (word) main::i1#1 ← ++ (word) main::i1#2 + [20] if((word) main::i1#1!=(word) $1f4) goto main::@2 to:main::@return main::@return: scope:[main] from main::@2 - [24] return + [21] return to:@return diff --git a/src/test/ref/struct-ptr-10.log b/src/test/ref/struct-ptr-10.log index 83621df3c..643db2e44 100644 --- a/src/test/ref/struct-ptr-10.log +++ b/src/test/ref/struct-ptr-10.log @@ -4,8 +4,7 @@ Fixing pointer array-indexing *((const struct Point*) main::SCREEN + (word) main Constantified RValue *((const struct Point*) points + (word~) main::$3) ← (struct Point){ (byte) 2, (byte~) main::$0 } Adding struct value member variable copy *((byte*~) main::$5 + (word~) main::$3) ← (byte) 2 Adding struct value member variable copy *((byte*~) main::$6 + (word~) main::$3) ← (byte~) main::$0 -Adding struct value member variable copy *((byte*~) main::$7 + (word~) main::$4) ← *((byte*~) main::$8 + (word~) main::$4) -Adding struct value member variable copy *((byte*~) main::$9 + (word~) main::$4) ← *((byte*~) main::$10 + (word~) main::$4) +Adding struct value member variable copy *((const struct Point*) main::SCREEN + (word~) main::$4) ← memcpy(*((const struct Point*) points + (word~) main::$4), struct Point, (const byte) SIZEOF_STRUCT_POINT) Culled Empty Block (label) main::@4 CONTROL FLOW GRAPH SSA @@ -34,12 +33,7 @@ main::@2: scope:[main] from main::@1 main::@3: scope:[main] from main::@2 main::@3 (word) main::i1#2 ← phi( main::@2/(word) main::i1#0 main::@3/(word) main::i1#1 ) (word~) main::$4 ← (word) main::i1#2 * (const byte) SIZEOF_STRUCT_POINT - (byte*~) main::$7 ← (byte*)(const struct Point*) main::SCREEN + (const byte) OFFSET_STRUCT_POINT_X - (byte*~) main::$8 ← (byte*)(const struct Point*) points + (const byte) OFFSET_STRUCT_POINT_X - *((byte*~) main::$7 + (word~) main::$4) ← *((byte*~) main::$8 + (word~) main::$4) - (byte*~) main::$9 ← (byte*)(const struct Point*) main::SCREEN + (const byte) OFFSET_STRUCT_POINT_Y - (byte*~) main::$10 ← (byte*)(const struct Point*) points + (const byte) OFFSET_STRUCT_POINT_Y - *((byte*~) main::$9 + (word~) main::$4) ← *((byte*~) main::$10 + (word~) main::$4) + *((const struct Point*) main::SCREEN + (word~) main::$4) ← memcpy(*((const struct Point*) points + (word~) main::$4), struct Point, (const byte) SIZEOF_STRUCT_POINT) (word) main::i1#1 ← (word) main::i1#2 + rangenext(0,$1f3) (bool~) main::$2 ← (word) main::i1#1 != rangelast(0,$1f3) if((bool~) main::$2) goto main::@3 @@ -67,15 +61,11 @@ SYMBOL TABLE SSA (void()) main() (byte~) main::$0 (bool~) main::$1 -(byte*~) main::$10 (bool~) main::$2 (word~) main::$3 (word~) main::$4 (byte*~) main::$5 (byte*~) main::$6 -(byte*~) main::$7 -(byte*~) main::$8 -(byte*~) main::$9 (label) main::@1 (label) main::@2 (label) main::@3 @@ -96,38 +86,26 @@ Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (struct Point*) 1024 Successful SSA optimization PassNCastSimplification Simple Condition (bool~) main::$1 [10] if((word) main::i#1!=rangelast(0,$1f3)) goto main::@1 -Simple Condition (bool~) main::$2 [22] if((word) main::i1#1!=rangelast(0,$1f3)) goto main::@3 +Simple Condition (bool~) main::$2 [17] if((word) main::i1#1!=rangelast(0,$1f3)) goto main::@3 Successful SSA optimization Pass2ConditionalJumpSimplification Constant right-side identified [4] (byte*~) main::$5 ← (byte*)(const struct Point*) points + (const byte) OFFSET_STRUCT_POINT_X Constant right-side identified [6] (byte*~) main::$6 ← (byte*)(const struct Point*) points + (const byte) OFFSET_STRUCT_POINT_Y -Constant right-side identified [14] (byte*~) main::$7 ← (byte*)(const struct Point*) main::SCREEN + (const byte) OFFSET_STRUCT_POINT_X -Constant right-side identified [15] (byte*~) main::$8 ← (byte*)(const struct Point*) points + (const byte) OFFSET_STRUCT_POINT_X -Constant right-side identified [17] (byte*~) main::$9 ← (byte*)(const struct Point*) main::SCREEN + (const byte) OFFSET_STRUCT_POINT_Y -Constant right-side identified [18] (byte*~) main::$10 ← (byte*)(const struct Point*) points + (const byte) OFFSET_STRUCT_POINT_Y Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const word) main::i#0 = 0 Constant (const byte*) main::$5 = (byte*)points+OFFSET_STRUCT_POINT_X Constant (const byte*) main::$6 = (byte*)points+OFFSET_STRUCT_POINT_Y Constant (const word) main::i1#0 = 0 -Constant (const byte*) main::$7 = (byte*)main::SCREEN+OFFSET_STRUCT_POINT_X -Constant (const byte*) main::$8 = (byte*)points+OFFSET_STRUCT_POINT_X -Constant (const byte*) main::$9 = (byte*)main::SCREEN+OFFSET_STRUCT_POINT_Y -Constant (const byte*) main::$10 = (byte*)points+OFFSET_STRUCT_POINT_Y Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value [8] main::i#1 ← ++ main::i#2 to ++ Resolved ranged comparison value [10] if(main::i#1!=rangelast(0,$1f3)) goto main::@1 to (number) $1f4 -Resolved ranged next value [20] main::i1#1 ← ++ main::i1#2 to ++ -Resolved ranged comparison value [22] if(main::i1#1!=rangelast(0,$1f3)) goto main::@3 to (number) $1f4 +Resolved ranged next value [15] main::i1#1 ← ++ main::i1#2 to ++ +Resolved ranged comparison value [17] if(main::i1#1!=rangelast(0,$1f3)) goto main::@3 to (number) $1f4 De-inlining pointer[w] to *(pointer+w) [5] *((const byte*) main::$5 + (word~) main::$3) ← (byte) 2 De-inlining pointer[w] to *(pointer+w) [7] *((const byte*) main::$6 + (word~) main::$3) ← (byte~) main::$0 -De-inlining pointer[w] to *(pointer+w) [16] *((const byte*) main::$7 + (word~) main::$4) ← *((const byte*) main::$8 + (word~) main::$4) -De-inlining pointer[w] to *(pointer+w) [16] *((const byte*) main::$7 + (word~) main::$4) ← *((byte*~) main::$13) -De-inlining pointer[w] to *(pointer+w) [19] *((const byte*) main::$9 + (word~) main::$4) ← *((const byte*) main::$10 + (word~) main::$4) -De-inlining pointer[w] to *(pointer+w) [19] *((const byte*) main::$9 + (word~) main::$4) ← *((byte*~) main::$15) +De-inlining pointer[w] to *(pointer+w) [14] *((const struct Point*) main::SCREEN + (word~) main::$4) ← memcpy(*((const struct Point*) points + (word~) main::$4), struct Point, (const byte) SIZEOF_STRUCT_POINT) +De-inlining pointer[w] to *(pointer+w) [14] *((const struct Point*) main::SCREEN + (word~) main::$4) ← memcpy(*((struct Point*~) main::$9), struct Point, (const byte) SIZEOF_STRUCT_POINT) Successful SSA optimization Pass2DeInlineWordDerefIdx Simplifying expression containing zero (byte*)points in -Simplifying expression containing zero (byte*)main::SCREEN in -Simplifying expression containing zero (byte*)points in Successful SSA optimization PassNSimplifyExpressionWithZero Eliminating unused constant (const byte) OFFSET_STRUCT_POINT_X Successful SSA optimization PassNEliminateUnusedVars @@ -149,13 +127,7 @@ Constant inlined main::$5 = (byte*)(const struct Point*) points Constant inlined main::i#0 = (word) 0 Constant inlined main::i1#0 = (word) 0 Constant inlined main::$6 = (byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y -Constant inlined main::$9 = (byte*)(const struct Point*) main::SCREEN+(const byte) OFFSET_STRUCT_POINT_Y -Constant inlined main::$7 = (byte*)(const struct Point*) main::SCREEN -Constant inlined main::$10 = (byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y -Constant inlined main::$8 = (byte*)(const struct Point*) points Successful SSA optimization Pass2ConstantInlining -Eliminating unused constant (const byte) SIZEOF_STRUCT_POINT -Successful SSA optimization PassNEliminateUnusedVars Added new block during phi lifting main::@5(between main::@1 and main::@1) Added new block during phi lifting main::@6(between main::@3 and main::@3) Adding NOP phi() at start of @begin @@ -168,8 +140,8 @@ CALL GRAPH Calls in [] to main:2 Created 2 initial phi equivalence classes -Coalesced [27] main::i1#3 ← main::i1#1 -Coalesced [28] main::i#3 ← main::i#1 +Coalesced [24] main::i1#3 ← main::i1#1 +Coalesced [25] main::i#3 ← main::i#1 Coalesced down to 2 phi equivalence classes Culled Empty Block (label) @2 Culled Empty Block (label) main::@2 @@ -200,27 +172,24 @@ main::@1: scope:[main] from main main::@1 [5] (word) main::i#2 ← phi( main/(word) 0 main::@1/(word) main::i#1 ) [6] (byte~) main::$0 ← (byte)(word) main::i#2 [7] (word~) main::$3 ← (word) main::i#2 << (byte) 1 - [8] (byte*~) main::$11 ← (byte*)(const struct Point*) points + (word~) main::$3 - [9] *((byte*~) main::$11) ← (byte) 2 - [10] (byte*~) main::$12 ← (byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (word~) main::$3 - [11] *((byte*~) main::$12) ← (byte~) main::$0 + [8] (byte*~) main::$7 ← (byte*)(const struct Point*) points + (word~) main::$3 + [9] *((byte*~) main::$7) ← (byte) 2 + [10] (byte*~) main::$8 ← (byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (word~) main::$3 + [11] *((byte*~) main::$8) ← (byte~) main::$0 [12] (word) main::i#1 ← ++ (word) main::i#2 [13] if((word) main::i#1!=(word) $1f4) goto main::@1 to:main::@2 main::@2: scope:[main] from main::@1 main::@2 [14] (word) main::i1#2 ← phi( main::@1/(word) 0 main::@2/(word) main::i1#1 ) [15] (word~) main::$4 ← (word) main::i1#2 << (byte) 1 - [16] (byte*~) main::$13 ← (byte*)(const struct Point*) points + (word~) main::$4 - [17] (byte*~) main::$14 ← (byte*)(const struct Point*) main::SCREEN + (word~) main::$4 - [18] *((byte*~) main::$14) ← *((byte*~) main::$13) - [19] (byte*~) main::$15 ← (byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (word~) main::$4 - [20] (byte*~) main::$16 ← (byte*)(const struct Point*) main::SCREEN+(const byte) OFFSET_STRUCT_POINT_Y + (word~) main::$4 - [21] *((byte*~) main::$16) ← *((byte*~) main::$15) - [22] (word) main::i1#1 ← ++ (word) main::i1#2 - [23] if((word) main::i1#1!=(word) $1f4) goto main::@2 + [16] (struct Point*~) main::$9 ← (const struct Point*) points + (word~) main::$4 + [17] (struct Point*~) main::$10 ← (const struct Point*) main::SCREEN + (word~) main::$4 + [18] *((struct Point*~) main::$10) ← memcpy(*((struct Point*~) main::$9), struct Point, (const byte) SIZEOF_STRUCT_POINT) + [19] (word) main::i1#1 ← ++ (word) main::i1#2 + [20] if((word) main::i1#1!=(word) $1f4) goto main::@2 to:main::@return main::@return: scope:[main] from main::@2 - [24] return + [21] return to:@return @@ -229,56 +198,48 @@ VARIABLE REGISTER WEIGHTS (byte) Point::y (void()) main() (byte~) main::$0 4.4 -(byte*~) main::$11 22.0 -(byte*~) main::$12 22.0 -(byte*~) main::$13 11.0 -(byte*~) main::$14 22.0 -(byte*~) main::$15 11.0 -(byte*~) main::$16 22.0 +(struct Point*~) main::$10 22.0 (word~) main::$3 11.0 -(word~) main::$4 11.0 +(word~) main::$4 16.5 +(byte*~) main::$7 22.0 +(byte*~) main::$8 22.0 +(struct Point*~) main::$9 5.5 (word) main::i (word) main::i#1 16.5 (word) main::i#2 4.714285714285714 (word) main::i1 (word) main::i1#1 16.5 -(word) main::i1#2 4.125 +(word) main::i1#2 6.6000000000000005 Initial phi equivalence classes [ main::i#2 main::i#1 ] [ main::i1#2 main::i1#1 ] Added variable main::$0 to live range equivalence class [ main::$0 ] Added variable main::$3 to live range equivalence class [ main::$3 ] -Added variable main::$11 to live range equivalence class [ main::$11 ] -Added variable main::$12 to live range equivalence class [ main::$12 ] +Added variable main::$7 to live range equivalence class [ main::$7 ] +Added variable main::$8 to live range equivalence class [ main::$8 ] Added variable main::$4 to live range equivalence class [ main::$4 ] -Added variable main::$13 to live range equivalence class [ main::$13 ] -Added variable main::$14 to live range equivalence class [ main::$14 ] -Added variable main::$15 to live range equivalence class [ main::$15 ] -Added variable main::$16 to live range equivalence class [ main::$16 ] +Added variable main::$9 to live range equivalence class [ main::$9 ] +Added variable main::$10 to live range equivalence class [ main::$10 ] Complete equivalence classes [ main::i#2 main::i#1 ] [ main::i1#2 main::i1#1 ] [ main::$0 ] [ main::$3 ] -[ main::$11 ] -[ main::$12 ] +[ main::$7 ] +[ main::$8 ] [ main::$4 ] -[ main::$13 ] -[ main::$14 ] -[ main::$15 ] -[ main::$16 ] +[ main::$9 ] +[ main::$10 ] Allocated zp[2]:2 [ main::i#2 main::i#1 ] Allocated zp[2]:4 [ main::i1#2 main::i1#1 ] Allocated zp[1]:6 [ main::$0 ] Allocated zp[2]:7 [ main::$3 ] -Allocated zp[2]:9 [ main::$11 ] -Allocated zp[2]:11 [ main::$12 ] +Allocated zp[2]:9 [ main::$7 ] +Allocated zp[2]:11 [ main::$8 ] Allocated zp[2]:13 [ main::$4 ] -Allocated zp[2]:15 [ main::$13 ] -Allocated zp[2]:17 [ main::$14 ] -Allocated zp[2]:19 [ main::$15 ] -Allocated zp[2]:21 [ main::$16 ] +Allocated zp[2]:15 [ main::$9 ] +Allocated zp[2]:17 [ main::$10 ] INITIAL ASM Target platform is c64basic / MOS6502X @@ -289,6 +250,7 @@ Target platform is c64basic / MOS6502X :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + .const SIZEOF_STRUCT_POINT = 2 .const OFFSET_STRUCT_POINT_Y = 1 // @begin __bbegin: @@ -314,12 +276,10 @@ main: { .label __4 = $d .label i = 2 .label i1 = 4 - .label __11 = 9 - .label __12 = $b - .label __13 = $f - .label __14 = $11 - .label __15 = $13 - .label __16 = $15 + .label __7 = 9 + .label __8 = $b + .label __9 = $f + .label __10 = $11 // [5] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: // [5] phi (word) main::i#2 = (word) 0 [phi:main->main::@1#0] -- vwuz1=vwuc1 @@ -344,30 +304,30 @@ main: { lda.z i+1 rol sta.z __3+1 - // [8] (byte*~) main::$11 ← (byte*)(const struct Point*) points + (word~) main::$3 -- pbuz1=pbuc1_plus_vwuz2 + // [8] (byte*~) main::$7 ← (byte*)(const struct Point*) points + (word~) main::$3 -- pbuz1=pbuc1_plus_vwuz2 lda.z __3 clc adc #points - sta.z __11+1 - // [9] *((byte*~) main::$11) ← (byte) 2 -- _deref_pbuz1=vbuc1 + sta.z __7+1 + // [9] *((byte*~) main::$7) ← (byte) 2 -- _deref_pbuz1=vbuc1 lda #2 ldy #0 - sta (__11),y - // [10] (byte*~) main::$12 ← (byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (word~) main::$3 -- pbuz1=pbuc1_plus_vwuz2 + sta (__7),y + // [10] (byte*~) main::$8 ← (byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (word~) main::$3 -- pbuz1=pbuc1_plus_vwuz2 lda.z __3 clc adc #points+OFFSET_STRUCT_POINT_Y - sta.z __12+1 - // [11] *((byte*~) main::$12) ← (byte~) main::$0 -- _deref_pbuz1=vbuz2 + sta.z __8+1 + // [11] *((byte*~) main::$8) ← (byte~) main::$0 -- _deref_pbuz1=vbuz2 lda.z __0 ldy #0 - sta (__12),y + sta (__8),y // [12] (word) main::i#1 ← ++ (word) main::i#2 -- vwuz1=_inc_vwuz1 inc.z i bne !+ @@ -401,54 +361,36 @@ main: { lda.z i1+1 rol sta.z __4+1 - // [16] (byte*~) main::$13 ← (byte*)(const struct Point*) points + (word~) main::$4 -- pbuz1=pbuc1_plus_vwuz2 + // [16] (struct Point*~) main::$9 ← (const struct Point*) points + (word~) main::$4 -- pssz1=pssc1_plus_vwuz2 lda.z __4 clc adc #points - sta.z __13+1 - // [17] (byte*~) main::$14 ← (byte*)(const struct Point*) main::SCREEN + (word~) main::$4 -- pbuz1=pbuc1_plus_vwuz2 + sta.z __9+1 + // [17] (struct Point*~) main::$10 ← (const struct Point*) main::SCREEN + (word~) main::$4 -- pssz1=pssc1_plus_vwuz2 lda.z __4 clc adc #SCREEN - sta.z __14+1 - // [18] *((byte*~) main::$14) ← *((byte*~) main::$13) -- _deref_pbuz1=_deref_pbuz2 + sta.z __10+1 + // [18] *((struct Point*~) main::$10) ← memcpy(*((struct Point*~) main::$9), struct Point, (const byte) SIZEOF_STRUCT_POINT) -- _deref_pssz1=_deref_pssz2_memcpy_vbuc1 ldy #0 - lda (__13),y - ldy #0 - sta (__14),y - // [19] (byte*~) main::$15 ← (byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (word~) main::$4 -- pbuz1=pbuc1_plus_vwuz2 - lda.z __4 - clc - adc #points+OFFSET_STRUCT_POINT_Y - sta.z __15+1 - // [20] (byte*~) main::$16 ← (byte*)(const struct Point*) main::SCREEN+(const byte) OFFSET_STRUCT_POINT_Y + (word~) main::$4 -- pbuz1=pbuc1_plus_vwuz2 - lda.z __4 - clc - adc #SCREEN+OFFSET_STRUCT_POINT_Y - sta.z __16+1 - // [21] *((byte*~) main::$16) ← *((byte*~) main::$15) -- _deref_pbuz1=_deref_pbuz2 - ldy #0 - lda (__15),y - ldy #0 - sta (__16),y - // [22] (word) main::i1#1 ← ++ (word) main::i1#2 -- vwuz1=_inc_vwuz1 + !: + lda (__9),y + sta (__10),y + iny + cpy #SIZEOF_STRUCT_POINT + bne !- + // [19] (word) main::i1#1 ← ++ (word) main::i1#2 -- vwuz1=_inc_vwuz1 inc.z i1 bne !+ inc.z i1+1 !: - // [23] if((word) main::i1#1!=(word) $1f4) goto main::@2 -- vwuz1_neq_vwuc1_then_la1 + // [20] if((word) main::i1#1!=(word) $1f4) goto main::@2 -- vwuz1_neq_vwuc1_then_la1 lda.z i1+1 cmp #>$1f4 bne __b2_from___b2 @@ -458,7 +400,7 @@ main: { jmp __breturn // main::@return __breturn: - // [24] return + // [21] return rts } // File Data @@ -468,63 +410,53 @@ REGISTER UPLIFT POTENTIAL REGISTERS Statement [6] (byte~) main::$0 ← (byte)(word) main::i#2 [ main::i#2 main::$0 ] ( main:2 [ main::i#2 main::$0 ] ) always clobbers reg byte a Statement [7] (word~) main::$3 ← (word) main::i#2 << (byte) 1 [ main::i#2 main::$0 main::$3 ] ( main:2 [ main::i#2 main::$0 main::$3 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:6 [ main::$0 ] -Statement [8] (byte*~) main::$11 ← (byte*)(const struct Point*) points + (word~) main::$3 [ main::i#2 main::$0 main::$3 main::$11 ] ( main:2 [ main::i#2 main::$0 main::$3 main::$11 ] ) always clobbers reg byte a -Statement [9] *((byte*~) main::$11) ← (byte) 2 [ main::i#2 main::$0 main::$3 ] ( main:2 [ main::i#2 main::$0 main::$3 ] ) always clobbers reg byte a reg byte y +Statement [8] (byte*~) main::$7 ← (byte*)(const struct Point*) points + (word~) main::$3 [ main::i#2 main::$0 main::$3 main::$7 ] ( main:2 [ main::i#2 main::$0 main::$3 main::$7 ] ) always clobbers reg byte a +Statement [9] *((byte*~) main::$7) ← (byte) 2 [ main::i#2 main::$0 main::$3 ] ( main:2 [ main::i#2 main::$0 main::$3 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp[1]:6 [ main::$0 ] -Statement [10] (byte*~) main::$12 ← (byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (word~) main::$3 [ main::i#2 main::$0 main::$12 ] ( main:2 [ main::i#2 main::$0 main::$12 ] ) always clobbers reg byte a -Statement [11] *((byte*~) main::$12) ← (byte~) main::$0 [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a reg byte y +Statement [10] (byte*~) main::$8 ← (byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (word~) main::$3 [ main::i#2 main::$0 main::$8 ] ( main:2 [ main::i#2 main::$0 main::$8 ] ) always clobbers reg byte a +Statement [11] *((byte*~) main::$8) ← (byte~) main::$0 [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a reg byte y Statement [13] if((word) main::i#1!=(word) $1f4) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) always clobbers reg byte a Statement [15] (word~) main::$4 ← (word) main::i1#2 << (byte) 1 [ main::i1#2 main::$4 ] ( main:2 [ main::i1#2 main::$4 ] ) always clobbers reg byte a -Statement [16] (byte*~) main::$13 ← (byte*)(const struct Point*) points + (word~) main::$4 [ main::i1#2 main::$4 main::$13 ] ( main:2 [ main::i1#2 main::$4 main::$13 ] ) always clobbers reg byte a -Statement [17] (byte*~) main::$14 ← (byte*)(const struct Point*) main::SCREEN + (word~) main::$4 [ main::i1#2 main::$4 main::$13 main::$14 ] ( main:2 [ main::i1#2 main::$4 main::$13 main::$14 ] ) always clobbers reg byte a -Statement [18] *((byte*~) main::$14) ← *((byte*~) main::$13) [ main::i1#2 main::$4 ] ( main:2 [ main::i1#2 main::$4 ] ) always clobbers reg byte a reg byte y -Statement [19] (byte*~) main::$15 ← (byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (word~) main::$4 [ main::i1#2 main::$4 main::$15 ] ( main:2 [ main::i1#2 main::$4 main::$15 ] ) always clobbers reg byte a -Statement [20] (byte*~) main::$16 ← (byte*)(const struct Point*) main::SCREEN+(const byte) OFFSET_STRUCT_POINT_Y + (word~) main::$4 [ main::i1#2 main::$15 main::$16 ] ( main:2 [ main::i1#2 main::$15 main::$16 ] ) always clobbers reg byte a -Statement [21] *((byte*~) main::$16) ← *((byte*~) main::$15) [ main::i1#2 ] ( main:2 [ main::i1#2 ] ) always clobbers reg byte a reg byte y -Statement [23] if((word) main::i1#1!=(word) $1f4) goto main::@2 [ main::i1#1 ] ( main:2 [ main::i1#1 ] ) always clobbers reg byte a +Statement [16] (struct Point*~) main::$9 ← (const struct Point*) points + (word~) main::$4 [ main::i1#2 main::$4 main::$9 ] ( main:2 [ main::i1#2 main::$4 main::$9 ] ) always clobbers reg byte a +Statement [17] (struct Point*~) main::$10 ← (const struct Point*) main::SCREEN + (word~) main::$4 [ main::i1#2 main::$9 main::$10 ] ( main:2 [ main::i1#2 main::$9 main::$10 ] ) always clobbers reg byte a +Statement [18] *((struct Point*~) main::$10) ← memcpy(*((struct Point*~) main::$9), struct Point, (const byte) SIZEOF_STRUCT_POINT) [ main::i1#2 ] ( main:2 [ main::i1#2 ] ) always clobbers reg byte a reg byte y +Statement [20] if((word) main::i1#1!=(word) $1f4) goto main::@2 [ main::i1#1 ] ( main:2 [ main::i1#1 ] ) always clobbers reg byte a Statement [6] (byte~) main::$0 ← (byte)(word) main::i#2 [ main::i#2 main::$0 ] ( main:2 [ main::i#2 main::$0 ] ) always clobbers reg byte a Statement [7] (word~) main::$3 ← (word) main::i#2 << (byte) 1 [ main::i#2 main::$0 main::$3 ] ( main:2 [ main::i#2 main::$0 main::$3 ] ) always clobbers reg byte a -Statement [8] (byte*~) main::$11 ← (byte*)(const struct Point*) points + (word~) main::$3 [ main::i#2 main::$0 main::$3 main::$11 ] ( main:2 [ main::i#2 main::$0 main::$3 main::$11 ] ) always clobbers reg byte a -Statement [9] *((byte*~) main::$11) ← (byte) 2 [ main::i#2 main::$0 main::$3 ] ( main:2 [ main::i#2 main::$0 main::$3 ] ) always clobbers reg byte a reg byte y -Statement [10] (byte*~) main::$12 ← (byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (word~) main::$3 [ main::i#2 main::$0 main::$12 ] ( main:2 [ main::i#2 main::$0 main::$12 ] ) always clobbers reg byte a -Statement [11] *((byte*~) main::$12) ← (byte~) main::$0 [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a reg byte y +Statement [8] (byte*~) main::$7 ← (byte*)(const struct Point*) points + (word~) main::$3 [ main::i#2 main::$0 main::$3 main::$7 ] ( main:2 [ main::i#2 main::$0 main::$3 main::$7 ] ) always clobbers reg byte a +Statement [9] *((byte*~) main::$7) ← (byte) 2 [ main::i#2 main::$0 main::$3 ] ( main:2 [ main::i#2 main::$0 main::$3 ] ) always clobbers reg byte a reg byte y +Statement [10] (byte*~) main::$8 ← (byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (word~) main::$3 [ main::i#2 main::$0 main::$8 ] ( main:2 [ main::i#2 main::$0 main::$8 ] ) always clobbers reg byte a +Statement [11] *((byte*~) main::$8) ← (byte~) main::$0 [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a reg byte y Statement [13] if((word) main::i#1!=(word) $1f4) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) always clobbers reg byte a Statement [15] (word~) main::$4 ← (word) main::i1#2 << (byte) 1 [ main::i1#2 main::$4 ] ( main:2 [ main::i1#2 main::$4 ] ) always clobbers reg byte a -Statement [16] (byte*~) main::$13 ← (byte*)(const struct Point*) points + (word~) main::$4 [ main::i1#2 main::$4 main::$13 ] ( main:2 [ main::i1#2 main::$4 main::$13 ] ) always clobbers reg byte a -Statement [17] (byte*~) main::$14 ← (byte*)(const struct Point*) main::SCREEN + (word~) main::$4 [ main::i1#2 main::$4 main::$13 main::$14 ] ( main:2 [ main::i1#2 main::$4 main::$13 main::$14 ] ) always clobbers reg byte a -Statement [18] *((byte*~) main::$14) ← *((byte*~) main::$13) [ main::i1#2 main::$4 ] ( main:2 [ main::i1#2 main::$4 ] ) always clobbers reg byte a reg byte y -Statement [19] (byte*~) main::$15 ← (byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (word~) main::$4 [ main::i1#2 main::$4 main::$15 ] ( main:2 [ main::i1#2 main::$4 main::$15 ] ) always clobbers reg byte a -Statement [20] (byte*~) main::$16 ← (byte*)(const struct Point*) main::SCREEN+(const byte) OFFSET_STRUCT_POINT_Y + (word~) main::$4 [ main::i1#2 main::$15 main::$16 ] ( main:2 [ main::i1#2 main::$15 main::$16 ] ) always clobbers reg byte a -Statement [21] *((byte*~) main::$16) ← *((byte*~) main::$15) [ main::i1#2 ] ( main:2 [ main::i1#2 ] ) always clobbers reg byte a reg byte y -Statement [23] if((word) main::i1#1!=(word) $1f4) goto main::@2 [ main::i1#1 ] ( main:2 [ main::i1#1 ] ) always clobbers reg byte a +Statement [16] (struct Point*~) main::$9 ← (const struct Point*) points + (word~) main::$4 [ main::i1#2 main::$4 main::$9 ] ( main:2 [ main::i1#2 main::$4 main::$9 ] ) always clobbers reg byte a +Statement [17] (struct Point*~) main::$10 ← (const struct Point*) main::SCREEN + (word~) main::$4 [ main::i1#2 main::$9 main::$10 ] ( main:2 [ main::i1#2 main::$9 main::$10 ] ) always clobbers reg byte a +Statement [18] *((struct Point*~) main::$10) ← memcpy(*((struct Point*~) main::$9), struct Point, (const byte) SIZEOF_STRUCT_POINT) [ main::i1#2 ] ( main:2 [ main::i1#2 ] ) always clobbers reg byte a reg byte y +Statement [20] if((word) main::i1#1!=(word) $1f4) goto main::@2 [ main::i1#1 ] ( main:2 [ main::i1#1 ] ) always clobbers reg byte a Potential registers zp[2]:2 [ main::i#2 main::i#1 ] : zp[2]:2 , Potential registers zp[2]:4 [ main::i1#2 main::i1#1 ] : zp[2]:4 , Potential registers zp[1]:6 [ main::$0 ] : zp[1]:6 , reg byte x , Potential registers zp[2]:7 [ main::$3 ] : zp[2]:7 , -Potential registers zp[2]:9 [ main::$11 ] : zp[2]:9 , -Potential registers zp[2]:11 [ main::$12 ] : zp[2]:11 , +Potential registers zp[2]:9 [ main::$7 ] : zp[2]:9 , +Potential registers zp[2]:11 [ main::$8 ] : zp[2]:11 , Potential registers zp[2]:13 [ main::$4 ] : zp[2]:13 , -Potential registers zp[2]:15 [ main::$13 ] : zp[2]:15 , -Potential registers zp[2]:17 [ main::$14 ] : zp[2]:17 , -Potential registers zp[2]:19 [ main::$15 ] : zp[2]:19 , -Potential registers zp[2]:21 [ main::$16 ] : zp[2]:21 , +Potential registers zp[2]:15 [ main::$9 ] : zp[2]:15 , +Potential registers zp[2]:17 [ main::$10 ] : zp[2]:17 , REGISTER UPLIFT SCOPES -Uplift Scope [main] 22: zp[2]:9 [ main::$11 ] 22: zp[2]:11 [ main::$12 ] 22: zp[2]:17 [ main::$14 ] 22: zp[2]:21 [ main::$16 ] 21.21: zp[2]:2 [ main::i#2 main::i#1 ] 20.62: zp[2]:4 [ main::i1#2 main::i1#1 ] 11: zp[2]:7 [ main::$3 ] 11: zp[2]:13 [ main::$4 ] 11: zp[2]:15 [ main::$13 ] 11: zp[2]:19 [ main::$15 ] 4.4: zp[1]:6 [ main::$0 ] +Uplift Scope [main] 23.1: zp[2]:4 [ main::i1#2 main::i1#1 ] 22: zp[2]:9 [ main::$7 ] 22: zp[2]:11 [ main::$8 ] 22: zp[2]:17 [ main::$10 ] 21.21: zp[2]:2 [ main::i#2 main::i#1 ] 16.5: zp[2]:13 [ main::$4 ] 11: zp[2]:7 [ main::$3 ] 5.5: zp[2]:15 [ main::$9 ] 4.4: zp[1]:6 [ main::$0 ] Uplift Scope [Point] Uplift Scope [] -Uplifting [main] best 2878 combination zp[2]:9 [ main::$11 ] zp[2]:11 [ main::$12 ] zp[2]:17 [ main::$14 ] zp[2]:21 [ main::$16 ] zp[2]:2 [ main::i#2 main::i#1 ] zp[2]:4 [ main::i1#2 main::i1#1 ] zp[2]:7 [ main::$3 ] zp[2]:13 [ main::$4 ] zp[2]:15 [ main::$13 ] zp[2]:19 [ main::$15 ] reg byte x [ main::$0 ] -Uplifting [Point] best 2878 combination -Uplifting [] best 2878 combination -Coalescing zero page register [ zp[2]:7 [ main::$3 ] ] with [ zp[2]:11 [ main::$12 ] ] - score: 1 -Coalescing zero page register [ zp[2]:13 [ main::$4 ] ] with [ zp[2]:21 [ main::$16 ] ] - score: 1 -Allocated (was zp[2]:7) zp[2]:6 [ main::$3 main::$12 ] -Allocated (was zp[2]:9) zp[2]:8 [ main::$11 ] -Allocated (was zp[2]:13) zp[2]:10 [ main::$4 main::$16 ] -Allocated (was zp[2]:15) zp[2]:12 [ main::$13 ] -Allocated (was zp[2]:17) zp[2]:14 [ main::$14 ] -Allocated (was zp[2]:19) zp[2]:16 [ main::$15 ] +Uplifting [main] best 2408 combination zp[2]:4 [ main::i1#2 main::i1#1 ] zp[2]:9 [ main::$7 ] zp[2]:11 [ main::$8 ] zp[2]:17 [ main::$10 ] zp[2]:2 [ main::i#2 main::i#1 ] zp[2]:13 [ main::$4 ] zp[2]:7 [ main::$3 ] zp[2]:15 [ main::$9 ] reg byte x [ main::$0 ] +Uplifting [Point] best 2408 combination +Uplifting [] best 2408 combination +Coalescing zero page register [ zp[2]:7 [ main::$3 ] ] with [ zp[2]:11 [ main::$8 ] ] - score: 1 +Coalescing zero page register [ zp[2]:13 [ main::$4 ] ] with [ zp[2]:17 [ main::$10 ] ] - score: 1 +Allocated (was zp[2]:7) zp[2]:6 [ main::$3 main::$8 ] +Allocated (was zp[2]:9) zp[2]:8 [ main::$7 ] +Allocated (was zp[2]:13) zp[2]:10 [ main::$4 main::$10 ] +Allocated (was zp[2]:15) zp[2]:12 [ main::$9 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -534,6 +466,7 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + .const SIZEOF_STRUCT_POINT = 2 .const OFFSET_STRUCT_POINT_Y = 1 // @begin __bbegin: @@ -558,12 +491,10 @@ main: { .label __4 = $a .label i = 2 .label i1 = 4 - .label __11 = 8 - .label __12 = 6 - .label __13 = $c - .label __14 = $e - .label __15 = $10 - .label __16 = $a + .label __7 = 8 + .label __8 = 6 + .label __9 = $c + .label __10 = $a // [5] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: // [5] phi (word) main::i#2 = (word) 0 [phi:main->main::@1#0] -- vwuz1=vwuc1 @@ -588,30 +519,30 @@ main: { lda.z i+1 rol sta.z __3+1 - // [8] (byte*~) main::$11 ← (byte*)(const struct Point*) points + (word~) main::$3 -- pbuz1=pbuc1_plus_vwuz2 + // [8] (byte*~) main::$7 ← (byte*)(const struct Point*) points + (word~) main::$3 -- pbuz1=pbuc1_plus_vwuz2 lda.z __3 clc adc #points - sta.z __11+1 - // [9] *((byte*~) main::$11) ← (byte) 2 -- _deref_pbuz1=vbuc1 + sta.z __7+1 + // [9] *((byte*~) main::$7) ← (byte) 2 -- _deref_pbuz1=vbuc1 lda #2 ldy #0 - sta (__11),y - // [10] (byte*~) main::$12 ← (byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (word~) main::$3 -- pbuz1=pbuc1_plus_vwuz1 + sta (__7),y + // [10] (byte*~) main::$8 ← (byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (word~) main::$3 -- pbuz1=pbuc1_plus_vwuz1 clc - lda.z __12 + lda.z __8 adc #points+OFFSET_STRUCT_POINT_Y - sta.z __12+1 - // [11] *((byte*~) main::$12) ← (byte~) main::$0 -- _deref_pbuz1=vbuxx + sta.z __8+1 + // [11] *((byte*~) main::$8) ← (byte~) main::$0 -- _deref_pbuz1=vbuxx txa ldy #0 - sta (__12),y + sta (__8),y // [12] (word) main::i#1 ← ++ (word) main::i#2 -- vwuz1=_inc_vwuz1 inc.z i bne !+ @@ -645,54 +576,36 @@ main: { lda.z i1+1 rol sta.z __4+1 - // [16] (byte*~) main::$13 ← (byte*)(const struct Point*) points + (word~) main::$4 -- pbuz1=pbuc1_plus_vwuz2 + // [16] (struct Point*~) main::$9 ← (const struct Point*) points + (word~) main::$4 -- pssz1=pssc1_plus_vwuz2 lda.z __4 clc adc #points - sta.z __13+1 - // [17] (byte*~) main::$14 ← (byte*)(const struct Point*) main::SCREEN + (word~) main::$4 -- pbuz1=pbuc1_plus_vwuz2 - lda.z __4 + sta.z __9+1 + // [17] (struct Point*~) main::$10 ← (const struct Point*) main::SCREEN + (word~) main::$4 -- pssz1=pssc1_plus_vwuz1 clc + lda.z __10 adc #SCREEN - sta.z __14+1 - // [18] *((byte*~) main::$14) ← *((byte*~) main::$13) -- _deref_pbuz1=_deref_pbuz2 + sta.z __10+1 + // [18] *((struct Point*~) main::$10) ← memcpy(*((struct Point*~) main::$9), struct Point, (const byte) SIZEOF_STRUCT_POINT) -- _deref_pssz1=_deref_pssz2_memcpy_vbuc1 ldy #0 - lda (__13),y - ldy #0 - sta (__14),y - // [19] (byte*~) main::$15 ← (byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (word~) main::$4 -- pbuz1=pbuc1_plus_vwuz2 - lda.z __4 - clc - adc #points+OFFSET_STRUCT_POINT_Y - sta.z __15+1 - // [20] (byte*~) main::$16 ← (byte*)(const struct Point*) main::SCREEN+(const byte) OFFSET_STRUCT_POINT_Y + (word~) main::$4 -- pbuz1=pbuc1_plus_vwuz1 - clc - lda.z __16 - adc #SCREEN+OFFSET_STRUCT_POINT_Y - sta.z __16+1 - // [21] *((byte*~) main::$16) ← *((byte*~) main::$15) -- _deref_pbuz1=_deref_pbuz2 - ldy #0 - lda (__15),y - ldy #0 - sta (__16),y - // [22] (word) main::i1#1 ← ++ (word) main::i1#2 -- vwuz1=_inc_vwuz1 + !: + lda (__9),y + sta (__10),y + iny + cpy #SIZEOF_STRUCT_POINT + bne !- + // [19] (word) main::i1#1 ← ++ (word) main::i1#2 -- vwuz1=_inc_vwuz1 inc.z i1 bne !+ inc.z i1+1 !: - // [23] if((word) main::i1#1!=(word) $1f4) goto main::@2 -- vwuz1_neq_vwuc1_then_la1 + // [20] if((word) main::i1#1!=(word) $1f4) goto main::@2 -- vwuz1_neq_vwuc1_then_la1 lda.z i1+1 cmp #>$1f4 bne __b2_from___b2 @@ -702,7 +615,7 @@ main: { jmp __breturn // main::@return __breturn: - // [24] return + // [21] return rts } // File Data @@ -719,9 +632,6 @@ Removing instruction lda #>0 Removing instruction lda.z i Removing instruction ldy #0 Removing instruction lda #>0 -Removing instruction ldy #0 -Removing instruction ldy #0 -Removing instruction ldy #0 Succesful ASM optimization Pass5UnnecesaryLoadElimination Replacing label __bbegin with __b1 Replacing label __b1_from___b1 with __b1 @@ -756,16 +666,15 @@ FINAL SYMBOL TABLE (const byte) OFFSET_STRUCT_POINT_Y = (byte) 1 (byte) Point::x (byte) Point::y +(const byte) SIZEOF_STRUCT_POINT = (byte) 2 (void()) main() (byte~) main::$0 reg byte x 4.4 -(byte*~) main::$11 zp[2]:8 22.0 -(byte*~) main::$12 zp[2]:6 22.0 -(byte*~) main::$13 zp[2]:12 11.0 -(byte*~) main::$14 zp[2]:14 22.0 -(byte*~) main::$15 zp[2]:16 11.0 -(byte*~) main::$16 zp[2]:10 22.0 +(struct Point*~) main::$10 zp[2]:10 22.0 (word~) main::$3 zp[2]:6 11.0 -(word~) main::$4 zp[2]:10 11.0 +(word~) main::$4 zp[2]:10 16.5 +(byte*~) main::$7 zp[2]:8 22.0 +(byte*~) main::$8 zp[2]:6 22.0 +(struct Point*~) main::$9 zp[2]:12 5.5 (label) main::@1 (label) main::@2 (label) main::@return @@ -775,22 +684,20 @@ FINAL SYMBOL TABLE (word) main::i#2 i zp[2]:2 4.714285714285714 (word) main::i1 (word) main::i1#1 i1 zp[2]:4 16.5 -(word) main::i1#2 i1 zp[2]:4 4.125 +(word) main::i1#2 i1 zp[2]:4 6.6000000000000005 (const struct Point*) points[(number) $1f4] = { fill( $1f4, 0) } zp[2]:2 [ main::i#2 main::i#1 ] zp[2]:4 [ main::i1#2 main::i1#1 ] reg byte x [ main::$0 ] -zp[2]:6 [ main::$3 main::$12 ] -zp[2]:8 [ main::$11 ] -zp[2]:10 [ main::$4 main::$16 ] -zp[2]:12 [ main::$13 ] -zp[2]:14 [ main::$14 ] -zp[2]:16 [ main::$15 ] +zp[2]:6 [ main::$3 main::$8 ] +zp[2]:8 [ main::$7 ] +zp[2]:10 [ main::$4 main::$10 ] +zp[2]:12 [ main::$9 ] FINAL ASSEMBLER -Score: 2566 +Score: 2156 // File Comments // Minimal struct - array with 256+ structs @@ -799,6 +706,7 @@ Score: 2566 :BasicUpstart(main) .pc = $80d "Program" // Global Constants & labels + .const SIZEOF_STRUCT_POINT = 2 .const OFFSET_STRUCT_POINT_Y = 1 // @begin // [1] phi from @begin to @1 [phi:@begin->@1] @@ -814,12 +722,10 @@ main: { .label __4 = $a .label i = 2 .label i1 = 4 - .label __11 = 8 - .label __12 = 6 - .label __13 = $c - .label __14 = $e - .label __15 = $10 - .label __16 = $a + .label __7 = 8 + .label __8 = 6 + .label __9 = $c + .label __10 = $a // [5] phi from main to main::@1 [phi:main->main::@1] // [5] phi (word) main::i#2 = (word) 0 [phi:main->main::@1#0] -- vwuz1=vwuc1 lda #<0 @@ -840,29 +746,29 @@ main: { lda.z i+1 rol sta.z __3+1 - // [8] (byte*~) main::$11 ← (byte*)(const struct Point*) points + (word~) main::$3 -- pbuz1=pbuc1_plus_vwuz2 + // [8] (byte*~) main::$7 ← (byte*)(const struct Point*) points + (word~) main::$3 -- pbuz1=pbuc1_plus_vwuz2 lda.z __3 clc adc #points - sta.z __11+1 - // [9] *((byte*~) main::$11) ← (byte) 2 -- _deref_pbuz1=vbuc1 + sta.z __7+1 + // [9] *((byte*~) main::$7) ← (byte) 2 -- _deref_pbuz1=vbuc1 lda #2 ldy #0 - sta (__11),y - // [10] (byte*~) main::$12 ← (byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (word~) main::$3 -- pbuz1=pbuc1_plus_vwuz1 + sta (__7),y + // [10] (byte*~) main::$8 ← (byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (word~) main::$3 -- pbuz1=pbuc1_plus_vwuz1 clc - lda.z __12 + lda.z __8 adc #points+OFFSET_STRUCT_POINT_Y - sta.z __12+1 - // [11] *((byte*~) main::$12) ← (byte~) main::$0 -- _deref_pbuz1=vbuxx + sta.z __8+1 + // [11] *((byte*~) main::$8) ← (byte~) main::$0 -- _deref_pbuz1=vbuxx txa - sta (__12),y + sta (__8),y // for( word i: 0..499) // [12] (word) main::i#1 ← ++ (word) main::i#2 -- vwuz1=_inc_vwuz1 inc.z i @@ -893,52 +799,37 @@ main: { lda.z i1+1 rol sta.z __4+1 - // [16] (byte*~) main::$13 ← (byte*)(const struct Point*) points + (word~) main::$4 -- pbuz1=pbuc1_plus_vwuz2 + // [16] (struct Point*~) main::$9 ← (const struct Point*) points + (word~) main::$4 -- pssz1=pssc1_plus_vwuz2 lda.z __4 clc adc #points - sta.z __13+1 - // [17] (byte*~) main::$14 ← (byte*)(const struct Point*) main::SCREEN + (word~) main::$4 -- pbuz1=pbuc1_plus_vwuz2 - lda.z __4 + sta.z __9+1 + // [17] (struct Point*~) main::$10 ← (const struct Point*) main::SCREEN + (word~) main::$4 -- pssz1=pssc1_plus_vwuz1 clc + lda.z __10 adc #SCREEN - sta.z __14+1 - // [18] *((byte*~) main::$14) ← *((byte*~) main::$13) -- _deref_pbuz1=_deref_pbuz2 + sta.z __10+1 + // [18] *((struct Point*~) main::$10) ← memcpy(*((struct Point*~) main::$9), struct Point, (const byte) SIZEOF_STRUCT_POINT) -- _deref_pssz1=_deref_pssz2_memcpy_vbuc1 ldy #0 - lda (__13),y - sta (__14),y - // [19] (byte*~) main::$15 ← (byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (word~) main::$4 -- pbuz1=pbuc1_plus_vwuz2 - lda.z __4 - clc - adc #points+OFFSET_STRUCT_POINT_Y - sta.z __15+1 - // [20] (byte*~) main::$16 ← (byte*)(const struct Point*) main::SCREEN+(const byte) OFFSET_STRUCT_POINT_Y + (word~) main::$4 -- pbuz1=pbuc1_plus_vwuz1 - clc - lda.z __16 - adc #SCREEN+OFFSET_STRUCT_POINT_Y - sta.z __16+1 - // [21] *((byte*~) main::$16) ← *((byte*~) main::$15) -- _deref_pbuz1=_deref_pbuz2 - lda (__15),y - sta (__16),y + !: + lda (__9),y + sta (__10),y + iny + cpy #SIZEOF_STRUCT_POINT + bne !- // for( word i: 0..499) - // [22] (word) main::i1#1 ← ++ (word) main::i1#2 -- vwuz1=_inc_vwuz1 + // [19] (word) main::i1#1 ← ++ (word) main::i1#2 -- vwuz1=_inc_vwuz1 inc.z i1 bne !+ inc.z i1+1 !: - // [23] if((word) main::i1#1!=(word) $1f4) goto main::@2 -- vwuz1_neq_vwuc1_then_la1 + // [20] if((word) main::i1#1!=(word) $1f4) goto main::@2 -- vwuz1_neq_vwuc1_then_la1 lda.z i1+1 cmp #>$1f4 bne __b2 @@ -947,7 +838,7 @@ main: { bne __b2 // main::@return // } - // [24] return + // [21] return rts } // File Data diff --git a/src/test/ref/struct-ptr-10.sym b/src/test/ref/struct-ptr-10.sym index 37727ebe5..064878fe3 100644 --- a/src/test/ref/struct-ptr-10.sym +++ b/src/test/ref/struct-ptr-10.sym @@ -4,16 +4,15 @@ (const byte) OFFSET_STRUCT_POINT_Y = (byte) 1 (byte) Point::x (byte) Point::y +(const byte) SIZEOF_STRUCT_POINT = (byte) 2 (void()) main() (byte~) main::$0 reg byte x 4.4 -(byte*~) main::$11 zp[2]:8 22.0 -(byte*~) main::$12 zp[2]:6 22.0 -(byte*~) main::$13 zp[2]:12 11.0 -(byte*~) main::$14 zp[2]:14 22.0 -(byte*~) main::$15 zp[2]:16 11.0 -(byte*~) main::$16 zp[2]:10 22.0 +(struct Point*~) main::$10 zp[2]:10 22.0 (word~) main::$3 zp[2]:6 11.0 -(word~) main::$4 zp[2]:10 11.0 +(word~) main::$4 zp[2]:10 16.5 +(byte*~) main::$7 zp[2]:8 22.0 +(byte*~) main::$8 zp[2]:6 22.0 +(struct Point*~) main::$9 zp[2]:12 5.5 (label) main::@1 (label) main::@2 (label) main::@return @@ -23,15 +22,13 @@ (word) main::i#2 i zp[2]:2 4.714285714285714 (word) main::i1 (word) main::i1#1 i1 zp[2]:4 16.5 -(word) main::i1#2 i1 zp[2]:4 4.125 +(word) main::i1#2 i1 zp[2]:4 6.6000000000000005 (const struct Point*) points[(number) $1f4] = { fill( $1f4, 0) } zp[2]:2 [ main::i#2 main::i#1 ] zp[2]:4 [ main::i1#2 main::i1#1 ] reg byte x [ main::$0 ] -zp[2]:6 [ main::$3 main::$12 ] -zp[2]:8 [ main::$11 ] -zp[2]:10 [ main::$4 main::$16 ] -zp[2]:12 [ main::$13 ] -zp[2]:14 [ main::$14 ] -zp[2]:16 [ main::$15 ] +zp[2]:6 [ main::$3 main::$8 ] +zp[2]:8 [ main::$7 ] +zp[2]:10 [ main::$4 main::$10 ] +zp[2]:12 [ main::$9 ] diff --git a/src/test/ref/struct-ptr-11.asm b/src/test/ref/struct-ptr-11.asm index 19ec18cc5..9153d594d 100644 --- a/src/test/ref/struct-ptr-11.asm +++ b/src/test/ref/struct-ptr-11.asm @@ -2,11 +2,13 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" + .const SIZEOF_STRUCT_POINT = 3 .const OFFSET_STRUCT_POINT_Y = 1 .const OFFSET_STRUCT_POINT_Z = 2 main: { .label SCREEN = $400 - .label __2 = 2 + .label __2 = 3 + .label i1 = 2 ldx #0 __b1: txa @@ -29,22 +31,24 @@ main: { inx cpx #4 bne __b1 - ldx #0 + lda #0 + sta.z i1 __b2: - txa + lda.z i1 asl - stx.z $ff clc - adc.z $ff + adc.z i1 + ldx #SIZEOF_STRUCT_POINT tay + !: lda points,y sta SCREEN,y - lda points+OFFSET_STRUCT_POINT_Y,y - sta SCREEN+OFFSET_STRUCT_POINT_Y,y - lda points+OFFSET_STRUCT_POINT_Z,y - sta SCREEN+OFFSET_STRUCT_POINT_Z,y - inx - cpx #4 + iny + dex + bne !- + inc.z i1 + lda #4 + cmp.z i1 bne __b2 rts } diff --git a/src/test/ref/struct-ptr-11.cfg b/src/test/ref/struct-ptr-11.cfg index 114ff31ab..52b4058e6 100644 --- a/src/test/ref/struct-ptr-11.cfg +++ b/src/test/ref/struct-ptr-11.cfg @@ -15,8 +15,8 @@ main: scope:[main] from @1 main::@1: scope:[main] from main main::@1 [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@1/(byte) main::i#1 ) [6] (signed byte~) main::$2 ← - (signed byte)(byte) main::i#2 - [7] (byte~) main::$17 ← (byte) main::i#2 << (byte) 1 - [8] (byte~) main::$6 ← (byte~) main::$17 + (byte) main::i#2 + [7] (byte~) main::$11 ← (byte) main::i#2 << (byte) 1 + [8] (byte~) main::$6 ← (byte~) main::$11 + (byte) main::i#2 [9] *((signed byte*)(const struct Point*) points + (byte~) main::$6) ← (signed byte)(byte) main::i#2 [10] *((signed byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$6) ← (signed byte~) main::$2 [11] *((signed byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Z + (byte~) main::$6) ← (signed byte)(byte) main::i#2 @@ -25,14 +25,12 @@ main::@1: scope:[main] from main main::@1 to:main::@2 main::@2: scope:[main] from main::@1 main::@2 [14] (byte) main::i1#2 ← phi( main::@1/(byte) 0 main::@2/(byte) main::i1#1 ) - [15] (byte~) main::$19 ← (byte) main::i1#2 << (byte) 1 - [16] (byte~) main::$7 ← (byte~) main::$19 + (byte) main::i1#2 - [17] *((signed byte*)(const struct Point*) main::SCREEN + (byte~) main::$7) ← *((signed byte*)(const struct Point*) points + (byte~) main::$7) - [18] *((signed byte*)(const struct Point*) main::SCREEN+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$7) ← *((signed byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$7) - [19] *((signed byte*)(const struct Point*) main::SCREEN+(const byte) OFFSET_STRUCT_POINT_Z + (byte~) main::$7) ← *((signed byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Z + (byte~) main::$7) - [20] (byte) main::i1#1 ← ++ (byte) main::i1#2 - [21] if((byte) main::i1#1!=(byte) 4) goto main::@2 + [15] (byte~) main::$13 ← (byte) main::i1#2 << (byte) 1 + [16] (byte~) main::$7 ← (byte~) main::$13 + (byte) main::i1#2 + [17] *((const struct Point*) main::SCREEN + (byte~) main::$7) ← memcpy(*((const struct Point*) points + (byte~) main::$7), struct Point, (const byte) SIZEOF_STRUCT_POINT) + [18] (byte) main::i1#1 ← ++ (byte) main::i1#2 + [19] if((byte) main::i1#1!=(byte) 4) goto main::@2 to:main::@return main::@return: scope:[main] from main::@2 - [22] return + [20] return to:@return diff --git a/src/test/ref/struct-ptr-11.log b/src/test/ref/struct-ptr-11.log index 732619ee4..6ff09c182 100644 --- a/src/test/ref/struct-ptr-11.log +++ b/src/test/ref/struct-ptr-11.log @@ -5,9 +5,7 @@ Constantified RValue *((const struct Point*) points + (byte~) main::$6) ← (str Adding struct value member variable copy *((signed byte*~) main::$8 + (byte~) main::$6) ← (signed byte~) main::$0 Adding struct value member variable copy *((signed byte*~) main::$9 + (byte~) main::$6) ← (signed byte~) main::$2 Adding struct value member variable copy *((signed byte*~) main::$10 + (byte~) main::$6) ← (signed byte~) main::$3 -Adding struct value member variable copy *((signed byte*~) main::$11 + (byte~) main::$7) ← *((signed byte*~) main::$12 + (byte~) main::$7) -Adding struct value member variable copy *((signed byte*~) main::$13 + (byte~) main::$7) ← *((signed byte*~) main::$14 + (byte~) main::$7) -Adding struct value member variable copy *((signed byte*~) main::$15 + (byte~) main::$7) ← *((signed byte*~) main::$16 + (byte~) main::$7) +Adding struct value member variable copy *((const struct Point*) main::SCREEN + (byte~) main::$7) ← memcpy(*((const struct Point*) points + (byte~) main::$7), struct Point, (const byte) SIZEOF_STRUCT_POINT) Culled Empty Block (label) main::@4 CONTROL FLOW GRAPH SSA @@ -41,15 +39,7 @@ main::@2: scope:[main] from main::@1 main::@3: scope:[main] from main::@2 main::@3 (byte) main::i1#2 ← phi( main::@2/(byte) main::i1#0 main::@3/(byte) main::i1#1 ) (byte~) main::$7 ← (byte) main::i1#2 * (const byte) SIZEOF_STRUCT_POINT - (signed byte*~) main::$11 ← (signed byte*)(const struct Point*) main::SCREEN + (const byte) OFFSET_STRUCT_POINT_X - (signed byte*~) main::$12 ← (signed byte*)(const struct Point*) points + (const byte) OFFSET_STRUCT_POINT_X - *((signed byte*~) main::$11 + (byte~) main::$7) ← *((signed byte*~) main::$12 + (byte~) main::$7) - (signed byte*~) main::$13 ← (signed byte*)(const struct Point*) main::SCREEN + (const byte) OFFSET_STRUCT_POINT_Y - (signed byte*~) main::$14 ← (signed byte*)(const struct Point*) points + (const byte) OFFSET_STRUCT_POINT_Y - *((signed byte*~) main::$13 + (byte~) main::$7) ← *((signed byte*~) main::$14 + (byte~) main::$7) - (signed byte*~) main::$15 ← (signed byte*)(const struct Point*) main::SCREEN + (const byte) OFFSET_STRUCT_POINT_Z - (signed byte*~) main::$16 ← (signed byte*)(const struct Point*) points + (const byte) OFFSET_STRUCT_POINT_Z - *((signed byte*~) main::$15 + (byte~) main::$7) ← *((signed byte*~) main::$16 + (byte~) main::$7) + *((const struct Point*) main::SCREEN + (byte~) main::$7) ← memcpy(*((const struct Point*) points + (byte~) main::$7), struct Point, (const byte) SIZEOF_STRUCT_POINT) (byte) main::i1#1 ← (byte) main::i1#2 + rangenext(0,3) (bool~) main::$5 ← (byte) main::i1#1 != rangelast(0,3) if((bool~) main::$5) goto main::@3 @@ -80,12 +70,6 @@ SYMBOL TABLE SSA (signed byte~) main::$0 (signed byte~) main::$1 (signed byte*~) main::$10 -(signed byte*~) main::$11 -(signed byte*~) main::$12 -(signed byte*~) main::$13 -(signed byte*~) main::$14 -(signed byte*~) main::$15 -(signed byte*~) main::$16 (signed byte~) main::$2 (signed byte~) main::$3 (bool~) main::$4 @@ -116,36 +100,22 @@ Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (struct Point*) 1024 Successful SSA optimization PassNCastSimplification Simple Condition (bool~) main::$4 [15] if((byte) main::i#1!=rangelast(0,3)) goto main::@1 -Simple Condition (bool~) main::$5 [30] if((byte) main::i1#1!=rangelast(0,3)) goto main::@3 +Simple Condition (bool~) main::$5 [22] if((byte) main::i1#1!=rangelast(0,3)) goto main::@3 Successful SSA optimization Pass2ConditionalJumpSimplification Constant right-side identified [7] (signed byte*~) main::$8 ← (signed byte*)(const struct Point*) points + (const byte) OFFSET_STRUCT_POINT_X Constant right-side identified [9] (signed byte*~) main::$9 ← (signed byte*)(const struct Point*) points + (const byte) OFFSET_STRUCT_POINT_Y Constant right-side identified [11] (signed byte*~) main::$10 ← (signed byte*)(const struct Point*) points + (const byte) OFFSET_STRUCT_POINT_Z -Constant right-side identified [19] (signed byte*~) main::$11 ← (signed byte*)(const struct Point*) main::SCREEN + (const byte) OFFSET_STRUCT_POINT_X -Constant right-side identified [20] (signed byte*~) main::$12 ← (signed byte*)(const struct Point*) points + (const byte) OFFSET_STRUCT_POINT_X -Constant right-side identified [22] (signed byte*~) main::$13 ← (signed byte*)(const struct Point*) main::SCREEN + (const byte) OFFSET_STRUCT_POINT_Y -Constant right-side identified [23] (signed byte*~) main::$14 ← (signed byte*)(const struct Point*) points + (const byte) OFFSET_STRUCT_POINT_Y -Constant right-side identified [25] (signed byte*~) main::$15 ← (signed byte*)(const struct Point*) main::SCREEN + (const byte) OFFSET_STRUCT_POINT_Z -Constant right-side identified [26] (signed byte*~) main::$16 ← (signed byte*)(const struct Point*) points + (const byte) OFFSET_STRUCT_POINT_Z Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) main::i#0 = 0 Constant (const signed byte*) main::$8 = (signed byte*)points+OFFSET_STRUCT_POINT_X Constant (const signed byte*) main::$9 = (signed byte*)points+OFFSET_STRUCT_POINT_Y Constant (const signed byte*) main::$10 = (signed byte*)points+OFFSET_STRUCT_POINT_Z Constant (const byte) main::i1#0 = 0 -Constant (const signed byte*) main::$11 = (signed byte*)main::SCREEN+OFFSET_STRUCT_POINT_X -Constant (const signed byte*) main::$12 = (signed byte*)points+OFFSET_STRUCT_POINT_X -Constant (const signed byte*) main::$13 = (signed byte*)main::SCREEN+OFFSET_STRUCT_POINT_Y -Constant (const signed byte*) main::$14 = (signed byte*)points+OFFSET_STRUCT_POINT_Y -Constant (const signed byte*) main::$15 = (signed byte*)main::SCREEN+OFFSET_STRUCT_POINT_Z -Constant (const signed byte*) main::$16 = (signed byte*)points+OFFSET_STRUCT_POINT_Z Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value [13] main::i#1 ← ++ main::i#2 to ++ Resolved ranged comparison value [15] if(main::i#1!=rangelast(0,3)) goto main::@1 to (number) 4 -Resolved ranged next value [28] main::i1#1 ← ++ main::i1#2 to ++ -Resolved ranged comparison value [30] if(main::i1#1!=rangelast(0,3)) goto main::@3 to (number) 4 -Simplifying expression containing zero (signed byte*)points in -Simplifying expression containing zero (signed byte*)main::SCREEN in +Resolved ranged next value [20] main::i1#1 ← ++ main::i1#2 to ++ +Resolved ranged comparison value [22] if(main::i1#1!=rangelast(0,3)) goto main::@3 to (number) 4 Simplifying expression containing zero (signed byte*)points in Successful SSA optimization PassNSimplifyExpressionWithZero Eliminating unused constant (const byte) OFFSET_STRUCT_POINT_X @@ -167,23 +137,15 @@ Rewriting multiplication to use shift and addition[5] (byte~) main::$6 ← (byte Rewriting multiplication to use shift and addition[12] (byte~) main::$7 ← (byte) main::i1#2 * (const byte) SIZEOF_STRUCT_POINT Inlining constant with var siblings (const byte) main::i#0 Inlining constant with var siblings (const byte) main::i1#0 -Constant inlined main::$16 = (signed byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Z -Constant inlined main::$12 = (signed byte*)(const struct Point*) points Constant inlined main::i#0 = (byte) 0 Constant inlined main::i1#0 = (byte) 0 -Constant inlined main::$13 = (signed byte*)(const struct Point*) main::SCREEN+(const byte) OFFSET_STRUCT_POINT_Y -Constant inlined main::$14 = (signed byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y -Constant inlined main::$15 = (signed byte*)(const struct Point*) main::SCREEN+(const byte) OFFSET_STRUCT_POINT_Z Constant inlined main::$9 = (signed byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y Constant inlined main::$10 = (signed byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Z Constant inlined main::$8 = (signed byte*)(const struct Point*) points -Constant inlined main::$11 = (signed byte*)(const struct Point*) main::SCREEN Successful SSA optimization Pass2ConstantInlining -Alias (byte~) main::$6 = (byte~) main::$18 -Alias (byte~) main::$7 = (byte~) main::$20 +Alias (byte~) main::$6 = (byte~) main::$12 +Alias (byte~) main::$7 = (byte~) main::$14 Successful SSA optimization Pass2AliasElimination -Eliminating unused constant (const byte) SIZEOF_STRUCT_POINT -Successful SSA optimization PassNEliminateUnusedVars Added new block during phi lifting main::@5(between main::@1 and main::@1) Added new block during phi lifting main::@6(between main::@3 and main::@3) Adding NOP phi() at start of @begin @@ -196,8 +158,8 @@ CALL GRAPH Calls in [] to main:2 Created 2 initial phi equivalence classes -Coalesced [25] main::i1#3 ← main::i1#1 -Coalesced [26] main::i#3 ← main::i#1 +Coalesced [23] main::i1#3 ← main::i1#1 +Coalesced [24] main::i#3 ← main::i#1 Coalesced down to 2 phi equivalence classes Culled Empty Block (label) @2 Culled Empty Block (label) main::@2 @@ -227,8 +189,8 @@ main: scope:[main] from @1 main::@1: scope:[main] from main main::@1 [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@1/(byte) main::i#1 ) [6] (signed byte~) main::$2 ← - (signed byte)(byte) main::i#2 - [7] (byte~) main::$17 ← (byte) main::i#2 << (byte) 1 - [8] (byte~) main::$6 ← (byte~) main::$17 + (byte) main::i#2 + [7] (byte~) main::$11 ← (byte) main::i#2 << (byte) 1 + [8] (byte~) main::$6 ← (byte~) main::$11 + (byte) main::i#2 [9] *((signed byte*)(const struct Point*) points + (byte~) main::$6) ← (signed byte)(byte) main::i#2 [10] *((signed byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$6) ← (signed byte~) main::$2 [11] *((signed byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Z + (byte~) main::$6) ← (signed byte)(byte) main::i#2 @@ -237,16 +199,14 @@ main::@1: scope:[main] from main main::@1 to:main::@2 main::@2: scope:[main] from main::@1 main::@2 [14] (byte) main::i1#2 ← phi( main::@1/(byte) 0 main::@2/(byte) main::i1#1 ) - [15] (byte~) main::$19 ← (byte) main::i1#2 << (byte) 1 - [16] (byte~) main::$7 ← (byte~) main::$19 + (byte) main::i1#2 - [17] *((signed byte*)(const struct Point*) main::SCREEN + (byte~) main::$7) ← *((signed byte*)(const struct Point*) points + (byte~) main::$7) - [18] *((signed byte*)(const struct Point*) main::SCREEN+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$7) ← *((signed byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$7) - [19] *((signed byte*)(const struct Point*) main::SCREEN+(const byte) OFFSET_STRUCT_POINT_Z + (byte~) main::$7) ← *((signed byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Z + (byte~) main::$7) - [20] (byte) main::i1#1 ← ++ (byte) main::i1#2 - [21] if((byte) main::i1#1!=(byte) 4) goto main::@2 + [15] (byte~) main::$13 ← (byte) main::i1#2 << (byte) 1 + [16] (byte~) main::$7 ← (byte~) main::$13 + (byte) main::i1#2 + [17] *((const struct Point*) main::SCREEN + (byte~) main::$7) ← memcpy(*((const struct Point*) points + (byte~) main::$7), struct Point, (const byte) SIZEOF_STRUCT_POINT) + [18] (byte) main::i1#1 ← ++ (byte) main::i1#2 + [19] if((byte) main::i1#1!=(byte) 4) goto main::@2 to:main::@return main::@return: scope:[main] from main::@2 - [22] return + [20] return to:@return @@ -255,40 +215,40 @@ VARIABLE REGISTER WEIGHTS (signed byte) Point::y (signed byte) Point::z (void()) main() -(byte~) main::$17 22.0 -(byte~) main::$19 22.0 +(byte~) main::$11 22.0 +(byte~) main::$13 22.0 (signed byte~) main::$2 5.5 (byte~) main::$6 14.666666666666666 -(byte~) main::$7 25.666666666666668 +(byte~) main::$7 22.0 (byte) main::i (byte) main::i#1 16.5 (byte) main::i#2 6.285714285714286 (byte) main::i1 (byte) main::i1#1 16.5 -(byte) main::i1#2 7.333333333333333 +(byte) main::i1#2 11.0 Initial phi equivalence classes [ main::i#2 main::i#1 ] [ main::i1#2 main::i1#1 ] Added variable main::$2 to live range equivalence class [ main::$2 ] -Added variable main::$17 to live range equivalence class [ main::$17 ] +Added variable main::$11 to live range equivalence class [ main::$11 ] Added variable main::$6 to live range equivalence class [ main::$6 ] -Added variable main::$19 to live range equivalence class [ main::$19 ] +Added variable main::$13 to live range equivalence class [ main::$13 ] Added variable main::$7 to live range equivalence class [ main::$7 ] Complete equivalence classes [ main::i#2 main::i#1 ] [ main::i1#2 main::i1#1 ] [ main::$2 ] -[ main::$17 ] +[ main::$11 ] [ main::$6 ] -[ main::$19 ] +[ main::$13 ] [ main::$7 ] Allocated zp[1]:2 [ main::i#2 main::i#1 ] Allocated zp[1]:3 [ main::i1#2 main::i1#1 ] Allocated zp[1]:4 [ main::$2 ] -Allocated zp[1]:5 [ main::$17 ] +Allocated zp[1]:5 [ main::$11 ] Allocated zp[1]:6 [ main::$6 ] -Allocated zp[1]:7 [ main::$19 ] +Allocated zp[1]:7 [ main::$13 ] Allocated zp[1]:8 [ main::$7 ] INITIAL ASM @@ -300,6 +260,7 @@ Target platform is c64basic / MOS6502X :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + .const SIZEOF_STRUCT_POINT = 3 .const OFFSET_STRUCT_POINT_Y = 1 .const OFFSET_STRUCT_POINT_Z = 2 // @begin @@ -326,8 +287,8 @@ main: { .label __7 = 8 .label i = 2 .label i1 = 3 - .label __17 = 5 - .label __19 = 7 + .label __11 = 5 + .label __13 = 7 // [5] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 @@ -346,12 +307,12 @@ main: { clc adc #1 sta.z __2 - // [7] (byte~) main::$17 ← (byte) main::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [7] (byte~) main::$11 ← (byte) main::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z i asl - sta.z __17 - // [8] (byte~) main::$6 ← (byte~) main::$17 + (byte) main::i#2 -- vbuz1=vbuz2_plus_vbuz3 - lda.z __17 + sta.z __11 + // [8] (byte~) main::$6 ← (byte~) main::$11 + (byte) main::i#2 -- vbuz1=vbuz2_plus_vbuz3 + lda.z __11 clc adc.z i sta.z __6 @@ -385,37 +346,34 @@ main: { jmp __b2 // main::@2 __b2: - // [15] (byte~) main::$19 ← (byte) main::i1#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [15] (byte~) main::$13 ← (byte) main::i1#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z i1 asl - sta.z __19 - // [16] (byte~) main::$7 ← (byte~) main::$19 + (byte) main::i1#2 -- vbuz1=vbuz2_plus_vbuz3 - lda.z __19 + sta.z __13 + // [16] (byte~) main::$7 ← (byte~) main::$13 + (byte) main::i1#2 -- vbuz1=vbuz2_plus_vbuz3 + lda.z __13 clc adc.z i1 sta.z __7 - // [17] *((signed byte*)(const struct Point*) main::SCREEN + (byte~) main::$7) ← *((signed byte*)(const struct Point*) points + (byte~) main::$7) -- pbsc1_derefidx_vbuz1=pbsc2_derefidx_vbuz1 + // [17] *((const struct Point*) main::SCREEN + (byte~) main::$7) ← memcpy(*((const struct Point*) points + (byte~) main::$7), struct Point, (const byte) SIZEOF_STRUCT_POINT) -- pssc1_derefidx_vbuz1=pssc2_derefidx_vbuz1_memcpy_vbuc3 + ldx #SIZEOF_STRUCT_POINT ldy.z __7 + !: lda points,y sta SCREEN,y - // [18] *((signed byte*)(const struct Point*) main::SCREEN+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$7) ← *((signed byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$7) -- pbsc1_derefidx_vbuz1=pbsc2_derefidx_vbuz1 - ldy.z __7 - lda points+OFFSET_STRUCT_POINT_Y,y - sta SCREEN+OFFSET_STRUCT_POINT_Y,y - // [19] *((signed byte*)(const struct Point*) main::SCREEN+(const byte) OFFSET_STRUCT_POINT_Z + (byte~) main::$7) ← *((signed byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Z + (byte~) main::$7) -- pbsc1_derefidx_vbuz1=pbsc2_derefidx_vbuz1 - ldy.z __7 - lda points+OFFSET_STRUCT_POINT_Z,y - sta SCREEN+OFFSET_STRUCT_POINT_Z,y - // [20] (byte) main::i1#1 ← ++ (byte) main::i1#2 -- vbuz1=_inc_vbuz1 + iny + dex + bne !- + // [18] (byte) main::i1#1 ← ++ (byte) main::i1#2 -- vbuz1=_inc_vbuz1 inc.z i1 - // [21] if((byte) main::i1#1!=(byte) 4) goto main::@2 -- vbuz1_neq_vbuc1_then_la1 + // [19] if((byte) main::i1#1!=(byte) 4) goto main::@2 -- vbuz1_neq_vbuc1_then_la1 lda #4 cmp.z i1 bne __b2_from___b2 jmp __breturn // main::@return __breturn: - // [22] return + // [20] return rts } // File Data @@ -424,55 +382,55 @@ main: { REGISTER UPLIFT POTENTIAL REGISTERS Statement [6] (signed byte~) main::$2 ← - (signed byte)(byte) main::i#2 [ main::i#2 main::$2 ] ( main:2 [ main::i#2 main::$2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::i#2 main::i#1 ] -Statement [7] (byte~) main::$17 ← (byte) main::i#2 << (byte) 1 [ main::i#2 main::$2 main::$17 ] ( main:2 [ main::i#2 main::$2 main::$17 ] ) always clobbers reg byte a +Statement [7] (byte~) main::$11 ← (byte) main::i#2 << (byte) 1 [ main::i#2 main::$2 main::$11 ] ( main:2 [ main::i#2 main::$2 main::$11 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:4 [ main::$2 ] -Statement [8] (byte~) main::$6 ← (byte~) main::$17 + (byte) main::i#2 [ main::i#2 main::$2 main::$6 ] ( main:2 [ main::i#2 main::$2 main::$6 ] ) always clobbers reg byte a +Statement [8] (byte~) main::$6 ← (byte~) main::$11 + (byte) main::i#2 [ main::i#2 main::$2 main::$6 ] ( main:2 [ main::i#2 main::$2 main::$6 ] ) always clobbers reg byte a Statement [9] *((signed byte*)(const struct Point*) points + (byte~) main::$6) ← (signed byte)(byte) main::i#2 [ main::i#2 main::$2 main::$6 ] ( main:2 [ main::i#2 main::$2 main::$6 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:6 [ main::$6 ] Statement [10] *((signed byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$6) ← (signed byte~) main::$2 [ main::i#2 main::$6 ] ( main:2 [ main::i#2 main::$6 ] ) always clobbers reg byte a Statement [11] *((signed byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Z + (byte~) main::$6) ← (signed byte)(byte) main::i#2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a -Statement [15] (byte~) main::$19 ← (byte) main::i1#2 << (byte) 1 [ main::i1#2 main::$19 ] ( main:2 [ main::i1#2 main::$19 ] ) always clobbers reg byte a +Statement [15] (byte~) main::$13 ← (byte) main::i1#2 << (byte) 1 [ main::i1#2 main::$13 ] ( main:2 [ main::i1#2 main::$13 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:3 [ main::i1#2 main::i1#1 ] -Statement [16] (byte~) main::$7 ← (byte~) main::$19 + (byte) main::i1#2 [ main::i1#2 main::$7 ] ( main:2 [ main::i1#2 main::$7 ] ) always clobbers reg byte a -Statement [17] *((signed byte*)(const struct Point*) main::SCREEN + (byte~) main::$7) ← *((signed byte*)(const struct Point*) points + (byte~) main::$7) [ main::i1#2 main::$7 ] ( main:2 [ main::i1#2 main::$7 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:8 [ main::$7 ] -Statement [18] *((signed byte*)(const struct Point*) main::SCREEN+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$7) ← *((signed byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$7) [ main::i1#2 main::$7 ] ( main:2 [ main::i1#2 main::$7 ] ) always clobbers reg byte a -Statement [19] *((signed byte*)(const struct Point*) main::SCREEN+(const byte) OFFSET_STRUCT_POINT_Z + (byte~) main::$7) ← *((signed byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Z + (byte~) main::$7) [ main::i1#2 ] ( main:2 [ main::i1#2 ] ) always clobbers reg byte a +Statement [16] (byte~) main::$7 ← (byte~) main::$13 + (byte) main::i1#2 [ main::i1#2 main::$7 ] ( main:2 [ main::i1#2 main::$7 ] ) always clobbers reg byte a +Statement [17] *((const struct Point*) main::SCREEN + (byte~) main::$7) ← memcpy(*((const struct Point*) points + (byte~) main::$7), struct Point, (const byte) SIZEOF_STRUCT_POINT) [ main::i1#2 ] ( main:2 [ main::i1#2 ] ) always clobbers reg byte a reg byte x reg byte y +Removing always clobbered register reg byte x as potential for zp[1]:3 [ main::i1#2 main::i1#1 ] +Removing always clobbered register reg byte y as potential for zp[1]:3 [ main::i1#2 main::i1#1 ] +Statement [19] if((byte) main::i1#1!=(byte) 4) goto main::@2 [ main::i1#1 ] ( main:2 [ main::i1#1 ] ) always clobbers reg byte a Statement [6] (signed byte~) main::$2 ← - (signed byte)(byte) main::i#2 [ main::i#2 main::$2 ] ( main:2 [ main::i#2 main::$2 ] ) always clobbers reg byte a -Statement [7] (byte~) main::$17 ← (byte) main::i#2 << (byte) 1 [ main::i#2 main::$2 main::$17 ] ( main:2 [ main::i#2 main::$2 main::$17 ] ) always clobbers reg byte a -Statement [8] (byte~) main::$6 ← (byte~) main::$17 + (byte) main::i#2 [ main::i#2 main::$2 main::$6 ] ( main:2 [ main::i#2 main::$2 main::$6 ] ) always clobbers reg byte a +Statement [7] (byte~) main::$11 ← (byte) main::i#2 << (byte) 1 [ main::i#2 main::$2 main::$11 ] ( main:2 [ main::i#2 main::$2 main::$11 ] ) always clobbers reg byte a +Statement [8] (byte~) main::$6 ← (byte~) main::$11 + (byte) main::i#2 [ main::i#2 main::$2 main::$6 ] ( main:2 [ main::i#2 main::$2 main::$6 ] ) always clobbers reg byte a Statement [9] *((signed byte*)(const struct Point*) points + (byte~) main::$6) ← (signed byte)(byte) main::i#2 [ main::i#2 main::$2 main::$6 ] ( main:2 [ main::i#2 main::$2 main::$6 ] ) always clobbers reg byte a Statement [10] *((signed byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$6) ← (signed byte~) main::$2 [ main::i#2 main::$6 ] ( main:2 [ main::i#2 main::$6 ] ) always clobbers reg byte a Statement [11] *((signed byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Z + (byte~) main::$6) ← (signed byte)(byte) main::i#2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a -Statement [15] (byte~) main::$19 ← (byte) main::i1#2 << (byte) 1 [ main::i1#2 main::$19 ] ( main:2 [ main::i1#2 main::$19 ] ) always clobbers reg byte a -Statement [16] (byte~) main::$7 ← (byte~) main::$19 + (byte) main::i1#2 [ main::i1#2 main::$7 ] ( main:2 [ main::i1#2 main::$7 ] ) always clobbers reg byte a -Statement [17] *((signed byte*)(const struct Point*) main::SCREEN + (byte~) main::$7) ← *((signed byte*)(const struct Point*) points + (byte~) main::$7) [ main::i1#2 main::$7 ] ( main:2 [ main::i1#2 main::$7 ] ) always clobbers reg byte a -Statement [18] *((signed byte*)(const struct Point*) main::SCREEN+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$7) ← *((signed byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$7) [ main::i1#2 main::$7 ] ( main:2 [ main::i1#2 main::$7 ] ) always clobbers reg byte a -Statement [19] *((signed byte*)(const struct Point*) main::SCREEN+(const byte) OFFSET_STRUCT_POINT_Z + (byte~) main::$7) ← *((signed byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Z + (byte~) main::$7) [ main::i1#2 ] ( main:2 [ main::i1#2 ] ) always clobbers reg byte a +Statement [15] (byte~) main::$13 ← (byte) main::i1#2 << (byte) 1 [ main::i1#2 main::$13 ] ( main:2 [ main::i1#2 main::$13 ] ) always clobbers reg byte a +Statement [16] (byte~) main::$7 ← (byte~) main::$13 + (byte) main::i1#2 [ main::i1#2 main::$7 ] ( main:2 [ main::i1#2 main::$7 ] ) always clobbers reg byte a +Statement [17] *((const struct Point*) main::SCREEN + (byte~) main::$7) ← memcpy(*((const struct Point*) points + (byte~) main::$7), struct Point, (const byte) SIZEOF_STRUCT_POINT) [ main::i1#2 ] ( main:2 [ main::i1#2 ] ) always clobbers reg byte a reg byte x reg byte y +Statement [19] if((byte) main::i1#1!=(byte) 4) goto main::@2 [ main::i1#1 ] ( main:2 [ main::i1#1 ] ) always clobbers reg byte a Potential registers zp[1]:2 [ main::i#2 main::i#1 ] : zp[1]:2 , reg byte x , reg byte y , -Potential registers zp[1]:3 [ main::i1#2 main::i1#1 ] : zp[1]:3 , reg byte x , reg byte y , +Potential registers zp[1]:3 [ main::i1#2 main::i1#1 ] : zp[1]:3 , Potential registers zp[1]:4 [ main::$2 ] : zp[1]:4 , reg byte x , reg byte y , -Potential registers zp[1]:5 [ main::$17 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:5 [ main::$11 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:6 [ main::$6 ] : zp[1]:6 , reg byte x , reg byte y , -Potential registers zp[1]:7 [ main::$19 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:8 [ main::$7 ] : zp[1]:8 , reg byte x , reg byte y , +Potential registers zp[1]:7 [ main::$13 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:8 [ main::$7 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 25.67: zp[1]:8 [ main::$7 ] 23.83: zp[1]:3 [ main::i1#2 main::i1#1 ] 22.79: zp[1]:2 [ main::i#2 main::i#1 ] 22: zp[1]:5 [ main::$17 ] 22: zp[1]:7 [ main::$19 ] 14.67: zp[1]:6 [ main::$6 ] 5.5: zp[1]:4 [ main::$2 ] +Uplift Scope [main] 27.5: zp[1]:3 [ main::i1#2 main::i1#1 ] 22.79: zp[1]:2 [ main::i#2 main::i#1 ] 22: zp[1]:5 [ main::$11 ] 22: zp[1]:7 [ main::$13 ] 22: zp[1]:8 [ main::$7 ] 14.67: zp[1]:6 [ main::$6 ] 5.5: zp[1]:4 [ main::$2 ] Uplift Scope [Point] Uplift Scope [] -Uplifting [main] best 1353 combination reg byte y [ main::$7 ] reg byte x [ main::i1#2 main::i1#1 ] reg byte x [ main::i#2 main::i#1 ] reg byte a [ main::$17 ] zp[1]:7 [ main::$19 ] zp[1]:6 [ main::$6 ] zp[1]:4 [ main::$2 ] -Limited combination testing to 100 combinations of 3888 possible. -Uplifting [Point] best 1353 combination -Uplifting [] best 1353 combination -Attempting to uplift remaining variables inzp[1]:7 [ main::$19 ] -Uplifting [main] best 1333 combination reg byte a [ main::$19 ] +Uplifting [main] best 1298 combination zp[1]:3 [ main::i1#2 main::i1#1 ] reg byte x [ main::i#2 main::i#1 ] reg byte a [ main::$11 ] reg byte a [ main::$13 ] reg byte a [ main::$7 ] zp[1]:6 [ main::$6 ] zp[1]:4 [ main::$2 ] +Limited combination testing to 100 combinations of 1728 possible. +Uplifting [Point] best 1298 combination +Uplifting [] best 1298 combination +Attempting to uplift remaining variables inzp[1]:3 [ main::i1#2 main::i1#1 ] +Uplifting [main] best 1298 combination zp[1]:3 [ main::i1#2 main::i1#1 ] Attempting to uplift remaining variables inzp[1]:6 [ main::$6 ] -Uplifting [main] best 1233 combination reg byte y [ main::$6 ] +Uplifting [main] best 1198 combination reg byte y [ main::$6 ] Attempting to uplift remaining variables inzp[1]:4 [ main::$2 ] -Uplifting [main] best 1233 combination zp[1]:4 [ main::$2 ] -Allocated (was zp[1]:4) zp[1]:2 [ main::$2 ] +Uplifting [main] best 1198 combination zp[1]:4 [ main::$2 ] +Allocated (was zp[1]:3) zp[1]:2 [ main::i1#2 main::i1#1 ] +Allocated (was zp[1]:4) zp[1]:3 [ main::$2 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -482,6 +440,7 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + .const SIZEOF_STRUCT_POINT = 3 .const OFFSET_STRUCT_POINT_Y = 1 .const OFFSET_STRUCT_POINT_Z = 2 // @begin @@ -503,7 +462,8 @@ __bend: // main main: { .label SCREEN = $400 - .label __2 = 2 + .label __2 = 3 + .label i1 = 2 // [5] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 @@ -521,10 +481,10 @@ main: { clc adc #1 sta.z __2 - // [7] (byte~) main::$17 ← (byte) main::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [7] (byte~) main::$11 ← (byte) main::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl - // [8] (byte~) main::$6 ← (byte~) main::$17 + (byte) main::i#2 -- vbuyy=vbuaa_plus_vbuxx + // [8] (byte~) main::$6 ← (byte~) main::$11 + (byte) main::i#2 -- vbuyy=vbuaa_plus_vbuxx stx.z $ff clc adc.z $ff @@ -545,8 +505,9 @@ main: { bne __b1_from___b1 // [14] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: - // [14] phi (byte) main::i1#2 = (byte) 0 [phi:main::@1->main::@2#0] -- vbuxx=vbuc1 - ldx #0 + // [14] phi (byte) main::i1#2 = (byte) 0 [phi:main::@1->main::@2#0] -- vbuz1=vbuc1 + lda #0 + sta.z i1 jmp __b2 // [14] phi from main::@2 to main::@2 [phi:main::@2->main::@2] __b2_from___b2: @@ -554,32 +515,31 @@ main: { jmp __b2 // main::@2 __b2: - // [15] (byte~) main::$19 ← (byte) main::i1#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 - txa + // [15] (byte~) main::$13 ← (byte) main::i1#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + lda.z i1 asl - // [16] (byte~) main::$7 ← (byte~) main::$19 + (byte) main::i1#2 -- vbuyy=vbuaa_plus_vbuxx - stx.z $ff + // [16] (byte~) main::$7 ← (byte~) main::$13 + (byte) main::i1#2 -- vbuaa=vbuaa_plus_vbuz1 clc - adc.z $ff + adc.z i1 + // [17] *((const struct Point*) main::SCREEN + (byte~) main::$7) ← memcpy(*((const struct Point*) points + (byte~) main::$7), struct Point, (const byte) SIZEOF_STRUCT_POINT) -- pssc1_derefidx_vbuaa=pssc2_derefidx_vbuaa_memcpy_vbuc3 + ldx #SIZEOF_STRUCT_POINT tay - // [17] *((signed byte*)(const struct Point*) main::SCREEN + (byte~) main::$7) ← *((signed byte*)(const struct Point*) points + (byte~) main::$7) -- pbsc1_derefidx_vbuyy=pbsc2_derefidx_vbuyy + !: lda points,y sta SCREEN,y - // [18] *((signed byte*)(const struct Point*) main::SCREEN+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$7) ← *((signed byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$7) -- pbsc1_derefidx_vbuyy=pbsc2_derefidx_vbuyy - lda points+OFFSET_STRUCT_POINT_Y,y - sta SCREEN+OFFSET_STRUCT_POINT_Y,y - // [19] *((signed byte*)(const struct Point*) main::SCREEN+(const byte) OFFSET_STRUCT_POINT_Z + (byte~) main::$7) ← *((signed byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Z + (byte~) main::$7) -- pbsc1_derefidx_vbuyy=pbsc2_derefidx_vbuyy - lda points+OFFSET_STRUCT_POINT_Z,y - sta SCREEN+OFFSET_STRUCT_POINT_Z,y - // [20] (byte) main::i1#1 ← ++ (byte) main::i1#2 -- vbuxx=_inc_vbuxx - inx - // [21] if((byte) main::i1#1!=(byte) 4) goto main::@2 -- vbuxx_neq_vbuc1_then_la1 - cpx #4 + iny + dex + bne !- + // [18] (byte) main::i1#1 ← ++ (byte) main::i1#2 -- vbuz1=_inc_vbuz1 + inc.z i1 + // [19] if((byte) main::i1#1!=(byte) 4) goto main::@2 -- vbuz1_neq_vbuc1_then_la1 + lda #4 + cmp.z i1 bne __b2_from___b2 jmp __breturn // main::@return __breturn: - // [22] return + // [20] return rts } // File Data @@ -625,12 +585,13 @@ FINAL SYMBOL TABLE (signed byte) Point::x (signed byte) Point::y (signed byte) Point::z +(const byte) SIZEOF_STRUCT_POINT = (byte) 3 (void()) main() -(byte~) main::$17 reg byte a 22.0 -(byte~) main::$19 reg byte a 22.0 -(signed byte~) main::$2 zp[1]:2 5.5 +(byte~) main::$11 reg byte a 22.0 +(byte~) main::$13 reg byte a 22.0 +(signed byte~) main::$2 zp[1]:3 5.5 (byte~) main::$6 reg byte y 14.666666666666666 -(byte~) main::$7 reg byte y 25.666666666666668 +(byte~) main::$7 reg byte a 22.0 (label) main::@1 (label) main::@2 (label) main::@return @@ -639,21 +600,21 @@ FINAL SYMBOL TABLE (byte) main::i#1 reg byte x 16.5 (byte) main::i#2 reg byte x 6.285714285714286 (byte) main::i1 -(byte) main::i1#1 reg byte x 16.5 -(byte) main::i1#2 reg byte x 7.333333333333333 +(byte) main::i1#1 i1 zp[1]:2 16.5 +(byte) main::i1#2 i1 zp[1]:2 11.0 (const struct Point*) points[(number) 4] = { fill( 4, 0) } reg byte x [ main::i#2 main::i#1 ] -reg byte x [ main::i1#2 main::i1#1 ] -zp[1]:2 [ main::$2 ] -reg byte a [ main::$17 ] +zp[1]:2 [ main::i1#2 main::i1#1 ] +zp[1]:3 [ main::$2 ] +reg byte a [ main::$11 ] reg byte y [ main::$6 ] -reg byte a [ main::$19 ] -reg byte y [ main::$7 ] +reg byte a [ main::$13 ] +reg byte a [ main::$7 ] FINAL ASSEMBLER -Score: 1071 +Score: 1036 // File Comments // Minimal struct - array of 3-byte structs (required *3) @@ -662,6 +623,7 @@ Score: 1071 :BasicUpstart(main) .pc = $80d "Program" // Global Constants & labels + .const SIZEOF_STRUCT_POINT = 3 .const OFFSET_STRUCT_POINT_Y = 1 .const OFFSET_STRUCT_POINT_Z = 2 // @begin @@ -674,7 +636,8 @@ Score: 1071 // main main: { .label SCREEN = $400 - .label __2 = 2 + .label __2 = 3 + .label i1 = 2 // [5] phi from main to main::@1 [phi:main->main::@1] // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 ldx #0 @@ -690,10 +653,10 @@ main: { adc #1 sta.z __2 // points[i] = { (signed byte)i, -(signed byte)i, (signed byte)i } - // [7] (byte~) main::$17 ← (byte) main::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [7] (byte~) main::$11 ← (byte) main::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl - // [8] (byte~) main::$6 ← (byte~) main::$17 + (byte) main::i#2 -- vbuyy=vbuaa_plus_vbuxx + // [8] (byte~) main::$6 ← (byte~) main::$11 + (byte) main::i#2 -- vbuyy=vbuaa_plus_vbuxx stx.z $ff clc adc.z $ff @@ -714,39 +677,39 @@ main: { cpx #4 bne __b1 // [14] phi from main::@1 to main::@2 [phi:main::@1->main::@2] - // [14] phi (byte) main::i1#2 = (byte) 0 [phi:main::@1->main::@2#0] -- vbuxx=vbuc1 - ldx #0 + // [14] phi (byte) main::i1#2 = (byte) 0 [phi:main::@1->main::@2#0] -- vbuz1=vbuc1 + lda #0 + sta.z i1 // [14] phi from main::@2 to main::@2 [phi:main::@2->main::@2] // [14] phi (byte) main::i1#2 = (byte) main::i1#1 [phi:main::@2->main::@2#0] -- register_copy // main::@2 __b2: // SCREEN[i] = points[i] - // [15] (byte~) main::$19 ← (byte) main::i1#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 - txa + // [15] (byte~) main::$13 ← (byte) main::i1#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + lda.z i1 asl - // [16] (byte~) main::$7 ← (byte~) main::$19 + (byte) main::i1#2 -- vbuyy=vbuaa_plus_vbuxx - stx.z $ff + // [16] (byte~) main::$7 ← (byte~) main::$13 + (byte) main::i1#2 -- vbuaa=vbuaa_plus_vbuz1 clc - adc.z $ff + adc.z i1 + // [17] *((const struct Point*) main::SCREEN + (byte~) main::$7) ← memcpy(*((const struct Point*) points + (byte~) main::$7), struct Point, (const byte) SIZEOF_STRUCT_POINT) -- pssc1_derefidx_vbuaa=pssc2_derefidx_vbuaa_memcpy_vbuc3 + ldx #SIZEOF_STRUCT_POINT tay - // [17] *((signed byte*)(const struct Point*) main::SCREEN + (byte~) main::$7) ← *((signed byte*)(const struct Point*) points + (byte~) main::$7) -- pbsc1_derefidx_vbuyy=pbsc2_derefidx_vbuyy + !: lda points,y sta SCREEN,y - // [18] *((signed byte*)(const struct Point*) main::SCREEN+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$7) ← *((signed byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$7) -- pbsc1_derefidx_vbuyy=pbsc2_derefidx_vbuyy - lda points+OFFSET_STRUCT_POINT_Y,y - sta SCREEN+OFFSET_STRUCT_POINT_Y,y - // [19] *((signed byte*)(const struct Point*) main::SCREEN+(const byte) OFFSET_STRUCT_POINT_Z + (byte~) main::$7) ← *((signed byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Z + (byte~) main::$7) -- pbsc1_derefidx_vbuyy=pbsc2_derefidx_vbuyy - lda points+OFFSET_STRUCT_POINT_Z,y - sta SCREEN+OFFSET_STRUCT_POINT_Z,y + iny + dex + bne !- // for( byte i: 0..3) - // [20] (byte) main::i1#1 ← ++ (byte) main::i1#2 -- vbuxx=_inc_vbuxx - inx - // [21] if((byte) main::i1#1!=(byte) 4) goto main::@2 -- vbuxx_neq_vbuc1_then_la1 - cpx #4 + // [18] (byte) main::i1#1 ← ++ (byte) main::i1#2 -- vbuz1=_inc_vbuz1 + inc.z i1 + // [19] if((byte) main::i1#1!=(byte) 4) goto main::@2 -- vbuz1_neq_vbuc1_then_la1 + lda #4 + cmp.z i1 bne __b2 // main::@return // } - // [22] return + // [20] return rts } // File Data diff --git a/src/test/ref/struct-ptr-11.sym b/src/test/ref/struct-ptr-11.sym index 9717a67f1..1783b3374 100644 --- a/src/test/ref/struct-ptr-11.sym +++ b/src/test/ref/struct-ptr-11.sym @@ -6,12 +6,13 @@ (signed byte) Point::x (signed byte) Point::y (signed byte) Point::z +(const byte) SIZEOF_STRUCT_POINT = (byte) 3 (void()) main() -(byte~) main::$17 reg byte a 22.0 -(byte~) main::$19 reg byte a 22.0 -(signed byte~) main::$2 zp[1]:2 5.5 +(byte~) main::$11 reg byte a 22.0 +(byte~) main::$13 reg byte a 22.0 +(signed byte~) main::$2 zp[1]:3 5.5 (byte~) main::$6 reg byte y 14.666666666666666 -(byte~) main::$7 reg byte y 25.666666666666668 +(byte~) main::$7 reg byte a 22.0 (label) main::@1 (label) main::@2 (label) main::@return @@ -20,14 +21,14 @@ (byte) main::i#1 reg byte x 16.5 (byte) main::i#2 reg byte x 6.285714285714286 (byte) main::i1 -(byte) main::i1#1 reg byte x 16.5 -(byte) main::i1#2 reg byte x 7.333333333333333 +(byte) main::i1#1 i1 zp[1]:2 16.5 +(byte) main::i1#2 i1 zp[1]:2 11.0 (const struct Point*) points[(number) 4] = { fill( 4, 0) } reg byte x [ main::i#2 main::i#1 ] -reg byte x [ main::i1#2 main::i1#1 ] -zp[1]:2 [ main::$2 ] -reg byte a [ main::$17 ] +zp[1]:2 [ main::i1#2 main::i1#1 ] +zp[1]:3 [ main::$2 ] +reg byte a [ main::$11 ] reg byte y [ main::$6 ] -reg byte a [ main::$19 ] -reg byte y [ main::$7 ] +reg byte a [ main::$13 ] +reg byte a [ main::$7 ] diff --git a/src/test/ref/struct-ptr-18.asm b/src/test/ref/struct-ptr-18.asm index 20e21dadd..93ca7119e 100644 --- a/src/test/ref/struct-ptr-18.asm +++ b/src/test/ref/struct-ptr-18.asm @@ -7,14 +7,18 @@ .const OFFSET_STRUCT_POINT_Y = 1 .label idx = 2 main: { - lda #1 - sta points - lda #2 - sta points+OFFSET_STRUCT_POINT_Y - lda #3 - sta points+1*SIZEOF_STRUCT_POINT - lda #4 - sta points+OFFSET_STRUCT_POINT_Y+1*SIZEOF_STRUCT_POINT + ldy #SIZEOF_STRUCT_POINT + !: + lda __0-1,y + sta points-1,y + dey + bne !- + ldy #SIZEOF_STRUCT_POINT + !: + lda __1-1,y + sta points+1*SIZEOF_STRUCT_POINT-1,y + dey + bne !- lda #0 sta.z idx tax @@ -47,3 +51,5 @@ print: { rts } points: .fill 2*2, 0 + __0: .byte 1, 2 + __1: .byte 3, 4 diff --git a/src/test/ref/struct-ptr-18.cfg b/src/test/ref/struct-ptr-18.cfg index a851dbf2f..88d0b3b53 100644 --- a/src/test/ref/struct-ptr-18.cfg +++ b/src/test/ref/struct-ptr-18.cfg @@ -10,34 +10,32 @@ (void()) main() main: scope:[main] from @1 - [4] *((byte*)(const struct Point*) points) ← (byte) 1 - [5] *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte) 2 - [6] *((byte*)(const struct Point*) points+(byte) 1*(const byte) SIZEOF_STRUCT_POINT) ← (byte) 3 - [7] *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y+(byte) 1*(const byte) SIZEOF_STRUCT_POINT) ← (byte) 4 + [4] *((const struct Point*) points) ← memcpy(*(&(const struct Point) $0), struct Point, (const byte) SIZEOF_STRUCT_POINT) + [5] *((const struct Point*) points+(byte) 1*(const byte) SIZEOF_STRUCT_POINT) ← memcpy(*(&(const struct Point) $1), struct Point, (const byte) SIZEOF_STRUCT_POINT) to:main::@1 main::@1: scope:[main] from main main::@2 - [8] (byte) idx#12 ← phi( main/(byte) 0 main::@2/(byte) idx#10 ) - [8] (byte) main::i#2 ← phi( main/(byte) 0 main::@2/(byte) main::i#1 ) - [9] (byte~) main::$4 ← (byte) main::i#2 << (byte) 1 - [10] (byte) print::p_x#0 ← *((byte*)(const struct Point*) points + (byte~) main::$4) - [11] (byte) print::p_y#0 ← *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$4) - [12] call print + [6] (byte) idx#12 ← phi( main/(byte) 0 main::@2/(byte) idx#10 ) + [6] (byte) main::i#2 ← phi( main/(byte) 0 main::@2/(byte) main::i#1 ) + [7] (byte~) main::$4 ← (byte) main::i#2 << (byte) 1 + [8] (byte) print::p_x#0 ← *((byte*)(const struct Point*) points + (byte~) main::$4) + [9] (byte) print::p_y#0 ← *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$4) + [10] call print to:main::@2 main::@2: scope:[main] from main::@1 - [13] (byte) main::i#1 ← ++ (byte) main::i#2 - [14] if((byte) main::i#1!=(byte) 2) goto main::@1 + [11] (byte) main::i#1 ← ++ (byte) main::i#2 + [12] if((byte) main::i#1!=(byte) 2) goto main::@1 to:main::@return main::@return: scope:[main] from main::@2 - [15] return + [13] return to:@return (void()) print((byte) print::p_x , (byte) print::p_y) print: scope:[print] from main::@1 - [16] *((const byte*) SCREEN + (byte) idx#12) ← (byte) print::p_x#0 - [17] (byte) idx#3 ← ++ (byte) idx#12 - [18] *((const byte*) SCREEN + (byte) idx#3) ← (byte) print::p_y#0 - [19] (byte) idx#10 ← ++ (byte) idx#3 + [14] *((const byte*) SCREEN + (byte) idx#12) ← (byte) print::p_x#0 + [15] (byte) idx#3 ← ++ (byte) idx#12 + [16] *((const byte*) SCREEN + (byte) idx#3) ← (byte) print::p_y#0 + [17] (byte) idx#10 ← ++ (byte) idx#3 to:print::@return print::@return: scope:[print] from print - [20] return + [18] return to:@return diff --git a/src/test/ref/struct-ptr-18.log b/src/test/ref/struct-ptr-18.log index 1a885f31c..62a27ca9e 100644 --- a/src/test/ref/struct-ptr-18.log +++ b/src/test/ref/struct-ptr-18.log @@ -7,11 +7,9 @@ Created struct value member variable (byte) print::p_x Created struct value member variable (byte) print::p_y Converted struct value to member variables (struct Point) print::p Converted procedure struct value parameter to member unwinding (void()) print((byte) print::p_x , (byte) print::p_y) -Adding struct value member variable copy *((byte*~) main::$5 + (number~) main::$2) ← (byte) 1 -Adding struct value member variable copy *((byte*~) main::$6 + (number~) main::$2) ← (byte) 2 -Adding struct value member variable copy *((byte*~) main::$7 + (number~) main::$3) ← (byte) 3 -Adding struct value member variable copy *((byte*~) main::$8 + (number~) main::$3) ← (byte) 4 -Converted procedure struct value parameter to member unwinding in call (void~) main::$0 ← call print *((byte*~) main::$9 + (byte~) main::$4) *((byte*~) main::$10 + (byte~) main::$4) +Adding struct value member variable copy *((const struct Point*) points + (number~) main::$2) ← memcpy(*(&(const struct Point) $0), struct Point, (const byte) SIZEOF_STRUCT_POINT) +Adding struct value member variable copy *((const struct Point*) points + (number~) main::$3) ← memcpy(*(&(const struct Point) $1), struct Point, (const byte) SIZEOF_STRUCT_POINT) +Converted procedure struct value parameter to member unwinding in call (void~) main::$0 ← call print *((byte*~) main::$5 + (byte~) main::$4) *((byte*~) main::$6 + (byte~) main::$4) Replacing struct member reference (struct Point) print::p.x with member unwinding reference (byte) print::p_x Replacing struct member reference (struct Point) print::p.y with member unwinding reference (byte) print::p_y Culled Empty Block (label) main::@2 @@ -26,31 +24,25 @@ CONTROL FLOW GRAPH SSA main: scope:[main] from @2 (byte) idx#14 ← phi( @2/(byte) idx#13 ) (number~) main::$2 ← (number) 0 * (const byte) SIZEOF_STRUCT_POINT - (byte*~) main::$5 ← (byte*)(const struct Point*) points + (const byte) OFFSET_STRUCT_POINT_X - *((byte*~) main::$5 + (number~) main::$2) ← (byte) 1 - (byte*~) main::$6 ← (byte*)(const struct Point*) points + (const byte) OFFSET_STRUCT_POINT_Y - *((byte*~) main::$6 + (number~) main::$2) ← (byte) 2 + *((const struct Point*) points + (number~) main::$2) ← memcpy(*(&(const struct Point) $0), struct Point, (const byte) SIZEOF_STRUCT_POINT) (number~) main::$3 ← (number) 1 * (const byte) SIZEOF_STRUCT_POINT - (byte*~) main::$7 ← (byte*)(const struct Point*) points + (const byte) OFFSET_STRUCT_POINT_X - *((byte*~) main::$7 + (number~) main::$3) ← (byte) 3 - (byte*~) main::$8 ← (byte*)(const struct Point*) points + (const byte) OFFSET_STRUCT_POINT_Y - *((byte*~) main::$8 + (number~) main::$3) ← (byte) 4 + *((const struct Point*) points + (number~) main::$3) ← memcpy(*(&(const struct Point) $1), struct Point, (const byte) SIZEOF_STRUCT_POINT) (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@3 (byte) idx#12 ← phi( main/(byte) idx#14 main::@3/(byte) idx#1 ) (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@3/(byte) main::i#1 ) (byte~) main::$4 ← (byte) main::i#2 * (const byte) SIZEOF_STRUCT_POINT - (byte) print::p_x#0 ← *((byte*~) main::$9 + (byte~) main::$4) - (byte) print::p_y#0 ← *((byte*~) main::$10 + (byte~) main::$4) + (byte) print::p_x#0 ← *((byte*~) main::$5 + (byte~) main::$4) + (byte) print::p_y#0 ← *((byte*~) main::$6 + (byte~) main::$4) call print to:main::@3 main::@3: scope:[main] from main::@1 (byte) main::i#3 ← phi( main::@1/(byte) main::i#2 ) (byte) idx#7 ← phi( main::@1/(byte) idx#5 ) (byte) idx#1 ← (byte) idx#7 - (byte*~) main::$9 ← (byte*)(const struct Point*) points + (const byte) OFFSET_STRUCT_POINT_X - (byte*~) main::$10 ← (byte*)(const struct Point*) points + (const byte) OFFSET_STRUCT_POINT_Y + (byte*~) main::$5 ← (byte*)(const struct Point*) points + (const byte) OFFSET_STRUCT_POINT_X + (byte*~) main::$6 ← (byte*)(const struct Point*) points + (const byte) OFFSET_STRUCT_POINT_Y (byte) main::i#1 ← (byte) main::i#3 + rangenext(0,1) (bool~) main::$1 ← (byte) main::i#1 != rangelast(0,1) if((bool~) main::$1) goto main::@1 @@ -87,6 +79,8 @@ print::@return: scope:[print] from print @end: scope:[] from @3 SYMBOL TABLE SSA +(const struct Point) $0 = { x: (byte) 1, y: (byte) 2 } +(const struct Point) $1 = { x: (byte) 3, y: (byte) 4 } (label) @2 (label) @3 (label) @begin @@ -115,15 +109,11 @@ SYMBOL TABLE SSA (byte) idx#9 (void()) main() (bool~) main::$1 -(byte*~) main::$10 (number~) main::$2 (number~) main::$3 (byte~) main::$4 (byte*~) main::$5 (byte*~) main::$6 -(byte*~) main::$7 -(byte*~) main::$8 -(byte*~) main::$9 (label) main::@1 (label) main::@3 (label) main::@return @@ -170,37 +160,26 @@ Identical Phi Values (byte) idx#9 (byte) idx#12 Identical Phi Values (byte) print::p_y#1 (byte) print::p_y#0 Identical Phi Values (byte) idx#11 (byte) idx#1 Successful SSA optimization Pass2IdenticalPhiElimination -Simple Condition (bool~) main::$1 [24] if((byte) main::i#1!=rangelast(0,1)) goto main::@1 +Simple Condition (bool~) main::$1 [18] if((byte) main::i#1!=rangelast(0,1)) goto main::@1 Successful SSA optimization Pass2ConditionalJumpSimplification Constant right-side identified [2] (byte~) main::$2 ← (byte) 0 * (const byte) SIZEOF_STRUCT_POINT -Constant right-side identified [3] (byte*~) main::$5 ← (byte*)(const struct Point*) points + (const byte) OFFSET_STRUCT_POINT_X -Constant right-side identified [5] (byte*~) main::$6 ← (byte*)(const struct Point*) points + (const byte) OFFSET_STRUCT_POINT_Y -Constant right-side identified [7] (byte~) main::$3 ← (byte) 1 * (const byte) SIZEOF_STRUCT_POINT -Constant right-side identified [8] (byte*~) main::$7 ← (byte*)(const struct Point*) points + (const byte) OFFSET_STRUCT_POINT_X -Constant right-side identified [10] (byte*~) main::$8 ← (byte*)(const struct Point*) points + (const byte) OFFSET_STRUCT_POINT_Y -Constant right-side identified [20] (byte*~) main::$9 ← (byte*)(const struct Point*) points + (const byte) OFFSET_STRUCT_POINT_X -Constant right-side identified [21] (byte*~) main::$10 ← (byte*)(const struct Point*) points + (const byte) OFFSET_STRUCT_POINT_Y +Constant right-side identified [4] (byte~) main::$3 ← (byte) 1 * (const byte) SIZEOF_STRUCT_POINT +Constant right-side identified [14] (byte*~) main::$5 ← (byte*)(const struct Point*) points + (const byte) OFFSET_STRUCT_POINT_X +Constant right-side identified [15] (byte*~) main::$6 ← (byte*)(const struct Point*) points + (const byte) OFFSET_STRUCT_POINT_Y Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) idx#0 = 0 Constant (const byte) main::$2 = 0*SIZEOF_STRUCT_POINT +Constant (const byte) main::$3 = 1*SIZEOF_STRUCT_POINT +Constant (const byte) main::i#0 = 0 Constant (const byte*) main::$5 = (byte*)points+OFFSET_STRUCT_POINT_X Constant (const byte*) main::$6 = (byte*)points+OFFSET_STRUCT_POINT_Y -Constant (const byte) main::$3 = 1*SIZEOF_STRUCT_POINT -Constant (const byte*) main::$7 = (byte*)points+OFFSET_STRUCT_POINT_X -Constant (const byte*) main::$8 = (byte*)points+OFFSET_STRUCT_POINT_Y -Constant (const byte) main::i#0 = 0 -Constant (const byte*) main::$9 = (byte*)points+OFFSET_STRUCT_POINT_X -Constant (const byte*) main::$10 = (byte*)points+OFFSET_STRUCT_POINT_Y Successful SSA optimization Pass2ConstantIdentification -Resolved ranged next value [22] main::i#1 ← ++ main::i#2 to ++ -Resolved ranged comparison value [24] if(main::i#1!=rangelast(0,1)) goto main::@1 to (number) 2 +Resolved ranged next value [16] main::i#1 ← ++ main::i#2 to ++ +Resolved ranged comparison value [18] if(main::i#1!=rangelast(0,1)) goto main::@1 to (number) 2 Simplifying constant evaluating to zero (byte) 0*(const byte) SIZEOF_STRUCT_POINT in Successful SSA optimization PassNSimplifyConstantZero Simplifying expression containing zero (byte*)points in -Simplifying expression containing zero (byte*)points in -Simplifying expression containing zero (byte*)points in -Simplifying expression containing zero main::$5 in [4] *((const byte*) main::$5 + (const byte) main::$2) ← (byte) 1 -Simplifying expression containing zero main::$6 in [6] *((const byte*) main::$6 + (const byte) main::$2) ← (byte) 2 +Simplifying expression containing zero points in [3] *((const struct Point*) points + (const byte) main::$2) ← memcpy(*(&(const struct Point) $0), struct Point, (const byte) SIZEOF_STRUCT_POINT) Successful SSA optimization PassNSimplifyExpressionWithZero Eliminating unused constant (const byte) main::$2 Eliminating unused constant (const byte) OFFSET_STRUCT_POINT_X @@ -211,7 +190,7 @@ Simplifying constant integer cast 2 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 2 Successful SSA optimization PassNFinalizeNumberTypeConversions -Rewriting multiplication to use shift [5] (byte~) main::$4 ← (byte) main::i#2 * (const byte) SIZEOF_STRUCT_POINT +Rewriting multiplication to use shift [3] (byte~) main::$4 ← (byte) main::i#2 * (const byte) SIZEOF_STRUCT_POINT Successful SSA optimization Pass2MultiplyToShiftRewriting Inlining constant with var siblings (const byte) main::i#0 Inlining constant with var siblings (const byte) idx#0 @@ -219,14 +198,9 @@ Constant inlined main::$5 = (byte*)(const struct Point*) points Constant inlined main::i#0 = (byte) 0 Constant inlined main::$6 = (byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y Constant inlined main::$3 = (byte) 1*(const byte) SIZEOF_STRUCT_POINT -Constant inlined main::$9 = (byte*)(const struct Point*) points Constant inlined idx#0 = (byte) 0 -Constant inlined main::$7 = (byte*)(const struct Point*) points -Constant inlined main::$10 = (byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y -Constant inlined main::$8 = (byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y Successful SSA optimization Pass2ConstantInlining -Consolidated array index constant in *((byte*)points+1*SIZEOF_STRUCT_POINT) -Consolidated array index constant in *((byte*)points+OFFSET_STRUCT_POINT_Y+1*SIZEOF_STRUCT_POINT) +Consolidated array index constant in *(points+1*SIZEOF_STRUCT_POINT) Successful SSA optimization Pass2ConstantAdditionElimination Added new block during phi lifting main::@4(between main::@3 and main::@1) Adding NOP phi() at start of @begin @@ -235,11 +209,11 @@ Adding NOP phi() at start of @3 Adding NOP phi() at start of @end CALL GRAPH Calls in [] to main:2 -Calls in [main] to print:13 +Calls in [main] to print:11 Created 2 initial phi equivalence classes -Coalesced [17] main::i#4 ← main::i#1 -Coalesced [18] idx#15 ← idx#10 +Coalesced [15] main::i#4 ← main::i#1 +Coalesced [16] idx#15 ← idx#10 Coalesced down to 2 phi equivalence classes Culled Empty Block (label) @3 Culled Empty Block (label) main::@4 @@ -262,36 +236,34 @@ FINAL CONTROL FLOW GRAPH (void()) main() main: scope:[main] from @1 - [4] *((byte*)(const struct Point*) points) ← (byte) 1 - [5] *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte) 2 - [6] *((byte*)(const struct Point*) points+(byte) 1*(const byte) SIZEOF_STRUCT_POINT) ← (byte) 3 - [7] *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y+(byte) 1*(const byte) SIZEOF_STRUCT_POINT) ← (byte) 4 + [4] *((const struct Point*) points) ← memcpy(*(&(const struct Point) $0), struct Point, (const byte) SIZEOF_STRUCT_POINT) + [5] *((const struct Point*) points+(byte) 1*(const byte) SIZEOF_STRUCT_POINT) ← memcpy(*(&(const struct Point) $1), struct Point, (const byte) SIZEOF_STRUCT_POINT) to:main::@1 main::@1: scope:[main] from main main::@2 - [8] (byte) idx#12 ← phi( main/(byte) 0 main::@2/(byte) idx#10 ) - [8] (byte) main::i#2 ← phi( main/(byte) 0 main::@2/(byte) main::i#1 ) - [9] (byte~) main::$4 ← (byte) main::i#2 << (byte) 1 - [10] (byte) print::p_x#0 ← *((byte*)(const struct Point*) points + (byte~) main::$4) - [11] (byte) print::p_y#0 ← *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$4) - [12] call print + [6] (byte) idx#12 ← phi( main/(byte) 0 main::@2/(byte) idx#10 ) + [6] (byte) main::i#2 ← phi( main/(byte) 0 main::@2/(byte) main::i#1 ) + [7] (byte~) main::$4 ← (byte) main::i#2 << (byte) 1 + [8] (byte) print::p_x#0 ← *((byte*)(const struct Point*) points + (byte~) main::$4) + [9] (byte) print::p_y#0 ← *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$4) + [10] call print to:main::@2 main::@2: scope:[main] from main::@1 - [13] (byte) main::i#1 ← ++ (byte) main::i#2 - [14] if((byte) main::i#1!=(byte) 2) goto main::@1 + [11] (byte) main::i#1 ← ++ (byte) main::i#2 + [12] if((byte) main::i#1!=(byte) 2) goto main::@1 to:main::@return main::@return: scope:[main] from main::@2 - [15] return + [13] return to:@return (void()) print((byte) print::p_x , (byte) print::p_y) print: scope:[print] from main::@1 - [16] *((const byte*) SCREEN + (byte) idx#12) ← (byte) print::p_x#0 - [17] (byte) idx#3 ← ++ (byte) idx#12 - [18] *((const byte*) SCREEN + (byte) idx#3) ← (byte) print::p_y#0 - [19] (byte) idx#10 ← ++ (byte) idx#3 + [14] *((const byte*) SCREEN + (byte) idx#12) ← (byte) print::p_x#0 + [15] (byte) idx#3 ← ++ (byte) idx#12 + [16] *((const byte*) SCREEN + (byte) idx#3) ← (byte) print::p_y#0 + [17] (byte) idx#10 ← ++ (byte) idx#3 to:print::@return print::@return: scope:[print] from print - [20] return + [18] return to:@return @@ -367,61 +339,63 @@ __bend: main: { .label __4 = 4 .label i = 2 - // [4] *((byte*)(const struct Point*) points) ← (byte) 1 -- _deref_pbuc1=vbuc2 - lda #1 - sta points - // [5] *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte) 2 -- _deref_pbuc1=vbuc2 - lda #2 - sta points+OFFSET_STRUCT_POINT_Y - // [6] *((byte*)(const struct Point*) points+(byte) 1*(const byte) SIZEOF_STRUCT_POINT) ← (byte) 3 -- _deref_pbuc1=vbuc2 - lda #3 - sta points+1*SIZEOF_STRUCT_POINT - // [7] *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y+(byte) 1*(const byte) SIZEOF_STRUCT_POINT) ← (byte) 4 -- _deref_pbuc1=vbuc2 - lda #4 - sta points+OFFSET_STRUCT_POINT_Y+1*SIZEOF_STRUCT_POINT - // [8] phi from main to main::@1 [phi:main->main::@1] + // [4] *((const struct Point*) points) ← memcpy(*(&(const struct Point) $0), struct Point, (const byte) SIZEOF_STRUCT_POINT) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3 + ldy #SIZEOF_STRUCT_POINT + !: + lda __0-1,y + sta points-1,y + dey + bne !- + // [5] *((const struct Point*) points+(byte) 1*(const byte) SIZEOF_STRUCT_POINT) ← memcpy(*(&(const struct Point) $1), struct Point, (const byte) SIZEOF_STRUCT_POINT) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3 + ldy #SIZEOF_STRUCT_POINT + !: + lda __1-1,y + sta points+1*SIZEOF_STRUCT_POINT-1,y + dey + bne !- + // [6] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: - // [8] phi (byte) idx#12 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + // [6] phi (byte) idx#12 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 lda #0 sta.z idx_1 - // [8] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#1] -- vbuz1=vbuc1 + // [6] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#1] -- vbuz1=vbuc1 lda #0 sta.z i jmp __b1 - // [8] phi from main::@2 to main::@1 [phi:main::@2->main::@1] + // [6] phi from main::@2 to main::@1 [phi:main::@2->main::@1] __b1_from___b2: - // [8] phi (byte) idx#12 = (byte) idx#10 [phi:main::@2->main::@1#0] -- register_copy - // [8] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#1] -- register_copy + // [6] phi (byte) idx#12 = (byte) idx#10 [phi:main::@2->main::@1#0] -- register_copy + // [6] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#1] -- register_copy jmp __b1 // main::@1 __b1: - // [9] (byte~) main::$4 ← (byte) main::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [7] (byte~) main::$4 ← (byte) main::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z i asl sta.z __4 - // [10] (byte) print::p_x#0 ← *((byte*)(const struct Point*) points + (byte~) main::$4) -- vbuz1=pbuc1_derefidx_vbuz2 + // [8] (byte) print::p_x#0 ← *((byte*)(const struct Point*) points + (byte~) main::$4) -- vbuz1=pbuc1_derefidx_vbuz2 ldy.z __4 lda points,y sta.z print.p_x - // [11] (byte) print::p_y#0 ← *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$4) -- vbuz1=pbuc1_derefidx_vbuz2 + // [9] (byte) print::p_y#0 ← *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$4) -- vbuz1=pbuc1_derefidx_vbuz2 ldy.z __4 lda points+OFFSET_STRUCT_POINT_Y,y sta.z print.p_y - // [12] call print + // [10] call print jsr print jmp __b2 // main::@2 __b2: - // [13] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 + // [11] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [14] if((byte) main::i#1!=(byte) 2) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 + // [12] if((byte) main::i#1!=(byte) 2) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 lda #2 cmp.z i bne __b1_from___b2 jmp __breturn // main::@return __breturn: - // [15] return + // [13] return rts } // print @@ -429,44 +403,42 @@ main: { print: { .label p_x = 5 .label p_y = 6 - // [16] *((const byte*) SCREEN + (byte) idx#12) ← (byte) print::p_x#0 -- pbuc1_derefidx_vbuz1=vbuz2 + // [14] *((const byte*) SCREEN + (byte) idx#12) ← (byte) print::p_x#0 -- pbuc1_derefidx_vbuz1=vbuz2 lda.z p_x ldy.z idx_1 sta SCREEN,y - // [17] (byte) idx#3 ← ++ (byte) idx#12 -- vbuz1=_inc_vbuz2 + // [15] (byte) idx#3 ← ++ (byte) idx#12 -- vbuz1=_inc_vbuz2 ldy.z idx_1 iny sty.z idx - // [18] *((const byte*) SCREEN + (byte) idx#3) ← (byte) print::p_y#0 -- pbuc1_derefidx_vbuz1=vbuz2 + // [16] *((const byte*) SCREEN + (byte) idx#3) ← (byte) print::p_y#0 -- pbuc1_derefidx_vbuz1=vbuz2 lda.z p_y ldy.z idx sta SCREEN,y - // [19] (byte) idx#10 ← ++ (byte) idx#3 -- vbuz1=_inc_vbuz2 + // [17] (byte) idx#10 ← ++ (byte) idx#3 -- vbuz1=_inc_vbuz2 ldy.z idx iny sty.z idx_1 jmp __breturn // print::@return __breturn: - // [20] return + // [18] return rts } // File Data points: .fill 2*2, 0 + __0: .byte 1, 2 + __1: .byte 3, 4 REGISTER UPLIFT POTENTIAL REGISTERS -Statement [4] *((byte*)(const struct Point*) points) ← (byte) 1 [ ] ( main:2 [ ] ) always clobbers reg byte a -Statement [5] *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte) 2 [ ] ( main:2 [ ] ) always clobbers reg byte a -Statement [6] *((byte*)(const struct Point*) points+(byte) 1*(const byte) SIZEOF_STRUCT_POINT) ← (byte) 3 [ ] ( main:2 [ ] ) always clobbers reg byte a -Statement [7] *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y+(byte) 1*(const byte) SIZEOF_STRUCT_POINT) ← (byte) 4 [ ] ( main:2 [ ] ) always clobbers reg byte a -Statement [9] (byte~) main::$4 ← (byte) main::i#2 << (byte) 1 [ main::i#2 idx#12 main::$4 ] ( main:2 [ main::i#2 idx#12 main::$4 ] ) always clobbers reg byte a +Statement [4] *((const struct Point*) points) ← memcpy(*(&(const struct Point) $0), struct Point, (const byte) SIZEOF_STRUCT_POINT) [ ] ( main:2 [ ] ) always clobbers reg byte a reg byte y +Statement [5] *((const struct Point*) points+(byte) 1*(const byte) SIZEOF_STRUCT_POINT) ← memcpy(*(&(const struct Point) $1), struct Point, (const byte) SIZEOF_STRUCT_POINT) [ ] ( main:2 [ ] ) always clobbers reg byte a reg byte y +Statement [7] (byte~) main::$4 ← (byte) main::i#2 << (byte) 1 [ main::i#2 idx#12 main::$4 ] ( main:2 [ main::i#2 idx#12 main::$4 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::i#2 main::i#1 ] Removing always clobbered register reg byte a as potential for zp[1]:3 [ idx#12 idx#10 ] -Statement [4] *((byte*)(const struct Point*) points) ← (byte) 1 [ ] ( main:2 [ ] ) always clobbers reg byte a -Statement [5] *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte) 2 [ ] ( main:2 [ ] ) always clobbers reg byte a -Statement [6] *((byte*)(const struct Point*) points+(byte) 1*(const byte) SIZEOF_STRUCT_POINT) ← (byte) 3 [ ] ( main:2 [ ] ) always clobbers reg byte a -Statement [7] *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y+(byte) 1*(const byte) SIZEOF_STRUCT_POINT) ← (byte) 4 [ ] ( main:2 [ ] ) always clobbers reg byte a -Statement [9] (byte~) main::$4 ← (byte) main::i#2 << (byte) 1 [ main::i#2 idx#12 main::$4 ] ( main:2 [ main::i#2 idx#12 main::$4 ] ) always clobbers reg byte a +Statement [4] *((const struct Point*) points) ← memcpy(*(&(const struct Point) $0), struct Point, (const byte) SIZEOF_STRUCT_POINT) [ ] ( main:2 [ ] ) always clobbers reg byte a reg byte y +Statement [5] *((const struct Point*) points+(byte) 1*(const byte) SIZEOF_STRUCT_POINT) ← memcpy(*(&(const struct Point) $1), struct Point, (const byte) SIZEOF_STRUCT_POINT) [ ] ( main:2 [ ] ) always clobbers reg byte a reg byte y +Statement [7] (byte~) main::$4 ← (byte) main::i#2 << (byte) 1 [ main::i#2 idx#12 main::$4 ] ( main:2 [ main::i#2 idx#12 main::$4 ] ) always clobbers reg byte a Potential registers zp[1]:2 [ main::i#2 main::i#1 ] : zp[1]:2 , reg byte x , reg byte y , Potential registers zp[1]:3 [ idx#12 idx#10 ] : zp[1]:3 , reg byte x , reg byte y , Potential registers zp[1]:4 [ main::$4 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , @@ -480,16 +452,16 @@ Uplift Scope [print] 6.5: zp[1]:5 [ print::p_x#0 ] 4.33: zp[1]:6 [ print::p_y#0 Uplift Scope [] 5.6: zp[1]:3 [ idx#12 idx#10 ] 3: zp[1]:7 [ idx#3 ] Uplift Scope [Point] -Uplifting [main] best 614 combination reg byte x [ main::i#2 main::i#1 ] reg byte y [ main::$4 ] -Uplifting [print] best 614 combination zp[1]:5 [ print::p_x#0 ] zp[1]:6 [ print::p_y#0 ] -Uplifting [] best 605 combination zp[1]:3 [ idx#12 idx#10 ] reg byte y [ idx#3 ] -Uplifting [Point] best 605 combination +Uplifting [main] best 622 combination reg byte x [ main::i#2 main::i#1 ] reg byte y [ main::$4 ] +Uplifting [print] best 622 combination zp[1]:5 [ print::p_x#0 ] zp[1]:6 [ print::p_y#0 ] +Uplifting [] best 613 combination zp[1]:3 [ idx#12 idx#10 ] reg byte y [ idx#3 ] +Uplifting [Point] best 613 combination Attempting to uplift remaining variables inzp[1]:5 [ print::p_x#0 ] -Uplifting [print] best 605 combination zp[1]:5 [ print::p_x#0 ] +Uplifting [print] best 613 combination zp[1]:5 [ print::p_x#0 ] Attempting to uplift remaining variables inzp[1]:3 [ idx#12 idx#10 ] -Uplifting [] best 605 combination zp[1]:3 [ idx#12 idx#10 ] +Uplifting [] best 613 combination zp[1]:3 [ idx#12 idx#10 ] Attempting to uplift remaining variables inzp[1]:6 [ print::p_y#0 ] -Uplifting [print] best 605 combination zp[1]:6 [ print::p_y#0 ] +Uplifting [print] best 613 combination zp[1]:6 [ print::p_y#0 ] Allocated (was zp[1]:3) zp[1]:2 [ idx#12 idx#10 ] Allocated (was zp[1]:5) zp[1]:3 [ print::p_x#0 ] Allocated (was zp[1]:6) zp[1]:4 [ print::p_y#0 ] @@ -522,57 +494,59 @@ __bend_from___b1: __bend: // main main: { - // [4] *((byte*)(const struct Point*) points) ← (byte) 1 -- _deref_pbuc1=vbuc2 - lda #1 - sta points - // [5] *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte) 2 -- _deref_pbuc1=vbuc2 - lda #2 - sta points+OFFSET_STRUCT_POINT_Y - // [6] *((byte*)(const struct Point*) points+(byte) 1*(const byte) SIZEOF_STRUCT_POINT) ← (byte) 3 -- _deref_pbuc1=vbuc2 - lda #3 - sta points+1*SIZEOF_STRUCT_POINT - // [7] *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y+(byte) 1*(const byte) SIZEOF_STRUCT_POINT) ← (byte) 4 -- _deref_pbuc1=vbuc2 - lda #4 - sta points+OFFSET_STRUCT_POINT_Y+1*SIZEOF_STRUCT_POINT - // [8] phi from main to main::@1 [phi:main->main::@1] + // [4] *((const struct Point*) points) ← memcpy(*(&(const struct Point) $0), struct Point, (const byte) SIZEOF_STRUCT_POINT) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3 + ldy #SIZEOF_STRUCT_POINT + !: + lda __0-1,y + sta points-1,y + dey + bne !- + // [5] *((const struct Point*) points+(byte) 1*(const byte) SIZEOF_STRUCT_POINT) ← memcpy(*(&(const struct Point) $1), struct Point, (const byte) SIZEOF_STRUCT_POINT) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3 + ldy #SIZEOF_STRUCT_POINT + !: + lda __1-1,y + sta points+1*SIZEOF_STRUCT_POINT-1,y + dey + bne !- + // [6] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: - // [8] phi (byte) idx#12 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + // [6] phi (byte) idx#12 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 lda #0 sta.z idx - // [8] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#1] -- vbuxx=vbuc1 + // [6] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#1] -- vbuxx=vbuc1 ldx #0 jmp __b1 - // [8] phi from main::@2 to main::@1 [phi:main::@2->main::@1] + // [6] phi from main::@2 to main::@1 [phi:main::@2->main::@1] __b1_from___b2: - // [8] phi (byte) idx#12 = (byte) idx#10 [phi:main::@2->main::@1#0] -- register_copy - // [8] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#1] -- register_copy + // [6] phi (byte) idx#12 = (byte) idx#10 [phi:main::@2->main::@1#0] -- register_copy + // [6] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#1] -- register_copy jmp __b1 // main::@1 __b1: - // [9] (byte~) main::$4 ← (byte) main::i#2 << (byte) 1 -- vbuyy=vbuxx_rol_1 + // [7] (byte~) main::$4 ← (byte) main::i#2 << (byte) 1 -- vbuyy=vbuxx_rol_1 txa asl tay - // [10] (byte) print::p_x#0 ← *((byte*)(const struct Point*) points + (byte~) main::$4) -- vbuz1=pbuc1_derefidx_vbuyy + // [8] (byte) print::p_x#0 ← *((byte*)(const struct Point*) points + (byte~) main::$4) -- vbuz1=pbuc1_derefidx_vbuyy lda points,y sta.z print.p_x - // [11] (byte) print::p_y#0 ← *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$4) -- vbuz1=pbuc1_derefidx_vbuyy + // [9] (byte) print::p_y#0 ← *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$4) -- vbuz1=pbuc1_derefidx_vbuyy lda points+OFFSET_STRUCT_POINT_Y,y sta.z print.p_y - // [12] call print + // [10] call print jsr print jmp __b2 // main::@2 __b2: - // [13] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx + // [11] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx inx - // [14] if((byte) main::i#1!=(byte) 2) goto main::@1 -- vbuxx_neq_vbuc1_then_la1 + // [12] if((byte) main::i#1!=(byte) 2) goto main::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #2 bne __b1_from___b2 jmp __breturn // main::@return __breturn: - // [15] return + // [13] return rts } // print @@ -580,27 +554,29 @@ main: { print: { .label p_x = 3 .label p_y = 4 - // [16] *((const byte*) SCREEN + (byte) idx#12) ← (byte) print::p_x#0 -- pbuc1_derefidx_vbuz1=vbuz2 + // [14] *((const byte*) SCREEN + (byte) idx#12) ← (byte) print::p_x#0 -- pbuc1_derefidx_vbuz1=vbuz2 lda.z p_x ldy.z idx sta SCREEN,y - // [17] (byte) idx#3 ← ++ (byte) idx#12 -- vbuyy=_inc_vbuz1 + // [15] (byte) idx#3 ← ++ (byte) idx#12 -- vbuyy=_inc_vbuz1 ldy.z idx iny - // [18] *((const byte*) SCREEN + (byte) idx#3) ← (byte) print::p_y#0 -- pbuc1_derefidx_vbuyy=vbuz1 + // [16] *((const byte*) SCREEN + (byte) idx#3) ← (byte) print::p_y#0 -- pbuc1_derefidx_vbuyy=vbuz1 lda.z p_y sta SCREEN,y - // [19] (byte) idx#10 ← ++ (byte) idx#3 -- vbuz1=_inc_vbuyy + // [17] (byte) idx#10 ← ++ (byte) idx#3 -- vbuz1=_inc_vbuyy iny sty.z idx jmp __breturn // print::@return __breturn: - // [20] return + // [18] return rts } // File Data points: .fill 2*2, 0 + __0: .byte 1, 2 + __1: .byte 3, 4 ASSEMBLER OPTIMIZATIONS Removing instruction jmp __b1 @@ -635,6 +611,8 @@ Removing instruction __b1: Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE +(const struct Point) $0 = { x: (byte) 1, y: (byte) 2 } +(const struct Point) $1 = { x: (byte) 3, y: (byte) 4 } (label) @1 (label) @begin (label) @end @@ -673,7 +651,7 @@ reg byte y [ idx#3 ] FINAL ASSEMBLER -Score: 467 +Score: 475 // File Comments // Demonstrates problem with passing struct array element as parameter to call @@ -695,53 +673,55 @@ Score: 467 // main main: { // points[0] = { 1, 2 } - // [4] *((byte*)(const struct Point*) points) ← (byte) 1 -- _deref_pbuc1=vbuc2 - lda #1 - sta points - // [5] *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte) 2 -- _deref_pbuc1=vbuc2 - lda #2 - sta points+OFFSET_STRUCT_POINT_Y + // [4] *((const struct Point*) points) ← memcpy(*(&(const struct Point) $0), struct Point, (const byte) SIZEOF_STRUCT_POINT) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3 + ldy #SIZEOF_STRUCT_POINT + !: + lda __0-1,y + sta points-1,y + dey + bne !- // points[1] = { 3, 4 } - // [6] *((byte*)(const struct Point*) points+(byte) 1*(const byte) SIZEOF_STRUCT_POINT) ← (byte) 3 -- _deref_pbuc1=vbuc2 - lda #3 - sta points+1*SIZEOF_STRUCT_POINT - // [7] *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y+(byte) 1*(const byte) SIZEOF_STRUCT_POINT) ← (byte) 4 -- _deref_pbuc1=vbuc2 - lda #4 - sta points+OFFSET_STRUCT_POINT_Y+1*SIZEOF_STRUCT_POINT - // [8] phi from main to main::@1 [phi:main->main::@1] - // [8] phi (byte) idx#12 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + // [5] *((const struct Point*) points+(byte) 1*(const byte) SIZEOF_STRUCT_POINT) ← memcpy(*(&(const struct Point) $1), struct Point, (const byte) SIZEOF_STRUCT_POINT) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3 + ldy #SIZEOF_STRUCT_POINT + !: + lda __1-1,y + sta points+1*SIZEOF_STRUCT_POINT-1,y + dey + bne !- + // [6] phi from main to main::@1 [phi:main->main::@1] + // [6] phi (byte) idx#12 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 lda #0 sta.z idx - // [8] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#1] -- vbuxx=vbuc1 + // [6] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#1] -- vbuxx=vbuc1 tax - // [8] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - // [8] phi (byte) idx#12 = (byte) idx#10 [phi:main::@2->main::@1#0] -- register_copy - // [8] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#1] -- register_copy + // [6] phi from main::@2 to main::@1 [phi:main::@2->main::@1] + // [6] phi (byte) idx#12 = (byte) idx#10 [phi:main::@2->main::@1#0] -- register_copy + // [6] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#1] -- register_copy // main::@1 __b1: // print(points[i]) - // [9] (byte~) main::$4 ← (byte) main::i#2 << (byte) 1 -- vbuyy=vbuxx_rol_1 + // [7] (byte~) main::$4 ← (byte) main::i#2 << (byte) 1 -- vbuyy=vbuxx_rol_1 txa asl tay - // [10] (byte) print::p_x#0 ← *((byte*)(const struct Point*) points + (byte~) main::$4) -- vbuz1=pbuc1_derefidx_vbuyy + // [8] (byte) print::p_x#0 ← *((byte*)(const struct Point*) points + (byte~) main::$4) -- vbuz1=pbuc1_derefidx_vbuyy lda points,y sta.z print.p_x - // [11] (byte) print::p_y#0 ← *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$4) -- vbuz1=pbuc1_derefidx_vbuyy + // [9] (byte) print::p_y#0 ← *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$4) -- vbuz1=pbuc1_derefidx_vbuyy lda points+OFFSET_STRUCT_POINT_Y,y sta.z print.p_y - // [12] call print + // [10] call print jsr print // main::@2 // for ( char i: 0..1) - // [13] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx + // [11] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx inx - // [14] if((byte) main::i#1!=(byte) 2) goto main::@1 -- vbuxx_neq_vbuc1_then_la1 + // [12] if((byte) main::i#1!=(byte) 2) goto main::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #2 bne __b1 // main::@return // } - // [15] return + // [13] return rts } // print @@ -750,26 +730,28 @@ print: { .label p_x = 3 .label p_y = 4 // SCREEN[idx++] = p.x - // [16] *((const byte*) SCREEN + (byte) idx#12) ← (byte) print::p_x#0 -- pbuc1_derefidx_vbuz1=vbuz2 + // [14] *((const byte*) SCREEN + (byte) idx#12) ← (byte) print::p_x#0 -- pbuc1_derefidx_vbuz1=vbuz2 lda.z p_x ldy.z idx sta SCREEN,y // SCREEN[idx++] = p.x; - // [17] (byte) idx#3 ← ++ (byte) idx#12 -- vbuyy=_inc_vbuz1 + // [15] (byte) idx#3 ← ++ (byte) idx#12 -- vbuyy=_inc_vbuz1 iny // SCREEN[idx++] = p.y - // [18] *((const byte*) SCREEN + (byte) idx#3) ← (byte) print::p_y#0 -- pbuc1_derefidx_vbuyy=vbuz1 + // [16] *((const byte*) SCREEN + (byte) idx#3) ← (byte) print::p_y#0 -- pbuc1_derefidx_vbuyy=vbuz1 lda.z p_y sta SCREEN,y // SCREEN[idx++] = p.y; - // [19] (byte) idx#10 ← ++ (byte) idx#3 -- vbuz1=_inc_vbuyy + // [17] (byte) idx#10 ← ++ (byte) idx#3 -- vbuz1=_inc_vbuyy iny sty.z idx // print::@return // } - // [20] return + // [18] return rts } // File Data points: .fill 2*2, 0 + __0: .byte 1, 2 + __1: .byte 3, 4 diff --git a/src/test/ref/struct-ptr-18.sym b/src/test/ref/struct-ptr-18.sym index 1c46827c3..230580b3a 100644 --- a/src/test/ref/struct-ptr-18.sym +++ b/src/test/ref/struct-ptr-18.sym @@ -1,3 +1,5 @@ +(const struct Point) $0 = { x: (byte) 1, y: (byte) 2 } +(const struct Point) $1 = { x: (byte) 3, y: (byte) 4 } (label) @1 (label) @begin (label) @end diff --git a/src/test/ref/struct-ptr-9.asm b/src/test/ref/struct-ptr-9.asm index 597f27c4b..1b338e07f 100644 --- a/src/test/ref/struct-ptr-9.asm +++ b/src/test/ref/struct-ptr-9.asm @@ -2,9 +2,11 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" + .const SIZEOF_STRUCT_POINT = 2 .const OFFSET_STRUCT_POINT_Y = 1 main: { .label SCREEN = $400 + .label i1 = 2 ldy #0 __b1: tya @@ -17,17 +19,22 @@ main: { iny cpy #2 bne __b1 - ldx #0 + lda #0 + sta.z i1 __b2: - txa + lda.z i1 asl + ldx #SIZEOF_STRUCT_POINT tay + !: lda points,y sta SCREEN,y - lda points+OFFSET_STRUCT_POINT_Y,y - sta SCREEN+OFFSET_STRUCT_POINT_Y,y - inx - cpx #2 + iny + dex + bne !- + inc.z i1 + lda #2 + cmp.z i1 bne __b2 rts } diff --git a/src/test/ref/struct-ptr-9.cfg b/src/test/ref/struct-ptr-9.cfg index 5473f6a40..b17dc2f78 100644 --- a/src/test/ref/struct-ptr-9.cfg +++ b/src/test/ref/struct-ptr-9.cfg @@ -23,11 +23,10 @@ main::@1: scope:[main] from main main::@1 main::@2: scope:[main] from main::@1 main::@2 [11] (byte) main::i1#2 ← phi( main::@1/(byte) 0 main::@2/(byte) main::i1#1 ) [12] (byte~) main::$3 ← (byte) main::i1#2 << (byte) 1 - [13] *((byte*)(const struct Point*) main::SCREEN + (byte~) main::$3) ← *((byte*)(const struct Point*) points + (byte~) main::$3) - [14] *((byte*)(const struct Point*) main::SCREEN+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$3) ← *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$3) - [15] (byte) main::i1#1 ← ++ (byte) main::i1#2 - [16] if((byte) main::i1#1!=(byte) 2) goto main::@2 + [13] *((const struct Point*) main::SCREEN + (byte~) main::$3) ← memcpy(*((const struct Point*) points + (byte~) main::$3), struct Point, (const byte) SIZEOF_STRUCT_POINT) + [14] (byte) main::i1#1 ← ++ (byte) main::i1#2 + [15] if((byte) main::i1#1!=(byte) 2) goto main::@2 to:main::@return main::@return: scope:[main] from main::@2 - [17] return + [16] return to:@return diff --git a/src/test/ref/struct-ptr-9.log b/src/test/ref/struct-ptr-9.log index 742060f18..b7cd90eb5 100644 --- a/src/test/ref/struct-ptr-9.log +++ b/src/test/ref/struct-ptr-9.log @@ -4,8 +4,7 @@ Fixing pointer array-indexing *((const struct Point*) main::SCREEN + (byte) main Constantified RValue *((const struct Point*) points + (byte~) main::$2) ← (struct Point){ (byte) 2, (byte) main::i } Adding struct value member variable copy *((byte*~) main::$4 + (byte~) main::$2) ← (byte) 2 Adding struct value member variable copy *((byte*~) main::$5 + (byte~) main::$2) ← (byte) main::i -Adding struct value member variable copy *((byte*~) main::$6 + (byte~) main::$3) ← *((byte*~) main::$7 + (byte~) main::$3) -Adding struct value member variable copy *((byte*~) main::$8 + (byte~) main::$3) ← *((byte*~) main::$9 + (byte~) main::$3) +Adding struct value member variable copy *((const struct Point*) main::SCREEN + (byte~) main::$3) ← memcpy(*((const struct Point*) points + (byte~) main::$3), struct Point, (const byte) SIZEOF_STRUCT_POINT) Culled Empty Block (label) main::@4 CONTROL FLOW GRAPH SSA @@ -33,12 +32,7 @@ main::@2: scope:[main] from main::@1 main::@3: scope:[main] from main::@2 main::@3 (byte) main::i1#2 ← phi( main::@2/(byte) main::i1#0 main::@3/(byte) main::i1#1 ) (byte~) main::$3 ← (byte) main::i1#2 * (const byte) SIZEOF_STRUCT_POINT - (byte*~) main::$6 ← (byte*)(const struct Point*) main::SCREEN + (const byte) OFFSET_STRUCT_POINT_X - (byte*~) main::$7 ← (byte*)(const struct Point*) points + (const byte) OFFSET_STRUCT_POINT_X - *((byte*~) main::$6 + (byte~) main::$3) ← *((byte*~) main::$7 + (byte~) main::$3) - (byte*~) main::$8 ← (byte*)(const struct Point*) main::SCREEN + (const byte) OFFSET_STRUCT_POINT_Y - (byte*~) main::$9 ← (byte*)(const struct Point*) points + (const byte) OFFSET_STRUCT_POINT_Y - *((byte*~) main::$8 + (byte~) main::$3) ← *((byte*~) main::$9 + (byte~) main::$3) + *((const struct Point*) main::SCREEN + (byte~) main::$3) ← memcpy(*((const struct Point*) points + (byte~) main::$3), struct Point, (const byte) SIZEOF_STRUCT_POINT) (byte) main::i1#1 ← (byte) main::i1#2 + rangenext(0,1) (bool~) main::$1 ← (byte) main::i1#1 != rangelast(0,1) if((bool~) main::$1) goto main::@3 @@ -70,10 +64,6 @@ SYMBOL TABLE SSA (byte~) main::$3 (byte*~) main::$4 (byte*~) main::$5 -(byte*~) main::$6 -(byte*~) main::$7 -(byte*~) main::$8 -(byte*~) main::$9 (label) main::@1 (label) main::@2 (label) main::@3 @@ -92,30 +82,20 @@ SYMBOL TABLE SSA Simplifying constant pointer cast (struct Point*) 1024 Successful SSA optimization PassNCastSimplification Simple Condition (bool~) main::$0 [9] if((byte) main::i#1!=rangelast(0,1)) goto main::@1 -Simple Condition (bool~) main::$1 [21] if((byte) main::i1#1!=rangelast(0,1)) goto main::@3 +Simple Condition (bool~) main::$1 [16] if((byte) main::i1#1!=rangelast(0,1)) goto main::@3 Successful SSA optimization Pass2ConditionalJumpSimplification Constant right-side identified [3] (byte*~) main::$4 ← (byte*)(const struct Point*) points + (const byte) OFFSET_STRUCT_POINT_X Constant right-side identified [5] (byte*~) main::$5 ← (byte*)(const struct Point*) points + (const byte) OFFSET_STRUCT_POINT_Y -Constant right-side identified [13] (byte*~) main::$6 ← (byte*)(const struct Point*) main::SCREEN + (const byte) OFFSET_STRUCT_POINT_X -Constant right-side identified [14] (byte*~) main::$7 ← (byte*)(const struct Point*) points + (const byte) OFFSET_STRUCT_POINT_X -Constant right-side identified [16] (byte*~) main::$8 ← (byte*)(const struct Point*) main::SCREEN + (const byte) OFFSET_STRUCT_POINT_Y -Constant right-side identified [17] (byte*~) main::$9 ← (byte*)(const struct Point*) points + (const byte) OFFSET_STRUCT_POINT_Y Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) main::i#0 = 0 Constant (const byte*) main::$4 = (byte*)points+OFFSET_STRUCT_POINT_X Constant (const byte*) main::$5 = (byte*)points+OFFSET_STRUCT_POINT_Y Constant (const byte) main::i1#0 = 0 -Constant (const byte*) main::$6 = (byte*)main::SCREEN+OFFSET_STRUCT_POINT_X -Constant (const byte*) main::$7 = (byte*)points+OFFSET_STRUCT_POINT_X -Constant (const byte*) main::$8 = (byte*)main::SCREEN+OFFSET_STRUCT_POINT_Y -Constant (const byte*) main::$9 = (byte*)points+OFFSET_STRUCT_POINT_Y 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,1)) goto main::@1 to (number) 2 -Resolved ranged next value [19] main::i1#1 ← ++ main::i1#2 to ++ -Resolved ranged comparison value [21] if(main::i1#1!=rangelast(0,1)) goto main::@3 to (number) 2 -Simplifying expression containing zero (byte*)points in -Simplifying expression containing zero (byte*)main::SCREEN in +Resolved ranged next value [14] main::i1#1 ← ++ main::i1#2 to ++ +Resolved ranged comparison value [16] if(main::i1#1!=rangelast(0,1)) goto main::@3 to (number) 2 Simplifying expression containing zero (byte*)points in Successful SSA optimization PassNSimplifyExpressionWithZero Eliminating unused constant (const byte) OFFSET_STRUCT_POINT_X @@ -137,14 +117,8 @@ Inlining constant with var siblings (const byte) main::i1#0 Constant inlined main::$5 = (byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y Constant inlined main::i#0 = (byte) 0 Constant inlined main::i1#0 = (byte) 0 -Constant inlined main::$6 = (byte*)(const struct Point*) main::SCREEN Constant inlined main::$4 = (byte*)(const struct Point*) points -Constant inlined main::$9 = (byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y -Constant inlined main::$7 = (byte*)(const struct Point*) points -Constant inlined main::$8 = (byte*)(const struct Point*) main::SCREEN+(const byte) OFFSET_STRUCT_POINT_Y Successful SSA optimization Pass2ConstantInlining -Eliminating unused constant (const byte) SIZEOF_STRUCT_POINT -Successful SSA optimization PassNEliminateUnusedVars Added new block during phi lifting main::@5(between main::@1 and main::@1) Added new block during phi lifting main::@6(between main::@3 and main::@3) Adding NOP phi() at start of @begin @@ -157,8 +131,8 @@ CALL GRAPH Calls in [] to main:2 Created 2 initial phi equivalence classes -Coalesced [20] main::i1#3 ← main::i1#1 -Coalesced [21] main::i#3 ← main::i#1 +Coalesced [19] main::i1#3 ← main::i1#1 +Coalesced [20] main::i#3 ← main::i#1 Coalesced down to 2 phi equivalence classes Culled Empty Block (label) @2 Culled Empty Block (label) main::@2 @@ -196,13 +170,12 @@ main::@1: scope:[main] from main main::@1 main::@2: scope:[main] from main::@1 main::@2 [11] (byte) main::i1#2 ← phi( main::@1/(byte) 0 main::@2/(byte) main::i1#1 ) [12] (byte~) main::$3 ← (byte) main::i1#2 << (byte) 1 - [13] *((byte*)(const struct Point*) main::SCREEN + (byte~) main::$3) ← *((byte*)(const struct Point*) points + (byte~) main::$3) - [14] *((byte*)(const struct Point*) main::SCREEN+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$3) ← *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$3) - [15] (byte) main::i1#1 ← ++ (byte) main::i1#2 - [16] if((byte) main::i1#1!=(byte) 2) goto main::@2 + [13] *((const struct Point*) main::SCREEN + (byte~) main::$3) ← memcpy(*((const struct Point*) points + (byte~) main::$3), struct Point, (const byte) SIZEOF_STRUCT_POINT) + [14] (byte) main::i1#1 ← ++ (byte) main::i1#2 + [15] if((byte) main::i1#1!=(byte) 2) goto main::@2 to:main::@return main::@return: scope:[main] from main::@2 - [17] return + [16] return to:@return @@ -211,13 +184,13 @@ VARIABLE REGISTER WEIGHTS (byte) Point::y (void()) main() (byte~) main::$2 16.5 -(byte~) main::$3 27.5 +(byte~) main::$3 22.0 (byte) main::i (byte) main::i#1 16.5 (byte) main::i#2 11.0 (byte) main::i1 (byte) main::i1#1 16.5 -(byte) main::i1#2 8.25 +(byte) main::i1#2 11.0 Initial phi equivalence classes [ main::i#2 main::i#1 ] @@ -243,6 +216,7 @@ Target platform is c64basic / MOS6502X :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + .const SIZEOF_STRUCT_POINT = 2 .const OFFSET_STRUCT_POINT_Y = 1 // @begin __bbegin: @@ -313,24 +287,25 @@ main: { lda.z i1 asl sta.z __3 - // [13] *((byte*)(const struct Point*) main::SCREEN + (byte~) main::$3) ← *((byte*)(const struct Point*) points + (byte~) main::$3) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 + // [13] *((const struct Point*) main::SCREEN + (byte~) main::$3) ← memcpy(*((const struct Point*) points + (byte~) main::$3), struct Point, (const byte) SIZEOF_STRUCT_POINT) -- pssc1_derefidx_vbuz1=pssc2_derefidx_vbuz1_memcpy_vbuc3 + ldx #SIZEOF_STRUCT_POINT ldy.z __3 + !: lda points,y sta SCREEN,y - // [14] *((byte*)(const struct Point*) main::SCREEN+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$3) ← *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$3) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 - ldy.z __3 - lda points+OFFSET_STRUCT_POINT_Y,y - sta SCREEN+OFFSET_STRUCT_POINT_Y,y - // [15] (byte) main::i1#1 ← ++ (byte) main::i1#2 -- vbuz1=_inc_vbuz1 + iny + dex + bne !- + // [14] (byte) main::i1#1 ← ++ (byte) main::i1#2 -- vbuz1=_inc_vbuz1 inc.z i1 - // [16] if((byte) main::i1#1!=(byte) 2) goto main::@2 -- vbuz1_neq_vbuc1_then_la1 + // [15] if((byte) main::i1#1!=(byte) 2) goto main::@2 -- vbuz1_neq_vbuc1_then_la1 lda #2 cmp.z i1 bne __b2_from___b2 jmp __breturn // main::@return __breturn: - // [17] return + // [16] return rts } // File Data @@ -344,28 +319,32 @@ Removing always clobbered register reg byte a as potential for zp[1]:4 [ main::$ Statement [8] *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$2) ← (byte) main::i#2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a Statement [12] (byte~) main::$3 ← (byte) main::i1#2 << (byte) 1 [ main::i1#2 main::$3 ] ( main:2 [ main::i1#2 main::$3 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:3 [ main::i1#2 main::i1#1 ] -Statement [13] *((byte*)(const struct Point*) main::SCREEN + (byte~) main::$3) ← *((byte*)(const struct Point*) points + (byte~) main::$3) [ main::i1#2 main::$3 ] ( main:2 [ main::i1#2 main::$3 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:5 [ main::$3 ] -Statement [14] *((byte*)(const struct Point*) main::SCREEN+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$3) ← *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$3) [ main::i1#2 ] ( main:2 [ main::i1#2 ] ) always clobbers reg byte a +Statement [13] *((const struct Point*) main::SCREEN + (byte~) main::$3) ← memcpy(*((const struct Point*) points + (byte~) main::$3), struct Point, (const byte) SIZEOF_STRUCT_POINT) [ main::i1#2 ] ( main:2 [ main::i1#2 ] ) always clobbers reg byte a reg byte x reg byte y +Removing always clobbered register reg byte x as potential for zp[1]:3 [ main::i1#2 main::i1#1 ] +Removing always clobbered register reg byte y as potential for zp[1]:3 [ main::i1#2 main::i1#1 ] +Statement [15] if((byte) main::i1#1!=(byte) 2) goto main::@2 [ main::i1#1 ] ( main:2 [ main::i1#1 ] ) always clobbers reg byte a Statement [6] (byte~) main::$2 ← (byte) main::i#2 << (byte) 1 [ main::i#2 main::$2 ] ( main:2 [ main::i#2 main::$2 ] ) always clobbers reg byte a Statement [7] *((byte*)(const struct Point*) points + (byte~) main::$2) ← (byte) 2 [ main::i#2 main::$2 ] ( main:2 [ main::i#2 main::$2 ] ) always clobbers reg byte a Statement [8] *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$2) ← (byte) main::i#2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a Statement [12] (byte~) main::$3 ← (byte) main::i1#2 << (byte) 1 [ main::i1#2 main::$3 ] ( main:2 [ main::i1#2 main::$3 ] ) always clobbers reg byte a -Statement [13] *((byte*)(const struct Point*) main::SCREEN + (byte~) main::$3) ← *((byte*)(const struct Point*) points + (byte~) main::$3) [ main::i1#2 main::$3 ] ( main:2 [ main::i1#2 main::$3 ] ) always clobbers reg byte a -Statement [14] *((byte*)(const struct Point*) main::SCREEN+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$3) ← *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$3) [ main::i1#2 ] ( main:2 [ main::i1#2 ] ) always clobbers reg byte a +Statement [13] *((const struct Point*) main::SCREEN + (byte~) main::$3) ← memcpy(*((const struct Point*) points + (byte~) main::$3), struct Point, (const byte) SIZEOF_STRUCT_POINT) [ main::i1#2 ] ( main:2 [ main::i1#2 ] ) always clobbers reg byte a reg byte x reg byte y +Statement [15] if((byte) main::i1#1!=(byte) 2) goto main::@2 [ main::i1#1 ] ( main:2 [ main::i1#1 ] ) always clobbers reg byte a Potential registers zp[1]:2 [ main::i#2 main::i#1 ] : zp[1]:2 , reg byte x , reg byte y , -Potential registers zp[1]:3 [ main::i1#2 main::i1#1 ] : zp[1]:3 , reg byte x , reg byte y , +Potential registers zp[1]:3 [ main::i1#2 main::i1#1 ] : zp[1]:3 , Potential registers zp[1]:4 [ main::$2 ] : zp[1]:4 , reg byte x , reg byte y , -Potential registers zp[1]:5 [ main::$3 ] : zp[1]:5 , reg byte x , reg byte y , +Potential registers zp[1]:5 [ main::$3 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 27.5: zp[1]:2 [ main::i#2 main::i#1 ] 27.5: zp[1]:5 [ main::$3 ] 24.75: zp[1]:3 [ main::i1#2 main::i1#1 ] 16.5: zp[1]:4 [ main::$2 ] +Uplift Scope [main] 27.5: zp[1]:2 [ main::i#2 main::i#1 ] 27.5: zp[1]:3 [ main::i1#2 main::i1#1 ] 22: zp[1]:5 [ main::$3 ] 16.5: zp[1]:4 [ main::$2 ] Uplift Scope [Point] Uplift Scope [] -Uplifting [main] best 788 combination reg byte y [ main::i#2 main::i#1 ] reg byte y [ main::$3 ] reg byte x [ main::i1#2 main::i1#1 ] reg byte x [ main::$2 ] -Uplifting [Point] best 788 combination -Uplifting [] best 788 combination +Uplifting [main] best 878 combination reg byte y [ main::i#2 main::i#1 ] zp[1]:3 [ main::i1#2 main::i1#1 ] reg byte a [ main::$3 ] reg byte x [ main::$2 ] +Uplifting [Point] best 878 combination +Uplifting [] best 878 combination +Attempting to uplift remaining variables inzp[1]:3 [ main::i1#2 main::i1#1 ] +Uplifting [main] best 878 combination zp[1]:3 [ main::i1#2 main::i1#1 ] +Allocated (was zp[1]:3) zp[1]:2 [ main::i1#2 main::i1#1 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -375,6 +354,7 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + .const SIZEOF_STRUCT_POINT = 2 .const OFFSET_STRUCT_POINT_Y = 1 // @begin __bbegin: @@ -395,6 +375,7 @@ __bend: // main main: { .label SCREEN = $400 + .label i1 = 2 // [5] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuyy=vbuc1 @@ -423,8 +404,9 @@ main: { bne __b1_from___b1 // [11] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: - // [11] phi (byte) main::i1#2 = (byte) 0 [phi:main::@1->main::@2#0] -- vbuxx=vbuc1 - ldx #0 + // [11] phi (byte) main::i1#2 = (byte) 0 [phi:main::@1->main::@2#0] -- vbuz1=vbuc1 + lda #0 + sta.z i1 jmp __b2 // [11] phi from main::@2 to main::@2 [phi:main::@2->main::@2] __b2_from___b2: @@ -432,25 +414,28 @@ main: { jmp __b2 // main::@2 __b2: - // [12] (byte~) main::$3 ← (byte) main::i1#2 << (byte) 1 -- vbuyy=vbuxx_rol_1 - txa + // [12] (byte~) main::$3 ← (byte) main::i1#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + lda.z i1 asl + // [13] *((const struct Point*) main::SCREEN + (byte~) main::$3) ← memcpy(*((const struct Point*) points + (byte~) main::$3), struct Point, (const byte) SIZEOF_STRUCT_POINT) -- pssc1_derefidx_vbuaa=pssc2_derefidx_vbuaa_memcpy_vbuc3 + ldx #SIZEOF_STRUCT_POINT tay - // [13] *((byte*)(const struct Point*) main::SCREEN + (byte~) main::$3) ← *((byte*)(const struct Point*) points + (byte~) main::$3) -- pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuyy + !: lda points,y sta SCREEN,y - // [14] *((byte*)(const struct Point*) main::SCREEN+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$3) ← *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$3) -- pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuyy - lda points+OFFSET_STRUCT_POINT_Y,y - sta SCREEN+OFFSET_STRUCT_POINT_Y,y - // [15] (byte) main::i1#1 ← ++ (byte) main::i1#2 -- vbuxx=_inc_vbuxx - inx - // [16] if((byte) main::i1#1!=(byte) 2) goto main::@2 -- vbuxx_neq_vbuc1_then_la1 - cpx #2 + iny + dex + bne !- + // [14] (byte) main::i1#1 ← ++ (byte) main::i1#2 -- vbuz1=_inc_vbuz1 + inc.z i1 + // [15] if((byte) main::i1#1!=(byte) 2) goto main::@2 -- vbuz1_neq_vbuc1_then_la1 + lda #2 + cmp.z i1 bne __b2_from___b2 jmp __breturn // main::@return __breturn: - // [17] return + // [16] return rts } // File Data @@ -494,9 +479,10 @@ FINAL SYMBOL TABLE (const byte) OFFSET_STRUCT_POINT_Y = (byte) 1 (byte) Point::x (byte) Point::y +(const byte) SIZEOF_STRUCT_POINT = (byte) 2 (void()) main() (byte~) main::$2 reg byte x 16.5 -(byte~) main::$3 reg byte y 27.5 +(byte~) main::$3 reg byte a 22.0 (label) main::@1 (label) main::@2 (label) main::@return @@ -505,18 +491,18 @@ FINAL SYMBOL TABLE (byte) main::i#1 reg byte y 16.5 (byte) main::i#2 reg byte y 11.0 (byte) main::i1 -(byte) main::i1#1 reg byte x 16.5 -(byte) main::i1#2 reg byte x 8.25 +(byte) main::i1#1 i1 zp[1]:2 16.5 +(byte) main::i1#2 i1 zp[1]:2 11.0 (const struct Point*) points[(number) 2] = { fill( 2, 0) } reg byte y [ main::i#2 main::i#1 ] -reg byte x [ main::i1#2 main::i1#1 ] +zp[1]:2 [ main::i1#2 main::i1#1 ] reg byte x [ main::$2 ] -reg byte y [ main::$3 ] +reg byte a [ main::$3 ] FINAL ASSEMBLER -Score: 626 +Score: 716 // File Comments // Minimal struct - array access with struct value copying (and initializing) @@ -525,6 +511,7 @@ Score: 626 :BasicUpstart(main) .pc = $80d "Program" // Global Constants & labels + .const SIZEOF_STRUCT_POINT = 2 .const OFFSET_STRUCT_POINT_Y = 1 // @begin // [1] phi from @begin to @1 [phi:@begin->@1] @@ -536,6 +523,7 @@ Score: 626 // main main: { .label SCREEN = $400 + .label i1 = 2 // [5] phi from main to main::@1 [phi:main->main::@1] // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuyy=vbuc1 ldy #0 @@ -561,32 +549,36 @@ main: { cpy #2 bne __b1 // [11] phi from main::@1 to main::@2 [phi:main::@1->main::@2] - // [11] phi (byte) main::i1#2 = (byte) 0 [phi:main::@1->main::@2#0] -- vbuxx=vbuc1 - ldx #0 + // [11] phi (byte) main::i1#2 = (byte) 0 [phi:main::@1->main::@2#0] -- vbuz1=vbuc1 + lda #0 + sta.z i1 // [11] phi from main::@2 to main::@2 [phi:main::@2->main::@2] // [11] phi (byte) main::i1#2 = (byte) main::i1#1 [phi:main::@2->main::@2#0] -- register_copy // main::@2 __b2: // SCREEN[i] = points[i] - // [12] (byte~) main::$3 ← (byte) main::i1#2 << (byte) 1 -- vbuyy=vbuxx_rol_1 - txa + // [12] (byte~) main::$3 ← (byte) main::i1#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + lda.z i1 asl + // [13] *((const struct Point*) main::SCREEN + (byte~) main::$3) ← memcpy(*((const struct Point*) points + (byte~) main::$3), struct Point, (const byte) SIZEOF_STRUCT_POINT) -- pssc1_derefidx_vbuaa=pssc2_derefidx_vbuaa_memcpy_vbuc3 + ldx #SIZEOF_STRUCT_POINT tay - // [13] *((byte*)(const struct Point*) main::SCREEN + (byte~) main::$3) ← *((byte*)(const struct Point*) points + (byte~) main::$3) -- pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuyy + !: lda points,y sta SCREEN,y - // [14] *((byte*)(const struct Point*) main::SCREEN+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$3) ← *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$3) -- pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuyy - lda points+OFFSET_STRUCT_POINT_Y,y - sta SCREEN+OFFSET_STRUCT_POINT_Y,y + iny + dex + bne !- // for( byte i: 0..1) - // [15] (byte) main::i1#1 ← ++ (byte) main::i1#2 -- vbuxx=_inc_vbuxx - inx - // [16] if((byte) main::i1#1!=(byte) 2) goto main::@2 -- vbuxx_neq_vbuc1_then_la1 - cpx #2 + // [14] (byte) main::i1#1 ← ++ (byte) main::i1#2 -- vbuz1=_inc_vbuz1 + inc.z i1 + // [15] if((byte) main::i1#1!=(byte) 2) goto main::@2 -- vbuz1_neq_vbuc1_then_la1 + lda #2 + cmp.z i1 bne __b2 // main::@return // } - // [17] return + // [16] return rts } // File Data diff --git a/src/test/ref/struct-ptr-9.sym b/src/test/ref/struct-ptr-9.sym index d31849863..6b324b070 100644 --- a/src/test/ref/struct-ptr-9.sym +++ b/src/test/ref/struct-ptr-9.sym @@ -4,9 +4,10 @@ (const byte) OFFSET_STRUCT_POINT_Y = (byte) 1 (byte) Point::x (byte) Point::y +(const byte) SIZEOF_STRUCT_POINT = (byte) 2 (void()) main() (byte~) main::$2 reg byte x 16.5 -(byte~) main::$3 reg byte y 27.5 +(byte~) main::$3 reg byte a 22.0 (label) main::@1 (label) main::@2 (label) main::@return @@ -15,11 +16,11 @@ (byte) main::i#1 reg byte y 16.5 (byte) main::i#2 reg byte y 11.0 (byte) main::i1 -(byte) main::i1#1 reg byte x 16.5 -(byte) main::i1#2 reg byte x 8.25 +(byte) main::i1#1 i1 zp[1]:2 16.5 +(byte) main::i1#2 i1 zp[1]:2 11.0 (const struct Point*) points[(number) 2] = { fill( 2, 0) } reg byte y [ main::i#2 main::i#1 ] -reg byte x [ main::i1#2 main::i1#1 ] +zp[1]:2 [ main::i1#2 main::i1#1 ] reg byte x [ main::$2 ] -reg byte y [ main::$3 ] +reg byte a [ main::$3 ]