From f6dd66f3cb0e7b9ef0edbfd82d0f4970faa1eb8b Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Fri, 15 Mar 2019 07:59:25 +0100 Subject: [PATCH] Added support for cross-scope references inside inline ASM. --- .../model/values/ForwardVariableRef.java | 3 +- .../Pass0GenerateStatementSequence.java | 69 ++- .../dk/camelot64/kickc/test/TestPrograms.java | 7 +- src/test/kc/inline-asm-ref-scoped.kc | 17 + src/test/ref/examples/3d/3d.log | 567 +++++++++++++----- src/test/ref/examples/3d/perspective.log | 100 ++- .../examples/fastmultiply/fastmultiply8.log | 74 +++ src/test/ref/inline-asm-ref-scoped.asm | 16 + src/test/ref/inline-asm-ref-scoped.cfg | 22 + src/test/ref/inline-asm-ref-scoped.log | 263 ++++++++ src/test/ref/inline-asm-ref-scoped.sym | 8 + 11 files changed, 972 insertions(+), 174 deletions(-) create mode 100644 src/test/kc/inline-asm-ref-scoped.kc create mode 100644 src/test/ref/inline-asm-ref-scoped.asm create mode 100644 src/test/ref/inline-asm-ref-scoped.cfg create mode 100644 src/test/ref/inline-asm-ref-scoped.log create mode 100644 src/test/ref/inline-asm-ref-scoped.sym diff --git a/src/main/java/dk/camelot64/kickc/model/values/ForwardVariableRef.java b/src/main/java/dk/camelot64/kickc/model/values/ForwardVariableRef.java index 376c5b665..b7bba1d78 100644 --- a/src/main/java/dk/camelot64/kickc/model/values/ForwardVariableRef.java +++ b/src/main/java/dk/camelot64/kickc/model/values/ForwardVariableRef.java @@ -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; } diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index 020bc1782..da20c74b6 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -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 { @Override public Object visitStmtAsm(KickCParser.StmtAsmContext ctx) { - - // ALl defined labels in the ASM - List definedLabels = new ArrayList<>(); - KickCBaseVisitor findDefinedLabels = new KickCBaseVisitor() { - @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 definedLabels = gatAsmDefinedLabels(ctx); // Find all referenced symbols in the ASM + Map referenced = getAsmReferencedSymbolVariables(ctx, definedLabels); + List 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 getAsmReferencedSymbolVariables(KickCParser.StmtAsmContext ctx, List definedLabels) { Map referenced = new LinkedHashMap<>(); KickCBaseVisitor findReferenced = new KickCBaseVisitor() { + + @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 { 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 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 gatAsmDefinedLabels(KickCParser.StmtAsmContext ctx) { + List definedLabels = new ArrayList<>(); + KickCBaseVisitor findDefinedLabels = new KickCBaseVisitor() { + @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 diff --git a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java index fb9989b75..b227819d5 100644 --- a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java +++ b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java @@ -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 diff --git a/src/test/kc/inline-asm-ref-scoped.kc b/src/test/kc/inline-asm-ref-scoped.kc new file mode 100644 index 000000000..7cfc6b0dd --- /dev/null +++ b/src/test/kc/inline-asm-ref-scoped.kc @@ -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 + } +} \ No newline at end of file diff --git a/src/test/ref/examples/3d/3d.log b/src/test/ref/examples/3d/3d.log index d63ab8888..aedcc2f48 100644 --- a/src/test/ref/examples/3d/3d.log +++ b/src/test/ref/examples/3d/3d.log @@ -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 diff --git a/src/test/ref/examples/3d/perspective.log b/src/test/ref/examples/3d/perspective.log index 811c1f681..6df00ae85 100644 --- a/src/test/ref/examples/3d/perspective.log +++ b/src/test/ref/examples/3d/perspective.log @@ -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 diff --git a/src/test/ref/examples/fastmultiply/fastmultiply8.log b/src/test/ref/examples/fastmultiply/fastmultiply8.log index a66922e52..8b38de4aa 100644 --- a/src/test/ref/examples/fastmultiply/fastmultiply8.log +++ b/src/test/ref/examples/fastmultiply/fastmultiply8.log @@ -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 diff --git a/src/test/ref/inline-asm-ref-scoped.asm b/src/test/ref/inline-asm-ref-scoped.asm new file mode 100644 index 000000000..c085cde68 --- /dev/null +++ b/src/test/ref/inline-asm-ref-scoped.asm @@ -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 +} diff --git a/src/test/ref/inline-asm-ref-scoped.cfg b/src/test/ref/inline-asm-ref-scoped.cfg new file mode 100644 index 000000000..d33d0cb6e --- /dev/null +++ b/src/test/ref/inline-asm-ref-scoped.cfg @@ -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 diff --git a/src/test/ref/inline-asm-ref-scoped.log b/src/test/ref/inline-asm-ref-scoped.log new file mode 100644 index 000000000..12265bd26 --- /dev/null +++ b/src/test/ref/inline-asm-ref-scoped.log @@ -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 +} + diff --git a/src/test/ref/inline-asm-ref-scoped.sym b/src/test/ref/inline-asm-ref-scoped.sym new file mode 100644 index 000000000..7ba189bb0 --- /dev/null +++ b/src/test/ref/inline-asm-ref-scoped.sym @@ -0,0 +1,8 @@ +(label) @2 +(label) @begin +(label) @end +(void()) main() +(label) main::@return +(void()) sub() +(label) sub::@return +