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

Added support for cross-scope references inside inline ASM.

This commit is contained in:
jespergravgaard 2019-03-15 07:59:25 +01:00
parent 71743540c6
commit f6dd66f3cb
11 changed files with 972 additions and 174 deletions

View File

@ -7,12 +7,13 @@ import dk.camelot64.kickc.model.Program;
* Resolved in {@link dk.camelot64.kickc.passes.Pass1ResolveForwardReferences}.
* After this point they are never present in the program.
* */
public class ForwardVariableRef implements LValue {
public class ForwardVariableRef extends SymbolVariableRef implements LValue {
/** The referenced unresolved variable name. */
private String name;
public ForwardVariableRef(String name) {
super(name);
this.name = name;
}

View File

@ -14,6 +14,7 @@ import dk.camelot64.kickc.parser.KickCParser;
import org.antlr.v4.runtime.CommonTokenStream;
import org.antlr.v4.runtime.ParserRuleContext;
import org.antlr.v4.runtime.Token;
import org.antlr.v4.runtime.tree.ParseTree;
import org.antlr.v4.runtime.tree.TerminalNode;
import sun.reflect.generics.tree.VoidDescriptor;
@ -691,22 +692,38 @@ public class Pass0GenerateStatementSequence extends KickCBaseVisitor<Object> {
@Override
public Object visitStmtAsm(KickCParser.StmtAsmContext ctx) {
// ALl defined labels in the ASM
List<String> definedLabels = new ArrayList<>();
KickCBaseVisitor<Void> findDefinedLabels = new KickCBaseVisitor<Void>() {
@Override
public Void visitAsmLabelName(KickCParser.AsmLabelNameContext ctx) {
String label = ctx.NAME().getText();
definedLabels.add(label);
return super.visitAsmLabelName(ctx);
}
};
findDefinedLabels.visit(ctx.asmLines());
// Find all defined labels in the ASM
List<String> definedLabels = gatAsmDefinedLabels(ctx);
// Find all referenced symbols in the ASM
Map<String, SymbolVariableRef> referenced = getAsmReferencedSymbolVariables(ctx, definedLabels);
List<Comment> comments = ensureUnusedComments(getCommentsSymbol(ctx));
StatementAsm statementAsm = new StatementAsm(ctx.asmLines(), referenced, new StatementSource(ctx), comments);
sequence.addStatement(statementAsm);
return null;
}
/**
* Find all referenced symbol variables
* @param ctx An ASM statement
* @param definedLabels All labels defined in the ASM
* @return All variables/constants referenced in the ASM. Some may be ForwardVariableRefs to be resolved later.
*/
private Map<String, SymbolVariableRef> getAsmReferencedSymbolVariables(KickCParser.StmtAsmContext ctx, List<String> definedLabels) {
Map<String, SymbolVariableRef> referenced = new LinkedHashMap<>();
KickCBaseVisitor<Void> findReferenced = new KickCBaseVisitor<Void>() {
@Override
public Void visitAsmExprBinary(KickCParser.AsmExprBinaryContext ctx) {
ParseTree operator = ctx.getChild(1);
if(operator.getText().equals(".")) {
// Skip any . operator for now as it accesses data in another scope.
// TODO Implement checking of labels/constants in other scopes
return null;
} else {
return super.visitAsmExprBinary(ctx);
}
}
@Override
public Void visitAsmExprLabel(KickCParser.AsmExprLabelContext ctxLabel) {
String label = ctxLabel.NAME().toString();
@ -717,18 +734,34 @@ public class Pass0GenerateStatementSequence extends KickCBaseVisitor<Object> {
Variable variable = (Variable) symbol;
referenced.put(label, variable.getRef());
} else {
throw new CompileError("Symbol referenced in inline ASM not found " + label, new StatementSource(ctxLabel));
// Either forward reference or a non-existing variable. Create a forward reference for later resolving.
referenced.put(label, new ForwardVariableRef(ctxLabel.NAME().getText()));
}
}
return super.visitAsmExprLabel(ctxLabel);
}
};
findReferenced.visit(ctx.asmLines());
return referenced;
}
List<Comment> comments = ensureUnusedComments(getCommentsSymbol(ctx));
StatementAsm statementAsm = new StatementAsm(ctx.asmLines(), referenced, new StatementSource(ctx), comments);
sequence.addStatement(statementAsm);
return null;
/**
* Find all labels defined in the ASM (not multilabels).
* @param ctx An ASM statement
* @return All labels defined in the ASM.
*/
private List<String> gatAsmDefinedLabels(KickCParser.StmtAsmContext ctx) {
List<String> definedLabels = new ArrayList<>();
KickCBaseVisitor<Void> findDefinedLabels = new KickCBaseVisitor<Void>() {
@Override
public Void visitAsmLabelName(KickCParser.AsmLabelNameContext ctx) {
String label = ctx.NAME().getText();
definedLabels.add(label);
return super.visitAsmLabelName(ctx);
}
};
findDefinedLabels.visit(ctx.asmLines());
return definedLabels;
}
@Override

View File

@ -44,6 +44,11 @@ public class TestPrograms {
AsmFragmentTemplateUsages.logUsages(log, false, false, false, false, false, false);
}
@Test
public void testInlineAsmRefScoped() throws IOException, URISyntaxException {
compileAndCompare("inline-asm-ref-scoped");
}
@Test
public void testInlineAsmRefoutLabel() throws IOException, URISyntaxException {
compileAndCompare("inline-asm-label");
@ -61,7 +66,7 @@ public class TestPrograms {
@Test
public void testInlineAsmRefoutUndef() throws IOException, URISyntaxException {
assertError("inline-asm-refout-undef", "Symbol referenced in inline ASM not found");
assertError("inline-asm-refout-undef", "Unknown variable qwe");
}
@Test

View File

@ -0,0 +1,17 @@
// Tests that references to labels in other scopes is possible from inline ASM
void main() {
asm {
lda #'c'
sta sub.ll+1
}
sub();
}
void sub() {
asm {
ll:
lda #0
sta $400
}
}

View File

@ -86,6 +86,9 @@ Resolved forward reference COSH_HI to (byte*) COSH_HI
Resolved forward reference COSH_LO to (byte*) COSH_LO
Resolved forward reference COSH_HI to (byte*) COSH_HI
Resolved forward reference COSH_LO to (byte*) COSH_LO
Resolved forward reference mulf_sqr1 to (byte*) mulf_sqr1
Resolved forward reference mulf_sqr2 to (byte*) mulf_sqr2
Resolved forward reference PERSP_Z to (signed byte*) PERSP_Z
Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx
Inlined call call print_sbyte_pos (signed byte) sx (byte/signed byte/word/signed word/dword/signed dword) 0 (byte/signed byte/word/signed word/dword/signed dword) $25
Inlined call call print_sbyte_pos (signed byte) sy (byte/signed byte/word/signed word/dword/signed dword) 1 (byte/signed byte/word/signed word/dword/signed dword) $25
@ -327,9 +330,10 @@ print_cls::@return: scope:[print_cls] from print_cls::@2
(byte*) SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) $400
to:@24
main: scope:[main] from @33
(signed byte*) yp#19 ← phi( @33/(signed byte*) yp#20 )
(signed byte*) xp#19 ← phi( @33/(signed byte*) xp#20 )
(signed byte*) pp#19 ← phi( @33/(signed byte*) pp#20 )
(signed byte*) PERSP_Z#20 ← phi( @33/(signed byte*) PERSP_Z#0 )
(signed byte*) yp#20 ← phi( @33/(signed byte*) yp#21 )
(signed byte*) xp#20 ← phi( @33/(signed byte*) xp#21 )
(signed byte*) pp#20 ← phi( @33/(signed byte*) pp#21 )
(signed byte*) zr#20 ← phi( @33/(signed byte*) zr#21 )
(signed byte*) yr#20 ← phi( @33/(signed byte*) yr#21 )
(signed byte*) xr#20 ← phi( @33/(signed byte*) xr#21 )
@ -345,17 +349,18 @@ main: scope:[main] from @33
(byte*) SPRITE#3 ← phi( @33/(byte*) SPRITE#0 )
(byte*) print_char_cursor#19 ← phi( @33/(byte*) print_char_cursor#18 )
(byte*) print_line_cursor#19 ← phi( @33/(byte*) print_line_cursor#18 )
(word*) psp2#2 ← phi( @33/(word*) psp2#3 )
(byte*) mulf_sqr2#2 ← phi( @33/(byte*) mulf_sqr2#0 )
(word*) psp1#2 ← phi( @33/(word*) psp1#3 )
(byte*) mulf_sqr1#2 ← phi( @33/(byte*) mulf_sqr1#0 )
(word*) psp2#3 ← phi( @33/(word*) psp2#5 )
(byte*) mulf_sqr2#3 ← phi( @33/(byte*) mulf_sqr2#0 )
(word*) psp1#3 ← phi( @33/(word*) psp1#5 )
(byte*) mulf_sqr1#3 ← phi( @33/(byte*) mulf_sqr1#0 )
asm { sei }
call sprites_init
to:main::@1
main::@1: scope:[main] from main
(signed byte*) yp#18 ← phi( main/(signed byte*) yp#19 )
(signed byte*) xp#18 ← phi( main/(signed byte*) xp#19 )
(signed byte*) pp#18 ← phi( main/(signed byte*) pp#19 )
(signed byte*) PERSP_Z#19 ← phi( main/(signed byte*) PERSP_Z#20 )
(signed byte*) yp#19 ← phi( main/(signed byte*) yp#20 )
(signed byte*) xp#19 ← phi( main/(signed byte*) xp#20 )
(signed byte*) pp#19 ← phi( main/(signed byte*) pp#20 )
(signed byte*) zr#19 ← phi( main/(signed byte*) zr#20 )
(signed byte*) yr#19 ← phi( main/(signed byte*) yr#20 )
(signed byte*) xr#19 ← phi( main/(signed byte*) xr#20 )
@ -370,10 +375,10 @@ main::@1: scope:[main] from main
(signed byte) sx#18 ← phi( main/(signed byte) sx#24 )
(byte*) print_char_cursor#14 ← phi( main/(byte*) print_char_cursor#19 )
(byte*) print_line_cursor#14 ← phi( main/(byte*) print_line_cursor#19 )
(word*) psp2#1 ← phi( main/(word*) psp2#2 )
(byte*) mulf_sqr2#1 ← phi( main/(byte*) mulf_sqr2#2 )
(word*) psp1#1 ← phi( main/(word*) psp1#2 )
(byte*) mulf_sqr1#1 ← phi( main/(byte*) mulf_sqr1#2 )
(word*) psp2#1 ← phi( main/(word*) psp2#3 )
(byte*) mulf_sqr2#1 ← phi( main/(byte*) mulf_sqr2#3 )
(word*) psp1#1 ← phi( main/(word*) psp1#3 )
(byte*) mulf_sqr1#1 ← phi( main/(byte*) mulf_sqr1#3 )
(word~) main::$1 ← ((word)) (byte*) mulf_sqr1#1
*((word*) psp1#1) ← (word~) main::$1
(word~) main::$2 ← ((word)) (byte*) mulf_sqr2#1
@ -383,9 +388,14 @@ main::@1: scope:[main] from main
main::@2: scope:[main] from main::@1
(byte*) SCREEN#73 ← phi( main::@1/(byte*) SCREEN#17 )
(byte*) print_screen#63 ← phi( main::@1/(byte*) print_screen#29 )
(signed byte*) yp#16 ← phi( main::@1/(signed byte*) yp#18 )
(signed byte*) xp#16 ← phi( main::@1/(signed byte*) xp#18 )
(signed byte*) pp#16 ← phi( main::@1/(signed byte*) pp#18 )
(word*) psp2#22 ← phi( main::@1/(word*) psp2#1 )
(word*) psp1#22 ← phi( main::@1/(word*) psp1#1 )
(signed byte*) PERSP_Z#17 ← phi( main::@1/(signed byte*) PERSP_Z#19 )
(byte*) mulf_sqr2#19 ← phi( main::@1/(byte*) mulf_sqr2#1 )
(byte*) mulf_sqr1#19 ← phi( main::@1/(byte*) mulf_sqr1#1 )
(signed byte*) yp#17 ← phi( main::@1/(signed byte*) yp#19 )
(signed byte*) xp#17 ← phi( main::@1/(signed byte*) xp#19 )
(signed byte*) pp#17 ← phi( main::@1/(signed byte*) pp#19 )
(signed byte*) zr#17 ← phi( main::@1/(signed byte*) zr#19 )
(signed byte*) yr#17 ← phi( main::@1/(signed byte*) yr#19 )
(signed byte*) xr#17 ← phi( main::@1/(signed byte*) xr#19 )
@ -422,16 +432,16 @@ main::@return: scope:[main] from main::@3
return
to:@return
@24: scope:[] from @23
(signed byte*) yp#22 ← phi( @23/(signed byte*) yp#0 )
(signed byte*) xp#22 ← phi( @23/(signed byte*) xp#0 )
(signed byte*) pp#22 ← phi( @23/(signed byte*) pp#0 )
(signed byte*) yp#23 ← phi( @23/(signed byte*) yp#0 )
(signed byte*) xp#23 ← phi( @23/(signed byte*) xp#0 )
(signed byte*) pp#23 ← phi( @23/(signed byte*) pp#0 )
(signed byte*) zr#23 ← phi( @23/(signed byte*) zr#0 )
(signed byte*) yr#23 ← phi( @23/(signed byte*) yr#0 )
(signed byte*) xr#23 ← phi( @23/(signed byte*) xr#0 )
(byte*) SCREEN#26 ← phi( @23/(byte*) SCREEN#0 )
(byte*) print_screen#49 ← phi( @23/(byte*) print_screen#50 )
(word*) psp2#5 ← phi( @23/(word*) psp2#0 )
(word*) psp1#5 ← phi( @23/(word*) psp1#0 )
(word*) psp2#11 ← phi( @23/(word*) psp2#0 )
(word*) psp1#11 ← phi( @23/(word*) psp1#0 )
(byte*) print_char_cursor#23 ← phi( @23/(byte*) print_char_cursor#24 )
(byte*) print_line_cursor#23 ← phi( @23/(byte*) print_line_cursor#24 )
(signed byte/signed word/signed dword~) $0 ← - (byte/signed byte/word/signed word/dword/signed dword) $34
@ -456,9 +466,14 @@ main::@return: scope:[main] from main::@3
anim: scope:[anim] from main::@2
(byte*) SCREEN#71 ← phi( main::@2/(byte*) SCREEN#73 )
(byte*) print_screen#61 ← phi( main::@2/(byte*) print_screen#63 )
(signed byte*) yp#14 ← phi( main::@2/(signed byte*) yp#16 )
(signed byte*) xp#14 ← phi( main::@2/(signed byte*) xp#16 )
(signed byte*) pp#14 ← phi( main::@2/(signed byte*) pp#16 )
(word*) psp2#20 ← phi( main::@2/(word*) psp2#22 )
(word*) psp1#20 ← phi( main::@2/(word*) psp1#22 )
(signed byte*) PERSP_Z#15 ← phi( main::@2/(signed byte*) PERSP_Z#17 )
(byte*) mulf_sqr2#17 ← phi( main::@2/(byte*) mulf_sqr2#19 )
(byte*) mulf_sqr1#17 ← phi( main::@2/(byte*) mulf_sqr1#19 )
(signed byte*) yp#15 ← phi( main::@2/(signed byte*) yp#17 )
(signed byte*) xp#15 ← phi( main::@2/(signed byte*) xp#17 )
(signed byte*) pp#15 ← phi( main::@2/(signed byte*) pp#17 )
(signed byte*) zr#15 ← phi( main::@2/(signed byte*) zr#17 )
(signed byte*) yr#15 ← phi( main::@2/(signed byte*) yr#17 )
(signed byte*) xr#15 ← phi( main::@2/(signed byte*) xr#17 )
@ -473,9 +488,14 @@ anim: scope:[anim] from main::@2
anim::@1: scope:[anim] from anim anim::@30
(byte*) SCREEN#70 ← phi( anim/(byte*) SCREEN#71 anim::@30/(byte*) SCREEN#72 )
(byte*) print_screen#60 ← phi( anim/(byte*) print_screen#61 anim::@30/(byte*) print_screen#62 )
(signed byte*) yp#13 ← phi( anim/(signed byte*) yp#14 anim::@30/(signed byte*) yp#15 )
(signed byte*) xp#13 ← phi( anim/(signed byte*) xp#14 anim::@30/(signed byte*) xp#15 )
(signed byte*) pp#13 ← phi( anim/(signed byte*) pp#14 anim::@30/(signed byte*) pp#15 )
(word*) psp2#19 ← phi( anim/(word*) psp2#20 anim::@30/(word*) psp2#21 )
(word*) psp1#19 ← phi( anim/(word*) psp1#20 anim::@30/(word*) psp1#21 )
(signed byte*) PERSP_Z#14 ← phi( anim/(signed byte*) PERSP_Z#15 anim::@30/(signed byte*) PERSP_Z#16 )
(byte*) mulf_sqr2#16 ← phi( anim/(byte*) mulf_sqr2#17 anim::@30/(byte*) mulf_sqr2#18 )
(byte*) mulf_sqr1#16 ← phi( anim/(byte*) mulf_sqr1#17 anim::@30/(byte*) mulf_sqr1#18 )
(signed byte*) yp#14 ← phi( anim/(signed byte*) yp#15 anim::@30/(signed byte*) yp#16 )
(signed byte*) xp#14 ← phi( anim/(signed byte*) xp#15 anim::@30/(signed byte*) xp#16 )
(signed byte*) pp#14 ← phi( anim/(signed byte*) pp#15 anim::@30/(signed byte*) pp#16 )
(signed byte*) zr#14 ← phi( anim/(signed byte*) zr#15 anim::@30/(signed byte*) zr#16 )
(signed byte*) yr#14 ← phi( anim/(signed byte*) yr#15 anim::@30/(signed byte*) yr#16 )
(signed byte*) xr#14 ← phi( anim/(signed byte*) xr#15 anim::@30/(signed byte*) xr#16 )
@ -491,9 +511,14 @@ anim::@1: scope:[anim] from anim anim::@30
anim::@2: scope:[anim] from anim::@1
(byte*) SCREEN#68 ← phi( anim::@1/(byte*) SCREEN#70 )
(byte*) print_screen#58 ← phi( anim::@1/(byte*) print_screen#60 )
(signed byte*) yp#11 ← phi( anim::@1/(signed byte*) yp#13 )
(signed byte*) xp#11 ← phi( anim::@1/(signed byte*) xp#13 )
(signed byte*) pp#11 ← phi( anim::@1/(signed byte*) pp#13 )
(word*) psp2#17 ← phi( anim::@1/(word*) psp2#19 )
(word*) psp1#17 ← phi( anim::@1/(word*) psp1#19 )
(signed byte*) PERSP_Z#12 ← phi( anim::@1/(signed byte*) PERSP_Z#14 )
(byte*) mulf_sqr2#14 ← phi( anim::@1/(byte*) mulf_sqr2#16 )
(byte*) mulf_sqr1#14 ← phi( anim::@1/(byte*) mulf_sqr1#16 )
(signed byte*) yp#12 ← phi( anim::@1/(signed byte*) yp#14 )
(signed byte*) xp#12 ← phi( anim::@1/(signed byte*) xp#14 )
(signed byte*) pp#12 ← phi( anim::@1/(signed byte*) pp#14 )
(signed byte*) zr#12 ← phi( anim::@1/(signed byte*) zr#14 )
(signed byte*) yr#12 ← phi( anim::@1/(signed byte*) yr#14 )
(signed byte*) xr#12 ← phi( anim::@1/(signed byte*) xr#14 )
@ -508,9 +533,14 @@ anim::@2: scope:[anim] from anim::@1
anim::@4: scope:[anim] from anim::@2 anim::@5
(byte*) SCREEN#66 ← phi( anim::@2/(byte*) SCREEN#68 anim::@5/(byte*) SCREEN#69 )
(byte*) print_screen#56 ← phi( anim::@2/(byte*) print_screen#58 anim::@5/(byte*) print_screen#59 )
(signed byte*) yp#9 ← phi( anim::@2/(signed byte*) yp#11 anim::@5/(signed byte*) yp#12 )
(signed byte*) xp#9 ← phi( anim::@2/(signed byte*) xp#11 anim::@5/(signed byte*) xp#12 )
(signed byte*) pp#9 ← phi( anim::@2/(signed byte*) pp#11 anim::@5/(signed byte*) pp#12 )
(word*) psp2#15 ← phi( anim::@2/(word*) psp2#17 anim::@5/(word*) psp2#18 )
(word*) psp1#15 ← phi( anim::@2/(word*) psp1#17 anim::@5/(word*) psp1#18 )
(signed byte*) PERSP_Z#10 ← phi( anim::@2/(signed byte*) PERSP_Z#12 anim::@5/(signed byte*) PERSP_Z#13 )
(byte*) mulf_sqr2#12 ← phi( anim::@2/(byte*) mulf_sqr2#14 anim::@5/(byte*) mulf_sqr2#15 )
(byte*) mulf_sqr1#12 ← phi( anim::@2/(byte*) mulf_sqr1#14 anim::@5/(byte*) mulf_sqr1#15 )
(signed byte*) yp#10 ← phi( anim::@2/(signed byte*) yp#12 anim::@5/(signed byte*) yp#13 )
(signed byte*) xp#10 ← phi( anim::@2/(signed byte*) xp#12 anim::@5/(signed byte*) xp#13 )
(signed byte*) pp#10 ← phi( anim::@2/(signed byte*) pp#12 anim::@5/(signed byte*) pp#13 )
(signed byte*) zr#10 ← phi( anim::@2/(signed byte*) zr#12 anim::@5/(signed byte*) zr#13 )
(signed byte*) yr#10 ← phi( anim::@2/(signed byte*) yr#12 anim::@5/(signed byte*) yr#13 )
(signed byte*) xr#10 ← phi( anim::@2/(signed byte*) xr#12 anim::@5/(signed byte*) xr#13 )
@ -527,9 +557,14 @@ anim::@4: scope:[anim] from anim::@2 anim::@5
anim::@5: scope:[anim] from anim::@4
(byte*) SCREEN#69 ← phi( anim::@4/(byte*) SCREEN#66 )
(byte*) print_screen#59 ← phi( anim::@4/(byte*) print_screen#56 )
(signed byte*) yp#12 ← phi( anim::@4/(signed byte*) yp#9 )
(signed byte*) xp#12 ← phi( anim::@4/(signed byte*) xp#9 )
(signed byte*) pp#12 ← phi( anim::@4/(signed byte*) pp#9 )
(word*) psp2#18 ← phi( anim::@4/(word*) psp2#15 )
(word*) psp1#18 ← phi( anim::@4/(word*) psp1#15 )
(signed byte*) PERSP_Z#13 ← phi( anim::@4/(signed byte*) PERSP_Z#10 )
(byte*) mulf_sqr2#15 ← phi( anim::@4/(byte*) mulf_sqr2#12 )
(byte*) mulf_sqr1#15 ← phi( anim::@4/(byte*) mulf_sqr1#12 )
(signed byte*) yp#13 ← phi( anim::@4/(signed byte*) yp#10 )
(signed byte*) xp#13 ← phi( anim::@4/(signed byte*) xp#10 )
(signed byte*) pp#13 ← phi( anim::@4/(signed byte*) pp#10 )
(signed byte*) zr#13 ← phi( anim::@4/(signed byte*) zr#10 )
(signed byte*) yr#13 ← phi( anim::@4/(signed byte*) yr#10 )
(signed byte*) xr#13 ← phi( anim::@4/(signed byte*) xr#10 )
@ -544,9 +579,14 @@ anim::@5: scope:[anim] from anim::@4
anim::@7: scope:[anim] from anim::@4 anim::@8
(byte*) SCREEN#65 ← phi( anim::@4/(byte*) SCREEN#66 anim::@8/(byte*) SCREEN#67 )
(byte*) print_screen#55 ← phi( anim::@4/(byte*) print_screen#56 anim::@8/(byte*) print_screen#57 )
(signed byte*) yp#8 ← phi( anim::@4/(signed byte*) yp#9 anim::@8/(signed byte*) yp#10 )
(signed byte*) xp#8 ← phi( anim::@4/(signed byte*) xp#9 anim::@8/(signed byte*) xp#10 )
(signed byte*) pp#8 ← phi( anim::@4/(signed byte*) pp#9 anim::@8/(signed byte*) pp#10 )
(word*) psp2#14 ← phi( anim::@4/(word*) psp2#15 anim::@8/(word*) psp2#16 )
(word*) psp1#14 ← phi( anim::@4/(word*) psp1#15 anim::@8/(word*) psp1#16 )
(signed byte*) PERSP_Z#9 ← phi( anim::@4/(signed byte*) PERSP_Z#10 anim::@8/(signed byte*) PERSP_Z#11 )
(byte*) mulf_sqr2#11 ← phi( anim::@4/(byte*) mulf_sqr2#12 anim::@8/(byte*) mulf_sqr2#13 )
(byte*) mulf_sqr1#11 ← phi( anim::@4/(byte*) mulf_sqr1#12 anim::@8/(byte*) mulf_sqr1#13 )
(signed byte*) yp#9 ← phi( anim::@4/(signed byte*) yp#10 anim::@8/(signed byte*) yp#11 )
(signed byte*) xp#9 ← phi( anim::@4/(signed byte*) xp#10 anim::@8/(signed byte*) xp#11 )
(signed byte*) pp#9 ← phi( anim::@4/(signed byte*) pp#10 anim::@8/(signed byte*) pp#11 )
(signed byte*) zr#9 ← phi( anim::@4/(signed byte*) zr#10 anim::@8/(signed byte*) zr#11 )
(signed byte*) yr#9 ← phi( anim::@4/(signed byte*) yr#10 anim::@8/(signed byte*) yr#11 )
(signed byte*) xr#9 ← phi( anim::@4/(signed byte*) xr#10 anim::@8/(signed byte*) xr#11 )
@ -563,9 +603,14 @@ anim::@7: scope:[anim] from anim::@4 anim::@8
anim::@8: scope:[anim] from anim::@7
(byte*) SCREEN#67 ← phi( anim::@7/(byte*) SCREEN#65 )
(byte*) print_screen#57 ← phi( anim::@7/(byte*) print_screen#55 )
(signed byte*) yp#10 ← phi( anim::@7/(signed byte*) yp#8 )
(signed byte*) xp#10 ← phi( anim::@7/(signed byte*) xp#8 )
(signed byte*) pp#10 ← phi( anim::@7/(signed byte*) pp#8 )
(word*) psp2#16 ← phi( anim::@7/(word*) psp2#14 )
(word*) psp1#16 ← phi( anim::@7/(word*) psp1#14 )
(signed byte*) PERSP_Z#11 ← phi( anim::@7/(signed byte*) PERSP_Z#9 )
(byte*) mulf_sqr2#13 ← phi( anim::@7/(byte*) mulf_sqr2#11 )
(byte*) mulf_sqr1#13 ← phi( anim::@7/(byte*) mulf_sqr1#11 )
(signed byte*) yp#11 ← phi( anim::@7/(signed byte*) yp#9 )
(signed byte*) xp#11 ← phi( anim::@7/(signed byte*) xp#9 )
(signed byte*) pp#11 ← phi( anim::@7/(signed byte*) pp#9 )
(signed byte*) zr#11 ← phi( anim::@7/(signed byte*) zr#9 )
(signed byte*) yr#11 ← phi( anim::@7/(signed byte*) yr#9 )
(signed byte*) xr#11 ← phi( anim::@7/(signed byte*) xr#9 )
@ -580,9 +625,14 @@ anim::@8: scope:[anim] from anim::@7
anim::@10: scope:[anim] from anim::@11 anim::@7
(byte*) SCREEN#63 ← phi( anim::@11/(byte*) SCREEN#64 anim::@7/(byte*) SCREEN#65 )
(byte*) print_screen#53 ← phi( anim::@11/(byte*) print_screen#54 anim::@7/(byte*) print_screen#55 )
(signed byte*) yp#6 ← phi( anim::@11/(signed byte*) yp#7 anim::@7/(signed byte*) yp#8 )
(signed byte*) xp#6 ← phi( anim::@11/(signed byte*) xp#7 anim::@7/(signed byte*) xp#8 )
(signed byte*) pp#6 ← phi( anim::@11/(signed byte*) pp#7 anim::@7/(signed byte*) pp#8 )
(word*) psp2#12 ← phi( anim::@11/(word*) psp2#13 anim::@7/(word*) psp2#14 )
(word*) psp1#12 ← phi( anim::@11/(word*) psp1#13 anim::@7/(word*) psp1#14 )
(signed byte*) PERSP_Z#7 ← phi( anim::@11/(signed byte*) PERSP_Z#8 anim::@7/(signed byte*) PERSP_Z#9 )
(byte*) mulf_sqr2#9 ← phi( anim::@11/(byte*) mulf_sqr2#10 anim::@7/(byte*) mulf_sqr2#11 )
(byte*) mulf_sqr1#9 ← phi( anim::@11/(byte*) mulf_sqr1#10 anim::@7/(byte*) mulf_sqr1#11 )
(signed byte*) yp#7 ← phi( anim::@11/(signed byte*) yp#8 anim::@7/(signed byte*) yp#9 )
(signed byte*) xp#7 ← phi( anim::@11/(signed byte*) xp#8 anim::@7/(signed byte*) xp#9 )
(signed byte*) pp#7 ← phi( anim::@11/(signed byte*) pp#8 anim::@7/(signed byte*) pp#9 )
(signed byte*) zr#7 ← phi( anim::@11/(signed byte*) zr#8 anim::@7/(signed byte*) zr#9 )
(signed byte*) yr#7 ← phi( anim::@11/(signed byte*) yr#8 anim::@7/(signed byte*) yr#9 )
(signed byte*) xr#7 ← phi( anim::@11/(signed byte*) xr#8 anim::@7/(signed byte*) xr#9 )
@ -599,9 +649,14 @@ anim::@10: scope:[anim] from anim::@11 anim::@7
anim::@11: scope:[anim] from anim::@10
(byte*) SCREEN#64 ← phi( anim::@10/(byte*) SCREEN#63 )
(byte*) print_screen#54 ← phi( anim::@10/(byte*) print_screen#53 )
(signed byte*) yp#7 ← phi( anim::@10/(signed byte*) yp#6 )
(signed byte*) xp#7 ← phi( anim::@10/(signed byte*) xp#6 )
(signed byte*) pp#7 ← phi( anim::@10/(signed byte*) pp#6 )
(word*) psp2#13 ← phi( anim::@10/(word*) psp2#12 )
(word*) psp1#13 ← phi( anim::@10/(word*) psp1#12 )
(signed byte*) PERSP_Z#8 ← phi( anim::@10/(signed byte*) PERSP_Z#7 )
(byte*) mulf_sqr2#10 ← phi( anim::@10/(byte*) mulf_sqr2#9 )
(byte*) mulf_sqr1#10 ← phi( anim::@10/(byte*) mulf_sqr1#9 )
(signed byte*) yp#8 ← phi( anim::@10/(signed byte*) yp#7 )
(signed byte*) xp#8 ← phi( anim::@10/(signed byte*) xp#7 )
(signed byte*) pp#8 ← phi( anim::@10/(signed byte*) pp#7 )
(signed byte*) zr#8 ← phi( anim::@10/(signed byte*) zr#7 )
(signed byte*) yr#8 ← phi( anim::@10/(signed byte*) yr#7 )
(signed byte*) xr#8 ← phi( anim::@10/(signed byte*) xr#7 )
@ -616,9 +671,14 @@ anim::@11: scope:[anim] from anim::@10
anim::@12: scope:[anim] from anim::@10
(byte*) SCREEN#62 ← phi( anim::@10/(byte*) SCREEN#63 )
(byte*) print_screen#51 ← phi( anim::@10/(byte*) print_screen#53 )
(signed byte*) yp#5 ← phi( anim::@10/(signed byte*) yp#6 )
(signed byte*) xp#5 ← phi( anim::@10/(signed byte*) xp#6 )
(signed byte*) pp#5 ← phi( anim::@10/(signed byte*) pp#6 )
(word*) psp2#10 ← phi( anim::@10/(word*) psp2#12 )
(word*) psp1#10 ← phi( anim::@10/(word*) psp1#12 )
(signed byte*) PERSP_Z#6 ← phi( anim::@10/(signed byte*) PERSP_Z#7 )
(byte*) mulf_sqr2#8 ← phi( anim::@10/(byte*) mulf_sqr2#9 )
(byte*) mulf_sqr1#8 ← phi( anim::@10/(byte*) mulf_sqr1#9 )
(signed byte*) yp#6 ← phi( anim::@10/(signed byte*) yp#7 )
(signed byte*) xp#6 ← phi( anim::@10/(signed byte*) xp#7 )
(signed byte*) pp#6 ← phi( anim::@10/(signed byte*) pp#7 )
(signed byte*) zr#6 ← phi( anim::@10/(signed byte*) zr#7 )
(signed byte*) yr#6 ← phi( anim::@10/(signed byte*) yr#7 )
(signed byte*) xr#6 ← phi( anim::@10/(signed byte*) xr#7 )
@ -645,9 +705,14 @@ anim::@27: scope:[anim] from anim::@12
(byte*) print_screen#48 ← phi( anim::@12/(byte*) print_screen#51 )
(signed byte) sy#34 ← phi( anim::@12/(signed byte) sy#8 )
(signed byte) sx#31 ← phi( anim::@12/(signed byte) sx#8 )
(signed byte*) yp#4 ← phi( anim::@12/(signed byte*) yp#5 )
(signed byte*) xp#4 ← phi( anim::@12/(signed byte*) xp#5 )
(signed byte*) pp#4 ← phi( anim::@12/(signed byte*) pp#5 )
(word*) psp2#8 ← phi( anim::@12/(word*) psp2#10 )
(word*) psp1#8 ← phi( anim::@12/(word*) psp1#10 )
(signed byte*) PERSP_Z#5 ← phi( anim::@12/(signed byte*) PERSP_Z#6 )
(byte*) mulf_sqr2#7 ← phi( anim::@12/(byte*) mulf_sqr2#8 )
(byte*) mulf_sqr1#7 ← phi( anim::@12/(byte*) mulf_sqr1#8 )
(signed byte*) yp#5 ← phi( anim::@12/(signed byte*) yp#6 )
(signed byte*) xp#5 ← phi( anim::@12/(signed byte*) xp#6 )
(signed byte*) pp#5 ← phi( anim::@12/(signed byte*) pp#6 )
(signed byte*) zr#5 ← phi( anim::@12/(signed byte*) zr#6 )
(signed byte*) yr#5 ← phi( anim::@12/(signed byte*) yr#6 )
(signed byte*) xr#5 ← phi( anim::@12/(signed byte*) xr#6 )
@ -663,9 +728,14 @@ anim::@28: scope:[anim] from anim::@27
(byte*) print_screen#46 ← phi( anim::@27/(byte*) print_screen#48 )
(signed byte) sy#33 ← phi( anim::@27/(signed byte) sy#34 )
(signed byte) sx#30 ← phi( anim::@27/(signed byte) sx#31 )
(signed byte*) yp#3 ← phi( anim::@27/(signed byte*) yp#4 )
(signed byte*) xp#3 ← phi( anim::@27/(signed byte*) xp#4 )
(signed byte*) pp#3 ← phi( anim::@27/(signed byte*) pp#4 )
(word*) psp2#6 ← phi( anim::@27/(word*) psp2#8 )
(word*) psp1#6 ← phi( anim::@27/(word*) psp1#8 )
(signed byte*) PERSP_Z#3 ← phi( anim::@27/(signed byte*) PERSP_Z#5 )
(byte*) mulf_sqr2#5 ← phi( anim::@27/(byte*) mulf_sqr2#7 )
(byte*) mulf_sqr1#5 ← phi( anim::@27/(byte*) mulf_sqr1#7 )
(signed byte*) yp#4 ← phi( anim::@27/(signed byte*) yp#5 )
(signed byte*) xp#4 ← phi( anim::@27/(signed byte*) xp#5 )
(signed byte*) pp#4 ← phi( anim::@27/(signed byte*) pp#5 )
(signed byte*) zr#4 ← phi( anim::@27/(signed byte*) zr#5 )
(signed byte*) yr#4 ← phi( anim::@27/(signed byte*) yr#5 )
(signed byte*) xr#4 ← phi( anim::@27/(signed byte*) xr#5 )
@ -681,9 +751,14 @@ anim::@13: scope:[anim] from anim::@28 anim::@29
(byte*) print_screen#45 ← phi( anim::@28/(byte*) print_screen#46 anim::@29/(byte*) print_screen#43 )
(signed byte) sy#29 ← phi( anim::@28/(signed byte) sy#33 anim::@29/(signed byte) sy#23 )
(signed byte) sx#27 ← phi( anim::@28/(signed byte) sx#30 anim::@29/(signed byte) sx#22 )
(signed byte*) yp#2 ← phi( anim::@28/(signed byte*) yp#3 anim::@29/(signed byte*) yp#1 )
(signed byte*) xp#2 ← phi( anim::@28/(signed byte*) xp#3 anim::@29/(signed byte*) xp#1 )
(signed byte*) pp#2 ← phi( anim::@28/(signed byte*) pp#3 anim::@29/(signed byte*) pp#1 )
(word*) psp2#4 ← phi( anim::@28/(word*) psp2#6 anim::@29/(word*) psp2#7 )
(word*) psp1#4 ← phi( anim::@28/(word*) psp1#6 anim::@29/(word*) psp1#7 )
(signed byte*) PERSP_Z#2 ← phi( anim::@28/(signed byte*) PERSP_Z#3 anim::@29/(signed byte*) PERSP_Z#4 )
(byte*) mulf_sqr2#4 ← phi( anim::@28/(byte*) mulf_sqr2#5 anim::@29/(byte*) mulf_sqr2#6 )
(byte*) mulf_sqr1#4 ← phi( anim::@28/(byte*) mulf_sqr1#5 anim::@29/(byte*) mulf_sqr1#6 )
(signed byte*) yp#3 ← phi( anim::@28/(signed byte*) yp#4 anim::@29/(signed byte*) yp#1 )
(signed byte*) xp#3 ← phi( anim::@28/(signed byte*) xp#4 anim::@29/(signed byte*) xp#1 )
(signed byte*) pp#3 ← phi( anim::@28/(signed byte*) pp#4 anim::@29/(signed byte*) pp#1 )
(signed byte*) zr#3 ← phi( anim::@28/(signed byte*) zr#4 anim::@29/(signed byte*) zr#1 )
(signed byte*) yr#3 ← phi( anim::@28/(signed byte*) yr#4 anim::@29/(signed byte*) yr#1 )
(signed byte*) xr#3 ← phi( anim::@28/(signed byte*) xr#4 anim::@29/(signed byte*) xr#1 )
@ -704,9 +779,14 @@ anim::@29: scope:[anim] from anim::@13
(byte*) print_screen#43 ← phi( anim::@13/(byte*) print_screen#45 )
(signed byte) sy#23 ← phi( anim::@13/(signed byte) sy#29 )
(signed byte) sx#22 ← phi( anim::@13/(signed byte) sx#27 )
(signed byte*) yp#1 ← phi( anim::@13/(signed byte*) yp#2 )
(signed byte*) xp#1 ← phi( anim::@13/(signed byte*) xp#2 )
(signed byte*) pp#1 ← phi( anim::@13/(signed byte*) pp#2 )
(word*) psp2#7 ← phi( anim::@13/(word*) psp2#4 )
(word*) psp1#7 ← phi( anim::@13/(word*) psp1#4 )
(signed byte*) PERSP_Z#4 ← phi( anim::@13/(signed byte*) PERSP_Z#2 )
(byte*) mulf_sqr2#6 ← phi( anim::@13/(byte*) mulf_sqr2#4 )
(byte*) mulf_sqr1#6 ← phi( anim::@13/(byte*) mulf_sqr1#4 )
(signed byte*) yp#1 ← phi( anim::@13/(signed byte*) yp#3 )
(signed byte*) xp#1 ← phi( anim::@13/(signed byte*) xp#3 )
(signed byte*) pp#1 ← phi( anim::@13/(signed byte*) pp#3 )
(signed byte*) zr#1 ← phi( anim::@13/(signed byte*) zr#3 )
(signed byte*) yr#1 ← phi( anim::@13/(signed byte*) yr#3 )
(byte) anim::i#3 ← phi( anim::@13/(byte) anim::i#2 )
@ -731,9 +811,14 @@ anim::@29: scope:[anim] from anim::@13
to:anim::@25
anim::@25: scope:[anim] from anim::@29
(byte*) SCREEN#57 ← phi( anim::@29/(byte*) SCREEN#58 )
(signed byte*) yp#17 ← phi( anim::@29/(signed byte*) yp#1 )
(signed byte*) xp#17 ← phi( anim::@29/(signed byte*) xp#1 )
(signed byte*) pp#17 ← phi( anim::@29/(signed byte*) pp#1 )
(word*) psp2#23 ← phi( anim::@29/(word*) psp2#7 )
(word*) psp1#23 ← phi( anim::@29/(word*) psp1#7 )
(signed byte*) PERSP_Z#18 ← phi( anim::@29/(signed byte*) PERSP_Z#4 )
(byte*) mulf_sqr2#20 ← phi( anim::@29/(byte*) mulf_sqr2#6 )
(byte*) mulf_sqr1#20 ← phi( anim::@29/(byte*) mulf_sqr1#6 )
(signed byte*) yp#18 ← phi( anim::@29/(signed byte*) yp#1 )
(signed byte*) xp#18 ← phi( anim::@29/(signed byte*) xp#1 )
(signed byte*) pp#18 ← phi( anim::@29/(signed byte*) pp#1 )
(signed byte*) zr#18 ← phi( anim::@29/(signed byte*) zr#1 )
(signed byte*) yr#18 ← phi( anim::@29/(signed byte*) yr#1 )
(signed byte*) xr#18 ← phi( anim::@29/(signed byte*) xr#1 )
@ -751,9 +836,14 @@ anim::@25: scope:[anim] from anim::@29
anim::@30: scope:[anim] from anim::@25
(byte*) SCREEN#72 ← phi( anim::@25/(byte*) SCREEN#57 )
(byte*) print_screen#62 ← phi( anim::@25/(byte*) print_screen#30 )
(signed byte*) yp#15 ← phi( anim::@25/(signed byte*) yp#17 )
(signed byte*) xp#15 ← phi( anim::@25/(signed byte*) xp#17 )
(signed byte*) pp#15 ← phi( anim::@25/(signed byte*) pp#17 )
(word*) psp2#21 ← phi( anim::@25/(word*) psp2#23 )
(word*) psp1#21 ← phi( anim::@25/(word*) psp1#23 )
(signed byte*) PERSP_Z#16 ← phi( anim::@25/(signed byte*) PERSP_Z#18 )
(byte*) mulf_sqr2#18 ← phi( anim::@25/(byte*) mulf_sqr2#20 )
(byte*) mulf_sqr1#18 ← phi( anim::@25/(byte*) mulf_sqr1#20 )
(signed byte*) yp#16 ← phi( anim::@25/(signed byte*) yp#18 )
(signed byte*) xp#16 ← phi( anim::@25/(signed byte*) xp#18 )
(signed byte*) pp#16 ← phi( anim::@25/(signed byte*) pp#18 )
(signed byte*) zr#16 ← phi( anim::@25/(signed byte*) zr#18 )
(signed byte*) yr#16 ← phi( anim::@25/(signed byte*) yr#18 )
(signed byte*) xr#16 ← phi( anim::@25/(signed byte*) xr#18 )
@ -1459,17 +1549,17 @@ sprites_init::@return: scope:[sprites_init] from sprites_init::@1
return
to:@return
@28: scope:[] from @24
(signed byte*) yp#21 ← phi( @24/(signed byte*) yp#22 )
(signed byte*) xp#21 ← phi( @24/(signed byte*) xp#22 )
(signed byte*) pp#21 ← phi( @24/(signed byte*) pp#22 )
(signed byte*) yp#22 ← phi( @24/(signed byte*) yp#23 )
(signed byte*) xp#22 ← phi( @24/(signed byte*) xp#23 )
(signed byte*) pp#22 ← phi( @24/(signed byte*) pp#23 )
(signed byte*) zr#22 ← phi( @24/(signed byte*) zr#23 )
(signed byte*) yr#22 ← phi( @24/(signed byte*) yr#23 )
(signed byte*) xr#22 ← phi( @24/(signed byte*) xr#23 )
(signed byte) sz#28 ← phi( @24/(signed byte) sz#0 )
(byte*) SCREEN#24 ← phi( @24/(byte*) SCREEN#26 )
(byte*) print_screen#47 ← phi( @24/(byte*) print_screen#49 )
(word*) psp2#4 ← phi( @24/(word*) psp2#5 )
(word*) psp1#4 ← phi( @24/(word*) psp1#5 )
(word*) psp2#9 ← phi( @24/(word*) psp2#11 )
(word*) psp1#9 ← phi( @24/(word*) psp1#11 )
(signed byte) sy#25 ← phi( @24/(signed byte) sy#2 )
(signed byte) sx#23 ← phi( @24/(signed byte) sx#2 )
(byte*) print_char_cursor#21 ← phi( @24/(byte*) print_char_cursor#23 )
@ -1549,6 +1639,14 @@ store_matrix::@return: scope:[store_matrix] from store_matrix
return
to:@return
rotate_matrix: scope:[rotate_matrix] from anim::@13
(signed byte*) xp#2 ← phi( anim::@13/(signed byte*) xp#3 )
(signed byte*) yp#2 ← phi( anim::@13/(signed byte*) yp#3 )
(word*) psp2#2 ← phi( anim::@13/(word*) psp2#4 )
(word*) psp1#2 ← phi( anim::@13/(word*) psp1#4 )
(signed byte*) pp#2 ← phi( anim::@13/(signed byte*) pp#3 )
(signed byte*) PERSP_Z#1 ← phi( anim::@13/(signed byte*) PERSP_Z#2 )
(byte*) mulf_sqr2#2 ← phi( anim::@13/(byte*) mulf_sqr2#4 )
(byte*) mulf_sqr1#2 ← phi( anim::@13/(byte*) mulf_sqr1#4 )
(signed byte*) zr#2 ← phi( anim::@13/(signed byte*) zr#3 )
(signed byte) rotate_matrix::z#1 ← phi( anim::@13/(signed byte) rotate_matrix::z#0 )
(signed byte*) yr#2 ← phi( anim::@13/(signed byte*) yr#3 )
@ -1564,17 +1662,17 @@ rotate_matrix::@return: scope:[rotate_matrix] from rotate_matrix
return
to:@return
@33: scope:[] from @28
(signed byte*) yp#20 ← phi( @28/(signed byte*) yp#21 )
(signed byte*) xp#20 ← phi( @28/(signed byte*) xp#21 )
(signed byte*) pp#20 ← phi( @28/(signed byte*) pp#21 )
(signed byte*) yp#21 ← phi( @28/(signed byte*) yp#22 )
(signed byte*) xp#21 ← phi( @28/(signed byte*) xp#22 )
(signed byte*) pp#21 ← phi( @28/(signed byte*) pp#22 )
(signed byte*) zr#21 ← phi( @28/(signed byte*) zr#22 )
(signed byte*) yr#21 ← phi( @28/(signed byte*) yr#22 )
(signed byte*) xr#21 ← phi( @28/(signed byte*) xr#22 )
(signed byte) sz#25 ← phi( @28/(signed byte) sz#28 )
(byte*) SCREEN#21 ← phi( @28/(byte*) SCREEN#24 )
(byte*) print_screen#44 ← phi( @28/(byte*) print_screen#47 )
(word*) psp2#3 ← phi( @28/(word*) psp2#4 )
(word*) psp1#3 ← phi( @28/(word*) psp1#4 )
(word*) psp2#5 ← phi( @28/(word*) psp2#9 )
(word*) psp1#5 ← phi( @28/(word*) psp1#9 )
(signed byte) sy#18 ← phi( @28/(signed byte) sy#25 )
(signed byte) sx#17 ← phi( @28/(signed byte) sx#23 )
(byte*) print_char_cursor#18 ← phi( @28/(byte*) print_char_cursor#21 )
@ -1868,6 +1966,26 @@ SYMBOL TABLE SSA
(byte) ORANGE#0
(signed byte*) PERSP_Z
(signed byte*) PERSP_Z#0
(signed byte*) PERSP_Z#1
(signed byte*) PERSP_Z#10
(signed byte*) PERSP_Z#11
(signed byte*) PERSP_Z#12
(signed byte*) PERSP_Z#13
(signed byte*) PERSP_Z#14
(signed byte*) PERSP_Z#15
(signed byte*) PERSP_Z#16
(signed byte*) PERSP_Z#17
(signed byte*) PERSP_Z#18
(signed byte*) PERSP_Z#19
(signed byte*) PERSP_Z#2
(signed byte*) PERSP_Z#20
(signed byte*) PERSP_Z#3
(signed byte*) PERSP_Z#4
(signed byte*) PERSP_Z#5
(signed byte*) PERSP_Z#6
(signed byte*) PERSP_Z#7
(signed byte*) PERSP_Z#8
(signed byte*) PERSP_Z#9
(byte) PINK
(byte) PINK#0
(byte*) PROCPORT
@ -2610,11 +2728,47 @@ SYMBOL TABLE SSA
(byte*) mulf_sqr1
(byte*) mulf_sqr1#0
(byte*) mulf_sqr1#1
(byte*) mulf_sqr1#10
(byte*) mulf_sqr1#11
(byte*) mulf_sqr1#12
(byte*) mulf_sqr1#13
(byte*) mulf_sqr1#14
(byte*) mulf_sqr1#15
(byte*) mulf_sqr1#16
(byte*) mulf_sqr1#17
(byte*) mulf_sqr1#18
(byte*) mulf_sqr1#19
(byte*) mulf_sqr1#2
(byte*) mulf_sqr1#20
(byte*) mulf_sqr1#3
(byte*) mulf_sqr1#4
(byte*) mulf_sqr1#5
(byte*) mulf_sqr1#6
(byte*) mulf_sqr1#7
(byte*) mulf_sqr1#8
(byte*) mulf_sqr1#9
(byte*) mulf_sqr2
(byte*) mulf_sqr2#0
(byte*) mulf_sqr2#1
(byte*) mulf_sqr2#10
(byte*) mulf_sqr2#11
(byte*) mulf_sqr2#12
(byte*) mulf_sqr2#13
(byte*) mulf_sqr2#14
(byte*) mulf_sqr2#15
(byte*) mulf_sqr2#16
(byte*) mulf_sqr2#17
(byte*) mulf_sqr2#18
(byte*) mulf_sqr2#19
(byte*) mulf_sqr2#2
(byte*) mulf_sqr2#20
(byte*) mulf_sqr2#3
(byte*) mulf_sqr2#4
(byte*) mulf_sqr2#5
(byte*) mulf_sqr2#6
(byte*) mulf_sqr2#7
(byte*) mulf_sqr2#8
(byte*) mulf_sqr2#9
(signed byte*) pp
(signed byte*) pp#0
(signed byte*) pp#1
@ -2632,6 +2786,7 @@ SYMBOL TABLE SSA
(signed byte*) pp#20
(signed byte*) pp#21
(signed byte*) pp#22
(signed byte*) pp#23
(signed byte*) pp#3
(signed byte*) pp#4
(signed byte*) pp#5
@ -2942,17 +3097,53 @@ SYMBOL TABLE SSA
(word*) psp1
(word*) psp1#0
(word*) psp1#1
(word*) psp1#10
(word*) psp1#11
(word*) psp1#12
(word*) psp1#13
(word*) psp1#14
(word*) psp1#15
(word*) psp1#16
(word*) psp1#17
(word*) psp1#18
(word*) psp1#19
(word*) psp1#2
(word*) psp1#20
(word*) psp1#21
(word*) psp1#22
(word*) psp1#23
(word*) psp1#3
(word*) psp1#4
(word*) psp1#5
(word*) psp1#6
(word*) psp1#7
(word*) psp1#8
(word*) psp1#9
(word*) psp2
(word*) psp2#0
(word*) psp2#1
(word*) psp2#10
(word*) psp2#11
(word*) psp2#12
(word*) psp2#13
(word*) psp2#14
(word*) psp2#15
(word*) psp2#16
(word*) psp2#17
(word*) psp2#18
(word*) psp2#19
(word*) psp2#2
(word*) psp2#20
(word*) psp2#21
(word*) psp2#22
(word*) psp2#23
(word*) psp2#3
(word*) psp2#4
(word*) psp2#5
(word*) psp2#6
(word*) psp2#7
(word*) psp2#8
(word*) psp2#9
(void()) rotate_matrix((signed byte) rotate_matrix::x , (signed byte) rotate_matrix::y , (signed byte) rotate_matrix::z)
(label) rotate_matrix::@return
(signed byte) rotate_matrix::x
@ -3100,6 +3291,7 @@ SYMBOL TABLE SSA
(signed byte*) xp#20
(signed byte*) xp#21
(signed byte*) xp#22
(signed byte*) xp#23
(signed byte*) xp#3
(signed byte*) xp#4
(signed byte*) xp#5
@ -3155,6 +3347,7 @@ SYMBOL TABLE SSA
(signed byte*) yp#20
(signed byte*) yp#21
(signed byte*) yp#22
(signed byte*) yp#23
(signed byte*) yp#3
(signed byte*) yp#4
(signed byte*) yp#5
@ -3238,10 +3431,10 @@ Alias (byte) print_byte_at::b#1 = (byte) print_byte_at::b#2
Alias (byte*) print_byte_at::at#1 = (byte*) print_byte_at::at#2
Alias (byte*) print_char_at::at#3 = (byte*~) print_byte_at::$3
Alias (byte*) print_line_cursor#1 = (byte*) print_screen#3 (byte*) print_screen#2 (byte*) print_char_cursor#1 (byte*) print_line_cursor#8 (byte*) print_char_cursor#8 (byte*) print_line_cursor#2 (byte*) print_char_cursor#2
Alias (byte*) mulf_sqr1#1 = (byte*) mulf_sqr1#2
Alias (word*) psp1#1 = (word*) psp1#2
Alias (byte*) mulf_sqr2#1 = (byte*) mulf_sqr2#2
Alias (word*) psp2#1 = (word*) psp2#2
Alias (byte*) mulf_sqr1#1 = (byte*) mulf_sqr1#3 (byte*) mulf_sqr1#19
Alias (word*) psp1#1 = (word*) psp1#3 (word*) psp1#22
Alias (byte*) mulf_sqr2#1 = (byte*) mulf_sqr2#3 (byte*) mulf_sqr2#19
Alias (word*) psp2#1 = (word*) psp2#3 (word*) psp2#22
Alias (byte*) print_line_cursor#14 = (byte*) print_line_cursor#19
Alias (byte*) print_char_cursor#14 = (byte*) print_char_cursor#19
Alias (signed byte) sx#13 = (signed byte) sx#18 (signed byte) sx#24
@ -3256,22 +3449,23 @@ Alias (signed byte*) SINQ#13 = (signed byte*) SINQ#15 (signed byte*) SINQ#17
Alias (signed byte*) xr#17 = (signed byte*) xr#19 (signed byte*) xr#20
Alias (signed byte*) yr#17 = (signed byte*) yr#19 (signed byte*) yr#20
Alias (signed byte*) zr#17 = (signed byte*) zr#19 (signed byte*) zr#20
Alias (signed byte*) pp#16 = (signed byte*) pp#18 (signed byte*) pp#19
Alias (signed byte*) xp#16 = (signed byte*) xp#18 (signed byte*) xp#19
Alias (signed byte*) yp#16 = (signed byte*) yp#18 (signed byte*) yp#19
Alias (signed byte*) pp#17 = (signed byte*) pp#19 (signed byte*) pp#20
Alias (signed byte*) xp#17 = (signed byte*) xp#19 (signed byte*) xp#20
Alias (signed byte*) yp#17 = (signed byte*) yp#19 (signed byte*) yp#20
Alias (signed byte*) PERSP_Z#17 = (signed byte*) PERSP_Z#19 (signed byte*) PERSP_Z#20
Alias (byte*) print_line_cursor#10 = (byte*) print_line_cursor#3 (byte*) print_line_cursor#9 (byte*) print_line_cursor#15 (byte*) print_line_cursor#4
Alias (byte*) print_char_cursor#10 = (byte*) print_char_cursor#3 (byte*) print_char_cursor#9 (byte*) print_char_cursor#15 (byte*) print_char_cursor#4
Alias (signed byte) sx#0 = (signed byte) sx#6 (signed byte) sx#7 (signed byte) sx#1
Alias (signed byte) sy#0 = (signed byte) sy#6 (signed byte) sy#7 (signed byte) sy#1
Alias (word*) psp1#0 = (word*) psp1#5 (word*) psp1#4 (word*) psp1#3
Alias (word*) psp2#0 = (word*) psp2#5 (word*) psp2#4 (word*) psp2#3
Alias (word*) psp1#0 = (word*) psp1#11 (word*) psp1#9 (word*) psp1#5
Alias (word*) psp2#0 = (word*) psp2#11 (word*) psp2#9 (word*) psp2#5
Alias (byte*) SCREEN#0 = (byte*) SCREEN#26 (byte*) SCREEN#24 (byte*) SCREEN#21
Alias (signed byte*) xr#0 = (signed byte*) xr#23 (signed byte*) xr#22 (signed byte*) xr#21
Alias (signed byte*) yr#0 = (signed byte*) yr#23 (signed byte*) yr#22 (signed byte*) yr#21
Alias (signed byte*) zr#0 = (signed byte*) zr#23 (signed byte*) zr#22 (signed byte*) zr#21
Alias (signed byte*) pp#0 = (signed byte*) pp#22 (signed byte*) pp#21 (signed byte*) pp#20
Alias (signed byte*) xp#0 = (signed byte*) xp#22 (signed byte*) xp#21 (signed byte*) xp#20
Alias (signed byte*) yp#0 = (signed byte*) yp#22 (signed byte*) yp#21 (signed byte*) yp#20
Alias (signed byte*) pp#0 = (signed byte*) pp#23 (signed byte*) pp#22 (signed byte*) pp#21
Alias (signed byte*) xp#0 = (signed byte*) xp#23 (signed byte*) xp#22 (signed byte*) xp#21
Alias (signed byte*) yp#0 = (signed byte*) yp#23 (signed byte*) yp#22 (signed byte*) yp#21
Alias (signed byte) sx#10 = (signed byte) sx#28 (signed byte) sx#16 (signed byte) sx#4
Alias (signed byte) sy#10 = (signed byte) sy#31 (signed byte) sy#16 (signed byte) sy#4
Alias (signed byte) sz#11 = (signed byte) sz#14
@ -3282,9 +3476,14 @@ Alias (signed byte*) SINQ#10 = (signed byte*) SINQ#8
Alias (signed byte*) xr#12 = (signed byte*) xr#14
Alias (signed byte*) yr#12 = (signed byte*) yr#14
Alias (signed byte*) zr#12 = (signed byte*) zr#14
Alias (signed byte*) pp#11 = (signed byte*) pp#13
Alias (signed byte*) xp#11 = (signed byte*) xp#13
Alias (signed byte*) yp#11 = (signed byte*) yp#13
Alias (signed byte*) pp#12 = (signed byte*) pp#14
Alias (signed byte*) xp#12 = (signed byte*) xp#14
Alias (signed byte*) yp#12 = (signed byte*) yp#14
Alias (byte*) mulf_sqr1#14 = (byte*) mulf_sqr1#16
Alias (byte*) mulf_sqr2#14 = (byte*) mulf_sqr2#16
Alias (signed byte*) PERSP_Z#12 = (signed byte*) PERSP_Z#14
Alias (word*) psp1#17 = (word*) psp1#19
Alias (word*) psp2#17 = (word*) psp2#19
Alias (byte*) print_screen#58 = (byte*) print_screen#60
Alias (byte*) SCREEN#68 = (byte*) SCREEN#70
Alias (signed byte) sx#25 = (signed byte) sx#29
@ -3297,9 +3496,14 @@ Alias (signed byte*) SINQ#6 = (signed byte*) SINQ#9
Alias (signed byte*) xr#10 = (signed byte*) xr#13
Alias (signed byte*) yr#10 = (signed byte*) yr#13
Alias (signed byte*) zr#10 = (signed byte*) zr#13
Alias (signed byte*) pp#12 = (signed byte*) pp#9
Alias (signed byte*) xp#12 = (signed byte*) xp#9
Alias (signed byte*) yp#12 = (signed byte*) yp#9
Alias (signed byte*) pp#10 = (signed byte*) pp#13
Alias (signed byte*) xp#10 = (signed byte*) xp#13
Alias (signed byte*) yp#10 = (signed byte*) yp#13
Alias (byte*) mulf_sqr1#12 = (byte*) mulf_sqr1#15
Alias (byte*) mulf_sqr2#12 = (byte*) mulf_sqr2#15
Alias (signed byte*) PERSP_Z#10 = (signed byte*) PERSP_Z#13
Alias (word*) psp1#15 = (word*) psp1#18
Alias (word*) psp2#15 = (word*) psp2#18
Alias (byte*) print_screen#56 = (byte*) print_screen#59
Alias (byte*) SCREEN#66 = (byte*) SCREEN#69
Alias (signed byte) sx#21 = (signed byte) sx#26
@ -3312,9 +3516,14 @@ Alias (signed byte*) SINQ#5 = (signed byte*) SINQ#7
Alias (signed byte*) xr#11 = (signed byte*) xr#9
Alias (signed byte*) yr#11 = (signed byte*) yr#9
Alias (signed byte*) zr#11 = (signed byte*) zr#9
Alias (signed byte*) pp#10 = (signed byte*) pp#8
Alias (signed byte*) xp#10 = (signed byte*) xp#8
Alias (signed byte*) yp#10 = (signed byte*) yp#8
Alias (signed byte*) pp#11 = (signed byte*) pp#9
Alias (signed byte*) xp#11 = (signed byte*) xp#9
Alias (signed byte*) yp#11 = (signed byte*) yp#9
Alias (byte*) mulf_sqr1#11 = (byte*) mulf_sqr1#13
Alias (byte*) mulf_sqr2#11 = (byte*) mulf_sqr2#13
Alias (signed byte*) PERSP_Z#11 = (signed byte*) PERSP_Z#9
Alias (word*) psp1#14 = (word*) psp1#16
Alias (word*) psp2#14 = (word*) psp2#16
Alias (byte*) print_screen#55 = (byte*) print_screen#57
Alias (byte*) SCREEN#65 = (byte*) SCREEN#67
Alias (signed byte) sx#14 = (signed byte) sx#20 (signed byte) sx#8 (signed byte) sx#31 (signed byte) sx#30
@ -3327,18 +3536,28 @@ Alias (signed byte*) SINQ#19 = (signed byte*) SINQ#4 (signed byte*) SINQ#3 (sign
Alias (signed byte*) xr#4 = (signed byte*) xr#8 (signed byte*) xr#7 (signed byte*) xr#6 (signed byte*) xr#5
Alias (signed byte*) yr#4 = (signed byte*) yr#8 (signed byte*) yr#7 (signed byte*) yr#6 (signed byte*) yr#5
Alias (signed byte*) zr#4 = (signed byte*) zr#8 (signed byte*) zr#7 (signed byte*) zr#6 (signed byte*) zr#5
Alias (signed byte*) pp#3 = (signed byte*) pp#7 (signed byte*) pp#6 (signed byte*) pp#5 (signed byte*) pp#4
Alias (signed byte*) xp#3 = (signed byte*) xp#7 (signed byte*) xp#6 (signed byte*) xp#5 (signed byte*) xp#4
Alias (signed byte*) yp#3 = (signed byte*) yp#7 (signed byte*) yp#6 (signed byte*) yp#5 (signed byte*) yp#4
Alias (signed byte*) pp#4 = (signed byte*) pp#8 (signed byte*) pp#7 (signed byte*) pp#6 (signed byte*) pp#5
Alias (signed byte*) xp#4 = (signed byte*) xp#8 (signed byte*) xp#7 (signed byte*) xp#6 (signed byte*) xp#5
Alias (signed byte*) yp#4 = (signed byte*) yp#8 (signed byte*) yp#7 (signed byte*) yp#6 (signed byte*) yp#5
Alias (byte*) mulf_sqr1#10 = (byte*) mulf_sqr1#9 (byte*) mulf_sqr1#8 (byte*) mulf_sqr1#7 (byte*) mulf_sqr1#5
Alias (byte*) mulf_sqr2#10 = (byte*) mulf_sqr2#9 (byte*) mulf_sqr2#8 (byte*) mulf_sqr2#7 (byte*) mulf_sqr2#5
Alias (signed byte*) PERSP_Z#3 = (signed byte*) PERSP_Z#8 (signed byte*) PERSP_Z#7 (signed byte*) PERSP_Z#6 (signed byte*) PERSP_Z#5
Alias (word*) psp1#10 = (word*) psp1#13 (word*) psp1#12 (word*) psp1#8 (word*) psp1#6
Alias (word*) psp2#10 = (word*) psp2#13 (word*) psp2#12 (word*) psp2#8 (word*) psp2#6
Alias (byte*) print_screen#46 = (byte*) print_screen#54 (byte*) print_screen#53 (byte*) print_screen#51 (byte*) print_screen#48
Alias (byte*) SCREEN#60 = (byte*) SCREEN#64 (byte*) SCREEN#63 (byte*) SCREEN#62 (byte*) SCREEN#61
Alias (signed byte*) xr#1 = (signed byte*) xr#3 (signed byte*) xr#18 (signed byte*) xr#16
Alias (byte) anim::i#2 = (byte) anim::i#3
Alias (signed byte*) yr#1 = (signed byte*) yr#3 (signed byte*) yr#18 (signed byte*) yr#16
Alias (signed byte*) zr#1 = (signed byte*) zr#3 (signed byte*) zr#18 (signed byte*) zr#16
Alias (signed byte*) pp#1 = (signed byte*) pp#2 (signed byte*) pp#17 (signed byte*) pp#15
Alias (signed byte*) xp#1 = (signed byte*) xp#2 (signed byte*) xp#17 (signed byte*) xp#15
Alias (signed byte*) yp#1 = (signed byte*) yp#2 (signed byte*) yp#17 (signed byte*) yp#15
Alias (signed byte*) pp#1 = (signed byte*) pp#3 (signed byte*) pp#18 (signed byte*) pp#16
Alias (signed byte*) xp#1 = (signed byte*) xp#3 (signed byte*) xp#18 (signed byte*) xp#16
Alias (signed byte*) yp#1 = (signed byte*) yp#3 (signed byte*) yp#18 (signed byte*) yp#16
Alias (byte*) mulf_sqr1#18 = (byte*) mulf_sqr1#6 (byte*) mulf_sqr1#4 (byte*) mulf_sqr1#20
Alias (byte*) mulf_sqr2#18 = (byte*) mulf_sqr2#6 (byte*) mulf_sqr2#4 (byte*) mulf_sqr2#20
Alias (signed byte*) PERSP_Z#16 = (signed byte*) PERSP_Z#4 (signed byte*) PERSP_Z#2 (signed byte*) PERSP_Z#18
Alias (word*) psp1#21 = (word*) psp1#7 (word*) psp1#4 (word*) psp1#23
Alias (word*) psp2#21 = (word*) psp2#7 (word*) psp2#4 (word*) psp2#23
Alias (signed byte) sx#15 = (signed byte) sx#22 (signed byte) sx#27 (signed byte) sx#9
Alias (signed byte) sy#15 = (signed byte) sy#23 (signed byte) sy#29 (signed byte) sy#9
Alias (byte*) print_screen#30 = (byte*) print_screen#43 (byte*) print_screen#45 (byte*) print_screen#62
@ -3482,9 +3701,14 @@ Self Phi Eliminated (signed byte*) SINQ#6
Self Phi Eliminated (signed byte*) xr#10
Self Phi Eliminated (signed byte*) yr#10
Self Phi Eliminated (signed byte*) zr#10
Self Phi Eliminated (signed byte*) pp#12
Self Phi Eliminated (signed byte*) xp#12
Self Phi Eliminated (signed byte*) yp#12
Self Phi Eliminated (signed byte*) pp#10
Self Phi Eliminated (signed byte*) xp#10
Self Phi Eliminated (signed byte*) yp#10
Self Phi Eliminated (byte*) mulf_sqr1#12
Self Phi Eliminated (byte*) mulf_sqr2#12
Self Phi Eliminated (signed byte*) PERSP_Z#10
Self Phi Eliminated (word*) psp1#15
Self Phi Eliminated (word*) psp2#15
Self Phi Eliminated (byte*) print_screen#56
Self Phi Eliminated (byte*) SCREEN#66
Self Phi Eliminated (signed byte) sx#21
@ -3497,9 +3721,14 @@ Self Phi Eliminated (signed byte*) SINQ#5
Self Phi Eliminated (signed byte*) xr#11
Self Phi Eliminated (signed byte*) yr#11
Self Phi Eliminated (signed byte*) zr#11
Self Phi Eliminated (signed byte*) pp#10
Self Phi Eliminated (signed byte*) xp#10
Self Phi Eliminated (signed byte*) yp#10
Self Phi Eliminated (signed byte*) pp#11
Self Phi Eliminated (signed byte*) xp#11
Self Phi Eliminated (signed byte*) yp#11
Self Phi Eliminated (byte*) mulf_sqr1#11
Self Phi Eliminated (byte*) mulf_sqr2#11
Self Phi Eliminated (signed byte*) PERSP_Z#11
Self Phi Eliminated (word*) psp1#14
Self Phi Eliminated (word*) psp2#14
Self Phi Eliminated (byte*) print_screen#55
Self Phi Eliminated (byte*) SCREEN#65
Self Phi Eliminated (signed byte) sx#14
@ -3512,9 +3741,14 @@ Self Phi Eliminated (signed byte*) SINQ#19
Self Phi Eliminated (signed byte*) xr#4
Self Phi Eliminated (signed byte*) yr#4
Self Phi Eliminated (signed byte*) zr#4
Self Phi Eliminated (signed byte*) pp#3
Self Phi Eliminated (signed byte*) xp#3
Self Phi Eliminated (signed byte*) yp#3
Self Phi Eliminated (signed byte*) pp#4
Self Phi Eliminated (signed byte*) xp#4
Self Phi Eliminated (signed byte*) yp#4
Self Phi Eliminated (byte*) mulf_sqr1#10
Self Phi Eliminated (byte*) mulf_sqr2#10
Self Phi Eliminated (signed byte*) PERSP_Z#3
Self Phi Eliminated (word*) psp1#10
Self Phi Eliminated (word*) psp2#10
Self Phi Eliminated (byte*) print_screen#46
Self Phi Eliminated (byte*) SCREEN#60
Self Phi Eliminated (signed byte*) xr#1
@ -3523,6 +3757,11 @@ Self Phi Eliminated (signed byte*) zr#1
Self Phi Eliminated (signed byte*) pp#1
Self Phi Eliminated (signed byte*) xp#1
Self Phi Eliminated (signed byte*) yp#1
Self Phi Eliminated (byte*) mulf_sqr1#18
Self Phi Eliminated (byte*) mulf_sqr2#18
Self Phi Eliminated (signed byte*) PERSP_Z#16
Self Phi Eliminated (word*) psp1#21
Self Phi Eliminated (word*) psp2#21
Self Phi Eliminated (signed byte) sx#15
Self Phi Eliminated (signed byte) sy#15
Self Phi Eliminated (byte*) print_screen#30
@ -3565,9 +3804,10 @@ Redundant Phi (signed byte*) SINQ#13 (signed byte*) SINQ#0
Redundant Phi (signed byte*) xr#17 (signed byte*) xr#0
Redundant Phi (signed byte*) yr#17 (signed byte*) yr#0
Redundant Phi (signed byte*) zr#17 (signed byte*) zr#0
Redundant Phi (signed byte*) pp#16 (signed byte*) pp#0
Redundant Phi (signed byte*) xp#16 (signed byte*) xp#0
Redundant Phi (signed byte*) yp#16 (signed byte*) yp#0
Redundant Phi (signed byte*) pp#17 (signed byte*) pp#0
Redundant Phi (signed byte*) xp#17 (signed byte*) xp#0
Redundant Phi (signed byte*) yp#17 (signed byte*) yp#0
Redundant Phi (signed byte*) PERSP_Z#17 (signed byte*) PERSP_Z#0
Redundant Phi (byte*) print_line_cursor#10 (byte*) print_line_cursor#12
Redundant Phi (byte*) print_char_cursor#10 (byte*) print_char_cursor#12
Redundant Phi (signed byte) sx#0 (signed byte) sx#10
@ -3582,9 +3822,14 @@ Redundant Phi (signed byte*) SINQ#11 (signed byte*) SINQ#13
Redundant Phi (signed byte*) xr#15 (signed byte*) xr#17
Redundant Phi (signed byte*) yr#15 (signed byte*) yr#17
Redundant Phi (signed byte*) zr#15 (signed byte*) zr#17
Redundant Phi (signed byte*) pp#14 (signed byte*) pp#16
Redundant Phi (signed byte*) xp#14 (signed byte*) xp#16
Redundant Phi (signed byte*) yp#14 (signed byte*) yp#16
Redundant Phi (signed byte*) pp#15 (signed byte*) pp#17
Redundant Phi (signed byte*) xp#15 (signed byte*) xp#17
Redundant Phi (signed byte*) yp#15 (signed byte*) yp#17
Redundant Phi (byte*) mulf_sqr1#17 (byte*) mulf_sqr1#1
Redundant Phi (byte*) mulf_sqr2#17 (byte*) mulf_sqr2#1
Redundant Phi (signed byte*) PERSP_Z#15 (signed byte*) PERSP_Z#17
Redundant Phi (word*) psp1#20 (word*) psp1#1
Redundant Phi (word*) psp2#20 (word*) psp2#1
Redundant Phi (byte*) print_screen#61 (byte*) print_screen#29
Redundant Phi (byte*) SCREEN#71 (byte*) SCREEN#17
Redundant Phi (signed byte) sx#25 (signed byte) sx#10
@ -3597,9 +3842,14 @@ Redundant Phi (signed byte*) SINQ#6 (signed byte*) SINQ#10
Redundant Phi (signed byte*) xr#10 (signed byte*) xr#12
Redundant Phi (signed byte*) yr#10 (signed byte*) yr#12
Redundant Phi (signed byte*) zr#10 (signed byte*) zr#12
Redundant Phi (signed byte*) pp#12 (signed byte*) pp#11
Redundant Phi (signed byte*) xp#12 (signed byte*) xp#11
Redundant Phi (signed byte*) yp#12 (signed byte*) yp#11
Redundant Phi (signed byte*) pp#10 (signed byte*) pp#12
Redundant Phi (signed byte*) xp#10 (signed byte*) xp#12
Redundant Phi (signed byte*) yp#10 (signed byte*) yp#12
Redundant Phi (byte*) mulf_sqr1#12 (byte*) mulf_sqr1#14
Redundant Phi (byte*) mulf_sqr2#12 (byte*) mulf_sqr2#14
Redundant Phi (signed byte*) PERSP_Z#10 (signed byte*) PERSP_Z#12
Redundant Phi (word*) psp1#15 (word*) psp1#17
Redundant Phi (word*) psp2#15 (word*) psp2#17
Redundant Phi (byte*) print_screen#56 (byte*) print_screen#58
Redundant Phi (byte*) SCREEN#66 (byte*) SCREEN#68
Redundant Phi (signed byte) sx#21 (signed byte) sx#25
@ -3612,9 +3862,14 @@ Redundant Phi (signed byte*) SINQ#5 (signed byte*) SINQ#6
Redundant Phi (signed byte*) xr#11 (signed byte*) xr#10
Redundant Phi (signed byte*) yr#11 (signed byte*) yr#10
Redundant Phi (signed byte*) zr#11 (signed byte*) zr#10
Redundant Phi (signed byte*) pp#10 (signed byte*) pp#12
Redundant Phi (signed byte*) xp#10 (signed byte*) xp#12
Redundant Phi (signed byte*) yp#10 (signed byte*) yp#12
Redundant Phi (signed byte*) pp#11 (signed byte*) pp#10
Redundant Phi (signed byte*) xp#11 (signed byte*) xp#10
Redundant Phi (signed byte*) yp#11 (signed byte*) yp#10
Redundant Phi (byte*) mulf_sqr1#11 (byte*) mulf_sqr1#12
Redundant Phi (byte*) mulf_sqr2#11 (byte*) mulf_sqr2#12
Redundant Phi (signed byte*) PERSP_Z#11 (signed byte*) PERSP_Z#10
Redundant Phi (word*) psp1#14 (word*) psp1#15
Redundant Phi (word*) psp2#14 (word*) psp2#15
Redundant Phi (byte*) print_screen#55 (byte*) print_screen#56
Redundant Phi (byte*) SCREEN#65 (byte*) SCREEN#66
Redundant Phi (signed byte) sx#14 (signed byte) sx#21
@ -3627,17 +3882,27 @@ Redundant Phi (signed byte*) SINQ#19 (signed byte*) SINQ#5
Redundant Phi (signed byte*) xr#4 (signed byte*) xr#11
Redundant Phi (signed byte*) yr#4 (signed byte*) yr#11
Redundant Phi (signed byte*) zr#4 (signed byte*) zr#11
Redundant Phi (signed byte*) pp#3 (signed byte*) pp#10
Redundant Phi (signed byte*) xp#3 (signed byte*) xp#10
Redundant Phi (signed byte*) yp#3 (signed byte*) yp#10
Redundant Phi (signed byte*) pp#4 (signed byte*) pp#11
Redundant Phi (signed byte*) xp#4 (signed byte*) xp#11
Redundant Phi (signed byte*) yp#4 (signed byte*) yp#11
Redundant Phi (byte*) mulf_sqr1#10 (byte*) mulf_sqr1#11
Redundant Phi (byte*) mulf_sqr2#10 (byte*) mulf_sqr2#11
Redundant Phi (signed byte*) PERSP_Z#3 (signed byte*) PERSP_Z#11
Redundant Phi (word*) psp1#10 (word*) psp1#14
Redundant Phi (word*) psp2#10 (word*) psp2#14
Redundant Phi (byte*) print_screen#46 (byte*) print_screen#55
Redundant Phi (byte*) SCREEN#60 (byte*) SCREEN#65
Redundant Phi (signed byte*) xr#1 (signed byte*) xr#4
Redundant Phi (signed byte*) yr#1 (signed byte*) yr#4
Redundant Phi (signed byte*) zr#1 (signed byte*) zr#4
Redundant Phi (signed byte*) pp#1 (signed byte*) pp#3
Redundant Phi (signed byte*) xp#1 (signed byte*) xp#3
Redundant Phi (signed byte*) yp#1 (signed byte*) yp#3
Redundant Phi (signed byte*) pp#1 (signed byte*) pp#4
Redundant Phi (signed byte*) xp#1 (signed byte*) xp#4
Redundant Phi (signed byte*) yp#1 (signed byte*) yp#4
Redundant Phi (byte*) mulf_sqr1#18 (byte*) mulf_sqr1#10
Redundant Phi (byte*) mulf_sqr2#18 (byte*) mulf_sqr2#10
Redundant Phi (signed byte*) PERSP_Z#16 (signed byte*) PERSP_Z#3
Redundant Phi (word*) psp1#21 (word*) psp1#10
Redundant Phi (word*) psp2#21 (word*) psp2#10
Redundant Phi (signed byte) sx#15 (signed byte) sx#14
Redundant Phi (signed byte) sy#15 (signed byte) sy#14
Redundant Phi (byte*) print_screen#30 (byte*) print_screen#46
@ -3681,6 +3946,14 @@ Redundant Phi (signed byte) rotate_matrix::y#1 (signed byte) rotate_matrix::y#0
Redundant Phi (signed byte*) yr#2 (signed byte*) yr#1
Redundant Phi (signed byte) rotate_matrix::z#1 (signed byte) rotate_matrix::z#0
Redundant Phi (signed byte*) zr#2 (signed byte*) zr#1
Redundant Phi (byte*) mulf_sqr1#2 (byte*) mulf_sqr1#18
Redundant Phi (byte*) mulf_sqr2#2 (byte*) mulf_sqr2#18
Redundant Phi (signed byte*) PERSP_Z#1 (signed byte*) PERSP_Z#16
Redundant Phi (signed byte*) pp#2 (signed byte*) pp#1
Redundant Phi (word*) psp1#2 (word*) psp1#21
Redundant Phi (word*) psp2#2 (word*) psp2#21
Redundant Phi (signed byte*) yp#2 (signed byte*) yp#1
Redundant Phi (signed byte*) xp#2 (signed byte*) xp#1
Redundant Phi (byte*) print_line_cursor#13 (byte*) print_line_cursor#10
Redundant Phi (byte*) print_char_cursor#13 (byte*) print_char_cursor#10
Redundant Phi (signed byte) sx#12 (signed byte) sx#0
@ -3977,8 +4250,8 @@ if() condition always true - replacing block destination [44] if(true) goto anim
Successful SSA optimization Pass2ConstantIfs
Successful SSA optimization PassNEliminateUnusedVars
Eliminating Noop Cast (byte) print_byte_at::b#0 ← ((byte)) (signed byte) print_sbyte_at::b#24
Eliminating Noop Cast (byte~) anim::$7 ← ((byte)) *((signed byte*) xp#11)
Eliminating Noop Cast (byte~) anim::$9 ← ((byte)) *((signed byte*) yp#11)
Eliminating Noop Cast (byte~) anim::$7 ← ((byte)) *((signed byte*) xp#12)
Eliminating Noop Cast (byte~) anim::$9 ← ((byte)) *((signed byte*) yp#12)
Successful SSA optimization Pass2NopCastElimination
Removing unused block anim::@return
Successful SSA optimization Pass2EliminateUnusedBlocks
@ -4029,9 +4302,14 @@ Self Phi Eliminated (signed byte*) SINQ#10
Self Phi Eliminated (signed byte*) xr#12
Self Phi Eliminated (signed byte*) yr#12
Self Phi Eliminated (signed byte*) zr#12
Self Phi Eliminated (signed byte*) pp#11
Self Phi Eliminated (signed byte*) xp#11
Self Phi Eliminated (signed byte*) yp#11
Self Phi Eliminated (signed byte*) pp#12
Self Phi Eliminated (signed byte*) xp#12
Self Phi Eliminated (signed byte*) yp#12
Self Phi Eliminated (byte*) mulf_sqr1#14
Self Phi Eliminated (byte*) mulf_sqr2#14
Self Phi Eliminated (signed byte*) PERSP_Z#12
Self Phi Eliminated (word*) psp1#17
Self Phi Eliminated (word*) psp2#17
Self Phi Eliminated (byte*) print_screen#58
Self Phi Eliminated (byte*) SCREEN#68
Self Phi Eliminated (byte*) debug_print_init::at_line#1
@ -4045,9 +4323,14 @@ Redundant Phi (signed byte*) SINQ#10 (const signed byte*) SINQ#0
Redundant Phi (signed byte*) xr#12 (const signed byte*) xr#0
Redundant Phi (signed byte*) yr#12 (const signed byte*) yr#0
Redundant Phi (signed byte*) zr#12 (const signed byte*) zr#0
Redundant Phi (signed byte*) pp#11 (const signed byte*) pp#0
Redundant Phi (signed byte*) xp#11 (const signed byte*) xp#0
Redundant Phi (signed byte*) yp#11 (const signed byte*) yp#0
Redundant Phi (signed byte*) pp#12 (const signed byte*) pp#0
Redundant Phi (signed byte*) xp#12 (const signed byte*) xp#0
Redundant Phi (signed byte*) yp#12 (const signed byte*) yp#0
Redundant Phi (byte*) mulf_sqr1#14 (const byte*) mulf_sqr1#0
Redundant Phi (byte*) mulf_sqr2#14 (const byte*) mulf_sqr2#0
Redundant Phi (signed byte*) PERSP_Z#12 (const signed byte*) PERSP_Z#0
Redundant Phi (word*) psp1#17 (const word*) psp1#0
Redundant Phi (word*) psp2#17 (const word*) psp2#0
Redundant Phi (byte*) print_screen#58 (const byte*) print_line_cursor#0
Redundant Phi (byte*) SCREEN#68 (const byte*) SCREEN#0
Redundant Phi (byte*) debug_print_init::at_line#1 (const byte*) debug_print_init::at_line#0

View File

@ -1,5 +1,6 @@
Resolved forward reference mulf_sqr1 to (byte[$200]) mulf_sqr1
Resolved forward reference mulf_sqr2 to (byte[$200]) mulf_sqr2
Resolved forward reference PERSP_Z to (signed byte*) PERSP_Z
Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx
CONTROL FLOW GRAPH SSA
@ -257,26 +258,28 @@ print_cls::@return: scope:[print_cls] from print_cls::@2
(word*) psp2#0 ← ((word*)) (byte/word/signed word/dword/signed dword) $f5
to:@26
main: scope:[main] from @27
(signed byte*) PERSP_Z#12 ← phi( @27/(signed byte*) PERSP_Z#0 )
(signed byte*) zr#12 ← phi( @27/(signed byte*) zr#13 )
(signed byte*) yr#15 ← phi( @27/(signed byte*) yr#16 )
(signed byte*) xr#13 ← phi( @27/(signed byte*) xr#14 )
(byte*) print_char_cursor#76 ← phi( @27/(byte*) print_char_cursor#73 )
(byte*) print_line_cursor#25 ← phi( @27/(byte*) print_line_cursor#24 )
(byte*) print_screen#5 ← phi( @27/(byte*) print_screen#6 )
(word*) psp2#2 ← phi( @27/(word*) psp2#3 )
(word*) psp1#2 ← phi( @27/(word*) psp1#3 )
(word*) psp2#3 ← phi( @27/(word*) psp2#5 )
(word*) psp1#3 ← phi( @27/(word*) psp1#5 )
asm { sei }
call mulf_init
to:main::@1
main::@1: scope:[main] from main
(signed byte*) PERSP_Z#11 ← phi( main/(signed byte*) PERSP_Z#12 )
(signed byte*) zr#11 ← phi( main/(signed byte*) zr#12 )
(signed byte*) yr#14 ← phi( main/(signed byte*) yr#15 )
(signed byte*) xr#12 ← phi( main/(signed byte*) xr#13 )
(byte*) print_char_cursor#70 ← phi( main/(byte*) print_char_cursor#76 )
(byte*) print_line_cursor#22 ← phi( main/(byte*) print_line_cursor#25 )
(byte*) print_screen#4 ← phi( main/(byte*) print_screen#5 )
(word*) psp2#1 ← phi( main/(word*) psp2#2 )
(word*) psp1#1 ← phi( main/(word*) psp1#2 )
(word*) psp2#1 ← phi( main/(word*) psp2#3 )
(word*) psp1#1 ← phi( main/(word*) psp1#3 )
(word~) main::$1 ← ((word)) (byte[$200]) mulf_sqr1#0
*((word*) psp1#1) ← (word~) main::$1
(word~) main::$2 ← ((word)) (byte[$200]) mulf_sqr2#0
@ -284,6 +287,9 @@ main::@1: scope:[main] from main
call print_cls
to:main::@2
main::@2: scope:[main] from main::@1
(word*) psp2#14 ← phi( main::@1/(word*) psp2#1 )
(word*) psp1#14 ← phi( main::@1/(word*) psp1#1 )
(signed byte*) PERSP_Z#10 ← phi( main::@1/(signed byte*) PERSP_Z#11 )
(signed byte*) zr#10 ← phi( main::@1/(signed byte*) zr#11 )
(signed byte*) yr#13 ← phi( main::@1/(signed byte*) yr#14 )
(signed byte*) xr#11 ← phi( main::@1/(signed byte*) xr#12 )
@ -312,6 +318,9 @@ main::@return: scope:[main] from main::@3
to:@return
do_perspective: scope:[do_perspective] from main::@2
(byte*) print_line_cursor#40 ← phi( main::@2/(byte*) print_line_cursor#5 )
(word*) psp2#13 ← phi( main::@2/(word*) psp2#14 )
(word*) psp1#13 ← phi( main::@2/(word*) psp1#14 )
(signed byte*) PERSP_Z#9 ← phi( main::@2/(signed byte*) PERSP_Z#10 )
(signed byte*) zr#9 ← phi( main::@2/(signed byte*) zr#10 )
(signed byte*) yr#12 ← phi( main::@2/(signed byte*) yr#13 )
(signed byte*) xr#10 ← phi( main::@2/(signed byte*) xr#11 )
@ -324,6 +333,9 @@ do_perspective: scope:[do_perspective] from main::@2
to:do_perspective::@1
do_perspective::@1: scope:[do_perspective] from do_perspective
(byte*) print_line_cursor#39 ← phi( do_perspective/(byte*) print_line_cursor#40 )
(word*) psp2#12 ← phi( do_perspective/(word*) psp2#13 )
(word*) psp1#12 ← phi( do_perspective/(word*) psp1#13 )
(signed byte*) PERSP_Z#8 ← phi( do_perspective/(signed byte*) PERSP_Z#9 )
(signed byte*) zr#8 ← phi( do_perspective/(signed byte*) zr#9 )
(signed byte*) yr#11 ← phi( do_perspective/(signed byte*) yr#12 )
(signed byte*) xr#9 ← phi( do_perspective/(signed byte*) xr#10 )
@ -337,6 +349,9 @@ do_perspective::@1: scope:[do_perspective] from do_perspective
to:do_perspective::@2
do_perspective::@2: scope:[do_perspective] from do_perspective::@1
(byte*) print_line_cursor#38 ← phi( do_perspective::@1/(byte*) print_line_cursor#39 )
(word*) psp2#11 ← phi( do_perspective::@1/(word*) psp2#12 )
(word*) psp1#11 ← phi( do_perspective::@1/(word*) psp1#12 )
(signed byte*) PERSP_Z#7 ← phi( do_perspective::@1/(signed byte*) PERSP_Z#8 )
(signed byte*) zr#7 ← phi( do_perspective::@1/(signed byte*) zr#8 )
(signed byte*) yr#10 ← phi( do_perspective::@1/(signed byte*) yr#11 )
(signed byte*) xr#8 ← phi( do_perspective::@1/(signed byte*) xr#9 )
@ -350,6 +365,9 @@ do_perspective::@2: scope:[do_perspective] from do_perspective::@1
to:do_perspective::@3
do_perspective::@3: scope:[do_perspective] from do_perspective::@2
(byte*) print_line_cursor#37 ← phi( do_perspective::@2/(byte*) print_line_cursor#38 )
(word*) psp2#10 ← phi( do_perspective::@2/(word*) psp2#11 )
(word*) psp1#10 ← phi( do_perspective::@2/(word*) psp1#11 )
(signed byte*) PERSP_Z#6 ← phi( do_perspective::@2/(signed byte*) PERSP_Z#7 )
(signed byte*) zr#6 ← phi( do_perspective::@2/(signed byte*) zr#7 )
(signed byte*) yr#9 ← phi( do_perspective::@2/(signed byte*) yr#10 )
(signed byte*) xr#7 ← phi( do_perspective::@2/(signed byte*) xr#8 )
@ -363,6 +381,9 @@ do_perspective::@3: scope:[do_perspective] from do_perspective::@2
to:do_perspective::@4
do_perspective::@4: scope:[do_perspective] from do_perspective::@3
(byte*) print_line_cursor#36 ← phi( do_perspective::@3/(byte*) print_line_cursor#37 )
(word*) psp2#9 ← phi( do_perspective::@3/(word*) psp2#10 )
(word*) psp1#9 ← phi( do_perspective::@3/(word*) psp1#10 )
(signed byte*) PERSP_Z#5 ← phi( do_perspective::@3/(signed byte*) PERSP_Z#6 )
(signed byte*) zr#5 ← phi( do_perspective::@3/(signed byte*) zr#6 )
(signed byte*) yr#8 ← phi( do_perspective::@3/(signed byte*) yr#9 )
(signed byte*) xr#6 ← phi( do_perspective::@3/(signed byte*) xr#7 )
@ -376,6 +397,9 @@ do_perspective::@4: scope:[do_perspective] from do_perspective::@3
to:do_perspective::@5
do_perspective::@5: scope:[do_perspective] from do_perspective::@4
(byte*) print_line_cursor#35 ← phi( do_perspective::@4/(byte*) print_line_cursor#36 )
(word*) psp2#7 ← phi( do_perspective::@4/(word*) psp2#9 )
(word*) psp1#7 ← phi( do_perspective::@4/(word*) psp1#9 )
(signed byte*) PERSP_Z#4 ← phi( do_perspective::@4/(signed byte*) PERSP_Z#5 )
(signed byte*) zr#4 ← phi( do_perspective::@4/(signed byte*) zr#5 )
(signed byte*) yr#7 ← phi( do_perspective::@4/(signed byte*) yr#8 )
(signed byte*) xr#5 ← phi( do_perspective::@4/(signed byte*) xr#6 )
@ -389,6 +413,9 @@ do_perspective::@5: scope:[do_perspective] from do_perspective::@4
to:do_perspective::@6
do_perspective::@6: scope:[do_perspective] from do_perspective::@5
(byte*) print_line_cursor#34 ← phi( do_perspective::@5/(byte*) print_line_cursor#35 )
(word*) psp2#6 ← phi( do_perspective::@5/(word*) psp2#7 )
(word*) psp1#6 ← phi( do_perspective::@5/(word*) psp1#7 )
(signed byte*) PERSP_Z#3 ← phi( do_perspective::@5/(signed byte*) PERSP_Z#4 )
(signed byte*) zr#3 ← phi( do_perspective::@5/(signed byte*) zr#4 )
(signed byte*) yr#5 ← phi( do_perspective::@5/(signed byte*) yr#7 )
(signed byte*) xr#4 ← phi( do_perspective::@5/(signed byte*) xr#5 )
@ -402,6 +429,9 @@ do_perspective::@6: scope:[do_perspective] from do_perspective::@5
to:do_perspective::@7
do_perspective::@7: scope:[do_perspective] from do_perspective::@6
(byte*) print_line_cursor#33 ← phi( do_perspective::@6/(byte*) print_line_cursor#34 )
(word*) psp2#4 ← phi( do_perspective::@6/(word*) psp2#6 )
(word*) psp1#4 ← phi( do_perspective::@6/(word*) psp1#6 )
(signed byte*) PERSP_Z#2 ← phi( do_perspective::@6/(signed byte*) PERSP_Z#3 )
(signed byte*) zr#2 ← phi( do_perspective::@6/(signed byte*) zr#3 )
(signed byte*) yr#4 ← phi( do_perspective::@6/(signed byte*) yr#5 )
(signed byte*) xr#3 ← phi( do_perspective::@6/(signed byte*) xr#4 )
@ -468,6 +498,9 @@ do_perspective::@return: scope:[do_perspective] from do_perspective::@13
return
to:@return
perspective: scope:[perspective] from do_perspective::@7
(word*) psp2#2 ← phi( do_perspective::@7/(word*) psp2#4 )
(word*) psp1#2 ← phi( do_perspective::@7/(word*) psp1#4 )
(signed byte*) PERSP_Z#1 ← phi( do_perspective::@7/(signed byte*) PERSP_Z#2 )
(signed byte*) zr#1 ← phi( do_perspective::@7/(signed byte*) zr#2 )
(signed byte) perspective::z#1 ← phi( do_perspective::@7/(signed byte) perspective::z#0 )
(signed byte*) yr#2 ← phi( do_perspective::@7/(signed byte*) yr#4 )
@ -487,8 +520,8 @@ perspective::@return: scope:[perspective] from perspective
(signed byte*) yr#17 ← phi( @23/(signed byte*) yr#0 )
(signed byte*) xr#15 ← phi( @23/(signed byte*) xr#0 )
(byte*) print_screen#7 ← phi( @23/(byte*) print_screen#8 )
(word*) psp2#4 ← phi( @23/(word*) psp2#0 )
(word*) psp1#4 ← phi( @23/(word*) psp1#0 )
(word*) psp2#8 ← phi( @23/(word*) psp2#0 )
(word*) psp1#8 ← phi( @23/(word*) psp1#0 )
(byte*) print_char_cursor#77 ← phi( @23/(byte*) print_char_cursor#78 )
(byte*) print_line_cursor#27 ← phi( @23/(byte*) print_line_cursor#29 )
(byte[$200]) mulf_sqr1#0 ← { fill( $200, 0) }
@ -537,8 +570,8 @@ mulf_init::@return: scope:[mulf_init] from mulf_init::@1
(signed byte*) yr#16 ← phi( @26/(signed byte*) yr#17 )
(signed byte*) xr#14 ← phi( @26/(signed byte*) xr#15 )
(byte*) print_screen#6 ← phi( @26/(byte*) print_screen#7 )
(word*) psp2#3 ← phi( @26/(word*) psp2#4 )
(word*) psp1#3 ← phi( @26/(word*) psp1#4 )
(word*) psp2#5 ← phi( @26/(word*) psp2#8 )
(word*) psp1#5 ← phi( @26/(word*) psp1#8 )
(byte*) print_char_cursor#73 ← phi( @26/(byte*) print_char_cursor#77 )
(byte*) print_line_cursor#24 ← phi( @26/(byte*) print_line_cursor#27 )
(signed byte*) PERSP_Z#0 ← ((signed byte*)) (word/signed word/dword/signed dword) $2400
@ -662,6 +695,18 @@ SYMBOL TABLE SSA
(byte) ORANGE#0
(signed byte*) PERSP_Z
(signed byte*) PERSP_Z#0
(signed byte*) PERSP_Z#1
(signed byte*) PERSP_Z#10
(signed byte*) PERSP_Z#11
(signed byte*) PERSP_Z#12
(signed byte*) PERSP_Z#2
(signed byte*) PERSP_Z#3
(signed byte*) PERSP_Z#4
(signed byte*) PERSP_Z#5
(signed byte*) PERSP_Z#6
(signed byte*) PERSP_Z#7
(signed byte*) PERSP_Z#8
(signed byte*) PERSP_Z#9
(byte) PINK
(byte) PINK#0
(byte*) PROCPORT
@ -1052,15 +1097,35 @@ SYMBOL TABLE SSA
(word*) psp1
(word*) psp1#0
(word*) psp1#1
(word*) psp1#10
(word*) psp1#11
(word*) psp1#12
(word*) psp1#13
(word*) psp1#14
(word*) psp1#2
(word*) psp1#3
(word*) psp1#4
(word*) psp1#5
(word*) psp1#6
(word*) psp1#7
(word*) psp1#8
(word*) psp1#9
(word*) psp2
(word*) psp2#0
(word*) psp2#1
(word*) psp2#10
(word*) psp2#11
(word*) psp2#12
(word*) psp2#13
(word*) psp2#14
(word*) psp2#2
(word*) psp2#3
(word*) psp2#4
(word*) psp2#5
(word*) psp2#6
(word*) psp2#7
(word*) psp2#8
(word*) psp2#9
(signed byte*) xr
(signed byte*) xr#0
(signed byte*) xr#1
@ -1130,14 +1195,15 @@ Alias (byte*) print_char_cursor#41 = (byte*) print_char_cursor#9
Alias (byte*) print_char_cursor#10 = (byte*) print_char_cursor#42 (byte*) print_char_cursor#43 (byte*) print_char_cursor#11
Alias (byte*) print_char_cursor#12 = (byte*) print_char_cursor#45 (byte*) print_char_cursor#13
Alias (byte*) print_line_cursor#14 = (byte*) print_screen#3 (byte*) print_screen#2 (byte*) print_line_cursor#3 (byte*) print_char_cursor#14 (byte*) print_char_cursor#46 (byte*) print_line_cursor#4 (byte*) print_char_cursor#15
Alias (word*) psp1#1 = (word*) psp1#2
Alias (word*) psp2#1 = (word*) psp2#2
Alias (word*) psp1#1 = (word*) psp1#3 (word*) psp1#14
Alias (word*) psp2#1 = (word*) psp2#3 (word*) psp2#14
Alias (byte*) print_screen#4 = (byte*) print_screen#5
Alias (byte*) print_line_cursor#22 = (byte*) print_line_cursor#25
Alias (byte*) print_char_cursor#70 = (byte*) print_char_cursor#76
Alias (signed byte*) xr#11 = (signed byte*) xr#12 (signed byte*) xr#13
Alias (signed byte*) yr#13 = (signed byte*) yr#14 (signed byte*) yr#15
Alias (signed byte*) zr#10 = (signed byte*) zr#11 (signed byte*) zr#12
Alias (signed byte*) PERSP_Z#10 = (signed byte*) PERSP_Z#11 (signed byte*) PERSP_Z#12
Alias (byte*) print_line_cursor#15 = (byte*) print_line_cursor#5
Alias (byte*) print_char_cursor#16 = (byte*) print_char_cursor#47
Alias (signed byte) do_perspective::y#0 = (signed byte/signed word/signed dword~) main::$4
@ -1149,6 +1215,9 @@ Alias (signed byte) do_perspective::z#1 = (signed byte) do_perspective::z#7 (sig
Alias (signed byte*) xr#1 = (signed byte*) xr#9 (signed byte*) xr#10 (signed byte*) xr#8 (signed byte*) xr#7 (signed byte*) xr#6 (signed byte*) xr#5 (signed byte*) xr#4 (signed byte*) xr#3
Alias (signed byte*) yr#1 = (signed byte*) yr#11 (signed byte*) yr#12 (signed byte*) yr#10 (signed byte*) yr#9 (signed byte*) yr#8 (signed byte*) yr#7 (signed byte*) yr#5 (signed byte*) yr#4 (signed byte*) yr#6 (signed byte*) yr#3
Alias (signed byte*) zr#2 = (signed byte*) zr#8 (signed byte*) zr#9 (signed byte*) zr#7 (signed byte*) zr#6 (signed byte*) zr#5 (signed byte*) zr#4 (signed byte*) zr#3
Alias (signed byte*) PERSP_Z#2 = (signed byte*) PERSP_Z#8 (signed byte*) PERSP_Z#9 (signed byte*) PERSP_Z#7 (signed byte*) PERSP_Z#6 (signed byte*) PERSP_Z#5 (signed byte*) PERSP_Z#4 (signed byte*) PERSP_Z#3
Alias (word*) psp1#10 = (word*) psp1#12 (word*) psp1#13 (word*) psp1#11 (word*) psp1#9 (word*) psp1#7 (word*) psp1#6 (word*) psp1#4
Alias (word*) psp2#10 = (word*) psp2#12 (word*) psp2#13 (word*) psp2#11 (word*) psp2#9 (word*) psp2#7 (word*) psp2#6 (word*) psp2#4
Alias (byte*) print_line_cursor#23 = (byte*) print_line_cursor#39 (byte*) print_line_cursor#40 (byte*) print_line_cursor#38 (byte*) print_line_cursor#37 (byte*) print_line_cursor#36 (byte*) print_line_cursor#35 (byte*) print_line_cursor#34 (byte*) print_line_cursor#33 (byte*) print_line_cursor#32 (byte*) print_line_cursor#31 (byte*) print_line_cursor#28 (byte*) print_line_cursor#26
Alias (byte*) print_char_cursor#19 = (byte*) print_char_cursor#50
Alias (byte*) print_char_cursor#20 = (byte*) print_char_cursor#51
@ -1165,8 +1234,8 @@ Alias (byte*) print_char_cursor#28 = (byte*) print_char_cursor#59
Alias (byte*) print_char_cursor#29 = (byte*) print_char_cursor#60
Alias (byte*) print_line_cursor#18 = (byte*) print_line_cursor#8 (byte*) print_line_cursor#19 (byte*) print_line_cursor#9
Alias (byte*) print_char_cursor#30 = (byte*) print_char_cursor#61 (byte*) print_char_cursor#62 (byte*) print_char_cursor#31
Alias (word*) psp1#0 = (word*) psp1#4 (word*) psp1#3
Alias (word*) psp2#0 = (word*) psp2#4 (word*) psp2#3
Alias (word*) psp1#0 = (word*) psp1#8 (word*) psp1#5
Alias (word*) psp2#0 = (word*) psp2#8 (word*) psp2#5
Alias (signed byte*) xr#0 = (signed byte*) xr#15 (signed byte*) xr#14
Alias (signed byte*) yr#0 = (signed byte*) yr#17 (signed byte*) yr#16
Alias (signed byte*) zr#0 = (signed byte*) zr#14 (signed byte*) zr#13
@ -1195,6 +1264,7 @@ Redundant Phi (byte*) print_char_cursor#70 (byte*) print_line_cursor#0
Redundant Phi (signed byte*) xr#11 (signed byte*) xr#0
Redundant Phi (signed byte*) yr#13 (signed byte*) yr#0
Redundant Phi (signed byte*) zr#10 (signed byte*) zr#0
Redundant Phi (signed byte*) PERSP_Z#10 (signed byte*) PERSP_Z#0
Redundant Phi (byte*) print_line_cursor#15 (byte*) print_line_cursor#14
Redundant Phi (byte*) print_char_cursor#16 (byte*) print_line_cursor#14
Redundant Phi (byte*) print_char_cursor#17 (byte*) print_char_cursor#30
@ -1206,6 +1276,9 @@ Redundant Phi (signed byte) do_perspective::z#1 (signed byte) do_perspective::z#
Redundant Phi (signed byte*) xr#1 (signed byte*) xr#11
Redundant Phi (signed byte*) yr#1 (signed byte*) yr#13
Redundant Phi (signed byte*) zr#2 (signed byte*) zr#10
Redundant Phi (signed byte*) PERSP_Z#2 (signed byte*) PERSP_Z#10
Redundant Phi (word*) psp1#10 (word*) psp1#1
Redundant Phi (word*) psp2#10 (word*) psp2#1
Redundant Phi (byte*) print_line_cursor#23 (byte*) print_line_cursor#15
Redundant Phi (byte*) print_char_cursor#19 (byte*) print_char_cursor#2
Redundant Phi (byte*) print_char_cursor#20 (byte*) print_char_cursor#39
@ -1226,6 +1299,9 @@ Redundant Phi (signed byte) perspective::y#1 (signed byte) perspective::y#0
Redundant Phi (signed byte*) yr#2 (signed byte*) yr#1
Redundant Phi (signed byte) perspective::z#1 (signed byte) perspective::z#0
Redundant Phi (signed byte*) zr#1 (signed byte*) zr#2
Redundant Phi (signed byte*) PERSP_Z#1 (signed byte*) PERSP_Z#2
Redundant Phi (word*) psp1#2 (word*) psp1#10
Redundant Phi (word*) psp2#2 (word*) psp2#10
Redundant Phi (byte*) print_line_cursor#10 (byte*) print_line_cursor#16
Redundant Phi (byte*) print_char_cursor#32 (byte*) print_char_cursor#17
Successful SSA optimization Pass2RedundantPhiElimination

View File

@ -1,3 +1,5 @@
Resolved forward reference mulf_sqr1 to (byte*) mulf_sqr1
Resolved forward reference mulf_sqr2 to (byte*) mulf_sqr2
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
@ -122,6 +124,8 @@ print_cls::@return: scope:[print_cls] from print_cls::@2
to:@21
main: scope:[main] from @22
(signed byte*) cp#12 ← phi( @22/(signed byte*) cp#13 )
(byte*) mulf_sqr2#12 ← phi( @22/(byte*) mulf_sqr2#0 )
(byte*) mulf_sqr1#12 ← phi( @22/(byte*) mulf_sqr1#0 )
(signed byte*) bp#12 ← phi( @22/(signed byte*) bp#13 )
(signed byte*) ap#12 ← phi( @22/(signed byte*) ap#13 )
(byte*) print_screen#5 ← phi( @22/(byte*) print_screen#6 )
@ -131,6 +135,8 @@ main: scope:[main] from @22
to:main::@7
main::@7: scope:[main] from main
(signed byte*) cp#11 ← phi( main/(signed byte*) cp#12 )
(byte*) mulf_sqr2#11 ← phi( main/(byte*) mulf_sqr2#12 )
(byte*) mulf_sqr1#11 ← phi( main/(byte*) mulf_sqr1#12 )
(signed byte*) bp#11 ← phi( main/(signed byte*) bp#12 )
(signed byte*) ap#11 ← phi( main/(signed byte*) ap#12 )
(byte*) print_char_cursor#9 ← phi( main/(byte*) print_char_cursor#6 )
@ -146,6 +152,8 @@ main::@1: scope:[main] from main::@7 main::@8
(byte*) print_char_cursor#31 ← phi( main::@7/(byte*) print_char_cursor#3 main::@8/(byte*) print_char_cursor#30 )
(byte*) print_line_cursor#31 ← phi( main::@7/(byte*) print_line_cursor#3 main::@8/(byte*) print_line_cursor#30 )
(signed byte*) cp#10 ← phi( main::@7/(signed byte*) cp#11 main::@8/(signed byte*) cp#9 )
(byte*) mulf_sqr2#10 ← phi( main::@7/(byte*) mulf_sqr2#11 main::@8/(byte*) mulf_sqr2#9 )
(byte*) mulf_sqr1#10 ← phi( main::@7/(byte*) mulf_sqr1#11 main::@8/(byte*) mulf_sqr1#9 )
(signed byte*) bp#10 ← phi( main::@7/(signed byte*) bp#11 main::@8/(signed byte*) bp#9 )
(signed byte*) ap#10 ← phi( main::@7/(signed byte*) ap#11 main::@8/(signed byte*) ap#9 )
(byte*) main::at_line#7 ← phi( main::@7/(byte*) main::at_line#0 main::@8/(byte*) main::at_line#5 )
@ -159,6 +167,8 @@ main::@8: scope:[main] from main::@1
(byte*) print_char_cursor#30 ← phi( main::@1/(byte*) print_char_cursor#31 )
(byte*) print_line_cursor#30 ← phi( main::@1/(byte*) print_line_cursor#31 )
(signed byte*) cp#9 ← phi( main::@1/(signed byte*) cp#10 )
(byte*) mulf_sqr2#9 ← phi( main::@1/(byte*) mulf_sqr2#10 )
(byte*) mulf_sqr1#9 ← phi( main::@1/(byte*) mulf_sqr1#10 )
(signed byte*) bp#9 ← phi( main::@1/(signed byte*) bp#10 )
(signed byte*) ap#9 ← phi( main::@1/(signed byte*) ap#10 )
(byte*) main::at_line#5 ← phi( main::@1/(byte*) main::at_line#7 )
@ -173,6 +183,8 @@ main::@4: scope:[main] from main::@8
(byte*) print_char_cursor#29 ← phi( main::@8/(byte*) print_char_cursor#30 )
(byte*) print_line_cursor#29 ← phi( main::@8/(byte*) print_line_cursor#30 )
(signed byte*) cp#7 ← phi( main::@8/(signed byte*) cp#9 )
(byte*) mulf_sqr2#7 ← phi( main::@8/(byte*) mulf_sqr2#9 )
(byte*) mulf_sqr1#7 ← phi( main::@8/(byte*) mulf_sqr1#9 )
(signed byte*) bp#7 ← phi( main::@8/(signed byte*) bp#9 )
(signed byte*) ap#7 ← phi( main::@8/(signed byte*) ap#9 )
(byte*) main::at_line#3 ← phi( main::@8/(byte*) main::at_line#5 )
@ -182,6 +194,8 @@ main::@2: scope:[main] from main::@4 main::@5
(byte*) print_char_cursor#28 ← phi( main::@4/(byte*) print_char_cursor#29 main::@5/(byte*) print_char_cursor#15 )
(byte*) print_line_cursor#28 ← phi( main::@4/(byte*) print_line_cursor#29 main::@5/(byte*) print_line_cursor#15 )
(signed byte*) cp#5 ← phi( main::@4/(signed byte*) cp#7 main::@5/(signed byte*) cp#8 )
(byte*) mulf_sqr2#5 ← phi( main::@4/(byte*) mulf_sqr2#7 main::@5/(byte*) mulf_sqr2#8 )
(byte*) mulf_sqr1#5 ← phi( main::@4/(byte*) mulf_sqr1#7 main::@5/(byte*) mulf_sqr1#8 )
(signed byte*) bp#5 ← phi( main::@4/(signed byte*) bp#7 main::@5/(signed byte*) bp#8 )
(signed byte*) ap#5 ← phi( main::@4/(signed byte*) ap#7 main::@5/(signed byte*) ap#8 )
(byte) main::i#2 ← phi( main::@4/(byte) main::i#0 main::@5/(byte) main::i#1 )
@ -197,6 +211,8 @@ main::@9: scope:[main] from main::@2
(byte*) print_line_cursor#27 ← phi( main::@2/(byte*) print_line_cursor#28 )
(byte*) main::at_line#10 ← phi( main::@2/(byte*) main::at_line#1 )
(signed byte*) cp#4 ← phi( main::@2/(signed byte*) cp#5 )
(byte*) mulf_sqr2#4 ← phi( main::@2/(byte*) mulf_sqr2#5 )
(byte*) mulf_sqr1#4 ← phi( main::@2/(byte*) mulf_sqr1#5 )
(signed byte*) bp#4 ← phi( main::@2/(signed byte*) bp#5 )
(signed byte*) ap#4 ← phi( main::@2/(signed byte*) ap#5 )
(byte) main::i#6 ← phi( main::@2/(byte) main::i#2 )
@ -208,6 +224,8 @@ main::@3: scope:[main] from main::@11 main::@9
(byte*) print_line_cursor#26 ← phi( main::@11/(byte*) print_line_cursor#19 main::@9/(byte*) print_line_cursor#27 )
(byte*) main::at_line#9 ← phi( main::@11/(byte*) main::at_line#6 main::@9/(byte*) main::at_line#10 )
(signed byte*) cp#2 ← phi( main::@11/(signed byte*) cp#3 main::@9/(signed byte*) cp#4 )
(byte*) mulf_sqr2#2 ← phi( main::@11/(byte*) mulf_sqr2#3 main::@9/(byte*) mulf_sqr2#4 )
(byte*) mulf_sqr1#2 ← phi( main::@11/(byte*) mulf_sqr1#3 main::@9/(byte*) mulf_sqr1#4 )
(signed byte*) bp#2 ← phi( main::@11/(signed byte*) bp#3 main::@9/(signed byte*) bp#4 )
(signed byte*) ap#2 ← phi( main::@11/(signed byte*) ap#3 main::@9/(signed byte*) ap#4 )
(byte) main::j#2 ← phi( main::@11/(byte) main::j#1 main::@9/(byte) main::j#0 )
@ -224,6 +242,8 @@ main::@10: scope:[main] from main::@3
(byte*) print_line_cursor#22 ← phi( main::@3/(byte*) print_line_cursor#26 )
(byte*) main::at_line#8 ← phi( main::@3/(byte*) main::at_line#9 )
(signed byte*) cp#6 ← phi( main::@3/(signed byte*) cp#2 )
(byte*) mulf_sqr2#6 ← phi( main::@3/(byte*) mulf_sqr2#2 )
(byte*) mulf_sqr1#6 ← phi( main::@3/(byte*) mulf_sqr1#2 )
(signed byte*) bp#6 ← phi( main::@3/(signed byte*) bp#2 )
(signed byte*) ap#6 ← phi( main::@3/(signed byte*) ap#2 )
(byte) main::i#7 ← phi( main::@3/(byte) main::i#3 )
@ -241,6 +261,8 @@ main::@11: scope:[main] from main::@10
(byte*) print_line_cursor#19 ← phi( main::@10/(byte*) print_line_cursor#22 )
(byte*) main::at_line#6 ← phi( main::@10/(byte*) main::at_line#8 )
(signed byte*) cp#3 ← phi( main::@10/(signed byte*) cp#6 )
(byte*) mulf_sqr2#3 ← phi( main::@10/(byte*) mulf_sqr2#6 )
(byte*) mulf_sqr1#3 ← phi( main::@10/(byte*) mulf_sqr1#6 )
(signed byte*) bp#3 ← phi( main::@10/(signed byte*) bp#6 )
(signed byte*) ap#3 ← phi( main::@10/(signed byte*) ap#6 )
(byte) main::i#5 ← phi( main::@10/(byte) main::i#7 )
@ -252,6 +274,8 @@ main::@11: scope:[main] from main::@10
to:main::@5
main::@5: scope:[main] from main::@11
(signed byte*) cp#8 ← phi( main::@11/(signed byte*) cp#3 )
(byte*) mulf_sqr2#8 ← phi( main::@11/(byte*) mulf_sqr2#3 )
(byte*) mulf_sqr1#8 ← phi( main::@11/(byte*) mulf_sqr1#3 )
(signed byte*) bp#8 ← phi( main::@11/(signed byte*) bp#3 )
(signed byte*) ap#8 ← phi( main::@11/(signed byte*) ap#3 )
(byte*) print_char_cursor#15 ← phi( main::@11/(byte*) print_char_cursor#19 )
@ -334,6 +358,8 @@ init_screen::@return: scope:[init_screen] from init_screen::@2
to:@22
fmul8: scope:[fmul8] from main::@3
(signed byte*) cp#1 ← phi( main::@3/(signed byte*) cp#2 )
(byte*) mulf_sqr2#1 ← phi( main::@3/(byte*) mulf_sqr2#2 )
(byte*) mulf_sqr1#1 ← phi( main::@3/(byte*) mulf_sqr1#2 )
(signed byte*) bp#1 ← phi( main::@3/(signed byte*) bp#2 )
(signed byte) fmul8::b#1 ← phi( main::@3/(signed byte) fmul8::b#0 )
(signed byte*) ap#1 ← phi( main::@3/(signed byte*) ap#2 )
@ -542,8 +568,32 @@ SYMBOL TABLE SSA
(signed byte) main::r#0
(byte*) mulf_sqr1
(byte*) mulf_sqr1#0
(byte*) mulf_sqr1#1
(byte*) mulf_sqr1#10
(byte*) mulf_sqr1#11
(byte*) mulf_sqr1#12
(byte*) mulf_sqr1#2
(byte*) mulf_sqr1#3
(byte*) mulf_sqr1#4
(byte*) mulf_sqr1#5
(byte*) mulf_sqr1#6
(byte*) mulf_sqr1#7
(byte*) mulf_sqr1#8
(byte*) mulf_sqr1#9
(byte*) mulf_sqr2
(byte*) mulf_sqr2#0
(byte*) mulf_sqr2#1
(byte*) mulf_sqr2#10
(byte*) mulf_sqr2#11
(byte*) mulf_sqr2#12
(byte*) mulf_sqr2#2
(byte*) mulf_sqr2#3
(byte*) mulf_sqr2#4
(byte*) mulf_sqr2#5
(byte*) mulf_sqr2#6
(byte*) mulf_sqr2#7
(byte*) mulf_sqr2#8
(byte*) mulf_sqr2#9
(void()) print_byte_at((byte) print_byte_at::b , (byte*) print_byte_at::at)
(byte~) print_byte_at::$0
(byte~) print_byte_at::$2
@ -713,6 +763,8 @@ Alias (byte*) print_char_at::at#3 = (byte*~) print_byte_at::$3
Alias (byte*) print_line_cursor#1 = (byte*) print_screen#3 (byte*) print_screen#2 (byte*) print_char_cursor#1 (byte*) print_line_cursor#8 (byte*) print_char_cursor#8 (byte*) print_line_cursor#2 (byte*) print_char_cursor#2
Alias (signed byte*) ap#11 = (signed byte*) ap#12
Alias (signed byte*) bp#11 = (signed byte*) bp#12
Alias (byte*) mulf_sqr1#11 = (byte*) mulf_sqr1#12
Alias (byte*) mulf_sqr2#11 = (byte*) mulf_sqr2#12
Alias (signed byte*) cp#11 = (signed byte*) cp#12
Alias (byte*) print_line_cursor#3 = (byte*) print_line_cursor#9
Alias (byte*) print_char_cursor#3 = (byte*) print_char_cursor#9
@ -722,6 +774,8 @@ Alias (byte) main::k#2 = (byte) main::k#3
Alias (byte*) main::at_line#3 = (byte*) main::at_line#5 (byte*) main::at_line#7
Alias (signed byte*) ap#10 = (signed byte*) ap#9 (signed byte*) ap#7
Alias (signed byte*) bp#10 = (signed byte*) bp#9 (signed byte*) bp#7
Alias (byte*) mulf_sqr1#10 = (byte*) mulf_sqr1#9 (byte*) mulf_sqr1#7
Alias (byte*) mulf_sqr2#10 = (byte*) mulf_sqr2#9 (byte*) mulf_sqr2#7
Alias (signed byte*) cp#10 = (signed byte*) cp#9 (signed byte*) cp#7
Alias (byte*) print_line_cursor#29 = (byte*) print_line_cursor#30 (byte*) print_line_cursor#31
Alias (byte*) print_char_cursor#29 = (byte*) print_char_cursor#30 (byte*) print_char_cursor#31
@ -729,6 +783,8 @@ Alias (byte*) main::at#2 = (byte*) main::at_line#1 (byte*) main::at#9 (byte*) ma
Alias (byte) main::i#2 = (byte) main::i#6
Alias (signed byte*) ap#4 = (signed byte*) ap#5
Alias (signed byte*) bp#4 = (signed byte*) bp#5
Alias (byte*) mulf_sqr1#4 = (byte*) mulf_sqr1#5
Alias (byte*) mulf_sqr2#4 = (byte*) mulf_sqr2#5
Alias (signed byte*) cp#4 = (signed byte*) cp#5
Alias (byte*) print_line_cursor#27 = (byte*) print_line_cursor#28
Alias (byte*) print_char_cursor#27 = (byte*) print_char_cursor#28
@ -738,6 +794,8 @@ Alias (byte) main::j#2 = (byte) main::j#4 (byte) main::j#3
Alias (byte) main::i#3 = (byte) main::i#7 (byte) main::i#5 (byte) main::i#4
Alias (signed byte*) ap#2 = (signed byte*) ap#6 (signed byte*) ap#3 (signed byte*) ap#8
Alias (signed byte*) bp#2 = (signed byte*) bp#6 (signed byte*) bp#3 (signed byte*) bp#8
Alias (byte*) mulf_sqr1#2 = (byte*) mulf_sqr1#6 (byte*) mulf_sqr1#3 (byte*) mulf_sqr1#8
Alias (byte*) mulf_sqr2#2 = (byte*) mulf_sqr2#6 (byte*) mulf_sqr2#3 (byte*) mulf_sqr2#8
Alias (signed byte*) cp#2 = (signed byte*) cp#6 (signed byte*) cp#3 (signed byte*) cp#8
Alias (byte*) main::at_line#4 = (byte*) main::at_line#8 (byte*) main::at_line#9 (byte*) main::at_line#6
Alias (byte*) print_line_cursor#10 = (byte*) print_line_cursor#22 (byte*) print_line_cursor#26 (byte*) print_line_cursor#19 (byte*) print_line_cursor#15 (byte*) print_line_cursor#4
@ -764,12 +822,16 @@ Self Phi Eliminated (byte*) print_line_cursor#1
Self Phi Eliminated (byte*) main::at_line#3
Self Phi Eliminated (signed byte*) ap#10
Self Phi Eliminated (signed byte*) bp#10
Self Phi Eliminated (byte*) mulf_sqr1#10
Self Phi Eliminated (byte*) mulf_sqr2#10
Self Phi Eliminated (signed byte*) cp#10
Self Phi Eliminated (byte*) print_line_cursor#29
Self Phi Eliminated (byte*) print_char_cursor#29
Self Phi Eliminated (byte) main::i#3
Self Phi Eliminated (signed byte*) ap#2
Self Phi Eliminated (signed byte*) bp#2
Self Phi Eliminated (byte*) mulf_sqr1#2
Self Phi Eliminated (byte*) mulf_sqr2#2
Self Phi Eliminated (signed byte*) cp#2
Self Phi Eliminated (byte*) main::at_line#4
Self Phi Eliminated (byte*) print_line_cursor#10
@ -791,18 +853,24 @@ Redundant Phi (byte*) print_char_cursor#14 (byte*) print_line_cursor#0
Redundant Phi (byte*) print_screen#5 (byte*) print_line_cursor#0
Redundant Phi (signed byte*) ap#11 (signed byte*) ap#0
Redundant Phi (signed byte*) bp#11 (signed byte*) bp#0
Redundant Phi (byte*) mulf_sqr1#11 (byte*) mulf_sqr1#0
Redundant Phi (byte*) mulf_sqr2#11 (byte*) mulf_sqr2#0
Redundant Phi (signed byte*) cp#11 (signed byte*) cp#0
Redundant Phi (byte*) print_line_cursor#3 (byte*) print_line_cursor#12
Redundant Phi (byte*) print_char_cursor#3 (byte*) print_char_cursor#12
Redundant Phi (byte*) main::at_line#3 (byte*) main::at_line#0
Redundant Phi (signed byte*) ap#10 (signed byte*) ap#11
Redundant Phi (signed byte*) bp#10 (signed byte*) bp#11
Redundant Phi (byte*) mulf_sqr1#10 (byte*) mulf_sqr1#11
Redundant Phi (byte*) mulf_sqr2#10 (byte*) mulf_sqr2#11
Redundant Phi (signed byte*) cp#10 (signed byte*) cp#11
Redundant Phi (byte*) print_line_cursor#29 (byte*) print_line_cursor#3
Redundant Phi (byte*) print_char_cursor#29 (byte*) print_char_cursor#3
Redundant Phi (byte) main::i#3 (byte) main::i#2
Redundant Phi (signed byte*) ap#2 (signed byte*) ap#4
Redundant Phi (signed byte*) bp#2 (signed byte*) bp#4
Redundant Phi (byte*) mulf_sqr1#2 (byte*) mulf_sqr1#4
Redundant Phi (byte*) mulf_sqr2#2 (byte*) mulf_sqr2#4
Redundant Phi (signed byte*) cp#2 (signed byte*) cp#4
Redundant Phi (byte*) main::at_line#4 (byte*) main::at#2
Redundant Phi (byte*) print_line_cursor#10 (byte*) print_line_cursor#27
@ -823,6 +891,8 @@ Redundant Phi (signed byte) fmul8::a#1 (signed byte) fmul8::a#0
Redundant Phi (signed byte*) ap#1 (signed byte*) ap#2
Redundant Phi (signed byte) fmul8::b#1 (signed byte) fmul8::b#0
Redundant Phi (signed byte*) bp#1 (signed byte*) bp#2
Redundant Phi (byte*) mulf_sqr1#1 (byte*) mulf_sqr1#2
Redundant Phi (byte*) mulf_sqr2#1 (byte*) mulf_sqr2#2
Redundant Phi (signed byte*) cp#1 (signed byte*) cp#2
Redundant Phi (byte*) print_line_cursor#13 (byte*) print_line_cursor#10
Redundant Phi (byte*) print_char_cursor#13 (byte*) print_char_cursor#10
@ -889,10 +959,14 @@ Culled Empty Block (label) @23
Successful SSA optimization Pass2CullEmptyBlocks
Self Phi Eliminated (signed byte*) ap#4
Self Phi Eliminated (signed byte*) bp#4
Self Phi Eliminated (byte*) mulf_sqr1#4
Self Phi Eliminated (byte*) mulf_sqr2#4
Self Phi Eliminated (signed byte*) cp#4
Successful SSA optimization Pass2SelfPhiElimination
Redundant Phi (signed byte*) ap#4 (const signed byte*) ap#0
Redundant Phi (signed byte*) bp#4 (const signed byte*) bp#0
Redundant Phi (byte*) mulf_sqr1#4 (const byte*) mulf_sqr1#0
Redundant Phi (byte*) mulf_sqr2#4 (const byte*) mulf_sqr2#0
Redundant Phi (signed byte*) cp#4 (const signed byte*) cp#0
Successful SSA optimization Pass2RedundantPhiElimination
Inlining constant with var siblings (const byte) print_char_at::ch#0

View File

@ -0,0 +1,16 @@
// Tests that references to labels in other scopes is possible from inline ASM
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
main: {
lda #'c'
sta sub.ll+1
jsr sub
rts
}
sub: {
ll:
lda #0
sta $400
rts
}

View File

@ -0,0 +1,22 @@
@begin: scope:[] from
[0] phi()
to:@2
@2: scope:[] from @begin
[1] phi()
[2] call main
to:@end
@end: scope:[] from @2
[3] phi()
main: scope:[main] from @2
asm { lda#'c' stasub.ll+1 }
[5] call sub
to:main::@return
main::@return: scope:[main] from main
[6] return
to:@return
sub: scope:[sub] from main
asm { ll: lda#0 sta$400 }
to:sub::@return
sub::@return: scope:[sub] from sub
[8] return
to:@return

View File

@ -0,0 +1,263 @@
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
to:@2
main: scope:[main] from @2
asm { lda#'c' stasub.ll+1 }
call sub
to:main::@1
main::@1: scope:[main] from main
to:main::@return
main::@return: scope:[main] from main::@1
return
to:@return
sub: scope:[sub] from main
asm { ll: lda#0 sta$400 }
to:sub::@return
sub::@return: scope:[sub] from sub
return
to:@return
@2: scope:[] from @begin
call main
to:@3
@3: scope:[] from @2
to:@end
@end: scope:[] from @3
SYMBOL TABLE SSA
(label) @2
(label) @3
(label) @begin
(label) @end
(void()) main()
(label) main::@1
(label) main::@return
(void()) sub()
(label) sub::@return
Culled Empty Block (label) main::@1
Culled Empty Block (label) @3
Successful SSA optimization Pass2CullEmptyBlocks
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @2
Adding NOP phi() at start of @end
CALL GRAPH
Calls in [] to main:2
Calls in [main] to sub:5
Created 0 initial phi equivalence classes
Coalesced down to 0 phi equivalence classes
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @2
Adding NOP phi() at start of @end
FINAL CONTROL FLOW GRAPH
@begin: scope:[] from
[0] phi()
to:@2
@2: scope:[] from @begin
[1] phi()
[2] call main
to:@end
@end: scope:[] from @2
[3] phi()
main: scope:[main] from @2
asm { lda#'c' stasub.ll+1 }
[5] call sub
to:main::@return
main::@return: scope:[main] from main
[6] return
to:@return
sub: scope:[sub] from main
asm { ll: lda#0 sta$400 }
to:sub::@return
sub::@return: scope:[sub] from sub
[8] return
to:@return
VARIABLE REGISTER WEIGHTS
(void()) main()
(void()) sub()
Initial phi equivalence classes
Complete equivalence classes
INITIAL ASM
//SEG0 File Comments
// Tests that references to labels in other scopes is possible from inline ASM
//SEG1 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(bbegin)
.pc = $80d "Program"
//SEG2 Global Constants & labels
//SEG3 @begin
bbegin:
//SEG4 [1] phi from @begin to @2 [phi:@begin->@2]
b2_from_bbegin:
jmp b2
//SEG5 @2
b2:
//SEG6 [2] call main
jsr main
//SEG7 [3] phi from @2 to @end [phi:@2->@end]
bend_from_b2:
jmp bend
//SEG8 @end
bend:
//SEG9 main
main: {
//SEG10 asm { lda#'c' stasub.ll+1 }
lda #'c'
sta sub.ll+1
//SEG11 [5] call sub
jsr sub
jmp breturn
//SEG12 main::@return
breturn:
//SEG13 [6] return
rts
}
//SEG14 sub
sub: {
//SEG15 asm { ll: lda#0 sta$400 }
ll:
lda #0
sta $400
jmp breturn
//SEG16 sub::@return
breturn:
//SEG17 [8] return
rts
}
REGISTER UPLIFT POTENTIAL REGISTERS
Statement asm { lda#'c' stasub.ll+1 } always clobbers reg byte a
Statement asm { ll: lda#0 sta$400 } always clobbers reg byte a
REGISTER UPLIFT SCOPES
Uplift Scope [main]
Uplift Scope [sub]
Uplift Scope []
Uplifting [main] best 48 combination
Uplifting [sub] best 48 combination
Uplifting [] best 48 combination
ASSEMBLER BEFORE OPTIMIZATION
//SEG0 File Comments
// Tests that references to labels in other scopes is possible from inline ASM
//SEG1 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(bbegin)
.pc = $80d "Program"
//SEG2 Global Constants & labels
//SEG3 @begin
bbegin:
//SEG4 [1] phi from @begin to @2 [phi:@begin->@2]
b2_from_bbegin:
jmp b2
//SEG5 @2
b2:
//SEG6 [2] call main
jsr main
//SEG7 [3] phi from @2 to @end [phi:@2->@end]
bend_from_b2:
jmp bend
//SEG8 @end
bend:
//SEG9 main
main: {
//SEG10 asm { lda#'c' stasub.ll+1 }
lda #'c'
sta sub.ll+1
//SEG11 [5] call sub
jsr sub
jmp breturn
//SEG12 main::@return
breturn:
//SEG13 [6] return
rts
}
//SEG14 sub
sub: {
//SEG15 asm { ll: lda#0 sta$400 }
ll:
lda #0
sta $400
jmp breturn
//SEG16 sub::@return
breturn:
//SEG17 [8] return
rts
}
ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b2
Removing instruction jmp bend
Removing instruction jmp breturn
Removing instruction jmp breturn
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction b2_from_bbegin:
Removing instruction b2:
Removing instruction bend_from_b2:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction bend:
Removing instruction breturn:
Removing instruction breturn:
Succesful ASM optimization Pass5UnusedLabelElimination
Updating BasicUpstart to call main directly
Removing instruction jsr main
Succesful ASM optimization Pass5SkipBegin
Removing instruction bbegin:
Succesful ASM optimization Pass5UnusedLabelElimination
FINAL SYMBOL TABLE
(label) @2
(label) @begin
(label) @end
(void()) main()
(label) main::@return
(void()) sub()
(label) sub::@return
FINAL ASSEMBLER
Score: 30
//SEG0 File Comments
// Tests that references to labels in other scopes is possible from inline ASM
//SEG1 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
//SEG2 Global Constants & labels
//SEG3 @begin
//SEG4 [1] phi from @begin to @2 [phi:@begin->@2]
//SEG5 @2
//SEG6 [2] call main
//SEG7 [3] phi from @2 to @end [phi:@2->@end]
//SEG8 @end
//SEG9 main
main: {
//SEG10 asm { lda#'c' stasub.ll+1 }
lda #'c'
sta sub.ll+1
//SEG11 [5] call sub
jsr sub
//SEG12 main::@return
//SEG13 [6] return
rts
}
//SEG14 sub
sub: {
//SEG15 asm { ll: lda#0 sta$400 }
ll:
lda #0
sta $400
//SEG16 sub::@return
//SEG17 [8] return
rts
}

View File

@ -0,0 +1,8 @@
(label) @2
(label) @begin
(label) @end
(void()) main()
(label) main::@return
(void()) sub()
(label) sub::@return