From b5dfef73682c769a18c41d4148ed6cb29dbf80f6 Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Sun, 18 Feb 2018 19:52:51 +0100 Subject: [PATCH] Optimized line table generator. Improved const identification in phi-values. --- .../kickc/passes/Pass4CodeGeneration.java | 34 +- .../dk/camelot64/kickc/test/kc/linegen.kc | 2 +- .../dk/camelot64/kickc/test/ref/linegen.asm | 42 +- .../dk/camelot64/kickc/test/ref/linegen.cfg | 73 +- .../dk/camelot64/kickc/test/ref/linegen.log | 1384 +++++++---------- .../dk/camelot64/kickc/test/ref/linegen.sym | 27 +- 6 files changed, 668 insertions(+), 894 deletions(-) diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java index af6a272e9..5601c48e0 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java @@ -115,7 +115,7 @@ public class Pass4CodeGeneration { if(constantVar.getType() instanceof SymbolTypePointer) { // Must use a label for pointers asm.addLabelDecl(asmName.replace("#", "_").replace("$", "_"), asmConstant); - } else if(SymbolType.isInteger(constantVar.getType()) && constantVar.getRef().getScopeDepth()>0) { + } else if(SymbolType.isInteger(constantVar.getType()) && constantVar.getRef().getScopeDepth() > 0) { // Use label for integers referenced in other scope - to allow cross-scope referencing if(useLabelForConst(scopeRef, constantVar)) { // Use label for integers referenced in other scope - to allow cross-scope referencing @@ -145,7 +145,7 @@ public class Pass4CodeGeneration { private boolean useLabelForConst(ScopeRef scopeRef, ConstantVar constantVar) { boolean useLabel = false; Collection constRefStatements = program.getVariableReferenceInfos().getConstRefStatements(constantVar.getRef()); - if(constRefStatements!=null) { + if(constRefStatements != null) { for(Integer constRefStmtIdx : constRefStatements) { ScopeRef refScope = program.getStatementInfos().getBlock(constRefStmtIdx).getScope(); if(!refScope.equals(scopeRef)) { @@ -155,22 +155,26 @@ public class Pass4CodeGeneration { boolean found = false; for(StatementPhiBlock.PhiVariable phiVariable : ((StatementPhiBlock) statement).getPhiVariables()) { for(StatementPhiBlock.PhiRValue phiRValue : phiVariable.getValues()) { - if(phiRValue.getrValue().equals(constantVar.getRef())) { - found = true; - // Found the constant - LabelRef pred = phiRValue.getPredecessor(); - ControlFlowBlock predBlock = program.getGraph().getBlock(pred); - ScopeRef predScope = predBlock.getScope(); - if(!predScope.equals(scopeRef)) { - // Scopes in PHI RValue differs from const scope - generate label - useLabel = true; + RValue phiRRValue = phiRValue.getrValue(); + Collection phiRValueConstRefs = PassNVariableReferenceInfos.getReferencedConsts(phiRRValue); + for(ConstantRef phiRValueConstRef : phiRValueConstRefs) { + if(phiRValueConstRef.equals(constantVar.getRef())) { + found = true; + // Found the constant + LabelRef pred = phiRValue.getPredecessor(); + ControlFlowBlock predBlock = program.getGraph().getBlock(pred); + ScopeRef predScope = predBlock.getScope(); + if(!predScope.equals(scopeRef)) { + // Scopes in PHI RValue differs from const scope - generate label + useLabel = true; + } } } } } - if(!found ) { + if(!found) { // PHI-reference is complex - generate label - program.getLog().append("Warning: Complex PHI-value using constant. Using .label as fallback. "+statement); + program.getLog().append("Warning: Complex PHI-value using constant. Using .label as fallback. " + statement); useLabel = true; } } else { @@ -181,7 +185,7 @@ public class Pass4CodeGeneration { } } Collection constRefConsts = program.getVariableReferenceInfos().getConstRefConsts(constantVar.getRef()); - if(constRefConsts!=null) { + if(constRefConsts != null) { for(ConstantRef constRefConst : constRefConsts) { ConstantVar refConst = program.getScope().getConstant(constRefConst); if(!refConst.getScope().getRef().equals(scopeRef)) { @@ -283,7 +287,7 @@ public class Pass4CodeGeneration { try { generateStatementAsm(asm, block, statement, aluState, true); } catch(AsmFragmentTemplateSynthesizer.UnknownFragmentException e) { - throw new CompileError("Unknown fragment for statement "+statement.toString(program, false), e); + throw new CompileError("Unknown fragment for statement " + statement.toString(program, false), e); } } } diff --git a/src/test/java/dk/camelot64/kickc/test/kc/linegen.kc b/src/test/java/dk/camelot64/kickc/test/kc/linegen.kc index 189c79352..9a25045fa 100644 --- a/src/test/java/dk/camelot64/kickc/test/kc/linegen.kc +++ b/src/test/java/dk/camelot64/kickc/test/kc/linegen.kc @@ -20,7 +20,7 @@ void main() { // length - the number of points in a total sinus wavelength (the size of the table) void lin16u_gen(word min, word max, word* lintab, word length) { word ampl = max-min; - word stepi = div16u(ampl, length-1); + word stepi = divr16u(ampl, length-1, 0); word stepf = divr16u(0, length-1, rem16u); dword step = { stepi, stepf }; dword val = { min, 0 }; diff --git a/src/test/java/dk/camelot64/kickc/test/ref/linegen.asm b/src/test/java/dk/camelot64/kickc/test/ref/linegen.asm index 3675ca9d6..4df59f4d2 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/linegen.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/linegen.asm @@ -2,9 +2,9 @@ :BasicUpstart(main) .pc = $80d "Program" .label SCREEN = $400 + .label rem16u = 5 .label char_cursor = 5 .label line_cursor = 3 - .label rem16u = 5 jsr main main: { .label i = 2 @@ -153,8 +153,8 @@ print_cls: { lin16u_gen: { .const min = $22d .const max = $7461 - .label length = $14 - .label ampl = max-min + .const length = $14 + .const ampl = max-min .label _5 = 7 .label stepi = $f .label stepf = $d @@ -162,10 +162,21 @@ lin16u_gen: { .label val = 9 .label lintab = 3 .label i = 5 - jsr div16u - lda div16u.return + lda #length-1 + sta divr16u.divisor+1 + lda #ampl + sta divr16u.dividend+1 + lda #<0 + sta divr16u.rem + sta divr16u.rem+1 + jsr divr16u + lda divr16u.return sta stepi - lda div16u.return+1 + lda divr16u.return+1 sta stepi+1 lda #divisor - sta divr16u.divisor+1 - lda #lin16u_gen.ampl - sta divr16u.dividend+1 - lda #<0 - sta divr16u.rem - sta divr16u.rem+1 - jsr divr16u - rts -} diff --git a/src/test/java/dk/camelot64/kickc/test/ref/linegen.cfg b/src/test/java/dk/camelot64/kickc/test/ref/linegen.cfg index fe95c95dc..df80552fb 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/linegen.cfg +++ b/src/test/java/dk/camelot64/kickc/test/ref/linegen.cfg @@ -120,14 +120,14 @@ print_cls::@return: scope:[print_cls] from print_cls::@1 to:@return lin16u_gen: scope:[lin16u_gen] from main [56] phi() [ ] ( main:2::lin16u_gen:5 [ ] ) - [57] call div16u param-assignment [ div16u::return#0 rem16u#13 ] ( main:2::lin16u_gen:5 [ div16u::return#0 rem16u#13 ] ) - [58] (word) div16u::return#2 ← (word) div16u::return#0 [ div16u::return#2 rem16u#13 ] ( main:2::lin16u_gen:5 [ div16u::return#2 rem16u#13 ] ) + [57] call divr16u param-assignment [ divr16u::return#0 rem16u#1 ] ( main:2::lin16u_gen:5 [ divr16u::return#0 rem16u#1 ] ) + [58] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 rem16u#1 ] ( main:2::lin16u_gen:5 [ divr16u::return#2 rem16u#1 ] ) to:lin16u_gen::@3 lin16u_gen::@3: scope:[lin16u_gen] from lin16u_gen - [59] (word) lin16u_gen::stepi#0 ← (word) div16u::return#2 [ lin16u_gen::stepi#0 rem16u#13 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 rem16u#13 ] ) - [60] (word) divr16u::rem#4 ← (word) rem16u#13 [ lin16u_gen::stepi#0 divr16u::rem#4 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 divr16u::rem#4 ] ) - [61] call divr16u param-assignment [ lin16u_gen::stepi#0 divr16u::return#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 divr16u::return#1 ] ) - [62] (word) divr16u::return#3 ← (word) divr16u::return#1 [ lin16u_gen::stepi#0 divr16u::return#3 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 divr16u::return#3 ] ) + [59] (word) lin16u_gen::stepi#0 ← (word) divr16u::return#2 [ lin16u_gen::stepi#0 rem16u#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 rem16u#1 ] ) + [60] (word) divr16u::rem#4 ← (word) rem16u#1 [ lin16u_gen::stepi#0 divr16u::rem#4 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 divr16u::rem#4 ] ) + [61] call divr16u param-assignment [ divr16u::return#0 lin16u_gen::stepi#0 ] ( main:2::lin16u_gen:5 [ divr16u::return#0 lin16u_gen::stepi#0 ] ) + [62] (word) divr16u::return#3 ← (word) divr16u::return#0 [ lin16u_gen::stepi#0 divr16u::return#3 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 divr16u::return#3 ] ) to:lin16u_gen::@4 lin16u_gen::@4: scope:[lin16u_gen] from lin16u_gen::@3 [63] (word) lin16u_gen::stepf#0 ← (word) divr16u::return#3 [ lin16u_gen::stepi#0 lin16u_gen::stepf#0 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 lin16u_gen::stepf#0 ] ) @@ -147,54 +147,43 @@ lin16u_gen::@1: scope:[lin16u_gen] from lin16u_gen::@1 lin16u_gen::@4 lin16u_gen::@return: scope:[lin16u_gen] from lin16u_gen::@1 [72] return [ ] ( main:2::lin16u_gen:5 [ ] ) to:@return -divr16u: scope:[divr16u] from div16u lin16u_gen::@3 - [73] (word) divr16u::divisor#6 ← phi( div16u/(const word) div16u::divisor#0 lin16u_gen::@3/(const word) lin16u_gen::length#0-(byte/signed byte/word/signed word/dword/signed dword) 1 ) [ divr16u::rem#10 divr16u::dividend#5 divr16u::divisor#6 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::rem#10 divr16u::dividend#5 divr16u::divisor#6 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::rem#10 divr16u::dividend#5 divr16u::divisor#6 ] ) - [73] (word) divr16u::dividend#5 ← phi( div16u/(const word) lin16u_gen::ampl#0 lin16u_gen::@3/(byte/signed byte/word/signed word/dword/signed dword) 0 ) [ divr16u::rem#10 divr16u::dividend#5 divr16u::divisor#6 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::rem#10 divr16u::dividend#5 divr16u::divisor#6 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::rem#10 divr16u::dividend#5 divr16u::divisor#6 ] ) - [73] (word) divr16u::rem#10 ← phi( div16u/(byte/signed byte/word/signed word/dword/signed dword) 0 lin16u_gen::@3/(word) divr16u::rem#4 ) [ divr16u::rem#10 divr16u::dividend#5 divr16u::divisor#6 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::rem#10 divr16u::dividend#5 divr16u::divisor#6 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::rem#10 divr16u::dividend#5 divr16u::divisor#6 ] ) +divr16u: scope:[divr16u] from lin16u_gen lin16u_gen::@3 + [73] (word) divr16u::divisor#6 ← phi( lin16u_gen/(const word) lin16u_gen::length#0-(byte/signed byte/word/signed word/dword/signed dword) 1 lin16u_gen::@3/(const word) lin16u_gen::length#0-(byte/signed byte/word/signed word/dword/signed dword) 1 ) [ divr16u::rem#10 divr16u::dividend#5 divr16u::divisor#6 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::rem#10 divr16u::dividend#5 divr16u::divisor#6 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::rem#10 divr16u::dividend#5 divr16u::divisor#6 ] ) + [73] (word) divr16u::dividend#5 ← phi( lin16u_gen/(const word) lin16u_gen::ampl#0 lin16u_gen::@3/(byte/signed byte/word/signed word/dword/signed dword) 0 ) [ divr16u::rem#10 divr16u::dividend#5 divr16u::divisor#6 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::rem#10 divr16u::dividend#5 divr16u::divisor#6 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::rem#10 divr16u::dividend#5 divr16u::divisor#6 ] ) + [73] (word) divr16u::rem#10 ← phi( lin16u_gen/(byte/signed byte/word/signed word/dword/signed dword) 0 lin16u_gen::@3/(word) divr16u::rem#4 ) [ divr16u::rem#10 divr16u::dividend#5 divr16u::divisor#6 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::rem#10 divr16u::dividend#5 divr16u::divisor#6 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::rem#10 divr16u::dividend#5 divr16u::divisor#6 ] ) to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 - [74] (byte) divr16u::i#2 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(byte) divr16u::i#1 ) [ divr16u::divisor#6 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] ) - [74] (word) divr16u::quotient#3 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(word) divr16u::return#1 ) [ divr16u::divisor#6 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] ) - [74] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#1 ) [ divr16u::divisor#6 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] ) - [74] (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 ) [ divr16u::divisor#6 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] ) - [75] (word) divr16u::rem#1 ← (word) divr16u::rem#5 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) - [76] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$1 ] ) - [77] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$2 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$2 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$2 ] ) - [78] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) + [74] (byte) divr16u::i#2 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(byte) divr16u::i#1 ) [ divr16u::divisor#6 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] ) + [74] (word) divr16u::quotient#3 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(word) divr16u::return#0 ) [ divr16u::divisor#6 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] ) + [74] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#0 ) [ divr16u::divisor#6 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] ) + [74] (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 ) [ divr16u::divisor#6 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] ) + [75] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ) + [76] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) + [77] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ) + [78] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ) to:divr16u::@4 divr16u::@4: scope:[divr16u] from divr16u::@1 - [79] (word) divr16u::rem#2 ← (word) divr16u::rem#1 | (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#2 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#2 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#2 ] ) + [79] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) to:divr16u::@2 divr16u::@2: scope:[divr16u] from divr16u::@1 divr16u::@4 - [80] (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#1 divr16u::@4/(word) divr16u::rem#2 ) [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#6 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#6 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#6 ] ) - [81] (word) divr16u::dividend#1 ← (word) divr16u::dividend#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#6 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 ] ) - [82] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#1 ] ) - [83] if((word) divr16u::rem#6<(word) divr16u::divisor#6) goto divr16u::@3 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#1 ] ) + [80] (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 ) [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#6 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#6 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#6 ] ) + [81] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#6 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 ] ) + [82] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ) + [83] if((word) divr16u::rem#6<(word) divr16u::divisor#6) goto divr16u::@3 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ) to:divr16u::@5 divr16u::@5: scope:[divr16u] from divr16u::@2 - [84] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#2 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#2 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#2 ] ) - [85] (word) divr16u::rem#3 ← (word) divr16u::rem#6 - (word) divr16u::divisor#6 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::quotient#2 divr16u::rem#3 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::quotient#2 divr16u::rem#3 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::quotient#2 divr16u::rem#3 ] ) + [84] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#2 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#2 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#2 ] ) + [85] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (word) divr16u::divisor#6 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) to:divr16u::@3 divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5 - [86] (word) divr16u::return#1 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) [ divr16u::return#1 divr16u::divisor#6 divr16u::i#2 divr16u::rem#11 divr16u::dividend#1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::return#1 divr16u::divisor#6 divr16u::i#2 divr16u::rem#11 divr16u::dividend#1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::return#1 divr16u::divisor#6 divr16u::i#2 divr16u::rem#11 divr16u::dividend#1 ] ) - [86] (word) divr16u::rem#11 ← phi( divr16u::@2/(word) divr16u::rem#6 divr16u::@5/(word) divr16u::rem#3 ) [ divr16u::return#1 divr16u::divisor#6 divr16u::i#2 divr16u::rem#11 divr16u::dividend#1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::return#1 divr16u::divisor#6 divr16u::i#2 divr16u::rem#11 divr16u::dividend#1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::return#1 divr16u::divisor#6 divr16u::i#2 divr16u::rem#11 divr16u::dividend#1 ] ) - [87] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::return#1 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#1 divr16u::i#1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::return#1 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#1 divr16u::i#1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::return#1 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#1 divr16u::i#1 ] ) - [88] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::return#1 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#1 divr16u::i#1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::return#1 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#1 divr16u::i#1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::return#1 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#1 divr16u::i#1 ] ) + [86] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) [ divr16u::return#0 divr16u::divisor#6 divr16u::i#2 divr16u::rem#11 divr16u::dividend#0 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::return#0 divr16u::divisor#6 divr16u::i#2 divr16u::rem#11 divr16u::dividend#0 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::return#0 divr16u::divisor#6 divr16u::i#2 divr16u::rem#11 divr16u::dividend#0 ] ) + [86] (word) divr16u::rem#11 ← phi( divr16u::@2/(word) divr16u::rem#6 divr16u::@5/(word) divr16u::rem#2 ) [ divr16u::return#0 divr16u::divisor#6 divr16u::i#2 divr16u::rem#11 divr16u::dividend#0 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::return#0 divr16u::divisor#6 divr16u::i#2 divr16u::rem#11 divr16u::dividend#0 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::return#0 divr16u::divisor#6 divr16u::i#2 divr16u::rem#11 divr16u::dividend#0 ] ) + [87] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::return#0 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#0 divr16u::i#1 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::return#0 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#0 divr16u::i#1 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::return#0 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#0 divr16u::i#1 ] ) + [88] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::return#0 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#0 divr16u::i#1 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::return#0 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#0 divr16u::i#1 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::return#0 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#0 divr16u::i#1 ] ) to:divr16u::@6 divr16u::@6: scope:[divr16u] from divr16u::@3 - [89] (word) rem16u#13 ← (word) divr16u::rem#11 [ rem16u#13 divr16u::return#1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 rem16u#13 divr16u::return#1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ rem16u#13 divr16u::return#1 ] ) + [89] (word) rem16u#1 ← (word) divr16u::rem#11 [ divr16u::return#0 rem16u#1 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::return#0 rem16u#1 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::return#0 rem16u#1 ] ) to:divr16u::@return divr16u::@return: scope:[divr16u] from divr16u::@6 - [90] return [ rem16u#13 divr16u::return#1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 rem16u#13 divr16u::return#1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ rem16u#13 divr16u::return#1 ] ) - to:@return -div16u: scope:[div16u] from lin16u_gen - [91] phi() [ ] ( main:2::lin16u_gen:5::div16u:57 [ ] ) - [92] call divr16u param-assignment [ rem16u#13 divr16u::return#1 ] ( main:2::lin16u_gen:5::div16u:57 [ rem16u#13 divr16u::return#1 ] ) - [93] (word) divr16u::return#0 ← (word) divr16u::return#1 [ rem16u#13 divr16u::return#0 ] ( main:2::lin16u_gen:5::div16u:57 [ rem16u#13 divr16u::return#0 ] ) - to:div16u::@2 -div16u::@2: scope:[div16u] from div16u - [94] (word) div16u::return#0 ← (word) divr16u::return#0 [ div16u::return#0 rem16u#13 ] ( main:2::lin16u_gen:5::div16u:57 [ div16u::return#0 rem16u#13 ] ) - to:div16u::@return -div16u::@return: scope:[div16u] from div16u::@2 - [95] return [ div16u::return#0 rem16u#13 ] ( main:2::lin16u_gen:5::div16u:57 [ div16u::return#0 rem16u#13 ] ) + [90] return [ divr16u::return#0 rem16u#1 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::return#0 rem16u#1 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::return#0 rem16u#1 ] ) to:@return diff --git a/src/test/java/dk/camelot64/kickc/test/ref/linegen.log b/src/test/java/dk/camelot64/kickc/test/ref/linegen.log index 91241a2df..7c20bc325 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/linegen.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/linegen.log @@ -21,7 +21,7 @@ void main() { // length - the number of points in a total sinus wavelength (the size of the table) void lin16u_gen(word min, word max, word* lintab, word length) { word ampl = max-min; - word stepi = div16u(ampl, length-1); + word stepi = divr16u(ampl, length-1, 0); word stepf = divr16u(0, length-1, rem16u); dword step = { stepi, stepf }; dword val = { min, 0 }; @@ -596,7 +596,7 @@ proc (void()) lin16u_gen((word) lin16u_gen::min , (word) lin16u_gen::max , (word (word~) lin16u_gen::$0 ← (word) lin16u_gen::max - (word) lin16u_gen::min (word) lin16u_gen::ampl ← (word~) lin16u_gen::$0 (word~) lin16u_gen::$1 ← (word) lin16u_gen::length - (byte/signed byte/word/signed word/dword/signed dword) 1 - (word~) lin16u_gen::$2 ← call div16u (word) lin16u_gen::ampl (word~) lin16u_gen::$1 + (word~) lin16u_gen::$2 ← call divr16u (word) lin16u_gen::ampl (word~) lin16u_gen::$1 (byte/signed byte/word/signed word/dword/signed dword) 0 (word) lin16u_gen::stepi ← (word~) lin16u_gen::$2 (word~) lin16u_gen::$3 ← (word) lin16u_gen::length - (byte/signed byte/word/signed word/dword/signed dword) 1 (word~) lin16u_gen::$4 ← call divr16u (byte/signed byte/word/signed word/dword/signed dword) 0 (word~) lin16u_gen::$3 (word) rem16u @@ -1327,7 +1327,7 @@ lin16u_gen: scope:[lin16u_gen] from (word~) lin16u_gen::$0 ← (word) lin16u_gen::max - (word) lin16u_gen::min (word) lin16u_gen::ampl ← (word~) lin16u_gen::$0 (word~) lin16u_gen::$1 ← (word) lin16u_gen::length - (byte/signed byte/word/signed word/dword/signed dword) 1 - (word~) lin16u_gen::$2 ← call div16u (word) lin16u_gen::ampl (word~) lin16u_gen::$1 + (word~) lin16u_gen::$2 ← call divr16u (word) lin16u_gen::ampl (word~) lin16u_gen::$1 (byte/signed byte/word/signed word/dword/signed dword) 0 (word) lin16u_gen::stepi ← (word~) lin16u_gen::$2 (word~) lin16u_gen::$3 ← (word) lin16u_gen::length - (byte/signed byte/word/signed word/dword/signed dword) 1 (word~) lin16u_gen::$4 ← call divr16u (byte/signed byte/word/signed word/dword/signed dword) 0 (word~) lin16u_gen::$3 (word) rem16u @@ -1363,11 +1363,12 @@ Removing unused procedure print_sword Removing unused procedure print_sbyte Removing unused procedure print_sdword Removing unused procedure div8u +Removing unused procedure div16u Removing unused procedure print_dword Removing unused procedure divr8u Eliminating unused variable (byte) rem8u and assignment [0] (byte) rem8u ← (byte/signed byte/word/signed word/dword/signed dword) 0 -Eliminating unused variable (signed byte) rem8s and assignment [34] (signed byte) rem8s ← (byte/signed byte/word/signed word/dword/signed dword) 0 -Eliminating unused variable (signed word) rem16s and assignment [35] (signed word) rem16s ← (byte/signed byte/word/signed word/dword/signed dword) 0 +Eliminating unused variable (signed byte) rem8s and assignment [30] (signed byte) rem8s ← (byte/signed byte/word/signed word/dword/signed dword) 0 +Eliminating unused variable (signed word) rem16s and assignment [31] (signed word) rem16s ← (byte/signed byte/word/signed word/dword/signed dword) 0 Eliminating unused variable - keeping the call (void~) print_word::$1 Eliminating unused variable - keeping the call (void~) print_word::$3 Eliminating unused variable - keeping the call (void~) print_byte::$1 @@ -1381,7 +1382,6 @@ Eliminating unused variable - keeping the call (void~) main::$5 Creating constant string variable for inline (const string) print_byte::$4 "0123456789abcdef" Creating constant string variable for inline (const string) main::str " @" Removing empty block @1 -Removing empty block div16u::@1 Removing empty block @3 Removing empty block divr16u::@7 Removing empty block @4 @@ -1404,7 +1404,6 @@ Removing empty block main::@2 Removing empty block @17 Removing empty block lin16u_gen::@2 PROCEDURE MODIFY VARIABLE ANALYSIS -div16u modifies rem16u divr16u modifies rem16u print_str modifies char_cursor print_ln modifies line_cursor @@ -1433,34 +1432,10 @@ CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN @2: scope:[] from @begin (word) rem16u#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 to:@6 -div16u: scope:[div16u] from lin16u_gen - (word) rem16u#20 ← phi( lin16u_gen/(word) rem16u#23 ) - (word) div16u::divisor#1 ← phi( lin16u_gen/(word) div16u::divisor#0 ) - (word) div16u::dividend#1 ← phi( lin16u_gen/(word) div16u::dividend#0 ) - (word) divr16u::dividend#0 ← (word) div16u::dividend#1 - (word) divr16u::divisor#0 ← (word) div16u::divisor#1 - (word) divr16u::rem#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 - call divr16u param-assignment - (word) divr16u::return#0 ← (word) divr16u::return#2 - to:div16u::@2 -div16u::@2: scope:[div16u] from div16u - (word) rem16u#11 ← phi( div16u/(word) rem16u#4 ) - (word) divr16u::return#4 ← phi( div16u/(word) divr16u::return#0 ) - (word~) div16u::$0 ← (word) divr16u::return#4 - (word) rem16u#1 ← (word) rem16u#11 - (word) div16u::return#0 ← (word~) div16u::$0 - to:div16u::@return -div16u::@return: scope:[div16u] from div16u::@2 - (word) rem16u#12 ← phi( div16u::@2/(word) rem16u#1 ) - (word) div16u::return#3 ← phi( div16u::@2/(word) div16u::return#0 ) - (word) div16u::return#1 ← (word) div16u::return#3 - (word) rem16u#2 ← (word) rem16u#12 - return - to:@return -divr16u: scope:[divr16u] from div16u lin16u_gen::@3 - (word) divr16u::divisor#6 ← phi( div16u/(word) divr16u::divisor#0 lin16u_gen::@3/(word) divr16u::divisor#1 ) - (word) divr16u::dividend#5 ← phi( div16u/(word) divr16u::dividend#0 lin16u_gen::@3/(word) divr16u::dividend#2 ) - (word) divr16u::rem#10 ← phi( div16u/(word) divr16u::rem#0 lin16u_gen::@3/(word) divr16u::rem#4 ) +divr16u: scope:[divr16u] from lin16u_gen lin16u_gen::@3 + (word) divr16u::divisor#6 ← phi( lin16u_gen/(word) divr16u::divisor#0 lin16u_gen::@3/(word) divr16u::divisor#1 ) + (word) divr16u::dividend#5 ← phi( lin16u_gen/(word) divr16u::dividend#1 lin16u_gen::@3/(word) divr16u::dividend#2 ) + (word) divr16u::rem#10 ← phi( lin16u_gen/(word) divr16u::rem#3 lin16u_gen::@3/(word) divr16u::rem#4 ) (word) divr16u::quotient#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 (byte) divr16u::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 to:divr16u::@1 @@ -1471,7 +1446,7 @@ divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#6 ) (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 ) (word~) divr16u::$0 ← (word) divr16u::rem#5 << (byte/signed byte/word/signed word/dword/signed dword) 1 - (word) divr16u::rem#1 ← (word~) divr16u::$0 + (word) divr16u::rem#0 ← (word~) divr16u::$0 (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 (boolean~) divr16u::$3 ← (byte~) divr16u::$2 != (byte/signed byte/word/signed word/dword/signed dword) 0 @@ -1481,11 +1456,11 @@ divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 divr16u::@2: scope:[divr16u] from divr16u::@1 divr16u::@4 (byte) divr16u::i#3 ← phi( divr16u::@1/(byte) divr16u::i#5 divr16u::@4/(byte) divr16u::i#6 ) (word) divr16u::divisor#2 ← phi( divr16u::@1/(word) divr16u::divisor#4 divr16u::@4/(word) divr16u::divisor#5 ) - (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#1 divr16u::@4/(word) divr16u::rem#2 ) + (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 ) (word) divr16u::quotient#3 ← phi( divr16u::@1/(word) divr16u::quotient#6 divr16u::@4/(word) divr16u::quotient#7 ) (word) divr16u::dividend#4 ← phi( divr16u::@1/(word) divr16u::dividend#3 divr16u::@4/(word) divr16u::dividend#7 ) (word~) divr16u::$6 ← (word) divr16u::dividend#4 << (byte/signed byte/word/signed word/dword/signed dword) 1 - (word) divr16u::dividend#1 ← (word~) divr16u::$6 + (word) divr16u::dividend#0 ← (word~) divr16u::$6 (word~) divr16u::$7 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 (word) divr16u::quotient#1 ← (word~) divr16u::$7 (boolean~) divr16u::$8 ← (word) divr16u::rem#6 >= (word) divr16u::divisor#2 @@ -1497,45 +1472,45 @@ divr16u::@4: scope:[divr16u] from divr16u::@1 (word) divr16u::divisor#5 ← phi( divr16u::@1/(word) divr16u::divisor#4 ) (word) divr16u::quotient#7 ← phi( divr16u::@1/(word) divr16u::quotient#6 ) (word) divr16u::dividend#7 ← phi( divr16u::@1/(word) divr16u::dividend#3 ) - (word) divr16u::rem#7 ← phi( divr16u::@1/(word) divr16u::rem#1 ) + (word) divr16u::rem#7 ← phi( divr16u::@1/(word) divr16u::rem#0 ) (word~) divr16u::$5 ← (word) divr16u::rem#7 | (byte/signed byte/word/signed word/dword/signed dword) 1 - (word) divr16u::rem#2 ← (word~) divr16u::$5 + (word) divr16u::rem#1 ← (word~) divr16u::$5 to:divr16u::@2 divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5 (word) divr16u::divisor#7 ← phi( divr16u::@2/(word) divr16u::divisor#2 divr16u::@5/(word) divr16u::divisor#3 ) (word) divr16u::quotient#8 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) - (word) divr16u::dividend#6 ← phi( divr16u::@2/(word) divr16u::dividend#1 divr16u::@5/(word) divr16u::dividend#8 ) - (word) divr16u::rem#11 ← phi( divr16u::@2/(word) divr16u::rem#6 divr16u::@5/(word) divr16u::rem#3 ) + (word) divr16u::dividend#6 ← phi( divr16u::@2/(word) divr16u::dividend#0 divr16u::@5/(word) divr16u::dividend#8 ) + (word) divr16u::rem#11 ← phi( divr16u::@2/(word) divr16u::rem#6 divr16u::@5/(word) divr16u::rem#2 ) (byte) divr16u::i#2 ← phi( divr16u::@2/(byte) divr16u::i#3 divr16u::@5/(byte) divr16u::i#4 ) (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 (boolean~) divr16u::$11 ← (byte) divr16u::i#1 != (byte/signed byte/word/signed word/dword/signed dword) 16 if((boolean~) divr16u::$11) goto divr16u::@1 to:divr16u::@6 divr16u::@5: scope:[divr16u] from divr16u::@2 - (word) divr16u::dividend#8 ← phi( divr16u::@2/(word) divr16u::dividend#1 ) + (word) divr16u::dividend#8 ← phi( divr16u::@2/(word) divr16u::dividend#0 ) (byte) divr16u::i#4 ← phi( divr16u::@2/(byte) divr16u::i#3 ) (word) divr16u::divisor#3 ← phi( divr16u::@2/(word) divr16u::divisor#2 ) (word) divr16u::rem#8 ← phi( divr16u::@2/(word) divr16u::rem#6 ) (word) divr16u::quotient#4 ← phi( divr16u::@2/(word) divr16u::quotient#1 ) (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#4 (word~) divr16u::$10 ← (word) divr16u::rem#8 - (word) divr16u::divisor#3 - (word) divr16u::rem#3 ← (word~) divr16u::$10 + (word) divr16u::rem#2 ← (word~) divr16u::$10 to:divr16u::@3 divr16u::@6: scope:[divr16u] from divr16u::@3 (word) divr16u::quotient#5 ← phi( divr16u::@3/(word) divr16u::quotient#8 ) (word) divr16u::rem#9 ← phi( divr16u::@3/(word) divr16u::rem#11 ) - (word) rem16u#3 ← (word) divr16u::rem#9 - (word) divr16u::return#1 ← (word) divr16u::quotient#5 + (word) rem16u#1 ← (word) divr16u::rem#9 + (word) divr16u::return#0 ← (word) divr16u::quotient#5 to:divr16u::@return divr16u::@return: scope:[divr16u] from divr16u::@6 - (word) rem16u#13 ← phi( divr16u::@6/(word) rem16u#3 ) - (word) divr16u::return#5 ← phi( divr16u::@6/(word) divr16u::return#1 ) - (word) divr16u::return#2 ← (word) divr16u::return#5 - (word) rem16u#4 ← (word) rem16u#13 + (word) rem16u#9 ← phi( divr16u::@6/(word) rem16u#1 ) + (word) divr16u::return#4 ← phi( divr16u::@6/(word) divr16u::return#0 ) + (word) divr16u::return#1 ← (word) divr16u::return#4 + (word) rem16u#2 ← (word) rem16u#9 return to:@return @6: scope:[] from @2 - (word) rem16u#27 ← phi( @2/(word) rem16u#0 ) + (word) rem16u#22 ← phi( @2/(word) rem16u#0 ) (byte*) SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024 (byte*) line_cursor#0 ← (byte*) SCREEN#0 (byte*) char_cursor#0 ← (byte*) line_cursor#0 @@ -1670,7 +1645,7 @@ print_cls::@return: scope:[print_cls] from print_cls::@2 main: scope:[main] from @18 (byte*) char_cursor#50 ← phi( @18/(byte*) char_cursor#48 ) (byte*) line_cursor#21 ← phi( @18/(byte*) line_cursor#20 ) - (word) rem16u#21 ← phi( @18/(word) rem16u#25 ) + (word) rem16u#16 ← phi( @18/(word) rem16u#20 ) (word[20]) main::lintab#0 ← { fill( 20, 0) } (word) lin16u_gen::min#0 ← (word/signed word/dword/signed dword) 557 (word) lin16u_gen::max#0 ← (word/signed word/dword/signed dword) 29793 @@ -1681,12 +1656,12 @@ main: scope:[main] from @18 main::@3: scope:[main] from main (byte*) char_cursor#46 ← phi( main/(byte*) char_cursor#50 ) (byte*) line_cursor#18 ← phi( main/(byte*) line_cursor#21 ) - (word) rem16u#14 ← phi( main/(word) rem16u#9 ) - (word) rem16u#5 ← (word) rem16u#14 + (word) rem16u#10 ← phi( main/(word) rem16u#7 ) + (word) rem16u#3 ← (word) rem16u#10 call print_cls param-assignment to:main::@4 main::@4: scope:[main] from main::@3 - (word) rem16u#31 ← phi( main::@3/(word) rem16u#5 ) + (word) rem16u#26 ← phi( main::@3/(word) rem16u#3 ) (byte*) char_cursor#35 ← phi( main::@3/(byte*) char_cursor#14 ) (byte*) line_cursor#13 ← phi( main::@3/(byte*) line_cursor#4 ) (byte*) line_cursor#5 ← (byte*) line_cursor#13 @@ -1694,7 +1669,7 @@ main::@4: scope:[main] from main::@3 (byte) main::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 to:main::@1 main::@1: scope:[main] from main::@4 main::@8 - (word) rem16u#30 ← phi( main::@4/(word) rem16u#31 main::@8/(word) rem16u#22 ) + (word) rem16u#25 ← phi( main::@4/(word) rem16u#26 main::@8/(word) rem16u#17 ) (byte*) line_cursor#24 ← phi( main::@4/(byte*) line_cursor#5 main::@8/(byte*) line_cursor#6 ) (byte*) char_cursor#47 ← phi( main::@4/(byte*) char_cursor#15 main::@8/(byte*) char_cursor#19 ) (byte) main::i#2 ← phi( main::@4/(byte) main::i#0 main::@8/(byte) main::i#1 ) @@ -1702,7 +1677,7 @@ main::@1: scope:[main] from main::@4 main::@8 call print_byte param-assignment to:main::@5 main::@5: scope:[main] from main::@1 - (word) rem16u#29 ← phi( main::@1/(word) rem16u#30 ) + (word) rem16u#24 ← phi( main::@1/(word) rem16u#25 ) (byte*) line_cursor#23 ← phi( main::@1/(byte*) line_cursor#24 ) (byte) main::i#5 ← phi( main::@1/(byte) main::i#2 ) (byte*) char_cursor#36 ← phi( main::@1/(byte*) char_cursor#10 ) @@ -1711,7 +1686,7 @@ main::@5: scope:[main] from main::@1 call print_str param-assignment to:main::@6 main::@6: scope:[main] from main::@5 - (word) rem16u#28 ← phi( main::@5/(word) rem16u#29 ) + (word) rem16u#23 ← phi( main::@5/(word) rem16u#24 ) (byte*) line_cursor#22 ← phi( main::@5/(byte*) line_cursor#23 ) (byte) main::i#3 ← phi( main::@5/(byte) main::i#5 ) (byte*) char_cursor#37 ← phi( main::@5/(byte*) char_cursor#2 ) @@ -1720,7 +1695,7 @@ main::@6: scope:[main] from main::@5 call print_word param-assignment to:main::@7 main::@7: scope:[main] from main::@6 - (word) rem16u#26 ← phi( main::@6/(word) rem16u#28 ) + (word) rem16u#21 ← phi( main::@6/(word) rem16u#23 ) (byte) main::i#6 ← phi( main::@6/(byte) main::i#3 ) (byte*) line_cursor#19 ← phi( main::@6/(byte*) line_cursor#22 ) (byte*) char_cursor#38 ← phi( main::@6/(byte*) char_cursor#7 ) @@ -1728,7 +1703,7 @@ main::@7: scope:[main] from main::@6 call print_ln param-assignment to:main::@8 main::@8: scope:[main] from main::@7 - (word) rem16u#22 ← phi( main::@7/(word) rem16u#26 ) + (word) rem16u#17 ← phi( main::@7/(word) rem16u#21 ) (byte) main::i#4 ← phi( main::@7/(byte) main::i#6 ) (byte*) char_cursor#39 ← phi( main::@7/(byte*) char_cursor#4 ) (byte*) line_cursor#14 ← phi( main::@7/(byte*) line_cursor#2 ) @@ -1743,58 +1718,59 @@ main::@8: scope:[main] from main::@7 main::@return: scope:[main] from main::@8 (byte*) char_cursor#40 ← phi( main::@8/(byte*) char_cursor#19 ) (byte*) line_cursor#15 ← phi( main::@8/(byte*) line_cursor#6 ) - (word) rem16u#15 ← phi( main::@8/(word) rem16u#22 ) - (word) rem16u#6 ← (word) rem16u#15 + (word) rem16u#11 ← phi( main::@8/(word) rem16u#17 ) + (word) rem16u#4 ← (word) rem16u#11 (byte*) line_cursor#7 ← (byte*) line_cursor#15 (byte*) char_cursor#20 ← (byte*) char_cursor#40 return to:@return lin16u_gen: scope:[lin16u_gen] from main (word*) lin16u_gen::lintab#5 ← phi( main/(word*) lin16u_gen::lintab#0 ) - (word) rem16u#23 ← phi( main/(word) rem16u#21 ) + (word) rem16u#18 ← phi( main/(word) rem16u#16 ) (word) lin16u_gen::length#1 ← phi( main/(word) lin16u_gen::length#0 ) (word) lin16u_gen::min#1 ← phi( main/(word) lin16u_gen::min#0 ) (word) lin16u_gen::max#1 ← phi( main/(word) lin16u_gen::max#0 ) (word~) lin16u_gen::$0 ← (word) lin16u_gen::max#1 - (word) lin16u_gen::min#1 (word) lin16u_gen::ampl#0 ← (word~) lin16u_gen::$0 (word~) lin16u_gen::$1 ← (word) lin16u_gen::length#1 - (byte/signed byte/word/signed word/dword/signed dword) 1 - (word) div16u::dividend#0 ← (word) lin16u_gen::ampl#0 - (word) div16u::divisor#0 ← (word~) lin16u_gen::$1 - call div16u param-assignment - (word) div16u::return#2 ← (word) div16u::return#1 + (word) divr16u::dividend#1 ← (word) lin16u_gen::ampl#0 + (word) divr16u::divisor#0 ← (word~) lin16u_gen::$1 + (word) divr16u::rem#3 ← (byte/signed byte/word/signed word/dword/signed dword) 0 + call divr16u param-assignment + (word) divr16u::return#2 ← (word) divr16u::return#1 to:lin16u_gen::@3 lin16u_gen::@3: scope:[lin16u_gen] from lin16u_gen (word*) lin16u_gen::lintab#4 ← phi( lin16u_gen/(word*) lin16u_gen::lintab#5 ) (word) lin16u_gen::min#3 ← phi( lin16u_gen/(word) lin16u_gen::min#1 ) (word) lin16u_gen::length#2 ← phi( lin16u_gen/(word) lin16u_gen::length#1 ) - (word) rem16u#16 ← phi( lin16u_gen/(word) rem16u#2 ) - (word) div16u::return#4 ← phi( lin16u_gen/(word) div16u::return#2 ) - (word~) lin16u_gen::$2 ← (word) div16u::return#4 - (word) rem16u#7 ← (word) rem16u#16 + (word) rem16u#12 ← phi( lin16u_gen/(word) rem16u#2 ) + (word) divr16u::return#5 ← phi( lin16u_gen/(word) divr16u::return#2 ) + (word~) lin16u_gen::$2 ← (word) divr16u::return#5 + (word) rem16u#5 ← (word) rem16u#12 (word) lin16u_gen::stepi#0 ← (word~) lin16u_gen::$2 (word~) lin16u_gen::$3 ← (word) lin16u_gen::length#2 - (byte/signed byte/word/signed word/dword/signed dword) 1 (word) divr16u::dividend#2 ← (byte/signed byte/word/signed word/dword/signed dword) 0 (word) divr16u::divisor#1 ← (word~) lin16u_gen::$3 - (word) divr16u::rem#4 ← (word) rem16u#7 + (word) divr16u::rem#4 ← (word) rem16u#5 call divr16u param-assignment - (word) divr16u::return#3 ← (word) divr16u::return#2 + (word) divr16u::return#3 ← (word) divr16u::return#1 to:lin16u_gen::@4 lin16u_gen::@4: scope:[lin16u_gen] from lin16u_gen::@3 (word) lin16u_gen::length#4 ← phi( lin16u_gen::@3/(word) lin16u_gen::length#2 ) (word*) lin16u_gen::lintab#3 ← phi( lin16u_gen::@3/(word*) lin16u_gen::lintab#4 ) (word) lin16u_gen::min#2 ← phi( lin16u_gen::@3/(word) lin16u_gen::min#3 ) (word) lin16u_gen::stepi#1 ← phi( lin16u_gen::@3/(word) lin16u_gen::stepi#0 ) - (word) rem16u#17 ← phi( lin16u_gen::@3/(word) rem16u#4 ) + (word) rem16u#13 ← phi( lin16u_gen::@3/(word) rem16u#2 ) (word) divr16u::return#6 ← phi( lin16u_gen::@3/(word) divr16u::return#3 ) (word~) lin16u_gen::$4 ← (word) divr16u::return#6 - (word) rem16u#8 ← (word) rem16u#17 + (word) rem16u#6 ← (word) rem16u#13 (word) lin16u_gen::stepf#0 ← (word~) lin16u_gen::$4 (dword) lin16u_gen::step#0 ← { (word) lin16u_gen::stepi#1, (word) lin16u_gen::stepf#0 } (dword) lin16u_gen::val#0 ← { (word) lin16u_gen::min#2, (byte/signed byte/word/signed word/dword/signed dword) 0 } (word) lin16u_gen::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 to:lin16u_gen::@1 lin16u_gen::@1: scope:[lin16u_gen] from lin16u_gen::@1 lin16u_gen::@4 - (word) rem16u#24 ← phi( lin16u_gen::@1/(word) rem16u#24 lin16u_gen::@4/(word) rem16u#8 ) + (word) rem16u#19 ← phi( lin16u_gen::@1/(word) rem16u#19 lin16u_gen::@4/(word) rem16u#6 ) (word) lin16u_gen::length#3 ← phi( lin16u_gen::@1/(word) lin16u_gen::length#3 lin16u_gen::@4/(word) lin16u_gen::length#4 ) (word) lin16u_gen::i#2 ← phi( lin16u_gen::@1/(word) lin16u_gen::i#1 lin16u_gen::@4/(word) lin16u_gen::i#0 ) (dword) lin16u_gen::step#1 ← phi( lin16u_gen::@1/(dword) lin16u_gen::step#1 lin16u_gen::@4/(dword) lin16u_gen::step#0 ) @@ -1811,21 +1787,21 @@ lin16u_gen::@1: scope:[lin16u_gen] from lin16u_gen::@1 lin16u_gen::@4 if((boolean~) lin16u_gen::$8) goto lin16u_gen::@1 to:lin16u_gen::@return lin16u_gen::@return: scope:[lin16u_gen] from lin16u_gen::@1 - (word) rem16u#18 ← phi( lin16u_gen::@1/(word) rem16u#24 ) - (word) rem16u#9 ← (word) rem16u#18 + (word) rem16u#14 ← phi( lin16u_gen::@1/(word) rem16u#19 ) + (word) rem16u#7 ← (word) rem16u#14 return to:@return @18: scope:[] from @6 (byte*) char_cursor#48 ← phi( @6/(byte*) char_cursor#0 ) (byte*) line_cursor#20 ← phi( @6/(byte*) line_cursor#0 ) - (word) rem16u#25 ← phi( @6/(word) rem16u#27 ) + (word) rem16u#20 ← phi( @6/(word) rem16u#22 ) call main param-assignment to:@19 @19: scope:[] from @18 (byte*) char_cursor#41 ← phi( @18/(byte*) char_cursor#20 ) (byte*) line_cursor#16 ← phi( @18/(byte*) line_cursor#7 ) - (word) rem16u#19 ← phi( @18/(word) rem16u#6 ) - (word) rem16u#10 ← (word) rem16u#19 + (word) rem16u#15 ← phi( @18/(word) rem16u#4 ) + (word) rem16u#8 ← (word) rem16u#15 (byte*) line_cursor#8 ← (byte*) line_cursor#16 (byte*) char_cursor#21 ← (byte*) char_cursor#41 to:@end @@ -1892,22 +1868,6 @@ SYMBOL TABLE SSA (byte*) char_cursor#7 (byte*) char_cursor#8 (byte*) char_cursor#9 -(word()) div16u((word) div16u::dividend , (word) div16u::divisor) -(word~) div16u::$0 -(label) div16u::@2 -(label) div16u::@return -(word) div16u::dividend -(word) div16u::dividend#0 -(word) div16u::dividend#1 -(word) div16u::divisor -(word) div16u::divisor#0 -(word) div16u::divisor#1 -(word) div16u::return -(word) div16u::return#0 -(word) div16u::return#1 -(word) div16u::return#2 -(word) div16u::return#3 -(word) div16u::return#4 (word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem) (word~) divr16u::$0 (byte~) divr16u::$1 @@ -2167,12 +2127,7 @@ SYMBOL TABLE SSA (word) rem16u#24 (word) rem16u#25 (word) rem16u#26 -(word) rem16u#27 -(word) rem16u#28 -(word) rem16u#29 (word) rem16u#3 -(word) rem16u#30 -(word) rem16u#31 (word) rem16u#4 (word) rem16u#5 (word) rem16u#6 @@ -2184,18 +2139,10 @@ OPTIMIZING CONTROL FLOW GRAPH Inversing boolean not (boolean~) divr16u::$4 ← (byte~) divr16u::$2 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (boolean~) divr16u::$3 ← (byte~) divr16u::$2 != (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not (boolean~) divr16u::$9 ← (word) divr16u::rem#6 < (word) divr16u::divisor#2 from (boolean~) divr16u::$8 ← (word) divr16u::rem#6 >= (word) divr16u::divisor#2 Succesful SSA optimization Pass2UnaryNotSimplification -Not aliassing across scopes: div16u::dividend#1 div16u::dividend#0 -Not aliassing across scopes: div16u::divisor#1 div16u::divisor#0 -Not aliassing across scopes: rem16u#20 rem16u#23 -Not aliassing across scopes: divr16u::dividend#0 div16u::dividend#1 -Not aliassing across scopes: divr16u::divisor#0 div16u::divisor#1 -Not aliassing across scopes: divr16u::return#0 divr16u::return#2 -Not aliassing across scopes: rem16u#11 rem16u#4 -Not aliassing across scopes: div16u::$0 divr16u::return#4 -Not aliassing across scopes: divr16u::rem#10 divr16u::rem#0 -Not aliassing across scopes: divr16u::dividend#5 divr16u::dividend#0 +Not aliassing across scopes: divr16u::rem#10 divr16u::rem#3 +Not aliassing across scopes: divr16u::dividend#5 divr16u::dividend#1 Not aliassing across scopes: divr16u::divisor#6 divr16u::divisor#0 -Not aliassing across scopes: rem16u#3 divr16u::rem#9 +Not aliassing across scopes: rem16u#1 divr16u::rem#9 Not aliassing across scopes: print_str::str#4 print_str::str#1 Not aliassing across scopes: char_cursor#49 char_cursor#16 Not aliassing across scopes: line_cursor#17 line_cursor#19 @@ -2212,11 +2159,11 @@ Not aliassing across scopes: print_char::ch#2 print_char::ch#0 Not aliassing across scopes: char_cursor#32 char_cursor#45 Not aliassing across scopes: print_cls::sc#0 SCREEN#0 Not aliassing across scopes: line_cursor#3 SCREEN#0 -Not aliassing across scopes: rem16u#21 rem16u#25 +Not aliassing across scopes: rem16u#16 rem16u#20 Not aliassing across scopes: line_cursor#21 line_cursor#20 Not aliassing across scopes: char_cursor#50 char_cursor#48 Not aliassing across scopes: lin16u_gen::lintab#0 main::lintab#0 -Not aliassing across scopes: rem16u#14 rem16u#9 +Not aliassing across scopes: rem16u#10 rem16u#7 Not aliassing across scopes: line_cursor#13 line_cursor#4 Not aliassing across scopes: char_cursor#35 char_cursor#14 Not aliassing across scopes: print_byte::b#2 main::i#2 @@ -2228,41 +2175,38 @@ Not aliassing across scopes: char_cursor#39 char_cursor#4 Not aliassing across scopes: lin16u_gen::max#1 lin16u_gen::max#0 Not aliassing across scopes: lin16u_gen::min#1 lin16u_gen::min#0 Not aliassing across scopes: lin16u_gen::length#1 lin16u_gen::length#0 -Not aliassing across scopes: rem16u#23 rem16u#21 +Not aliassing across scopes: rem16u#18 rem16u#16 Not aliassing across scopes: lin16u_gen::lintab#5 lin16u_gen::lintab#0 -Not aliassing across scopes: div16u::dividend#0 lin16u_gen::ampl#0 -Not aliassing across scopes: div16u::return#2 div16u::return#1 -Not aliassing across scopes: rem16u#16 rem16u#2 -Not aliassing across scopes: lin16u_gen::$2 div16u::return#4 -Not aliassing across scopes: divr16u::rem#4 rem16u#7 -Not aliassing across scopes: divr16u::return#3 divr16u::return#2 -Not aliassing across scopes: rem16u#17 rem16u#4 +Not aliassing across scopes: divr16u::dividend#1 lin16u_gen::ampl#0 +Not aliassing across scopes: divr16u::return#2 divr16u::return#1 +Not aliassing across scopes: rem16u#12 rem16u#2 +Not aliassing across scopes: lin16u_gen::$2 divr16u::return#5 +Not aliassing across scopes: divr16u::rem#4 rem16u#5 +Not aliassing across scopes: divr16u::return#3 divr16u::return#1 +Not aliassing across scopes: rem16u#13 rem16u#2 Not aliassing across scopes: lin16u_gen::$4 divr16u::return#6 Not aliassing identity: lin16u_gen::step#1 lin16u_gen::step#1 Not aliassing identity: lin16u_gen::length#3 lin16u_gen::length#3 -Not aliassing identity: rem16u#24 rem16u#24 -Not aliassing across scopes: rem16u#19 rem16u#6 +Not aliassing identity: rem16u#19 rem16u#19 +Not aliassing across scopes: rem16u#15 rem16u#4 Not aliassing across scopes: line_cursor#16 line_cursor#7 Not aliassing across scopes: char_cursor#41 char_cursor#20 -Alias (word) divr16u::return#0 = (word) divr16u::return#4 -Alias (word) rem16u#1 = (word) rem16u#11 (word) rem16u#12 (word) rem16u#2 -Alias (word) div16u::return#0 = (word~) div16u::$0 (word) div16u::return#3 (word) div16u::return#1 -Alias (word) divr16u::rem#1 = (word~) divr16u::$0 (word) divr16u::rem#7 -Alias (word) divr16u::dividend#1 = (word~) divr16u::$6 (word) divr16u::dividend#8 +Alias (word) divr16u::rem#0 = (word~) divr16u::$0 (word) divr16u::rem#7 +Alias (word) divr16u::dividend#0 = (word~) divr16u::$6 (word) divr16u::dividend#8 Alias (word) divr16u::quotient#1 = (word~) divr16u::$7 (word) divr16u::quotient#4 Alias (word) divr16u::dividend#3 = (word) divr16u::dividend#7 Alias (word) divr16u::quotient#6 = (word) divr16u::quotient#7 Alias (word) divr16u::divisor#4 = (word) divr16u::divisor#5 Alias (byte) divr16u::i#5 = (byte) divr16u::i#6 -Alias (word) divr16u::rem#2 = (word~) divr16u::$5 +Alias (word) divr16u::rem#1 = (word~) divr16u::$5 Alias (word) divr16u::rem#6 = (word) divr16u::rem#8 Alias (word) divr16u::divisor#2 = (word) divr16u::divisor#3 Alias (byte) divr16u::i#3 = (byte) divr16u::i#4 -Alias (word) divr16u::rem#3 = (word~) divr16u::$10 +Alias (word) divr16u::rem#2 = (word~) divr16u::$10 Alias (word) divr16u::rem#11 = (word) divr16u::rem#9 -Alias (word) divr16u::return#1 = (word) divr16u::quotient#5 (word) divr16u::quotient#8 (word) divr16u::return#5 (word) divr16u::return#2 -Alias (word) rem16u#13 = (word) rem16u#3 (word) rem16u#4 -Alias (word) rem16u#0 = (word) rem16u#27 (word) rem16u#25 +Alias (word) divr16u::return#0 = (word) divr16u::quotient#5 (word) divr16u::quotient#8 (word) divr16u::return#4 (word) divr16u::return#1 +Alias (word) rem16u#1 = (word) rem16u#9 (word) rem16u#2 +Alias (word) rem16u#0 = (word) rem16u#22 (word) rem16u#20 Alias (byte*) SCREEN#0 = (byte*) line_cursor#0 (byte*) char_cursor#0 (byte*) line_cursor#20 (byte*) char_cursor#48 Alias (byte*) print_str::str#2 = (byte*) print_str::str#3 Alias (byte*) char_cursor#2 = (byte*) char_cursor#22 (byte*) char_cursor#42 (byte*) char_cursor#23 @@ -2279,12 +2223,12 @@ Alias (byte*) char_cursor#11 = (byte*) char_cursor#33 (byte*) char_cursor#12 Alias (byte*) line_cursor#12 = (byte*) char_cursor#13 (byte*) line_cursor#3 (byte*) char_cursor#34 (byte*) line_cursor#4 (byte*) char_cursor#14 Alias (byte*) line_cursor#18 = (byte*) line_cursor#21 Alias (byte*) char_cursor#46 = (byte*) char_cursor#50 -Alias (word) rem16u#14 = (word) rem16u#5 (word) rem16u#31 +Alias (word) rem16u#10 = (word) rem16u#3 (word) rem16u#26 Alias (byte*) line_cursor#13 = (byte*) line_cursor#5 Alias (byte*) char_cursor#15 = (byte*) char_cursor#35 Alias (byte) main::i#2 = (byte) main::i#5 (byte) main::i#3 (byte) main::i#6 (byte) main::i#4 Alias (byte*) line_cursor#19 = (byte*) line_cursor#23 (byte*) line_cursor#24 (byte*) line_cursor#22 -Alias (word) rem16u#15 = (word) rem16u#29 (word) rem16u#30 (word) rem16u#28 (word) rem16u#26 (word) rem16u#22 (word) rem16u#6 +Alias (word) rem16u#11 = (word) rem16u#24 (word) rem16u#25 (word) rem16u#23 (word) rem16u#21 (word) rem16u#17 (word) rem16u#4 Alias (byte*) char_cursor#16 = (byte*) char_cursor#36 Alias (byte*) char_cursor#17 = (byte*) char_cursor#37 Alias (byte*) char_cursor#18 = (byte*) char_cursor#38 @@ -2292,36 +2236,28 @@ Alias (byte*) line_cursor#14 = (byte*) line_cursor#6 (byte*) line_cursor#15 (byt Alias (byte*) char_cursor#19 = (byte*) char_cursor#39 (byte*) char_cursor#40 (byte*) char_cursor#20 Alias (byte) main::i#1 = (byte/word~) main::$6 Alias (word) lin16u_gen::ampl#0 = (word~) lin16u_gen::$0 -Alias (word) div16u::divisor#0 = (word~) lin16u_gen::$1 -Alias (word) div16u::return#2 = (word) div16u::return#4 +Alias (word) divr16u::divisor#0 = (word~) lin16u_gen::$1 +Alias (word) divr16u::return#2 = (word) divr16u::return#5 Alias (word) lin16u_gen::length#1 = (word) lin16u_gen::length#2 (word) lin16u_gen::length#4 Alias (word) lin16u_gen::min#1 = (word) lin16u_gen::min#3 (word) lin16u_gen::min#2 Alias (word*) lin16u_gen::lintab#3 = (word*) lin16u_gen::lintab#4 (word*) lin16u_gen::lintab#5 -Alias (word) rem16u#16 = (word) rem16u#7 +Alias (word) rem16u#12 = (word) rem16u#5 Alias (word) lin16u_gen::stepi#0 = (word~) lin16u_gen::$2 (word) lin16u_gen::stepi#1 Alias (word) divr16u::divisor#1 = (word~) lin16u_gen::$3 Alias (word) divr16u::return#3 = (word) divr16u::return#6 -Alias (word) rem16u#17 = (word) rem16u#8 +Alias (word) rem16u#13 = (word) rem16u#6 Alias (word) lin16u_gen::stepf#0 = (word~) lin16u_gen::$4 Alias (dword) lin16u_gen::val#1 = (dword~) lin16u_gen::$6 Alias (word*) lin16u_gen::lintab#1 = (word*~) lin16u_gen::$7 -Alias (word) rem16u#18 = (word) rem16u#24 (word) rem16u#9 -Alias (word) rem16u#10 = (word) rem16u#19 +Alias (word) rem16u#14 = (word) rem16u#19 (word) rem16u#7 +Alias (word) rem16u#15 = (word) rem16u#8 Alias (byte*) line_cursor#16 = (byte*) line_cursor#8 Alias (byte*) char_cursor#21 = (byte*) char_cursor#41 Succesful SSA optimization Pass2AliasElimination -Not aliassing across scopes: div16u::dividend#1 div16u::dividend#0 -Not aliassing across scopes: div16u::divisor#1 div16u::divisor#0 -Not aliassing across scopes: rem16u#20 rem16u#23 -Not aliassing across scopes: divr16u::dividend#0 div16u::dividend#1 -Not aliassing across scopes: divr16u::divisor#0 div16u::divisor#1 -Not aliassing across scopes: divr16u::return#0 divr16u::return#1 -Not aliassing across scopes: rem16u#1 rem16u#13 -Not aliassing across scopes: div16u::return#0 divr16u::return#0 -Not aliassing across scopes: divr16u::rem#10 divr16u::rem#0 -Not aliassing across scopes: divr16u::dividend#5 divr16u::dividend#0 +Not aliassing across scopes: divr16u::rem#10 divr16u::rem#3 +Not aliassing across scopes: divr16u::dividend#5 divr16u::dividend#1 Not aliassing across scopes: divr16u::divisor#6 divr16u::divisor#0 -Not aliassing across scopes: rem16u#13 divr16u::rem#11 +Not aliassing across scopes: rem16u#1 divr16u::rem#11 Not aliassing across scopes: print_str::str#4 print_str::str#1 Not aliassing across scopes: char_cursor#49 char_cursor#16 Not aliassing across scopes: line_cursor#17 line_cursor#19 @@ -2338,11 +2274,11 @@ Not aliassing across scopes: print_char::ch#2 print_char::ch#0 Not aliassing across scopes: char_cursor#32 char_cursor#45 Not aliassing across scopes: print_cls::sc#0 SCREEN#0 Not aliassing across scopes: line_cursor#12 SCREEN#0 -Not aliassing across scopes: rem16u#21 rem16u#0 +Not aliassing across scopes: rem16u#16 rem16u#0 Not aliassing across scopes: line_cursor#18 SCREEN#0 Not aliassing across scopes: char_cursor#46 SCREEN#0 Not aliassing across scopes: lin16u_gen::lintab#0 main::lintab#0 -Not aliassing across scopes: rem16u#14 rem16u#18 +Not aliassing across scopes: rem16u#10 rem16u#14 Not aliassing across scopes: line_cursor#13 line_cursor#12 Not aliassing across scopes: char_cursor#15 line_cursor#12 Not aliassing across scopes: print_byte::b#2 main::i#2 @@ -2354,40 +2290,32 @@ Not aliassing across scopes: char_cursor#19 line_cursor#1 Not aliassing across scopes: lin16u_gen::max#1 lin16u_gen::max#0 Not aliassing across scopes: lin16u_gen::min#1 lin16u_gen::min#0 Not aliassing across scopes: lin16u_gen::length#1 lin16u_gen::length#0 -Not aliassing across scopes: rem16u#23 rem16u#21 +Not aliassing across scopes: rem16u#18 rem16u#16 Not aliassing across scopes: lin16u_gen::lintab#3 lin16u_gen::lintab#0 -Not aliassing across scopes: div16u::dividend#0 lin16u_gen::ampl#0 -Not aliassing across scopes: div16u::return#2 div16u::return#0 -Not aliassing across scopes: rem16u#16 rem16u#1 -Not aliassing across scopes: lin16u_gen::stepi#0 div16u::return#2 -Not aliassing across scopes: divr16u::rem#4 rem16u#16 -Not aliassing across scopes: divr16u::return#3 divr16u::return#1 -Not aliassing across scopes: rem16u#17 rem16u#13 +Not aliassing across scopes: divr16u::dividend#1 lin16u_gen::ampl#0 +Not aliassing across scopes: divr16u::return#2 divr16u::return#0 +Not aliassing across scopes: rem16u#12 rem16u#1 +Not aliassing across scopes: lin16u_gen::stepi#0 divr16u::return#2 +Not aliassing across scopes: divr16u::rem#4 rem16u#12 +Not aliassing across scopes: divr16u::return#3 divr16u::return#0 +Not aliassing across scopes: rem16u#13 rem16u#1 Not aliassing across scopes: lin16u_gen::stepf#0 divr16u::return#3 Not aliassing identity: lin16u_gen::step#1 lin16u_gen::step#1 Not aliassing identity: lin16u_gen::length#3 lin16u_gen::length#3 -Not aliassing identity: rem16u#18 rem16u#18 -Not aliassing across scopes: rem16u#10 rem16u#15 +Not aliassing identity: rem16u#14 rem16u#14 +Not aliassing across scopes: rem16u#15 rem16u#11 Not aliassing across scopes: line_cursor#16 line_cursor#14 Not aliassing across scopes: char_cursor#21 char_cursor#19 Alias (word) divr16u::dividend#3 = (word) divr16u::dividend#4 Alias (word) divr16u::quotient#3 = (word) divr16u::quotient#6 Alias (word) divr16u::divisor#2 = (word) divr16u::divisor#4 (word) divr16u::divisor#7 Alias (byte) divr16u::i#2 = (byte) divr16u::i#3 (byte) divr16u::i#5 -Alias (word) divr16u::dividend#1 = (word) divr16u::dividend#6 +Alias (word) divr16u::dividend#0 = (word) divr16u::dividend#6 Succesful SSA optimization Pass2AliasElimination -Not aliassing across scopes: div16u::dividend#1 div16u::dividend#0 -Not aliassing across scopes: div16u::divisor#1 div16u::divisor#0 -Not aliassing across scopes: rem16u#20 rem16u#23 -Not aliassing across scopes: divr16u::dividend#0 div16u::dividend#1 -Not aliassing across scopes: divr16u::divisor#0 div16u::divisor#1 -Not aliassing across scopes: divr16u::return#0 divr16u::return#1 -Not aliassing across scopes: rem16u#1 rem16u#13 -Not aliassing across scopes: div16u::return#0 divr16u::return#0 -Not aliassing across scopes: divr16u::rem#10 divr16u::rem#0 -Not aliassing across scopes: divr16u::dividend#5 divr16u::dividend#0 +Not aliassing across scopes: divr16u::rem#10 divr16u::rem#3 +Not aliassing across scopes: divr16u::dividend#5 divr16u::dividend#1 Not aliassing across scopes: divr16u::divisor#6 divr16u::divisor#0 -Not aliassing across scopes: rem16u#13 divr16u::rem#11 +Not aliassing across scopes: rem16u#1 divr16u::rem#11 Not aliassing across scopes: print_str::str#4 print_str::str#1 Not aliassing across scopes: char_cursor#49 char_cursor#16 Not aliassing across scopes: line_cursor#17 line_cursor#19 @@ -2404,11 +2332,11 @@ Not aliassing across scopes: print_char::ch#2 print_char::ch#0 Not aliassing across scopes: char_cursor#32 char_cursor#45 Not aliassing across scopes: print_cls::sc#0 SCREEN#0 Not aliassing across scopes: line_cursor#12 SCREEN#0 -Not aliassing across scopes: rem16u#21 rem16u#0 +Not aliassing across scopes: rem16u#16 rem16u#0 Not aliassing across scopes: line_cursor#18 SCREEN#0 Not aliassing across scopes: char_cursor#46 SCREEN#0 Not aliassing across scopes: lin16u_gen::lintab#0 main::lintab#0 -Not aliassing across scopes: rem16u#14 rem16u#18 +Not aliassing across scopes: rem16u#10 rem16u#14 Not aliassing across scopes: line_cursor#13 line_cursor#12 Not aliassing across scopes: char_cursor#15 line_cursor#12 Not aliassing across scopes: print_byte::b#2 main::i#2 @@ -2420,33 +2348,29 @@ Not aliassing across scopes: char_cursor#19 line_cursor#1 Not aliassing across scopes: lin16u_gen::max#1 lin16u_gen::max#0 Not aliassing across scopes: lin16u_gen::min#1 lin16u_gen::min#0 Not aliassing across scopes: lin16u_gen::length#1 lin16u_gen::length#0 -Not aliassing across scopes: rem16u#23 rem16u#21 +Not aliassing across scopes: rem16u#18 rem16u#16 Not aliassing across scopes: lin16u_gen::lintab#3 lin16u_gen::lintab#0 -Not aliassing across scopes: div16u::dividend#0 lin16u_gen::ampl#0 -Not aliassing across scopes: div16u::return#2 div16u::return#0 -Not aliassing across scopes: rem16u#16 rem16u#1 -Not aliassing across scopes: lin16u_gen::stepi#0 div16u::return#2 -Not aliassing across scopes: divr16u::rem#4 rem16u#16 -Not aliassing across scopes: divr16u::return#3 divr16u::return#1 -Not aliassing across scopes: rem16u#17 rem16u#13 +Not aliassing across scopes: divr16u::dividend#1 lin16u_gen::ampl#0 +Not aliassing across scopes: divr16u::return#2 divr16u::return#0 +Not aliassing across scopes: rem16u#12 rem16u#1 +Not aliassing across scopes: lin16u_gen::stepi#0 divr16u::return#2 +Not aliassing across scopes: divr16u::rem#4 rem16u#12 +Not aliassing across scopes: divr16u::return#3 divr16u::return#0 +Not aliassing across scopes: rem16u#13 rem16u#1 Not aliassing across scopes: lin16u_gen::stepf#0 divr16u::return#3 Not aliassing identity: lin16u_gen::step#1 lin16u_gen::step#1 Not aliassing identity: lin16u_gen::length#3 lin16u_gen::length#3 -Not aliassing identity: rem16u#18 rem16u#18 -Not aliassing across scopes: rem16u#10 rem16u#15 +Not aliassing identity: rem16u#14 rem16u#14 +Not aliassing across scopes: rem16u#15 rem16u#11 Not aliassing across scopes: line_cursor#16 line_cursor#14 Not aliassing across scopes: char_cursor#21 char_cursor#19 Self Phi Eliminated (word) divr16u::divisor#2 Self Phi Eliminated (byte*) char_cursor#24 -Self Phi Eliminated (word) rem16u#15 +Self Phi Eliminated (word) rem16u#11 Self Phi Eliminated (dword) lin16u_gen::step#1 Self Phi Eliminated (word) lin16u_gen::length#3 -Self Phi Eliminated (word) rem16u#18 +Self Phi Eliminated (word) rem16u#14 Succesful SSA optimization Pass2SelfPhiElimination -Redundant Phi (word) div16u::dividend#1 (word) div16u::dividend#0 -Redundant Phi (word) div16u::divisor#1 (word) div16u::divisor#0 -Redundant Phi (word) rem16u#20 (word) rem16u#23 -Redundant Phi (word) rem16u#1 (word) rem16u#13 Redundant Phi (word) divr16u::divisor#2 (word) divr16u::divisor#6 Redundant Phi (byte*) print_str::str#4 (byte*) print_str::str#1 Redundant Phi (byte*) char_cursor#49 (byte*) char_cursor#16 @@ -2459,13 +2383,13 @@ Redundant Phi (byte*) char_cursor#26 (byte*) char_cursor#10 Redundant Phi (byte*) char_cursor#27 (byte*) char_cursor#10 Redundant Phi (byte*) char_cursor#29 (byte*) char_cursor#11 Redundant Phi (byte*) char_cursor#10 (byte*) char_cursor#11 -Redundant Phi (word) rem16u#21 (word) rem16u#0 +Redundant Phi (word) rem16u#16 (word) rem16u#0 Redundant Phi (byte*) line_cursor#18 (byte*) SCREEN#0 Redundant Phi (byte*) char_cursor#46 (byte*) SCREEN#0 -Redundant Phi (word) rem16u#14 (word) rem16u#18 +Redundant Phi (word) rem16u#10 (word) rem16u#14 Redundant Phi (byte*) line_cursor#13 (byte*) line_cursor#12 Redundant Phi (byte*) char_cursor#15 (byte*) line_cursor#12 -Redundant Phi (word) rem16u#15 (word) rem16u#14 +Redundant Phi (word) rem16u#11 (word) rem16u#10 Redundant Phi (byte*) char_cursor#16 (byte*) char_cursor#10 Redundant Phi (byte*) char_cursor#17 (byte*) char_cursor#2 Redundant Phi (byte*) char_cursor#18 (byte*) char_cursor#27 @@ -2474,14 +2398,14 @@ Redundant Phi (byte*) char_cursor#19 (byte*) line_cursor#1 Redundant Phi (word) lin16u_gen::max#1 (word) lin16u_gen::max#0 Redundant Phi (word) lin16u_gen::min#1 (word) lin16u_gen::min#0 Redundant Phi (word) lin16u_gen::length#1 (word) lin16u_gen::length#0 -Redundant Phi (word) rem16u#23 (word) rem16u#21 +Redundant Phi (word) rem16u#18 (word) rem16u#16 Redundant Phi (word*) lin16u_gen::lintab#3 (word*) lin16u_gen::lintab#0 -Redundant Phi (word) rem16u#16 (word) rem16u#1 -Redundant Phi (word) rem16u#17 (word) rem16u#13 +Redundant Phi (word) rem16u#12 (word) rem16u#1 +Redundant Phi (word) rem16u#13 (word) rem16u#1 Redundant Phi (dword) lin16u_gen::step#1 (dword) lin16u_gen::step#0 Redundant Phi (word) lin16u_gen::length#3 (word) lin16u_gen::length#1 -Redundant Phi (word) rem16u#18 (word) rem16u#17 -Redundant Phi (word) rem16u#10 (word) rem16u#15 +Redundant Phi (word) rem16u#14 (word) rem16u#13 +Redundant Phi (word) rem16u#15 (word) rem16u#11 Redundant Phi (byte*) line_cursor#16 (byte*) line_cursor#14 Redundant Phi (byte*) char_cursor#21 (byte*) char_cursor#19 Succesful SSA optimization Pass2RedundantPhiElimination @@ -2495,7 +2419,6 @@ Simple Condition (boolean~) main::$8 if((byte) main::i#1<(byte/signed byte/word/ Simple Condition (boolean~) lin16u_gen::$8 if((word) lin16u_gen::i#1<(word) lin16u_gen::length#0) goto lin16u_gen::@1 Succesful SSA optimization Pass2ConditionalJumpSimplification Constant (const word) rem16u#0 = 0 -Constant (const word) divr16u::rem#0 = 0 Constant (const word) divr16u::quotient#0 = 0 Constant (const byte) divr16u::i#0 = 0 Constant (const byte*) SCREEN#0 = ((byte*))1024 @@ -2507,6 +2430,7 @@ Constant (const word) lin16u_gen::length#0 = 20 Constant (const byte) main::i#0 = 0 Constant (const string) print_str::str#1 = main::str Constant (const byte/signed byte/word/signed word/dword/signed dword) main::$7 = 20*2 +Constant (const word) divr16u::rem#3 = 0 Constant (const word) divr16u::dividend#2 = 0 Constant (const word) lin16u_gen::i#0 = 0 Succesful SSA optimization Pass2ConstantIdentification @@ -2515,13 +2439,10 @@ Constant (const byte*) print_cls::$0 = SCREEN#0+1000 Constant (const byte*) line_cursor#12 = SCREEN#0 Constant (const word[20]) lin16u_gen::lintab#0 = main::lintab#0 Constant (const word) lin16u_gen::ampl#0 = lin16u_gen::max#0-lin16u_gen::min#0 -Constant (const word) div16u::divisor#0 = lin16u_gen::length#0-1 +Constant (const word) divr16u::divisor#0 = lin16u_gen::length#0-1 Constant (const word) divr16u::divisor#1 = lin16u_gen::length#0-1 Succesful SSA optimization Pass2ConstantIdentification -Constant (const word) divr16u::divisor#0 = div16u::divisor#0 -Constant (const word) div16u::dividend#0 = lin16u_gen::ampl#0 -Succesful SSA optimization Pass2ConstantIdentification -Constant (const word) divr16u::dividend#0 = div16u::dividend#0 +Constant (const word) divr16u::dividend#1 = lin16u_gen::ampl#0 Succesful SSA optimization Pass2ConstantIdentification Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2 Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2 @@ -2539,9 +2460,7 @@ Culled Empty Block (label) print_cls::@2 Culled Empty Block (label) main::@4 Culled Empty Block (label) @19 Succesful SSA optimization Pass2CullEmptyBlocks -Not aliassing across scopes: divr16u::return#0 divr16u::return#1 -Not aliassing across scopes: div16u::return#0 divr16u::return#0 -Not aliassing across scopes: rem16u#13 divr16u::rem#11 +Not aliassing across scopes: rem16u#1 divr16u::rem#11 Not aliassing across scopes: char_cursor#2 char_cursor#11 Not aliassing across scopes: line_cursor#9 line_cursor#19 Not aliassing across scopes: print_byte::b#3 print_byte::b#2 @@ -2549,17 +2468,15 @@ Not aliassing across scopes: char_cursor#45 char_cursor#47 Not aliassing across scopes: print_char::ch#2 print_char::ch#0 Not aliassing across scopes: char_cursor#32 char_cursor#45 Not aliassing across scopes: print_byte::b#2 main::i#2 -Not aliassing across scopes: div16u::return#2 div16u::return#0 -Not aliassing across scopes: lin16u_gen::stepi#0 div16u::return#2 -Not aliassing across scopes: divr16u::rem#4 rem16u#13 -Not aliassing across scopes: divr16u::return#3 divr16u::return#1 +Not aliassing across scopes: divr16u::return#2 divr16u::return#0 +Not aliassing across scopes: lin16u_gen::stepi#0 divr16u::return#2 +Not aliassing across scopes: divr16u::rem#4 rem16u#1 +Not aliassing across scopes: divr16u::return#3 divr16u::return#0 Not aliassing across scopes: lin16u_gen::stepf#0 divr16u::return#3 Alias (dword) lin16u_gen::step#0 = (dword~) lin16u_gen::$9 Alias (dword) lin16u_gen::val#0 = (dword~) lin16u_gen::$10 Succesful SSA optimization Pass2AliasElimination -Not aliassing across scopes: divr16u::return#0 divr16u::return#1 -Not aliassing across scopes: div16u::return#0 divr16u::return#0 -Not aliassing across scopes: rem16u#13 divr16u::rem#11 +Not aliassing across scopes: rem16u#1 divr16u::rem#11 Not aliassing across scopes: char_cursor#2 char_cursor#11 Not aliassing across scopes: line_cursor#9 line_cursor#19 Not aliassing across scopes: print_byte::b#3 print_byte::b#2 @@ -2567,18 +2484,16 @@ Not aliassing across scopes: char_cursor#45 char_cursor#47 Not aliassing across scopes: print_char::ch#2 print_char::ch#0 Not aliassing across scopes: char_cursor#32 char_cursor#45 Not aliassing across scopes: print_byte::b#2 main::i#2 -Not aliassing across scopes: div16u::return#2 div16u::return#0 -Not aliassing across scopes: lin16u_gen::stepi#0 div16u::return#2 -Not aliassing across scopes: divr16u::rem#4 rem16u#13 -Not aliassing across scopes: divr16u::return#3 divr16u::return#1 +Not aliassing across scopes: divr16u::return#2 divr16u::return#0 +Not aliassing across scopes: lin16u_gen::stepi#0 divr16u::return#2 +Not aliassing across scopes: divr16u::rem#4 rem16u#1 +Not aliassing across scopes: divr16u::return#3 divr16u::return#0 Not aliassing across scopes: lin16u_gen::stepf#0 divr16u::return#3 Constant (const dword) lin16u_gen::val#0 = lin16u_gen::min#0*65536+0 Succesful SSA optimization Pass2ConstantIdentification Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2 Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2 -Not aliassing across scopes: divr16u::return#0 divr16u::return#1 -Not aliassing across scopes: div16u::return#0 divr16u::return#0 -Not aliassing across scopes: rem16u#13 divr16u::rem#11 +Not aliassing across scopes: rem16u#1 divr16u::rem#11 Not aliassing across scopes: char_cursor#2 char_cursor#11 Not aliassing across scopes: line_cursor#9 line_cursor#19 Not aliassing across scopes: print_byte::b#3 print_byte::b#2 @@ -2586,37 +2501,38 @@ Not aliassing across scopes: char_cursor#45 char_cursor#47 Not aliassing across scopes: print_char::ch#2 print_char::ch#0 Not aliassing across scopes: char_cursor#32 char_cursor#45 Not aliassing across scopes: print_byte::b#2 main::i#2 -Not aliassing across scopes: div16u::return#2 div16u::return#0 -Not aliassing across scopes: lin16u_gen::stepi#0 div16u::return#2 -Not aliassing across scopes: divr16u::rem#4 rem16u#13 -Not aliassing across scopes: divr16u::return#3 divr16u::return#1 +Not aliassing across scopes: divr16u::return#2 divr16u::return#0 +Not aliassing across scopes: lin16u_gen::stepi#0 divr16u::return#2 +Not aliassing across scopes: divr16u::rem#4 rem16u#1 +Not aliassing across scopes: divr16u::return#3 divr16u::return#0 Not aliassing across scopes: lin16u_gen::stepf#0 divr16u::return#3 Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2 Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2 OPTIMIZING CONTROL FLOW GRAPH -Inlining constant with var siblings (const word) divr16u::rem#0 -Inlining constant with var siblings (const word) divr16u::rem#0 -Inlining constant with var siblings (const word) divr16u::rem#0 -Inlining constant with var siblings (const word) divr16u::rem#0 -Inlining constant with var siblings (const word) divr16u::rem#0 -Inlining constant with var siblings (const word) divr16u::rem#0 -Inlining constant with var siblings (const word) divr16u::rem#0 -Inlining constant with var siblings (const word) divr16u::rem#0 Inlining constant with var siblings (const word) divr16u::quotient#0 Inlining constant with var siblings (const word) divr16u::quotient#0 Inlining constant with var siblings (const word) divr16u::quotient#0 Inlining constant with var siblings (const byte) divr16u::i#0 Inlining constant with var siblings (const byte) divr16u::i#0 +Inlining constant with var siblings (const word) divr16u::rem#3 +Inlining constant with var siblings (const word) divr16u::rem#3 +Inlining constant with var siblings (const word) divr16u::rem#3 +Inlining constant with var siblings (const word) divr16u::rem#3 +Inlining constant with var siblings (const word) divr16u::rem#3 +Inlining constant with var siblings (const word) divr16u::rem#3 +Inlining constant with var siblings (const word) divr16u::rem#3 +Inlining constant with var siblings (const word) divr16u::rem#3 Inlining constant with var siblings (const word) divr16u::dividend#2 Inlining constant with var siblings (const word) divr16u::dividend#2 Inlining constant with var siblings (const word) divr16u::dividend#2 -Inlining constant with var siblings (const word) divr16u::divisor#1 Inlining constant with var siblings (const word) divr16u::divisor#0 Inlining constant with different constant siblings (const word) divr16u::divisor#0 -Inlining constant with var siblings (const word) divr16u::dividend#0 -Inlining constant with var siblings (const word) divr16u::dividend#0 -Inlining constant with var siblings (const word) divr16u::dividend#0 -Inlining constant with different constant siblings (const word) divr16u::dividend#0 +Inlining constant with var siblings (const word) divr16u::divisor#1 +Inlining constant with different constant siblings (const word) divr16u::divisor#1 +Inlining constant with var siblings (const word) divr16u::dividend#1 +Inlining constant with var siblings (const word) divr16u::dividend#1 +Inlining constant with var siblings (const word) divr16u::dividend#1 +Inlining constant with different constant siblings (const word) divr16u::dividend#1 Inlining constant with var siblings (const string) print_str::str#1 Inlining constant with var siblings (const string) print_str::str#1 Inlining constant with var siblings (const byte*) print_cls::sc#0 @@ -2632,26 +2548,25 @@ Inlining constant with var siblings (const dword) lin16u_gen::val#0 Inlining constant with var siblings (const byte*) line_cursor#12 Inlining constant with var siblings (const byte*) line_cursor#12 Inlining constant with var siblings (const byte*) line_cursor#12 -Constant inlined divr16u::rem#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 +Constant inlined divr16u::rem#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined print_cls::$0 = (const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000 Constant inlined divr16u::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Constant inlined divr16u::dividend#0 = (const word) lin16u_gen::ampl#0 +Constant inlined divr16u::dividend#1 = (const word) lin16u_gen::ampl#0 Constant inlined print_cls::sc#0 = (const byte*) SCREEN#0 Constant inlined divr16u::dividend#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined line_cursor#12 = (const byte*) SCREEN#0 Constant inlined divr16u::quotient#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined lin16u_gen::val#0 = (const word) lin16u_gen::min#0*(dword/signed dword) 65536+(byte/signed byte/word/signed word/dword/signed dword) 0 -Constant inlined div16u::dividend#0 = (const word) lin16u_gen::ampl#0 Constant inlined print_str::str#1 = (const string) main::str Constant inlined print_byte::$4 = (const string) print_byte::hextab#0 Constant inlined divr16u::divisor#1 = (const word) lin16u_gen::length#0-(byte/signed byte/word/signed word/dword/signed dword) 1 Constant inlined lin16u_gen::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Constant inlined divr16u::divisor#0 = (const word) div16u::divisor#0 +Constant inlined divr16u::divisor#0 = (const word) lin16u_gen::length#0-(byte/signed byte/word/signed word/dword/signed dword) 1 Constant inlined main::$7 = (byte/signed byte/word/signed word/dword/signed dword) 20*(byte/signed byte/word/signed word/dword/signed dword) 2 Constant inlined lin16u_gen::lintab#0 = (const word[20]) main::lintab#0 Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @18 @end main main::@3 main::@1 main::@5 main::@6 main::@7 main::@8 main::@return print_ln print_ln::@1 print_ln::@return print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return lin16u_gen lin16u_gen::@3 lin16u_gen::@4 lin16u_gen::@1 lin16u_gen::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return div16u div16u::@2 div16u::@return +Block Sequence Planned @begin @18 @end main main::@3 main::@1 main::@5 main::@6 main::@7 main::@8 main::@return print_ln print_ln::@1 print_ln::@return print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return lin16u_gen lin16u_gen::@3 lin16u_gen::@4 lin16u_gen::@1 lin16u_gen::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return Added new block during phi lifting main::@9(between main::@8 and main::@1) Added new block during phi lifting print_ln::@3(between print_ln::@1 and print_ln::@1) Added new block during phi lifting print_cls::@3(between print_cls::@1 and print_cls::@1) @@ -2659,7 +2574,7 @@ Added new block during phi lifting lin16u_gen::@5(between lin16u_gen::@1 and lin Added new block during phi lifting divr16u::@8(between divr16u::@3 and divr16u::@1) Added new block during phi lifting divr16u::@9(between divr16u::@1 and divr16u::@2) Added new block during phi lifting divr16u::@10(between divr16u::@2 and divr16u::@3) -Block Sequence Planned @begin @18 @end main main::@3 main::@1 main::@5 main::@6 main::@7 main::@8 main::@return main::@9 print_ln print_ln::@1 print_ln::@return print_ln::@3 print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return print_cls::@3 lin16u_gen lin16u_gen::@3 lin16u_gen::@4 lin16u_gen::@1 lin16u_gen::@return lin16u_gen::@5 divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return divr16u::@8 divr16u::@10 divr16u::@9 div16u div16u::@2 div16u::@return +Block Sequence Planned @begin @18 @end main main::@3 main::@1 main::@5 main::@6 main::@7 main::@8 main::@return main::@9 print_ln print_ln::@1 print_ln::@return print_ln::@3 print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return print_cls::@3 lin16u_gen lin16u_gen::@3 lin16u_gen::@4 lin16u_gen::@1 lin16u_gen::@return lin16u_gen::@5 divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return divr16u::@8 divr16u::@10 divr16u::@9 Adding NOP phi() at start of @begin Adding NOP phi() at start of @18 Adding NOP phi() at start of @end @@ -2669,14 +2584,12 @@ Adding NOP phi() at start of main::@5 Adding NOP phi() at start of main::@7 Adding NOP phi() at start of print_cls Adding NOP phi() at start of lin16u_gen -Adding NOP phi() at start of div16u CALL GRAPH Calls in [] to main:2 Calls in [main] to lin16u_gen:5 print_cls:7 print_byte:12 print_str:14 print_word:16 print_ln:18 Calls in [print_word] to print_byte:34 print_byte:38 Calls in [print_byte] to print_char:45 print_char:50 -Calls in [lin16u_gen] to div16u:73 divr16u:78 -Calls in [div16u] to divr16u:124 +Calls in [lin16u_gen] to divr16u:73 divr16u:78 Propagating live ranges... Propagating live ranges... @@ -2722,16 +2635,16 @@ Coalesced [91] lin16u_gen::lintab#6 ← lin16u_gen::lintab#1 Coalesced [92] lin16u_gen::i#3 ← lin16u_gen::i#1 Coalesced [94] divr16u::rem#13 ← divr16u::rem#10 Coalesced [95] divr16u::dividend#9 ← divr16u::dividend#5 -Coalesced [102] divr16u::rem#16 ← divr16u::rem#2 -Coalesced [109] divr16u::rem#18 ← divr16u::rem#3 +Coalesced [102] divr16u::rem#16 ← divr16u::rem#1 +Coalesced [109] divr16u::rem#18 ← divr16u::rem#2 Coalesced [110] divr16u::return#8 ← divr16u::quotient#2 Coalesced [116] divr16u::rem#14 ← divr16u::rem#11 -Coalesced [117] divr16u::dividend#10 ← divr16u::dividend#1 -Coalesced [118] divr16u::quotient#9 ← divr16u::return#1 +Coalesced [117] divr16u::dividend#10 ← divr16u::dividend#0 +Coalesced [118] divr16u::quotient#9 ← divr16u::return#0 Coalesced [119] divr16u::i#7 ← divr16u::i#1 Coalesced [120] divr16u::rem#17 ← divr16u::rem#6 Coalesced [121] divr16u::return#7 ← divr16u::quotient#1 -Coalesced [122] divr16u::rem#15 ← divr16u::rem#1 +Coalesced [122] divr16u::rem#15 ← divr16u::rem#0 Coalesced down to 15 phi equivalence classes Culled Empty Block (label) print_ln::@3 Culled Empty Block (label) print_cls::@3 @@ -2739,7 +2652,7 @@ Culled Empty Block (label) lin16u_gen::@5 Culled Empty Block (label) divr16u::@8 Culled Empty Block (label) divr16u::@10 Culled Empty Block (label) divr16u::@9 -Block Sequence Planned @begin @18 @end main main::@3 main::@1 main::@5 main::@6 main::@7 main::@8 main::@return main::@9 print_ln print_ln::@1 print_ln::@return print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return lin16u_gen lin16u_gen::@3 lin16u_gen::@4 lin16u_gen::@1 lin16u_gen::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return div16u div16u::@2 div16u::@return +Block Sequence Planned @begin @18 @end main main::@3 main::@1 main::@5 main::@6 main::@7 main::@8 main::@return main::@9 print_ln print_ln::@1 print_ln::@return print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return lin16u_gen lin16u_gen::@3 lin16u_gen::@4 lin16u_gen::@1 lin16u_gen::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @18 Adding NOP phi() at start of @end @@ -2751,7 +2664,6 @@ Adding NOP phi() at start of print_ln Adding NOP phi() at start of print_str Adding NOP phi() at start of print_cls Adding NOP phi() at start of lin16u_gen -Adding NOP phi() at start of div16u Propagating live ranges... Propagating live ranges... Propagating live ranges... @@ -2888,14 +2800,14 @@ print_cls::@return: scope:[print_cls] from print_cls::@1 to:@return lin16u_gen: scope:[lin16u_gen] from main [56] phi() [ ] ( main:2::lin16u_gen:5 [ ] ) - [57] call div16u param-assignment [ div16u::return#0 rem16u#13 ] ( main:2::lin16u_gen:5 [ div16u::return#0 rem16u#13 ] ) - [58] (word) div16u::return#2 ← (word) div16u::return#0 [ div16u::return#2 rem16u#13 ] ( main:2::lin16u_gen:5 [ div16u::return#2 rem16u#13 ] ) + [57] call divr16u param-assignment [ divr16u::return#0 rem16u#1 ] ( main:2::lin16u_gen:5 [ divr16u::return#0 rem16u#1 ] ) + [58] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 rem16u#1 ] ( main:2::lin16u_gen:5 [ divr16u::return#2 rem16u#1 ] ) to:lin16u_gen::@3 lin16u_gen::@3: scope:[lin16u_gen] from lin16u_gen - [59] (word) lin16u_gen::stepi#0 ← (word) div16u::return#2 [ lin16u_gen::stepi#0 rem16u#13 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 rem16u#13 ] ) - [60] (word) divr16u::rem#4 ← (word) rem16u#13 [ lin16u_gen::stepi#0 divr16u::rem#4 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 divr16u::rem#4 ] ) - [61] call divr16u param-assignment [ lin16u_gen::stepi#0 divr16u::return#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 divr16u::return#1 ] ) - [62] (word) divr16u::return#3 ← (word) divr16u::return#1 [ lin16u_gen::stepi#0 divr16u::return#3 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 divr16u::return#3 ] ) + [59] (word) lin16u_gen::stepi#0 ← (word) divr16u::return#2 [ lin16u_gen::stepi#0 rem16u#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 rem16u#1 ] ) + [60] (word) divr16u::rem#4 ← (word) rem16u#1 [ lin16u_gen::stepi#0 divr16u::rem#4 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 divr16u::rem#4 ] ) + [61] call divr16u param-assignment [ divr16u::return#0 lin16u_gen::stepi#0 ] ( main:2::lin16u_gen:5 [ divr16u::return#0 lin16u_gen::stepi#0 ] ) + [62] (word) divr16u::return#3 ← (word) divr16u::return#0 [ lin16u_gen::stepi#0 divr16u::return#3 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 divr16u::return#3 ] ) to:lin16u_gen::@4 lin16u_gen::@4: scope:[lin16u_gen] from lin16u_gen::@3 [63] (word) lin16u_gen::stepf#0 ← (word) divr16u::return#3 [ lin16u_gen::stepi#0 lin16u_gen::stepf#0 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 lin16u_gen::stepf#0 ] ) @@ -2915,56 +2827,45 @@ lin16u_gen::@1: scope:[lin16u_gen] from lin16u_gen::@1 lin16u_gen::@4 lin16u_gen::@return: scope:[lin16u_gen] from lin16u_gen::@1 [72] return [ ] ( main:2::lin16u_gen:5 [ ] ) to:@return -divr16u: scope:[divr16u] from div16u lin16u_gen::@3 - [73] (word) divr16u::divisor#6 ← phi( div16u/(const word) div16u::divisor#0 lin16u_gen::@3/(const word) lin16u_gen::length#0-(byte/signed byte/word/signed word/dword/signed dword) 1 ) [ divr16u::rem#10 divr16u::dividend#5 divr16u::divisor#6 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::rem#10 divr16u::dividend#5 divr16u::divisor#6 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::rem#10 divr16u::dividend#5 divr16u::divisor#6 ] ) - [73] (word) divr16u::dividend#5 ← phi( div16u/(const word) lin16u_gen::ampl#0 lin16u_gen::@3/(byte/signed byte/word/signed word/dword/signed dword) 0 ) [ divr16u::rem#10 divr16u::dividend#5 divr16u::divisor#6 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::rem#10 divr16u::dividend#5 divr16u::divisor#6 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::rem#10 divr16u::dividend#5 divr16u::divisor#6 ] ) - [73] (word) divr16u::rem#10 ← phi( div16u/(byte/signed byte/word/signed word/dword/signed dword) 0 lin16u_gen::@3/(word) divr16u::rem#4 ) [ divr16u::rem#10 divr16u::dividend#5 divr16u::divisor#6 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::rem#10 divr16u::dividend#5 divr16u::divisor#6 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::rem#10 divr16u::dividend#5 divr16u::divisor#6 ] ) +divr16u: scope:[divr16u] from lin16u_gen lin16u_gen::@3 + [73] (word) divr16u::divisor#6 ← phi( lin16u_gen/(const word) lin16u_gen::length#0-(byte/signed byte/word/signed word/dword/signed dword) 1 lin16u_gen::@3/(const word) lin16u_gen::length#0-(byte/signed byte/word/signed word/dword/signed dword) 1 ) [ divr16u::rem#10 divr16u::dividend#5 divr16u::divisor#6 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::rem#10 divr16u::dividend#5 divr16u::divisor#6 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::rem#10 divr16u::dividend#5 divr16u::divisor#6 ] ) + [73] (word) divr16u::dividend#5 ← phi( lin16u_gen/(const word) lin16u_gen::ampl#0 lin16u_gen::@3/(byte/signed byte/word/signed word/dword/signed dword) 0 ) [ divr16u::rem#10 divr16u::dividend#5 divr16u::divisor#6 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::rem#10 divr16u::dividend#5 divr16u::divisor#6 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::rem#10 divr16u::dividend#5 divr16u::divisor#6 ] ) + [73] (word) divr16u::rem#10 ← phi( lin16u_gen/(byte/signed byte/word/signed word/dword/signed dword) 0 lin16u_gen::@3/(word) divr16u::rem#4 ) [ divr16u::rem#10 divr16u::dividend#5 divr16u::divisor#6 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::rem#10 divr16u::dividend#5 divr16u::divisor#6 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::rem#10 divr16u::dividend#5 divr16u::divisor#6 ] ) to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 - [74] (byte) divr16u::i#2 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(byte) divr16u::i#1 ) [ divr16u::divisor#6 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] ) - [74] (word) divr16u::quotient#3 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(word) divr16u::return#1 ) [ divr16u::divisor#6 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] ) - [74] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#1 ) [ divr16u::divisor#6 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] ) - [74] (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 ) [ divr16u::divisor#6 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] ) - [75] (word) divr16u::rem#1 ← (word) divr16u::rem#5 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) - [76] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$1 ] ) - [77] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$2 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$2 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$2 ] ) - [78] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) + [74] (byte) divr16u::i#2 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(byte) divr16u::i#1 ) [ divr16u::divisor#6 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] ) + [74] (word) divr16u::quotient#3 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(word) divr16u::return#0 ) [ divr16u::divisor#6 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] ) + [74] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#0 ) [ divr16u::divisor#6 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] ) + [74] (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 ) [ divr16u::divisor#6 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] ) + [75] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ) + [76] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) + [77] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ) + [78] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ) to:divr16u::@4 divr16u::@4: scope:[divr16u] from divr16u::@1 - [79] (word) divr16u::rem#2 ← (word) divr16u::rem#1 | (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#2 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#2 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#2 ] ) + [79] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) to:divr16u::@2 divr16u::@2: scope:[divr16u] from divr16u::@1 divr16u::@4 - [80] (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#1 divr16u::@4/(word) divr16u::rem#2 ) [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#6 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#6 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#6 ] ) - [81] (word) divr16u::dividend#1 ← (word) divr16u::dividend#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#6 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 ] ) - [82] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#1 ] ) - [83] if((word) divr16u::rem#6<(word) divr16u::divisor#6) goto divr16u::@3 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#1 ] ) + [80] (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 ) [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#6 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#6 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#6 ] ) + [81] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#6 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 ] ) + [82] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ) + [83] if((word) divr16u::rem#6<(word) divr16u::divisor#6) goto divr16u::@3 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ) to:divr16u::@5 divr16u::@5: scope:[divr16u] from divr16u::@2 - [84] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#2 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#2 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#2 ] ) - [85] (word) divr16u::rem#3 ← (word) divr16u::rem#6 - (word) divr16u::divisor#6 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::quotient#2 divr16u::rem#3 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::quotient#2 divr16u::rem#3 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::quotient#2 divr16u::rem#3 ] ) + [84] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#2 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#2 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#2 ] ) + [85] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (word) divr16u::divisor#6 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) to:divr16u::@3 divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5 - [86] (word) divr16u::return#1 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) [ divr16u::return#1 divr16u::divisor#6 divr16u::i#2 divr16u::rem#11 divr16u::dividend#1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::return#1 divr16u::divisor#6 divr16u::i#2 divr16u::rem#11 divr16u::dividend#1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::return#1 divr16u::divisor#6 divr16u::i#2 divr16u::rem#11 divr16u::dividend#1 ] ) - [86] (word) divr16u::rem#11 ← phi( divr16u::@2/(word) divr16u::rem#6 divr16u::@5/(word) divr16u::rem#3 ) [ divr16u::return#1 divr16u::divisor#6 divr16u::i#2 divr16u::rem#11 divr16u::dividend#1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::return#1 divr16u::divisor#6 divr16u::i#2 divr16u::rem#11 divr16u::dividend#1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::return#1 divr16u::divisor#6 divr16u::i#2 divr16u::rem#11 divr16u::dividend#1 ] ) - [87] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::return#1 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#1 divr16u::i#1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::return#1 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#1 divr16u::i#1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::return#1 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#1 divr16u::i#1 ] ) - [88] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::return#1 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#1 divr16u::i#1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::return#1 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#1 divr16u::i#1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::return#1 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#1 divr16u::i#1 ] ) + [86] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) [ divr16u::return#0 divr16u::divisor#6 divr16u::i#2 divr16u::rem#11 divr16u::dividend#0 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::return#0 divr16u::divisor#6 divr16u::i#2 divr16u::rem#11 divr16u::dividend#0 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::return#0 divr16u::divisor#6 divr16u::i#2 divr16u::rem#11 divr16u::dividend#0 ] ) + [86] (word) divr16u::rem#11 ← phi( divr16u::@2/(word) divr16u::rem#6 divr16u::@5/(word) divr16u::rem#2 ) [ divr16u::return#0 divr16u::divisor#6 divr16u::i#2 divr16u::rem#11 divr16u::dividend#0 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::return#0 divr16u::divisor#6 divr16u::i#2 divr16u::rem#11 divr16u::dividend#0 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::return#0 divr16u::divisor#6 divr16u::i#2 divr16u::rem#11 divr16u::dividend#0 ] ) + [87] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::return#0 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#0 divr16u::i#1 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::return#0 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#0 divr16u::i#1 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::return#0 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#0 divr16u::i#1 ] ) + [88] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::return#0 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#0 divr16u::i#1 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::return#0 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#0 divr16u::i#1 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::return#0 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#0 divr16u::i#1 ] ) to:divr16u::@6 divr16u::@6: scope:[divr16u] from divr16u::@3 - [89] (word) rem16u#13 ← (word) divr16u::rem#11 [ rem16u#13 divr16u::return#1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 rem16u#13 divr16u::return#1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ rem16u#13 divr16u::return#1 ] ) + [89] (word) rem16u#1 ← (word) divr16u::rem#11 [ divr16u::return#0 rem16u#1 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::return#0 rem16u#1 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::return#0 rem16u#1 ] ) to:divr16u::@return divr16u::@return: scope:[divr16u] from divr16u::@6 - [90] return [ rem16u#13 divr16u::return#1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 rem16u#13 divr16u::return#1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ rem16u#13 divr16u::return#1 ] ) - to:@return -div16u: scope:[div16u] from lin16u_gen - [91] phi() [ ] ( main:2::lin16u_gen:5::div16u:57 [ ] ) - [92] call divr16u param-assignment [ rem16u#13 divr16u::return#1 ] ( main:2::lin16u_gen:5::div16u:57 [ rem16u#13 divr16u::return#1 ] ) - [93] (word) divr16u::return#0 ← (word) divr16u::return#1 [ rem16u#13 divr16u::return#0 ] ( main:2::lin16u_gen:5::div16u:57 [ rem16u#13 divr16u::return#0 ] ) - to:div16u::@2 -div16u::@2: scope:[div16u] from div16u - [94] (word) div16u::return#0 ← (word) divr16u::return#0 [ div16u::return#0 rem16u#13 ] ( main:2::lin16u_gen:5::div16u:57 [ div16u::return#0 rem16u#13 ] ) - to:div16u::@return -div16u::@return: scope:[div16u] from div16u::@2 - [95] return [ div16u::return#0 rem16u#13 ] ( main:2::lin16u_gen:5::div16u:57 [ div16u::return#0 rem16u#13 ] ) + [90] return [ divr16u::return#0 rem16u#1 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::return#0 rem16u#1 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::return#0 rem16u#1 ] ) to:@return DOMINATORS @@ -3011,9 +2912,6 @@ divr16u::@5 dominated by divr16u divr16u::@2 divr16u::@1 main divr16u::@5 @begi divr16u::@3 dominated by divr16u divr16u::@2 divr16u::@1 main divr16u::@3 @begin @18 lin16u_gen divr16u::@6 dominated by divr16u divr16u::@2 divr16u::@1 main divr16u::@3 divr16u::@6 @begin @18 lin16u_gen divr16u::@return dominated by divr16u divr16u::@2 divr16u::@1 main divr16u::@3 divr16u::@6 @begin @18 lin16u_gen divr16u::@return -div16u dominated by main div16u @begin @18 lin16u_gen -div16u::@2 dominated by main div16u @begin @18 lin16u_gen div16u::@2 -div16u::@return dominated by main div16u::@return div16u @begin @18 lin16u_gen div16u::@2 NATURAL LOOPS Found back edge: Loop head: main::@1 tails: main::@9 blocks: null @@ -3049,7 +2947,6 @@ Found 1 loops in scope [print_str] Found 0 loops in scope [print_word] Found 1 loops in scope [print_ln] Loop head: print_ln::@1 tails: print_ln::@1 blocks: print_ln::@1 -Found 0 loops in scope [div16u] Found 1 loops in scope [divr16u] Loop head: divr16u::@1 tails: divr16u::@3 blocks: divr16u::@3 divr16u::@2 divr16u::@5 divr16u::@1 divr16u::@4 Found 0 loops in scope [print_char] @@ -3071,17 +2968,11 @@ VARIABLE REGISTER WEIGHTS (byte*) char_cursor#45 5.666666666666667 (byte*) char_cursor#47 11.0 (byte*~) char_cursor#51 22.0 -(word()) div16u((word) div16u::dividend , (word) div16u::divisor) -(word) div16u::dividend -(word) div16u::divisor -(word) div16u::return -(word) div16u::return#0 1.3333333333333333 -(word) div16u::return#2 4.0 (word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem) (byte~) divr16u::$1 22.0 (byte~) divr16u::$2 22.0 (word) divr16u::dividend -(word) divr16u::dividend#1 2.75 +(word) divr16u::dividend#0 2.75 (word) divr16u::dividend#3 5.0 (word) divr16u::dividend#5 2.0 (word) divr16u::divisor @@ -3094,17 +2985,17 @@ VARIABLE REGISTER WEIGHTS (word) divr16u::quotient#2 11.0 (word) divr16u::quotient#3 2.75 (word) divr16u::rem -(word) divr16u::rem#1 8.25 +(word) divr16u::rem#0 8.25 +(word) divr16u::rem#1 22.0 (word) divr16u::rem#10 4.0 (word) divr16u::rem#11 11.666666666666666 (word) divr16u::rem#2 22.0 -(word) divr16u::rem#3 22.0 (word) divr16u::rem#4 4.0 (word) divr16u::rem#5 24.0 (word) divr16u::rem#6 11.0 (word) divr16u::return -(word) divr16u::return#0 4.0 -(word) divr16u::return#1 5.285714285714286 +(word) divr16u::return#0 5.285714285714286 +(word) divr16u::return#2 4.0 (word) divr16u::return#3 4.0 (void()) lin16u_gen((word) lin16u_gen::min , (word) lin16u_gen::max , (word*) lin16u_gen::lintab , (word) lin16u_gen::length) (word~) lin16u_gen::$5 22.0 @@ -3163,7 +3054,7 @@ VARIABLE REGISTER WEIGHTS (word) print_word::w (word) print_word::w#0 5.0 (word) rem16u -(word) rem16u#13 0.4444444444444444 +(word) rem16u#1 0.8 Initial phi equivalence classes [ main::i#2 main::i#1 ] @@ -3177,14 +3068,14 @@ Initial phi equivalence classes [ lin16u_gen::lintab#2 lin16u_gen::lintab#1 ] [ lin16u_gen::i#2 lin16u_gen::i#1 ] [ divr16u::divisor#6 ] -[ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#1 divr16u::rem#2 divr16u::rem#3 ] -[ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 ] -[ divr16u::quotient#3 divr16u::return#1 divr16u::quotient#1 divr16u::quotient#2 ] +[ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] +[ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] +[ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] [ divr16u::i#2 divr16u::i#1 ] Added variable print_word::w#0 to zero page equivalence class [ print_word::w#0 ] Added variable print_byte::$0 to zero page equivalence class [ print_byte::$0 ] Added variable print_byte::$2 to zero page equivalence class [ print_byte::$2 ] -Added variable div16u::return#2 to zero page equivalence class [ div16u::return#2 ] +Added variable divr16u::return#2 to zero page equivalence class [ divr16u::return#2 ] Added variable lin16u_gen::stepi#0 to zero page equivalence class [ lin16u_gen::stepi#0 ] Added variable divr16u::return#3 to zero page equivalence class [ divr16u::return#3 ] Added variable lin16u_gen::stepf#0 to zero page equivalence class [ lin16u_gen::stepf#0 ] @@ -3192,9 +3083,7 @@ Added variable lin16u_gen::step#0 to zero page equivalence class [ lin16u_gen::s Added variable lin16u_gen::$5 to zero page equivalence class [ lin16u_gen::$5 ] Added variable divr16u::$1 to zero page equivalence class [ divr16u::$1 ] Added variable divr16u::$2 to zero page equivalence class [ divr16u::$2 ] -Added variable rem16u#13 to zero page equivalence class [ rem16u#13 ] -Added variable divr16u::return#0 to zero page equivalence class [ divr16u::return#0 ] -Added variable div16u::return#0 to zero page equivalence class [ div16u::return#0 ] +Added variable rem16u#1 to zero page equivalence class [ rem16u#1 ] Complete equivalence classes [ main::i#2 main::i#1 ] [ line_cursor#9 line_cursor#19 line_cursor#1 ] @@ -3207,14 +3096,14 @@ Complete equivalence classes [ lin16u_gen::lintab#2 lin16u_gen::lintab#1 ] [ lin16u_gen::i#2 lin16u_gen::i#1 ] [ divr16u::divisor#6 ] -[ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#1 divr16u::rem#2 divr16u::rem#3 ] -[ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 ] -[ divr16u::quotient#3 divr16u::return#1 divr16u::quotient#1 divr16u::quotient#2 ] +[ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] +[ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] +[ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] [ divr16u::i#2 divr16u::i#1 ] [ print_word::w#0 ] [ print_byte::$0 ] [ print_byte::$2 ] -[ div16u::return#2 ] +[ divr16u::return#2 ] [ lin16u_gen::stepi#0 ] [ divr16u::return#3 ] [ lin16u_gen::stepf#0 ] @@ -3222,9 +3111,7 @@ Complete equivalence classes [ lin16u_gen::$5 ] [ divr16u::$1 ] [ divr16u::$2 ] -[ rem16u#13 ] -[ divr16u::return#0 ] -[ div16u::return#0 ] +[ rem16u#1 ] Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Allocated zp ZP_WORD:3 [ line_cursor#9 line_cursor#19 line_cursor#1 ] Allocated zp ZP_BYTE:5 [ print_byte::b#3 print_byte::b#2 print_byte::b#0 print_byte::b#1 ] @@ -3236,14 +3123,14 @@ Allocated zp ZP_DWORD:13 [ lin16u_gen::val#2 lin16u_gen::val#1 ] Allocated zp ZP_WORD:17 [ lin16u_gen::lintab#2 lin16u_gen::lintab#1 ] Allocated zp ZP_WORD:19 [ lin16u_gen::i#2 lin16u_gen::i#1 ] Allocated zp ZP_WORD:21 [ divr16u::divisor#6 ] -Allocated zp ZP_WORD:23 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#1 divr16u::rem#2 divr16u::rem#3 ] -Allocated zp ZP_WORD:25 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 ] -Allocated zp ZP_WORD:27 [ divr16u::quotient#3 divr16u::return#1 divr16u::quotient#1 divr16u::quotient#2 ] +Allocated zp ZP_WORD:23 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] +Allocated zp ZP_WORD:25 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] +Allocated zp ZP_WORD:27 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] Allocated zp ZP_BYTE:29 [ divr16u::i#2 divr16u::i#1 ] Allocated zp ZP_WORD:30 [ print_word::w#0 ] Allocated zp ZP_BYTE:32 [ print_byte::$0 ] Allocated zp ZP_BYTE:33 [ print_byte::$2 ] -Allocated zp ZP_WORD:34 [ div16u::return#2 ] +Allocated zp ZP_WORD:34 [ divr16u::return#2 ] Allocated zp ZP_WORD:36 [ lin16u_gen::stepi#0 ] Allocated zp ZP_WORD:38 [ divr16u::return#3 ] Allocated zp ZP_WORD:40 [ lin16u_gen::stepf#0 ] @@ -3251,9 +3138,7 @@ Allocated zp ZP_DWORD:42 [ lin16u_gen::step#0 ] Allocated zp ZP_WORD:46 [ lin16u_gen::$5 ] Allocated zp ZP_BYTE:48 [ divr16u::$1 ] Allocated zp ZP_BYTE:49 [ divr16u::$2 ] -Allocated zp ZP_WORD:50 [ rem16u#13 ] -Allocated zp ZP_WORD:52 [ divr16u::return#0 ] -Allocated zp ZP_WORD:54 [ div16u::return#0 ] +Allocated zp ZP_WORD:50 [ rem16u#1 ] INITIAL ASM //SEG0 Basic Upstart @@ -3262,9 +3147,9 @@ INITIAL ASM .pc = $80d "Program" //SEG1 Global Constants & labels .label SCREEN = $400 + .label rem16u = $32 .label char_cursor = 7 .label line_cursor = 3 - .label rem16u = $32 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @18 [phi:@begin->@18] @@ -3602,8 +3487,8 @@ print_cls: { lin16u_gen: { .const min = $22d .const max = $7461 - .label length = $14 - .label ampl = max-min + .const length = $14 + .const ampl = max-min .label _5 = $2e .label stepi = $24 .label stepf = $28 @@ -3611,57 +3496,72 @@ lin16u_gen: { .label val = $d .label lintab = $11 .label i = $13 - //SEG118 [57] call div16u param-assignment [ div16u::return#0 rem16u#13 ] ( main:2::lin16u_gen:5 [ div16u::return#0 rem16u#13 ] ) - //SEG119 [91] phi from lin16u_gen to div16u [phi:lin16u_gen->div16u] - div16u_from_lin16u_gen: - jsr div16u - //SEG120 [58] (word) div16u::return#2 ← (word) div16u::return#0 [ div16u::return#2 rem16u#13 ] ( main:2::lin16u_gen:5 [ div16u::return#2 rem16u#13 ] ) -- vwuz1=vwuz2 - lda div16u.return - sta div16u.return_2 - lda div16u.return+1 - sta div16u.return_2+1 - jmp b3 - //SEG121 lin16u_gen::@3 - b3: - //SEG122 [59] (word) lin16u_gen::stepi#0 ← (word) div16u::return#2 [ lin16u_gen::stepi#0 rem16u#13 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 rem16u#13 ] ) -- vwuz1=vwuz2 - lda div16u.return_2 - sta stepi - lda div16u.return_2+1 - sta stepi+1 - //SEG123 [60] (word) divr16u::rem#4 ← (word) rem16u#13 [ lin16u_gen::stepi#0 divr16u::rem#4 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 divr16u::rem#4 ] ) -- vwuz1=vwuz2 - lda rem16u - sta divr16u.rem - lda rem16u+1 - sta divr16u.rem+1 - //SEG124 [61] call divr16u param-assignment [ lin16u_gen::stepi#0 divr16u::return#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 divr16u::return#1 ] ) - //SEG125 [73] phi from lin16u_gen::@3 to divr16u [phi:lin16u_gen::@3->divr16u] - divr16u_from_b3: - //SEG126 [73] phi (word) divr16u::divisor#6 = (const word) lin16u_gen::length#0-(byte/signed byte/word/signed word/dword/signed dword) 1 [phi:lin16u_gen::@3->divr16u#0] -- vwuz1=vbuc1 + //SEG118 [57] call divr16u param-assignment [ divr16u::return#0 rem16u#1 ] ( main:2::lin16u_gen:5 [ divr16u::return#0 rem16u#1 ] ) + //SEG119 [73] phi from lin16u_gen to divr16u [phi:lin16u_gen->divr16u] + divr16u_from_lin16u_gen: + //SEG120 [73] phi (word) divr16u::divisor#6 = (const word) lin16u_gen::length#0-(byte/signed byte/word/signed word/dword/signed dword) 1 [phi:lin16u_gen->divr16u#0] -- vwuz1=vbuc1 lda #length-1 sta divr16u.divisor+1 - //SEG127 [73] phi (word) divr16u::dividend#5 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:lin16u_gen::@3->divr16u#1] -- vwuz1=vbuc1 + //SEG121 [73] phi (word) divr16u::dividend#5 = (const word) lin16u_gen::ampl#0 [phi:lin16u_gen->divr16u#1] -- vwuz1=vwuc1 + lda #ampl + sta divr16u.dividend+1 + //SEG122 [73] phi (word) divr16u::rem#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:lin16u_gen->divr16u#2] -- vwuz1=vbuc1 + lda #<0 + sta divr16u.rem + lda #>0 + sta divr16u.rem+1 + jsr divr16u + //SEG123 [58] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 rem16u#1 ] ( main:2::lin16u_gen:5 [ divr16u::return#2 rem16u#1 ] ) -- vwuz1=vwuz2 + lda divr16u.return + sta divr16u.return_2 + lda divr16u.return+1 + sta divr16u.return_2+1 + jmp b3 + //SEG124 lin16u_gen::@3 + b3: + //SEG125 [59] (word) lin16u_gen::stepi#0 ← (word) divr16u::return#2 [ lin16u_gen::stepi#0 rem16u#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 rem16u#1 ] ) -- vwuz1=vwuz2 + lda divr16u.return_2 + sta stepi + lda divr16u.return_2+1 + sta stepi+1 + //SEG126 [60] (word) divr16u::rem#4 ← (word) rem16u#1 [ lin16u_gen::stepi#0 divr16u::rem#4 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 divr16u::rem#4 ] ) -- vwuz1=vwuz2 + lda rem16u + sta divr16u.rem + lda rem16u+1 + sta divr16u.rem+1 + //SEG127 [61] call divr16u param-assignment [ divr16u::return#0 lin16u_gen::stepi#0 ] ( main:2::lin16u_gen:5 [ divr16u::return#0 lin16u_gen::stepi#0 ] ) + //SEG128 [73] phi from lin16u_gen::@3 to divr16u [phi:lin16u_gen::@3->divr16u] + divr16u_from_b3: + //SEG129 [73] phi (word) divr16u::divisor#6 = (const word) lin16u_gen::length#0-(byte/signed byte/word/signed word/dword/signed dword) 1 [phi:lin16u_gen::@3->divr16u#0] -- vwuz1=vbuc1 + lda #length-1 + sta divr16u.divisor+1 + //SEG130 [73] phi (word) divr16u::dividend#5 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:lin16u_gen::@3->divr16u#1] -- vwuz1=vbuc1 lda #<0 sta divr16u.dividend lda #>0 sta divr16u.dividend+1 - //SEG128 [73] phi (word) divr16u::rem#10 = (word) divr16u::rem#4 [phi:lin16u_gen::@3->divr16u#2] -- register_copy + //SEG131 [73] phi (word) divr16u::rem#10 = (word) divr16u::rem#4 [phi:lin16u_gen::@3->divr16u#2] -- register_copy jsr divr16u - //SEG129 [62] (word) divr16u::return#3 ← (word) divr16u::return#1 [ lin16u_gen::stepi#0 divr16u::return#3 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 divr16u::return#3 ] ) -- vwuz1=vwuz2 - lda divr16u.return_1 + //SEG132 [62] (word) divr16u::return#3 ← (word) divr16u::return#0 [ lin16u_gen::stepi#0 divr16u::return#3 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 divr16u::return#3 ] ) -- vwuz1=vwuz2 + lda divr16u.return sta divr16u.return_3 - lda divr16u.return_1+1 + lda divr16u.return+1 sta divr16u.return_3+1 jmp b4 - //SEG130 lin16u_gen::@4 + //SEG133 lin16u_gen::@4 b4: - //SEG131 [63] (word) lin16u_gen::stepf#0 ← (word) divr16u::return#3 [ lin16u_gen::stepi#0 lin16u_gen::stepf#0 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 lin16u_gen::stepf#0 ] ) -- vwuz1=vwuz2 + //SEG134 [63] (word) lin16u_gen::stepf#0 ← (word) divr16u::return#3 [ lin16u_gen::stepi#0 lin16u_gen::stepf#0 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 lin16u_gen::stepf#0 ] ) -- vwuz1=vwuz2 lda divr16u.return_3 sta stepf lda divr16u.return_3+1 sta stepf+1 - //SEG132 [64] (dword) lin16u_gen::step#0 ← (word) lin16u_gen::stepi#0 dw= (word) lin16u_gen::stepf#0 [ lin16u_gen::step#0 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 ] ) -- vduz1=vwuz2_dword_vwuz3 + //SEG135 [64] (dword) lin16u_gen::step#0 ← (word) lin16u_gen::stepi#0 dw= (word) lin16u_gen::stepf#0 [ lin16u_gen::step#0 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 ] ) -- vduz1=vwuz2_dword_vwuz3 lda stepi sta step+2 lda stepi+1 @@ -3670,19 +3570,19 @@ lin16u_gen: { sta step lda stepf+1 sta step+1 - //SEG133 [65] phi from lin16u_gen::@4 to lin16u_gen::@1 [phi:lin16u_gen::@4->lin16u_gen::@1] + //SEG136 [65] phi from lin16u_gen::@4 to lin16u_gen::@1 [phi:lin16u_gen::@4->lin16u_gen::@1] b1_from_b4: - //SEG134 [65] phi (word) lin16u_gen::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:lin16u_gen::@4->lin16u_gen::@1#0] -- vwuz1=vbuc1 + //SEG137 [65] phi (word) lin16u_gen::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:lin16u_gen::@4->lin16u_gen::@1#0] -- vwuz1=vbuc1 lda #<0 sta i lda #>0 sta i+1 - //SEG135 [65] phi (word*) lin16u_gen::lintab#2 = (const word[20]) main::lintab#0 [phi:lin16u_gen::@4->lin16u_gen::@1#1] -- pwuz1=pwuc1 + //SEG138 [65] phi (word*) lin16u_gen::lintab#2 = (const word[20]) main::lintab#0 [phi:lin16u_gen::@4->lin16u_gen::@1#1] -- pwuz1=pwuc1 lda #main.lintab sta lintab+1 - //SEG136 [65] phi (dword) lin16u_gen::val#2 = (const word) lin16u_gen::min#0*(dword/signed dword) 65536+(byte/signed byte/word/signed word/dword/signed dword) 0 [phi:lin16u_gen::@4->lin16u_gen::@1#2] -- vduz1=vduc1 + //SEG139 [65] phi (dword) lin16u_gen::val#2 = (const word) lin16u_gen::min#0*(dword/signed dword) 65536+(byte/signed byte/word/signed word/dword/signed dword) 0 [phi:lin16u_gen::@4->lin16u_gen::@1#2] -- vduz1=vduc1 lda #min*$10000+0 @@ -3692,27 +3592,27 @@ lin16u_gen: { lda #>min*$10000+0>>$10 sta val+3 jmp b1 - //SEG137 [65] phi from lin16u_gen::@1 to lin16u_gen::@1 [phi:lin16u_gen::@1->lin16u_gen::@1] + //SEG140 [65] phi from lin16u_gen::@1 to lin16u_gen::@1 [phi:lin16u_gen::@1->lin16u_gen::@1] b1_from_b1: - //SEG138 [65] phi (word) lin16u_gen::i#2 = (word) lin16u_gen::i#1 [phi:lin16u_gen::@1->lin16u_gen::@1#0] -- register_copy - //SEG139 [65] phi (word*) lin16u_gen::lintab#2 = (word*) lin16u_gen::lintab#1 [phi:lin16u_gen::@1->lin16u_gen::@1#1] -- register_copy - //SEG140 [65] phi (dword) lin16u_gen::val#2 = (dword) lin16u_gen::val#1 [phi:lin16u_gen::@1->lin16u_gen::@1#2] -- register_copy + //SEG141 [65] phi (word) lin16u_gen::i#2 = (word) lin16u_gen::i#1 [phi:lin16u_gen::@1->lin16u_gen::@1#0] -- register_copy + //SEG142 [65] phi (word*) lin16u_gen::lintab#2 = (word*) lin16u_gen::lintab#1 [phi:lin16u_gen::@1->lin16u_gen::@1#1] -- register_copy + //SEG143 [65] phi (dword) lin16u_gen::val#2 = (dword) lin16u_gen::val#1 [phi:lin16u_gen::@1->lin16u_gen::@1#2] -- register_copy jmp b1 - //SEG141 lin16u_gen::@1 + //SEG144 lin16u_gen::@1 b1: - //SEG142 [66] (word~) lin16u_gen::$5 ← > (dword) lin16u_gen::val#2 [ lin16u_gen::step#0 lin16u_gen::val#2 lin16u_gen::lintab#2 lin16u_gen::i#2 lin16u_gen::$5 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::val#2 lin16u_gen::lintab#2 lin16u_gen::i#2 lin16u_gen::$5 ] ) -- vwuz1=_hi_vduz2 + //SEG145 [66] (word~) lin16u_gen::$5 ← > (dword) lin16u_gen::val#2 [ lin16u_gen::step#0 lin16u_gen::val#2 lin16u_gen::lintab#2 lin16u_gen::i#2 lin16u_gen::$5 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::val#2 lin16u_gen::lintab#2 lin16u_gen::i#2 lin16u_gen::$5 ] ) -- vwuz1=_hi_vduz2 lda val+2 sta _5 lda val+3 sta _5+1 - //SEG143 [67] *((word*) lin16u_gen::lintab#2) ← (word~) lin16u_gen::$5 [ lin16u_gen::step#0 lin16u_gen::val#2 lin16u_gen::lintab#2 lin16u_gen::i#2 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::val#2 lin16u_gen::lintab#2 lin16u_gen::i#2 ] ) -- _deref_pwuz1=vwuz2 + //SEG146 [67] *((word*) lin16u_gen::lintab#2) ← (word~) lin16u_gen::$5 [ lin16u_gen::step#0 lin16u_gen::val#2 lin16u_gen::lintab#2 lin16u_gen::i#2 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::val#2 lin16u_gen::lintab#2 lin16u_gen::i#2 ] ) -- _deref_pwuz1=vwuz2 ldy #0 lda _5 sta (lintab),y iny lda _5+1 sta (lintab),y - //SEG144 [68] (dword) lin16u_gen::val#1 ← (dword) lin16u_gen::val#2 + (dword) lin16u_gen::step#0 [ lin16u_gen::step#0 lin16u_gen::lintab#2 lin16u_gen::i#2 lin16u_gen::val#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::lintab#2 lin16u_gen::i#2 lin16u_gen::val#1 ] ) -- vduz1=vduz1_plus_vduz2 + //SEG147 [68] (dword) lin16u_gen::val#1 ← (dword) lin16u_gen::val#2 + (dword) lin16u_gen::step#0 [ lin16u_gen::step#0 lin16u_gen::lintab#2 lin16u_gen::i#2 lin16u_gen::val#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::lintab#2 lin16u_gen::i#2 lin16u_gen::val#1 ] ) -- vduz1=vduz1_plus_vduz2 lda val clc adc step @@ -3726,7 +3626,7 @@ lin16u_gen: { lda val+3 adc step+3 sta val+3 - //SEG145 [69] (word*) lin16u_gen::lintab#1 ← (word*) lin16u_gen::lintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#1 ] ) -- pwuz1=pwuz1_plus_vbuc1 + //SEG148 [69] (word*) lin16u_gen::lintab#1 ← (word*) lin16u_gen::lintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#1 ] ) -- pwuz1=pwuz1_plus_vbuc1 clc lda lintab adc #<2 @@ -3734,12 +3634,12 @@ lin16u_gen: { lda lintab+1 adc #>2 sta lintab+1 - //SEG146 [70] (word) lin16u_gen::i#1 ← ++ (word) lin16u_gen::i#2 [ lin16u_gen::step#0 lin16u_gen::val#1 lin16u_gen::lintab#1 lin16u_gen::i#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::val#1 lin16u_gen::lintab#1 lin16u_gen::i#1 ] ) -- vwuz1=_inc_vwuz1 + //SEG149 [70] (word) lin16u_gen::i#1 ← ++ (word) lin16u_gen::i#2 [ lin16u_gen::step#0 lin16u_gen::val#1 lin16u_gen::lintab#1 lin16u_gen::i#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::val#1 lin16u_gen::lintab#1 lin16u_gen::i#1 ] ) -- vwuz1=_inc_vwuz1 inc i bne !+ inc i+1 !: - //SEG147 [71] if((word) lin16u_gen::i#1<(const word) lin16u_gen::length#0) goto lin16u_gen::@1 [ lin16u_gen::step#0 lin16u_gen::val#1 lin16u_gen::lintab#1 lin16u_gen::i#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::val#1 lin16u_gen::lintab#1 lin16u_gen::i#1 ] ) -- vwuz1_lt_vwuc1_then_la1 + //SEG150 [71] if((word) lin16u_gen::i#1<(const word) lin16u_gen::length#0) goto lin16u_gen::@1 [ lin16u_gen::step#0 lin16u_gen::val#1 lin16u_gen::lintab#1 lin16u_gen::i#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::val#1 lin16u_gen::lintab#1 lin16u_gen::i#1 ] ) -- vwuz1_lt_vwuc1_then_la1 lda i+1 cmp #>length bcc b1_from_b1 @@ -3749,79 +3649,79 @@ lin16u_gen: { bcc b1_from_b1 !: jmp breturn - //SEG148 lin16u_gen::@return + //SEG151 lin16u_gen::@return breturn: - //SEG149 [72] return [ ] ( main:2::lin16u_gen:5 [ ] ) + //SEG152 [72] return [ ] ( main:2::lin16u_gen:5 [ ] ) rts } -//SEG150 divr16u +//SEG153 divr16u divr16u: { .label _1 = $30 .label _2 = $31 - .label return = $34 .label rem = $17 .label dividend = $19 .label quotient = $1b .label i = $1d - .label return_1 = $1b + .label return = $1b + .label return_2 = $22 .label return_3 = $26 .label divisor = $15 - //SEG151 [74] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] + //SEG154 [74] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] b1_from_divr16u: - //SEG152 [74] phi (byte) divr16u::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:divr16u->divr16u::@1#0] -- vbuz1=vbuc1 + //SEG155 [74] phi (byte) divr16u::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:divr16u->divr16u::@1#0] -- vbuz1=vbuc1 lda #0 sta i - //SEG153 [74] phi (word) divr16u::quotient#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + //SEG156 [74] phi (word) divr16u::quotient#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 lda #<0 sta quotient lda #>0 sta quotient+1 - //SEG154 [74] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy - //SEG155 [74] phi (word) divr16u::rem#5 = (word) divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy + //SEG157 [74] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy + //SEG158 [74] phi (word) divr16u::rem#5 = (word) divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy jmp b1 - //SEG156 [74] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] + //SEG159 [74] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] b1_from_b3: - //SEG157 [74] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy - //SEG158 [74] phi (word) divr16u::quotient#3 = (word) divr16u::return#1 [phi:divr16u::@3->divr16u::@1#1] -- register_copy - //SEG159 [74] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#1 [phi:divr16u::@3->divr16u::@1#2] -- register_copy - //SEG160 [74] phi (word) divr16u::rem#5 = (word) divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy + //SEG160 [74] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy + //SEG161 [74] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy + //SEG162 [74] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy + //SEG163 [74] phi (word) divr16u::rem#5 = (word) divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy jmp b1 - //SEG161 divr16u::@1 + //SEG164 divr16u::@1 b1: - //SEG162 [75] (word) divr16u::rem#1 ← (word) divr16u::rem#5 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) -- vwuz1=vwuz1_rol_1 + //SEG165 [75] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ) -- vwuz1=vwuz1_rol_1 asl rem rol rem+1 - //SEG163 [76] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$1 ] ) -- vbuz1=_hi_vwuz2 + //SEG166 [76] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) -- vbuz1=_hi_vwuz2 lda dividend+1 sta _1 - //SEG164 [77] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$2 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$2 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$2 ] ) -- vbuz1=vbuz2_band_vbuc1 + //SEG167 [77] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ) -- vbuz1=vbuz2_band_vbuc1 lda #$80 and _1 sta _2 - //SEG165 [78] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) -- vbuz1_eq_0_then_la1 + //SEG168 [78] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ) -- vbuz1_eq_0_then_la1 lda _2 beq b2_from_b1 jmp b4 - //SEG166 divr16u::@4 + //SEG169 divr16u::@4 b4: - //SEG167 [79] (word) divr16u::rem#2 ← (word) divr16u::rem#1 | (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#2 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#2 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#2 ] ) -- vwuz1=vwuz1_bor_vbuc1 + //SEG170 [79] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) -- vwuz1=vwuz1_bor_vbuc1 lda #1 ora rem sta rem - //SEG168 [80] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] + //SEG171 [80] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] b2_from_b1: b2_from_b4: - //SEG169 [80] phi (word) divr16u::rem#6 = (word) divr16u::rem#1 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy + //SEG172 [80] phi (word) divr16u::rem#6 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy jmp b2 - //SEG170 divr16u::@2 + //SEG173 divr16u::@2 b2: - //SEG171 [81] (word) divr16u::dividend#1 ← (word) divr16u::dividend#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#6 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 ] ) -- vwuz1=vwuz1_rol_1 + //SEG174 [81] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#6 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 ] ) -- vwuz1=vwuz1_rol_1 asl dividend rol dividend+1 - //SEG172 [82] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#1 ] ) -- vwuz1=vwuz1_rol_1 + //SEG175 [82] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ) -- vwuz1=vwuz1_rol_1 asl quotient rol quotient+1 - //SEG173 [83] if((word) divr16u::rem#6<(word) divr16u::divisor#6) goto divr16u::@3 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#1 ] ) -- vwuz1_lt_vwuz2_then_la1 + //SEG176 [83] if((word) divr16u::rem#6<(word) divr16u::divisor#6) goto divr16u::@3 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ) -- vwuz1_lt_vwuz2_then_la1 lda rem+1 cmp divisor+1 bcc b3_from_b2 @@ -3831,14 +3731,14 @@ divr16u: { bcc b3_from_b2 !: jmp b5 - //SEG174 divr16u::@5 + //SEG177 divr16u::@5 b5: - //SEG175 [84] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#2 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#2 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#2 ] ) -- vwuz1=_inc_vwuz1 + //SEG178 [84] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#2 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#2 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#2 ] ) -- vwuz1=_inc_vwuz1 inc quotient bne !+ inc quotient+1 !: - //SEG176 [85] (word) divr16u::rem#3 ← (word) divr16u::rem#6 - (word) divr16u::divisor#6 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::quotient#2 divr16u::rem#3 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::quotient#2 divr16u::rem#3 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::quotient#2 divr16u::rem#3 ] ) -- vwuz1=vwuz1_minus_vwuz2 + //SEG179 [85] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (word) divr16u::divisor#6 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) -- vwuz1=vwuz1_minus_vwuz2 lda rem sec sbc divisor @@ -3846,75 +3746,32 @@ divr16u: { lda rem+1 sbc divisor+1 sta rem+1 - //SEG177 [86] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] + //SEG180 [86] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] b3_from_b2: b3_from_b5: - //SEG178 [86] phi (word) divr16u::return#1 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy - //SEG179 [86] phi (word) divr16u::rem#11 = (word) divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy + //SEG181 [86] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy + //SEG182 [86] phi (word) divr16u::rem#11 = (word) divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy jmp b3 - //SEG180 divr16u::@3 + //SEG183 divr16u::@3 b3: - //SEG181 [87] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::return#1 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#1 divr16u::i#1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::return#1 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#1 divr16u::i#1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::return#1 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#1 divr16u::i#1 ] ) -- vbuz1=_inc_vbuz1 + //SEG184 [87] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::return#0 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#0 divr16u::i#1 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::return#0 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#0 divr16u::i#1 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::return#0 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#0 divr16u::i#1 ] ) -- vbuz1=_inc_vbuz1 inc i - //SEG182 [88] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::return#1 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#1 divr16u::i#1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::return#1 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#1 divr16u::i#1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::return#1 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#1 divr16u::i#1 ] ) -- vbuz1_neq_vbuc1_then_la1 + //SEG185 [88] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::return#0 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#0 divr16u::i#1 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::return#0 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#0 divr16u::i#1 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::return#0 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#0 divr16u::i#1 ] ) -- vbuz1_neq_vbuc1_then_la1 lda i cmp #$10 bne b1_from_b3 jmp b6 - //SEG183 divr16u::@6 + //SEG186 divr16u::@6 b6: - //SEG184 [89] (word) rem16u#13 ← (word) divr16u::rem#11 [ rem16u#13 divr16u::return#1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 rem16u#13 divr16u::return#1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ rem16u#13 divr16u::return#1 ] ) -- vwuz1=vwuz2 + //SEG187 [89] (word) rem16u#1 ← (word) divr16u::rem#11 [ divr16u::return#0 rem16u#1 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::return#0 rem16u#1 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::return#0 rem16u#1 ] ) -- vwuz1=vwuz2 lda rem sta rem16u lda rem+1 sta rem16u+1 jmp breturn - //SEG185 divr16u::@return + //SEG188 divr16u::@return breturn: - //SEG186 [90] return [ rem16u#13 divr16u::return#1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 rem16u#13 divr16u::return#1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ rem16u#13 divr16u::return#1 ] ) - rts -} -//SEG187 div16u -div16u: { - .const divisor = lin16u_gen.length-1 - .label return = $36 - .label return_2 = $22 - //SEG188 [92] call divr16u param-assignment [ rem16u#13 divr16u::return#1 ] ( main:2::lin16u_gen:5::div16u:57 [ rem16u#13 divr16u::return#1 ] ) - //SEG189 [73] phi from div16u to divr16u [phi:div16u->divr16u] - divr16u_from_div16u: - //SEG190 [73] phi (word) divr16u::divisor#6 = (const word) div16u::divisor#0 [phi:div16u->divr16u#0] -- vwuz1=vwuc1 - lda #divisor - sta divr16u.divisor+1 - //SEG191 [73] phi (word) divr16u::dividend#5 = (const word) lin16u_gen::ampl#0 [phi:div16u->divr16u#1] -- vwuz1=vwuc1 - lda #lin16u_gen.ampl - sta divr16u.dividend+1 - //SEG192 [73] phi (word) divr16u::rem#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:div16u->divr16u#2] -- vwuz1=vbuc1 - lda #<0 - sta divr16u.rem - lda #>0 - sta divr16u.rem+1 - jsr divr16u - //SEG193 [93] (word) divr16u::return#0 ← (word) divr16u::return#1 [ rem16u#13 divr16u::return#0 ] ( main:2::lin16u_gen:5::div16u:57 [ rem16u#13 divr16u::return#0 ] ) -- vwuz1=vwuz2 - lda divr16u.return_1 - sta divr16u.return - lda divr16u.return_1+1 - sta divr16u.return+1 - jmp b2 - //SEG194 div16u::@2 - b2: - //SEG195 [94] (word) div16u::return#0 ← (word) divr16u::return#0 [ div16u::return#0 rem16u#13 ] ( main:2::lin16u_gen:5::div16u:57 [ div16u::return#0 rem16u#13 ] ) -- vwuz1=vwuz2 - lda divr16u.return - sta return - lda divr16u.return+1 - sta return+1 - jmp breturn - //SEG196 div16u::@return - breturn: - //SEG197 [95] return [ div16u::return#0 rem16u#13 ] ( main:2::lin16u_gen:5::div16u:57 [ div16u::return#0 rem16u#13 ] ) + //SEG189 [90] return [ divr16u::return#0 rem16u#1 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::return#0 rem16u#1 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::return#0 rem16u#1 ] ) rts } @@ -3935,10 +3792,10 @@ Statement [45] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 [ Statement [47] *((byte*) char_cursor#2) ← *((byte*) print_str::str#2) [ char_cursor#2 print_str::str#2 ] ( main:2::print_str:12 [ main::i#2 line_cursor#19 char_cursor#2 print_str::str#2 ] ) always clobbers reg byte a reg byte y Statement [52] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:7 [ print_cls::sc#2 ] ) always clobbers reg byte a reg byte y Statement [54] if((byte*) print_cls::sc#1!=(const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:7 [ print_cls::sc#1 ] ) always clobbers reg byte a -Statement [58] (word) div16u::return#2 ← (word) div16u::return#0 [ div16u::return#2 rem16u#13 ] ( main:2::lin16u_gen:5 [ div16u::return#2 rem16u#13 ] ) always clobbers reg byte a -Statement [59] (word) lin16u_gen::stepi#0 ← (word) div16u::return#2 [ lin16u_gen::stepi#0 rem16u#13 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 rem16u#13 ] ) always clobbers reg byte a -Statement [60] (word) divr16u::rem#4 ← (word) rem16u#13 [ lin16u_gen::stepi#0 divr16u::rem#4 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 divr16u::rem#4 ] ) always clobbers reg byte a -Statement [62] (word) divr16u::return#3 ← (word) divr16u::return#1 [ lin16u_gen::stepi#0 divr16u::return#3 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 divr16u::return#3 ] ) always clobbers reg byte a +Statement [58] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 rem16u#1 ] ( main:2::lin16u_gen:5 [ divr16u::return#2 rem16u#1 ] ) always clobbers reg byte a +Statement [59] (word) lin16u_gen::stepi#0 ← (word) divr16u::return#2 [ lin16u_gen::stepi#0 rem16u#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 rem16u#1 ] ) always clobbers reg byte a +Statement [60] (word) divr16u::rem#4 ← (word) rem16u#1 [ lin16u_gen::stepi#0 divr16u::rem#4 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 divr16u::rem#4 ] ) always clobbers reg byte a +Statement [62] (word) divr16u::return#3 ← (word) divr16u::return#0 [ lin16u_gen::stepi#0 divr16u::return#3 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 divr16u::return#3 ] ) always clobbers reg byte a Statement [63] (word) lin16u_gen::stepf#0 ← (word) divr16u::return#3 [ lin16u_gen::stepi#0 lin16u_gen::stepf#0 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 lin16u_gen::stepf#0 ] ) always clobbers reg byte a Statement [64] (dword) lin16u_gen::step#0 ← (word) lin16u_gen::stepi#0 dw= (word) lin16u_gen::stepf#0 [ lin16u_gen::step#0 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 ] ) always clobbers reg byte a Statement [66] (word~) lin16u_gen::$5 ← > (dword) lin16u_gen::val#2 [ lin16u_gen::step#0 lin16u_gen::val#2 lin16u_gen::lintab#2 lin16u_gen::i#2 lin16u_gen::$5 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::val#2 lin16u_gen::lintab#2 lin16u_gen::i#2 lin16u_gen::$5 ] ) always clobbers reg byte a @@ -3946,15 +3803,13 @@ Statement [67] *((word*) lin16u_gen::lintab#2) ← (word~) lin16u_gen::$5 [ lin1 Statement [68] (dword) lin16u_gen::val#1 ← (dword) lin16u_gen::val#2 + (dword) lin16u_gen::step#0 [ lin16u_gen::step#0 lin16u_gen::lintab#2 lin16u_gen::i#2 lin16u_gen::val#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::lintab#2 lin16u_gen::i#2 lin16u_gen::val#1 ] ) always clobbers reg byte a Statement [69] (word*) lin16u_gen::lintab#1 ← (word*) lin16u_gen::lintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#1 ] ) always clobbers reg byte a Statement [71] if((word) lin16u_gen::i#1<(const word) lin16u_gen::length#0) goto lin16u_gen::@1 [ lin16u_gen::step#0 lin16u_gen::val#1 lin16u_gen::lintab#1 lin16u_gen::i#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::val#1 lin16u_gen::lintab#1 lin16u_gen::i#1 ] ) always clobbers reg byte a -Statement [76] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$1 ] ) always clobbers reg byte a +Statement [76] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:29 [ divr16u::i#2 divr16u::i#1 ] -Statement [77] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$2 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$2 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$2 ] ) always clobbers reg byte a -Statement [79] (word) divr16u::rem#2 ← (word) divr16u::rem#1 | (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#2 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#2 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#2 ] ) always clobbers reg byte a -Statement [83] if((word) divr16u::rem#6<(word) divr16u::divisor#6) goto divr16u::@3 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#1 ] ) always clobbers reg byte a -Statement [85] (word) divr16u::rem#3 ← (word) divr16u::rem#6 - (word) divr16u::divisor#6 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::quotient#2 divr16u::rem#3 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::quotient#2 divr16u::rem#3 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::quotient#2 divr16u::rem#3 ] ) always clobbers reg byte a -Statement [89] (word) rem16u#13 ← (word) divr16u::rem#11 [ rem16u#13 divr16u::return#1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 rem16u#13 divr16u::return#1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ rem16u#13 divr16u::return#1 ] ) always clobbers reg byte a -Statement [93] (word) divr16u::return#0 ← (word) divr16u::return#1 [ rem16u#13 divr16u::return#0 ] ( main:2::lin16u_gen:5::div16u:57 [ rem16u#13 divr16u::return#0 ] ) always clobbers reg byte a -Statement [94] (word) div16u::return#0 ← (word) divr16u::return#0 [ div16u::return#0 rem16u#13 ] ( main:2::lin16u_gen:5::div16u:57 [ div16u::return#0 rem16u#13 ] ) always clobbers reg byte a +Statement [77] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ) always clobbers reg byte a +Statement [79] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) always clobbers reg byte a +Statement [83] if((word) divr16u::rem#6<(word) divr16u::divisor#6) goto divr16u::@3 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ) always clobbers reg byte a +Statement [85] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (word) divr16u::divisor#6 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a +Statement [89] (word) rem16u#1 ← (word) divr16u::rem#11 [ divr16u::return#0 rem16u#1 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::return#0 rem16u#1 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::return#0 rem16u#1 ] ) always clobbers reg byte a Statement [13] (word) print_word::w#0 ← *((const word[20]) main::lintab#0 + (byte) main::i#2) [ main::i#2 line_cursor#19 print_word::w#0 char_cursor#2 ] ( main:2 [ main::i#2 line_cursor#19 print_word::w#0 char_cursor#2 ] ) always clobbers reg byte a Statement [17] (byte) main::i#1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#1 line_cursor#1 ] ( main:2 [ main::i#1 line_cursor#1 ] ) always clobbers reg byte a Statement [20] (byte*~) char_cursor#51 ← (byte*) line_cursor#1 [ main::i#1 char_cursor#51 line_cursor#1 ] ( main:2 [ main::i#1 char_cursor#51 line_cursor#1 ] ) always clobbers reg byte a @@ -3968,10 +3823,10 @@ Statement [45] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 [ Statement [47] *((byte*) char_cursor#2) ← *((byte*) print_str::str#2) [ char_cursor#2 print_str::str#2 ] ( main:2::print_str:12 [ main::i#2 line_cursor#19 char_cursor#2 print_str::str#2 ] ) always clobbers reg byte a reg byte y Statement [52] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:7 [ print_cls::sc#2 ] ) always clobbers reg byte a reg byte y Statement [54] if((byte*) print_cls::sc#1!=(const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:7 [ print_cls::sc#1 ] ) always clobbers reg byte a -Statement [58] (word) div16u::return#2 ← (word) div16u::return#0 [ div16u::return#2 rem16u#13 ] ( main:2::lin16u_gen:5 [ div16u::return#2 rem16u#13 ] ) always clobbers reg byte a -Statement [59] (word) lin16u_gen::stepi#0 ← (word) div16u::return#2 [ lin16u_gen::stepi#0 rem16u#13 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 rem16u#13 ] ) always clobbers reg byte a -Statement [60] (word) divr16u::rem#4 ← (word) rem16u#13 [ lin16u_gen::stepi#0 divr16u::rem#4 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 divr16u::rem#4 ] ) always clobbers reg byte a -Statement [62] (word) divr16u::return#3 ← (word) divr16u::return#1 [ lin16u_gen::stepi#0 divr16u::return#3 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 divr16u::return#3 ] ) always clobbers reg byte a +Statement [58] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 rem16u#1 ] ( main:2::lin16u_gen:5 [ divr16u::return#2 rem16u#1 ] ) always clobbers reg byte a +Statement [59] (word) lin16u_gen::stepi#0 ← (word) divr16u::return#2 [ lin16u_gen::stepi#0 rem16u#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 rem16u#1 ] ) always clobbers reg byte a +Statement [60] (word) divr16u::rem#4 ← (word) rem16u#1 [ lin16u_gen::stepi#0 divr16u::rem#4 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 divr16u::rem#4 ] ) always clobbers reg byte a +Statement [62] (word) divr16u::return#3 ← (word) divr16u::return#0 [ lin16u_gen::stepi#0 divr16u::return#3 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 divr16u::return#3 ] ) always clobbers reg byte a Statement [63] (word) lin16u_gen::stepf#0 ← (word) divr16u::return#3 [ lin16u_gen::stepi#0 lin16u_gen::stepf#0 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 lin16u_gen::stepf#0 ] ) always clobbers reg byte a Statement [64] (dword) lin16u_gen::step#0 ← (word) lin16u_gen::stepi#0 dw= (word) lin16u_gen::stepf#0 [ lin16u_gen::step#0 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 ] ) always clobbers reg byte a Statement [66] (word~) lin16u_gen::$5 ← > (dword) lin16u_gen::val#2 [ lin16u_gen::step#0 lin16u_gen::val#2 lin16u_gen::lintab#2 lin16u_gen::i#2 lin16u_gen::$5 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::val#2 lin16u_gen::lintab#2 lin16u_gen::i#2 lin16u_gen::$5 ] ) always clobbers reg byte a @@ -3979,14 +3834,12 @@ Statement [67] *((word*) lin16u_gen::lintab#2) ← (word~) lin16u_gen::$5 [ lin1 Statement [68] (dword) lin16u_gen::val#1 ← (dword) lin16u_gen::val#2 + (dword) lin16u_gen::step#0 [ lin16u_gen::step#0 lin16u_gen::lintab#2 lin16u_gen::i#2 lin16u_gen::val#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::lintab#2 lin16u_gen::i#2 lin16u_gen::val#1 ] ) always clobbers reg byte a Statement [69] (word*) lin16u_gen::lintab#1 ← (word*) lin16u_gen::lintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#1 ] ) always clobbers reg byte a Statement [71] if((word) lin16u_gen::i#1<(const word) lin16u_gen::length#0) goto lin16u_gen::@1 [ lin16u_gen::step#0 lin16u_gen::val#1 lin16u_gen::lintab#1 lin16u_gen::i#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::val#1 lin16u_gen::lintab#1 lin16u_gen::i#1 ] ) always clobbers reg byte a -Statement [76] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$1 ] ) always clobbers reg byte a -Statement [77] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$2 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$2 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$2 ] ) always clobbers reg byte a -Statement [79] (word) divr16u::rem#2 ← (word) divr16u::rem#1 | (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#2 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#2 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#2 ] ) always clobbers reg byte a -Statement [83] if((word) divr16u::rem#6<(word) divr16u::divisor#6) goto divr16u::@3 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#1 ] ) always clobbers reg byte a -Statement [85] (word) divr16u::rem#3 ← (word) divr16u::rem#6 - (word) divr16u::divisor#6 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::quotient#2 divr16u::rem#3 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::quotient#2 divr16u::rem#3 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::quotient#2 divr16u::rem#3 ] ) always clobbers reg byte a -Statement [89] (word) rem16u#13 ← (word) divr16u::rem#11 [ rem16u#13 divr16u::return#1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 rem16u#13 divr16u::return#1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ rem16u#13 divr16u::return#1 ] ) always clobbers reg byte a -Statement [93] (word) divr16u::return#0 ← (word) divr16u::return#1 [ rem16u#13 divr16u::return#0 ] ( main:2::lin16u_gen:5::div16u:57 [ rem16u#13 divr16u::return#0 ] ) always clobbers reg byte a -Statement [94] (word) div16u::return#0 ← (word) divr16u::return#0 [ div16u::return#0 rem16u#13 ] ( main:2::lin16u_gen:5::div16u:57 [ div16u::return#0 rem16u#13 ] ) always clobbers reg byte a +Statement [76] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) always clobbers reg byte a +Statement [77] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ) always clobbers reg byte a +Statement [79] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) always clobbers reg byte a +Statement [83] if((word) divr16u::rem#6<(word) divr16u::divisor#6) goto divr16u::@3 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ) always clobbers reg byte a +Statement [85] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (word) divr16u::divisor#6 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a +Statement [89] (word) rem16u#1 ← (word) divr16u::rem#11 [ divr16u::return#0 rem16u#1 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::return#0 rem16u#1 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::return#0 rem16u#1 ] ) always clobbers reg byte a Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , Potential registers zp ZP_WORD:3 [ line_cursor#9 line_cursor#19 line_cursor#1 ] : zp ZP_WORD:3 , Potential registers zp ZP_BYTE:5 [ print_byte::b#3 print_byte::b#2 print_byte::b#0 print_byte::b#1 ] : zp ZP_BYTE:5 , reg byte a , reg byte x , @@ -3998,14 +3851,14 @@ Potential registers zp ZP_DWORD:13 [ lin16u_gen::val#2 lin16u_gen::val#1 ] : zp Potential registers zp ZP_WORD:17 [ lin16u_gen::lintab#2 lin16u_gen::lintab#1 ] : zp ZP_WORD:17 , Potential registers zp ZP_WORD:19 [ lin16u_gen::i#2 lin16u_gen::i#1 ] : zp ZP_WORD:19 , Potential registers zp ZP_WORD:21 [ divr16u::divisor#6 ] : zp ZP_WORD:21 , -Potential registers zp ZP_WORD:23 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#1 divr16u::rem#2 divr16u::rem#3 ] : zp ZP_WORD:23 , -Potential registers zp ZP_WORD:25 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 ] : zp ZP_WORD:25 , -Potential registers zp ZP_WORD:27 [ divr16u::quotient#3 divr16u::return#1 divr16u::quotient#1 divr16u::quotient#2 ] : zp ZP_WORD:27 , +Potential registers zp ZP_WORD:23 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] : zp ZP_WORD:23 , +Potential registers zp ZP_WORD:25 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] : zp ZP_WORD:25 , +Potential registers zp ZP_WORD:27 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] : zp ZP_WORD:27 , Potential registers zp ZP_BYTE:29 [ divr16u::i#2 divr16u::i#1 ] : zp ZP_BYTE:29 , reg byte x , reg byte y , Potential registers zp ZP_WORD:30 [ print_word::w#0 ] : zp ZP_WORD:30 , Potential registers zp ZP_BYTE:32 [ print_byte::$0 ] : zp ZP_BYTE:32 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_BYTE:33 [ print_byte::$2 ] : zp ZP_BYTE:33 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:34 [ div16u::return#2 ] : zp ZP_WORD:34 , +Potential registers zp ZP_WORD:34 [ divr16u::return#2 ] : zp ZP_WORD:34 , Potential registers zp ZP_WORD:36 [ lin16u_gen::stepi#0 ] : zp ZP_WORD:36 , Potential registers zp ZP_WORD:38 [ divr16u::return#3 ] : zp ZP_WORD:38 , Potential registers zp ZP_WORD:40 [ lin16u_gen::stepf#0 ] : zp ZP_WORD:40 , @@ -4013,54 +3866,48 @@ Potential registers zp ZP_DWORD:42 [ lin16u_gen::step#0 ] : zp ZP_DWORD:42 , Potential registers zp ZP_WORD:46 [ lin16u_gen::$5 ] : zp ZP_WORD:46 , Potential registers zp ZP_BYTE:48 [ divr16u::$1 ] : zp ZP_BYTE:48 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_BYTE:49 [ divr16u::$2 ] : zp ZP_BYTE:49 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:50 [ rem16u#13 ] : zp ZP_WORD:50 , -Potential registers zp ZP_WORD:52 [ divr16u::return#0 ] : zp ZP_WORD:52 , -Potential registers zp ZP_WORD:54 [ div16u::return#0 ] : zp ZP_WORD:54 , +Potential registers zp ZP_WORD:50 [ rem16u#1 ] : zp ZP_WORD:50 , REGISTER UPLIFT SCOPES -Uplift Scope [] 251.87: zp ZP_WORD:3 [ line_cursor#9 line_cursor#19 line_cursor#1 ] 192.97: zp ZP_WORD:7 [ char_cursor#32 char_cursor#45 char_cursor#47 char_cursor#51 char_cursor#2 char_cursor#11 char_cursor#1 ] 0.44: zp ZP_WORD:50 [ rem16u#13 ] +Uplift Scope [] 251.87: zp ZP_WORD:3 [ line_cursor#9 line_cursor#19 line_cursor#1 ] 192.97: zp ZP_WORD:7 [ char_cursor#32 char_cursor#45 char_cursor#47 char_cursor#51 char_cursor#2 char_cursor#11 char_cursor#1 ] 0.8: zp ZP_WORD:50 [ rem16u#1 ] Uplift Scope [print_str] 303: zp ZP_WORD:9 [ print_str::str#2 print_str::str#0 ] -Uplift Scope [divr16u] 106.92: zp ZP_WORD:23 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#1 divr16u::rem#2 divr16u::rem#3 ] 35.54: zp ZP_WORD:27 [ divr16u::quotient#3 divr16u::return#1 divr16u::quotient#1 divr16u::quotient#2 ] 22: zp ZP_BYTE:48 [ divr16u::$1 ] 22: zp ZP_BYTE:49 [ divr16u::$2 ] 18.19: zp ZP_BYTE:29 [ divr16u::i#2 divr16u::i#1 ] 9.75: zp ZP_WORD:25 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 ] 4: zp ZP_WORD:38 [ divr16u::return#3 ] 4: zp ZP_WORD:52 [ divr16u::return#0 ] 1.38: zp ZP_WORD:21 [ divr16u::divisor#6 ] +Uplift Scope [divr16u] 106.92: zp ZP_WORD:23 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] 35.54: zp ZP_WORD:27 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] 22: zp ZP_BYTE:48 [ divr16u::$1 ] 22: zp ZP_BYTE:49 [ divr16u::$2 ] 18.19: zp ZP_BYTE:29 [ divr16u::i#2 divr16u::i#1 ] 9.75: zp ZP_WORD:25 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] 4: zp ZP_WORD:34 [ divr16u::return#2 ] 4: zp ZP_WORD:38 [ divr16u::return#3 ] 1.38: zp ZP_WORD:21 [ divr16u::divisor#6 ] Uplift Scope [lin16u_gen] 22: zp ZP_WORD:46 [ lin16u_gen::$5 ] 20.9: zp ZP_WORD:19 [ lin16u_gen::i#2 lin16u_gen::i#1 ] 16.5: zp ZP_DWORD:13 [ lin16u_gen::val#2 lin16u_gen::val#1 ] 15.58: zp ZP_WORD:17 [ lin16u_gen::lintab#2 lin16u_gen::lintab#1 ] 4: zp ZP_WORD:40 [ lin16u_gen::stepf#0 ] 1.62: zp ZP_DWORD:42 [ lin16u_gen::step#0 ] 0.8: zp ZP_WORD:36 [ lin16u_gen::stepi#0 ] Uplift Scope [print_byte] 34.75: zp ZP_BYTE:5 [ print_byte::b#3 print_byte::b#2 print_byte::b#0 print_byte::b#1 ] 4: zp ZP_BYTE:32 [ print_byte::$0 ] 4: zp ZP_BYTE:33 [ print_byte::$2 ] Uplift Scope [print_cls] 33: zp ZP_WORD:11 [ print_cls::sc#2 print_cls::sc#1 ] Uplift Scope [main] 15.89: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Uplift Scope [print_char] 14: zp ZP_BYTE:6 [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] -Uplift Scope [div16u] 4: zp ZP_WORD:34 [ div16u::return#2 ] 1.33: zp ZP_WORD:54 [ div16u::return#0 ] Uplift Scope [print_word] 5: zp ZP_WORD:30 [ print_word::w#0 ] Uplift Scope [print_ln] -Uplifting [] best 16710 combination zp ZP_WORD:3 [ line_cursor#9 line_cursor#19 line_cursor#1 ] zp ZP_WORD:7 [ char_cursor#32 char_cursor#45 char_cursor#47 char_cursor#51 char_cursor#2 char_cursor#11 char_cursor#1 ] zp ZP_WORD:50 [ rem16u#13 ] -Uplifting [print_str] best 16710 combination zp ZP_WORD:9 [ print_str::str#2 print_str::str#0 ] -Uplifting [divr16u] best 16520 combination zp ZP_WORD:23 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#1 divr16u::rem#2 divr16u::rem#3 ] zp ZP_WORD:27 [ divr16u::quotient#3 divr16u::return#1 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:25 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 ] zp ZP_WORD:38 [ divr16u::return#3 ] zp ZP_WORD:52 [ divr16u::return#0 ] zp ZP_WORD:21 [ divr16u::divisor#6 ] -Uplifting [lin16u_gen] best 16520 combination zp ZP_WORD:46 [ lin16u_gen::$5 ] zp ZP_WORD:19 [ lin16u_gen::i#2 lin16u_gen::i#1 ] zp ZP_DWORD:13 [ lin16u_gen::val#2 lin16u_gen::val#1 ] zp ZP_WORD:17 [ lin16u_gen::lintab#2 lin16u_gen::lintab#1 ] zp ZP_WORD:40 [ lin16u_gen::stepf#0 ] zp ZP_DWORD:42 [ lin16u_gen::step#0 ] zp ZP_WORD:36 [ lin16u_gen::stepi#0 ] -Uplifting [print_byte] best 16478 combination reg byte x [ print_byte::b#3 print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ] -Uplifting [print_cls] best 16478 combination zp ZP_WORD:11 [ print_cls::sc#2 print_cls::sc#1 ] -Uplifting [main] best 16478 combination zp ZP_BYTE:2 [ main::i#2 main::i#1 ] -Uplifting [print_char] best 16469 combination reg byte a [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] -Uplifting [div16u] best 16469 combination zp ZP_WORD:34 [ div16u::return#2 ] zp ZP_WORD:54 [ div16u::return#0 ] -Uplifting [print_word] best 16469 combination zp ZP_WORD:30 [ print_word::w#0 ] -Uplifting [print_ln] best 16469 combination +Uplifting [] best 16668 combination zp ZP_WORD:3 [ line_cursor#9 line_cursor#19 line_cursor#1 ] zp ZP_WORD:7 [ char_cursor#32 char_cursor#45 char_cursor#47 char_cursor#51 char_cursor#2 char_cursor#11 char_cursor#1 ] zp ZP_WORD:50 [ rem16u#1 ] +Uplifting [print_str] best 16668 combination zp ZP_WORD:9 [ print_str::str#2 print_str::str#0 ] +Uplifting [divr16u] best 16478 combination zp ZP_WORD:23 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:27 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:25 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp ZP_WORD:34 [ divr16u::return#2 ] zp ZP_WORD:38 [ divr16u::return#3 ] zp ZP_WORD:21 [ divr16u::divisor#6 ] +Uplifting [lin16u_gen] best 16478 combination zp ZP_WORD:46 [ lin16u_gen::$5 ] zp ZP_WORD:19 [ lin16u_gen::i#2 lin16u_gen::i#1 ] zp ZP_DWORD:13 [ lin16u_gen::val#2 lin16u_gen::val#1 ] zp ZP_WORD:17 [ lin16u_gen::lintab#2 lin16u_gen::lintab#1 ] zp ZP_WORD:40 [ lin16u_gen::stepf#0 ] zp ZP_DWORD:42 [ lin16u_gen::step#0 ] zp ZP_WORD:36 [ lin16u_gen::stepi#0 ] +Uplifting [print_byte] best 16436 combination reg byte x [ print_byte::b#3 print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ] +Uplifting [print_cls] best 16436 combination zp ZP_WORD:11 [ print_cls::sc#2 print_cls::sc#1 ] +Uplifting [main] best 16436 combination zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +Uplifting [print_char] best 16427 combination reg byte a [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] +Uplifting [print_word] best 16427 combination zp ZP_WORD:30 [ print_word::w#0 ] +Uplifting [print_ln] best 16427 combination Attempting to uplift remaining variables inzp ZP_BYTE:2 [ main::i#2 main::i#1 ] -Uplifting [main] best 16469 combination zp ZP_BYTE:2 [ main::i#2 main::i#1 ] -Coalescing zero page register [ zp ZP_WORD:23 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#1 divr16u::rem#2 divr16u::rem#3 ] ] with [ zp ZP_WORD:50 [ rem16u#13 ] ] -Coalescing zero page register [ zp ZP_WORD:27 [ divr16u::quotient#3 divr16u::return#1 divr16u::quotient#1 divr16u::quotient#2 ] ] with [ zp ZP_WORD:38 [ divr16u::return#3 ] ] -Coalescing zero page register [ zp ZP_WORD:27 [ divr16u::quotient#3 divr16u::return#1 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#3 ] ] with [ zp ZP_WORD:40 [ lin16u_gen::stepf#0 ] ] -Coalescing zero page register [ zp ZP_WORD:27 [ divr16u::quotient#3 divr16u::return#1 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#3 lin16u_gen::stepf#0 ] ] with [ zp ZP_WORD:52 [ divr16u::return#0 ] ] -Coalescing zero page register [ zp ZP_WORD:27 [ divr16u::quotient#3 divr16u::return#1 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#3 lin16u_gen::stepf#0 divr16u::return#0 ] ] with [ zp ZP_WORD:54 [ div16u::return#0 ] ] -Coalescing zero page register [ zp ZP_WORD:27 [ divr16u::quotient#3 divr16u::return#1 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#3 lin16u_gen::stepf#0 divr16u::return#0 div16u::return#0 ] ] with [ zp ZP_WORD:34 [ div16u::return#2 ] ] +Uplifting [main] best 16427 combination zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +Coalescing zero page register [ zp ZP_WORD:23 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] with [ zp ZP_WORD:50 [ rem16u#1 ] ] +Coalescing zero page register [ zp ZP_WORD:27 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] ] with [ zp ZP_WORD:34 [ divr16u::return#2 ] ] +Coalescing zero page register [ zp ZP_WORD:27 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 ] ] with [ zp ZP_WORD:38 [ divr16u::return#3 ] ] +Coalescing zero page register [ zp ZP_WORD:27 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 ] ] with [ zp ZP_WORD:40 [ lin16u_gen::stepf#0 ] ] Coalescing zero page register [ zp ZP_WORD:3 [ line_cursor#9 line_cursor#19 line_cursor#1 ] ] with [ zp ZP_WORD:11 [ print_cls::sc#2 print_cls::sc#1 ] ] Coalescing zero page register [ zp ZP_WORD:3 [ line_cursor#9 line_cursor#19 line_cursor#1 print_cls::sc#2 print_cls::sc#1 ] ] with [ zp ZP_WORD:17 [ lin16u_gen::lintab#2 lin16u_gen::lintab#1 ] ] Coalescing zero page register [ zp ZP_WORD:3 [ line_cursor#9 line_cursor#19 line_cursor#1 print_cls::sc#2 print_cls::sc#1 lin16u_gen::lintab#2 lin16u_gen::lintab#1 ] ] with [ zp ZP_WORD:21 [ divr16u::divisor#6 ] ] Coalescing zero page register [ zp ZP_WORD:7 [ char_cursor#32 char_cursor#45 char_cursor#47 char_cursor#51 char_cursor#2 char_cursor#11 char_cursor#1 ] ] with [ zp ZP_WORD:19 [ lin16u_gen::i#2 lin16u_gen::i#1 ] ] -Coalescing zero page register [ zp ZP_WORD:7 [ char_cursor#32 char_cursor#45 char_cursor#47 char_cursor#51 char_cursor#2 char_cursor#11 char_cursor#1 lin16u_gen::i#2 lin16u_gen::i#1 ] ] with [ zp ZP_WORD:23 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#1 divr16u::rem#2 divr16u::rem#3 rem16u#13 ] ] -Coalescing zero page register [ zp ZP_WORD:9 [ print_str::str#2 print_str::str#0 ] ] with [ zp ZP_WORD:25 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 ] ] -Coalescing zero page register [ zp ZP_WORD:9 [ print_str::str#2 print_str::str#0 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 ] ] with [ zp ZP_WORD:30 [ print_word::w#0 ] ] -Coalescing zero page register [ zp ZP_WORD:9 [ print_str::str#2 print_str::str#0 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 print_word::w#0 ] ] with [ zp ZP_WORD:46 [ lin16u_gen::$5 ] ] -Allocated (was zp ZP_WORD:7) zp ZP_WORD:5 [ char_cursor#32 char_cursor#45 char_cursor#47 char_cursor#51 char_cursor#2 char_cursor#11 char_cursor#1 lin16u_gen::i#2 lin16u_gen::i#1 divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#1 divr16u::rem#2 divr16u::rem#3 rem16u#13 ] -Allocated (was zp ZP_WORD:9) zp ZP_WORD:7 [ print_str::str#2 print_str::str#0 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 print_word::w#0 lin16u_gen::$5 ] +Coalescing zero page register [ zp ZP_WORD:7 [ char_cursor#32 char_cursor#45 char_cursor#47 char_cursor#51 char_cursor#2 char_cursor#11 char_cursor#1 lin16u_gen::i#2 lin16u_gen::i#1 ] ] with [ zp ZP_WORD:23 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 ] ] +Coalescing zero page register [ zp ZP_WORD:9 [ print_str::str#2 print_str::str#0 ] ] with [ zp ZP_WORD:25 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] ] +Coalescing zero page register [ zp ZP_WORD:9 [ print_str::str#2 print_str::str#0 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] ] with [ zp ZP_WORD:30 [ print_word::w#0 ] ] +Coalescing zero page register [ zp ZP_WORD:9 [ print_str::str#2 print_str::str#0 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 print_word::w#0 ] ] with [ zp ZP_WORD:46 [ lin16u_gen::$5 ] ] +Allocated (was zp ZP_WORD:7) zp ZP_WORD:5 [ char_cursor#32 char_cursor#45 char_cursor#47 char_cursor#51 char_cursor#2 char_cursor#11 char_cursor#1 lin16u_gen::i#2 lin16u_gen::i#1 divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 ] +Allocated (was zp ZP_WORD:9) zp ZP_WORD:7 [ print_str::str#2 print_str::str#0 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 print_word::w#0 lin16u_gen::$5 ] Allocated (was zp ZP_DWORD:13) zp ZP_DWORD:9 [ lin16u_gen::val#2 lin16u_gen::val#1 ] -Allocated (was zp ZP_WORD:27) zp ZP_WORD:13 [ divr16u::quotient#3 divr16u::return#1 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#3 lin16u_gen::stepf#0 divr16u::return#0 div16u::return#0 div16u::return#2 ] +Allocated (was zp ZP_WORD:27) zp ZP_WORD:13 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 lin16u_gen::stepf#0 ] Allocated (was zp ZP_WORD:36) zp ZP_WORD:15 [ lin16u_gen::stepi#0 ] Allocated (was zp ZP_DWORD:42) zp ZP_DWORD:17 [ lin16u_gen::step#0 ] @@ -4071,9 +3918,9 @@ ASSEMBLER BEFORE OPTIMIZATION .pc = $80d "Program" //SEG1 Global Constants & labels .label SCREEN = $400 + .label rem16u = 5 .label char_cursor = 5 .label line_cursor = 3 - .label rem16u = 5 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @18 [phi:@begin->@18] @@ -4401,8 +4248,8 @@ print_cls: { lin16u_gen: { .const min = $22d .const max = $7461 - .label length = $14 - .label ampl = max-min + .const length = $14 + .const ampl = max-min .label _5 = 7 .label stepi = $f .label stepf = $d @@ -4410,45 +4257,60 @@ lin16u_gen: { .label val = 9 .label lintab = 3 .label i = 5 - //SEG118 [57] call div16u param-assignment [ div16u::return#0 rem16u#13 ] ( main:2::lin16u_gen:5 [ div16u::return#0 rem16u#13 ] ) - //SEG119 [91] phi from lin16u_gen to div16u [phi:lin16u_gen->div16u] - div16u_from_lin16u_gen: - jsr div16u - //SEG120 [58] (word) div16u::return#2 ← (word) div16u::return#0 [ div16u::return#2 rem16u#13 ] ( main:2::lin16u_gen:5 [ div16u::return#2 rem16u#13 ] ) - // (word) div16u::return#2 = (word) div16u::return#0 // register copy zp ZP_WORD:13 - jmp b3 - //SEG121 lin16u_gen::@3 - b3: - //SEG122 [59] (word) lin16u_gen::stepi#0 ← (word) div16u::return#2 [ lin16u_gen::stepi#0 rem16u#13 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 rem16u#13 ] ) -- vwuz1=vwuz2 - lda div16u.return - sta stepi - lda div16u.return+1 - sta stepi+1 - //SEG123 [60] (word) divr16u::rem#4 ← (word) rem16u#13 [ lin16u_gen::stepi#0 divr16u::rem#4 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 divr16u::rem#4 ] ) - // (word) divr16u::rem#4 = (word) rem16u#13 // register copy zp ZP_WORD:5 - //SEG124 [61] call divr16u param-assignment [ lin16u_gen::stepi#0 divr16u::return#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 divr16u::return#1 ] ) - //SEG125 [73] phi from lin16u_gen::@3 to divr16u [phi:lin16u_gen::@3->divr16u] - divr16u_from_b3: - //SEG126 [73] phi (word) divr16u::divisor#6 = (const word) lin16u_gen::length#0-(byte/signed byte/word/signed word/dword/signed dword) 1 [phi:lin16u_gen::@3->divr16u#0] -- vwuz1=vbuc1 + //SEG118 [57] call divr16u param-assignment [ divr16u::return#0 rem16u#1 ] ( main:2::lin16u_gen:5 [ divr16u::return#0 rem16u#1 ] ) + //SEG119 [73] phi from lin16u_gen to divr16u [phi:lin16u_gen->divr16u] + divr16u_from_lin16u_gen: + //SEG120 [73] phi (word) divr16u::divisor#6 = (const word) lin16u_gen::length#0-(byte/signed byte/word/signed word/dword/signed dword) 1 [phi:lin16u_gen->divr16u#0] -- vwuz1=vbuc1 lda #length-1 sta divr16u.divisor+1 - //SEG127 [73] phi (word) divr16u::dividend#5 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:lin16u_gen::@3->divr16u#1] -- vwuz1=vbuc1 + //SEG121 [73] phi (word) divr16u::dividend#5 = (const word) lin16u_gen::ampl#0 [phi:lin16u_gen->divr16u#1] -- vwuz1=vwuc1 + lda #ampl + sta divr16u.dividend+1 + //SEG122 [73] phi (word) divr16u::rem#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:lin16u_gen->divr16u#2] -- vwuz1=vbuc1 + lda #<0 + sta divr16u.rem + lda #>0 + sta divr16u.rem+1 + jsr divr16u + //SEG123 [58] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 rem16u#1 ] ( main:2::lin16u_gen:5 [ divr16u::return#2 rem16u#1 ] ) + // (word) divr16u::return#2 = (word) divr16u::return#0 // register copy zp ZP_WORD:13 + jmp b3 + //SEG124 lin16u_gen::@3 + b3: + //SEG125 [59] (word) lin16u_gen::stepi#0 ← (word) divr16u::return#2 [ lin16u_gen::stepi#0 rem16u#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 rem16u#1 ] ) -- vwuz1=vwuz2 + lda divr16u.return + sta stepi + lda divr16u.return+1 + sta stepi+1 + //SEG126 [60] (word) divr16u::rem#4 ← (word) rem16u#1 [ lin16u_gen::stepi#0 divr16u::rem#4 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 divr16u::rem#4 ] ) + // (word) divr16u::rem#4 = (word) rem16u#1 // register copy zp ZP_WORD:5 + //SEG127 [61] call divr16u param-assignment [ divr16u::return#0 lin16u_gen::stepi#0 ] ( main:2::lin16u_gen:5 [ divr16u::return#0 lin16u_gen::stepi#0 ] ) + //SEG128 [73] phi from lin16u_gen::@3 to divr16u [phi:lin16u_gen::@3->divr16u] + divr16u_from_b3: + //SEG129 [73] phi (word) divr16u::divisor#6 = (const word) lin16u_gen::length#0-(byte/signed byte/word/signed word/dword/signed dword) 1 [phi:lin16u_gen::@3->divr16u#0] -- vwuz1=vbuc1 + lda #length-1 + sta divr16u.divisor+1 + //SEG130 [73] phi (word) divr16u::dividend#5 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:lin16u_gen::@3->divr16u#1] -- vwuz1=vbuc1 lda #<0 sta divr16u.dividend lda #>0 sta divr16u.dividend+1 - //SEG128 [73] phi (word) divr16u::rem#10 = (word) divr16u::rem#4 [phi:lin16u_gen::@3->divr16u#2] -- register_copy + //SEG131 [73] phi (word) divr16u::rem#10 = (word) divr16u::rem#4 [phi:lin16u_gen::@3->divr16u#2] -- register_copy jsr divr16u - //SEG129 [62] (word) divr16u::return#3 ← (word) divr16u::return#1 [ lin16u_gen::stepi#0 divr16u::return#3 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 divr16u::return#3 ] ) - // (word) divr16u::return#3 = (word) divr16u::return#1 // register copy zp ZP_WORD:13 + //SEG132 [62] (word) divr16u::return#3 ← (word) divr16u::return#0 [ lin16u_gen::stepi#0 divr16u::return#3 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 divr16u::return#3 ] ) + // (word) divr16u::return#3 = (word) divr16u::return#0 // register copy zp ZP_WORD:13 jmp b4 - //SEG130 lin16u_gen::@4 + //SEG133 lin16u_gen::@4 b4: - //SEG131 [63] (word) lin16u_gen::stepf#0 ← (word) divr16u::return#3 [ lin16u_gen::stepi#0 lin16u_gen::stepf#0 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 lin16u_gen::stepf#0 ] ) + //SEG134 [63] (word) lin16u_gen::stepf#0 ← (word) divr16u::return#3 [ lin16u_gen::stepi#0 lin16u_gen::stepf#0 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 lin16u_gen::stepf#0 ] ) // (word) lin16u_gen::stepf#0 = (word) divr16u::return#3 // register copy zp ZP_WORD:13 - //SEG132 [64] (dword) lin16u_gen::step#0 ← (word) lin16u_gen::stepi#0 dw= (word) lin16u_gen::stepf#0 [ lin16u_gen::step#0 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 ] ) -- vduz1=vwuz2_dword_vwuz3 + //SEG135 [64] (dword) lin16u_gen::step#0 ← (word) lin16u_gen::stepi#0 dw= (word) lin16u_gen::stepf#0 [ lin16u_gen::step#0 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 ] ) -- vduz1=vwuz2_dword_vwuz3 lda stepi sta step+2 lda stepi+1 @@ -4457,19 +4319,19 @@ lin16u_gen: { sta step lda stepf+1 sta step+1 - //SEG133 [65] phi from lin16u_gen::@4 to lin16u_gen::@1 [phi:lin16u_gen::@4->lin16u_gen::@1] + //SEG136 [65] phi from lin16u_gen::@4 to lin16u_gen::@1 [phi:lin16u_gen::@4->lin16u_gen::@1] b1_from_b4: - //SEG134 [65] phi (word) lin16u_gen::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:lin16u_gen::@4->lin16u_gen::@1#0] -- vwuz1=vbuc1 + //SEG137 [65] phi (word) lin16u_gen::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:lin16u_gen::@4->lin16u_gen::@1#0] -- vwuz1=vbuc1 lda #<0 sta i lda #>0 sta i+1 - //SEG135 [65] phi (word*) lin16u_gen::lintab#2 = (const word[20]) main::lintab#0 [phi:lin16u_gen::@4->lin16u_gen::@1#1] -- pwuz1=pwuc1 + //SEG138 [65] phi (word*) lin16u_gen::lintab#2 = (const word[20]) main::lintab#0 [phi:lin16u_gen::@4->lin16u_gen::@1#1] -- pwuz1=pwuc1 lda #main.lintab sta lintab+1 - //SEG136 [65] phi (dword) lin16u_gen::val#2 = (const word) lin16u_gen::min#0*(dword/signed dword) 65536+(byte/signed byte/word/signed word/dword/signed dword) 0 [phi:lin16u_gen::@4->lin16u_gen::@1#2] -- vduz1=vduc1 + //SEG139 [65] phi (dword) lin16u_gen::val#2 = (const word) lin16u_gen::min#0*(dword/signed dword) 65536+(byte/signed byte/word/signed word/dword/signed dword) 0 [phi:lin16u_gen::@4->lin16u_gen::@1#2] -- vduz1=vduc1 lda #min*$10000+0 @@ -4479,27 +4341,27 @@ lin16u_gen: { lda #>min*$10000+0>>$10 sta val+3 jmp b1 - //SEG137 [65] phi from lin16u_gen::@1 to lin16u_gen::@1 [phi:lin16u_gen::@1->lin16u_gen::@1] + //SEG140 [65] phi from lin16u_gen::@1 to lin16u_gen::@1 [phi:lin16u_gen::@1->lin16u_gen::@1] b1_from_b1: - //SEG138 [65] phi (word) lin16u_gen::i#2 = (word) lin16u_gen::i#1 [phi:lin16u_gen::@1->lin16u_gen::@1#0] -- register_copy - //SEG139 [65] phi (word*) lin16u_gen::lintab#2 = (word*) lin16u_gen::lintab#1 [phi:lin16u_gen::@1->lin16u_gen::@1#1] -- register_copy - //SEG140 [65] phi (dword) lin16u_gen::val#2 = (dword) lin16u_gen::val#1 [phi:lin16u_gen::@1->lin16u_gen::@1#2] -- register_copy + //SEG141 [65] phi (word) lin16u_gen::i#2 = (word) lin16u_gen::i#1 [phi:lin16u_gen::@1->lin16u_gen::@1#0] -- register_copy + //SEG142 [65] phi (word*) lin16u_gen::lintab#2 = (word*) lin16u_gen::lintab#1 [phi:lin16u_gen::@1->lin16u_gen::@1#1] -- register_copy + //SEG143 [65] phi (dword) lin16u_gen::val#2 = (dword) lin16u_gen::val#1 [phi:lin16u_gen::@1->lin16u_gen::@1#2] -- register_copy jmp b1 - //SEG141 lin16u_gen::@1 + //SEG144 lin16u_gen::@1 b1: - //SEG142 [66] (word~) lin16u_gen::$5 ← > (dword) lin16u_gen::val#2 [ lin16u_gen::step#0 lin16u_gen::val#2 lin16u_gen::lintab#2 lin16u_gen::i#2 lin16u_gen::$5 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::val#2 lin16u_gen::lintab#2 lin16u_gen::i#2 lin16u_gen::$5 ] ) -- vwuz1=_hi_vduz2 + //SEG145 [66] (word~) lin16u_gen::$5 ← > (dword) lin16u_gen::val#2 [ lin16u_gen::step#0 lin16u_gen::val#2 lin16u_gen::lintab#2 lin16u_gen::i#2 lin16u_gen::$5 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::val#2 lin16u_gen::lintab#2 lin16u_gen::i#2 lin16u_gen::$5 ] ) -- vwuz1=_hi_vduz2 lda val+2 sta _5 lda val+3 sta _5+1 - //SEG143 [67] *((word*) lin16u_gen::lintab#2) ← (word~) lin16u_gen::$5 [ lin16u_gen::step#0 lin16u_gen::val#2 lin16u_gen::lintab#2 lin16u_gen::i#2 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::val#2 lin16u_gen::lintab#2 lin16u_gen::i#2 ] ) -- _deref_pwuz1=vwuz2 + //SEG146 [67] *((word*) lin16u_gen::lintab#2) ← (word~) lin16u_gen::$5 [ lin16u_gen::step#0 lin16u_gen::val#2 lin16u_gen::lintab#2 lin16u_gen::i#2 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::val#2 lin16u_gen::lintab#2 lin16u_gen::i#2 ] ) -- _deref_pwuz1=vwuz2 ldy #0 lda _5 sta (lintab),y iny lda _5+1 sta (lintab),y - //SEG144 [68] (dword) lin16u_gen::val#1 ← (dword) lin16u_gen::val#2 + (dword) lin16u_gen::step#0 [ lin16u_gen::step#0 lin16u_gen::lintab#2 lin16u_gen::i#2 lin16u_gen::val#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::lintab#2 lin16u_gen::i#2 lin16u_gen::val#1 ] ) -- vduz1=vduz1_plus_vduz2 + //SEG147 [68] (dword) lin16u_gen::val#1 ← (dword) lin16u_gen::val#2 + (dword) lin16u_gen::step#0 [ lin16u_gen::step#0 lin16u_gen::lintab#2 lin16u_gen::i#2 lin16u_gen::val#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::lintab#2 lin16u_gen::i#2 lin16u_gen::val#1 ] ) -- vduz1=vduz1_plus_vduz2 lda val clc adc step @@ -4513,7 +4375,7 @@ lin16u_gen: { lda val+3 adc step+3 sta val+3 - //SEG145 [69] (word*) lin16u_gen::lintab#1 ← (word*) lin16u_gen::lintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#1 ] ) -- pwuz1=pwuz1_plus_vbuc1 + //SEG148 [69] (word*) lin16u_gen::lintab#1 ← (word*) lin16u_gen::lintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#1 ] ) -- pwuz1=pwuz1_plus_vbuc1 clc lda lintab adc #<2 @@ -4521,12 +4383,12 @@ lin16u_gen: { lda lintab+1 adc #>2 sta lintab+1 - //SEG146 [70] (word) lin16u_gen::i#1 ← ++ (word) lin16u_gen::i#2 [ lin16u_gen::step#0 lin16u_gen::val#1 lin16u_gen::lintab#1 lin16u_gen::i#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::val#1 lin16u_gen::lintab#1 lin16u_gen::i#1 ] ) -- vwuz1=_inc_vwuz1 + //SEG149 [70] (word) lin16u_gen::i#1 ← ++ (word) lin16u_gen::i#2 [ lin16u_gen::step#0 lin16u_gen::val#1 lin16u_gen::lintab#1 lin16u_gen::i#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::val#1 lin16u_gen::lintab#1 lin16u_gen::i#1 ] ) -- vwuz1=_inc_vwuz1 inc i bne !+ inc i+1 !: - //SEG147 [71] if((word) lin16u_gen::i#1<(const word) lin16u_gen::length#0) goto lin16u_gen::@1 [ lin16u_gen::step#0 lin16u_gen::val#1 lin16u_gen::lintab#1 lin16u_gen::i#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::val#1 lin16u_gen::lintab#1 lin16u_gen::i#1 ] ) -- vwuz1_lt_vwuc1_then_la1 + //SEG150 [71] if((word) lin16u_gen::i#1<(const word) lin16u_gen::length#0) goto lin16u_gen::@1 [ lin16u_gen::step#0 lin16u_gen::val#1 lin16u_gen::lintab#1 lin16u_gen::i#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::val#1 lin16u_gen::lintab#1 lin16u_gen::i#1 ] ) -- vwuz1_lt_vwuc1_then_la1 lda i+1 cmp #>length bcc b1_from_b1 @@ -4536,70 +4398,70 @@ lin16u_gen: { bcc b1_from_b1 !: jmp breturn - //SEG148 lin16u_gen::@return + //SEG151 lin16u_gen::@return breturn: - //SEG149 [72] return [ ] ( main:2::lin16u_gen:5 [ ] ) + //SEG152 [72] return [ ] ( main:2::lin16u_gen:5 [ ] ) rts } -//SEG150 divr16u +//SEG153 divr16u divr16u: { - .label return = $d .label rem = 5 .label dividend = 7 .label quotient = $d + .label return = $d .label divisor = 3 - //SEG151 [74] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] + //SEG154 [74] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] b1_from_divr16u: - //SEG152 [74] phi (byte) divr16u::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 + //SEG155 [74] phi (byte) divr16u::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 ldx #0 - //SEG153 [74] phi (word) divr16u::quotient#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + //SEG156 [74] phi (word) divr16u::quotient#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 lda #<0 sta quotient lda #>0 sta quotient+1 - //SEG154 [74] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy - //SEG155 [74] phi (word) divr16u::rem#5 = (word) divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy + //SEG157 [74] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy + //SEG158 [74] phi (word) divr16u::rem#5 = (word) divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy jmp b1 - //SEG156 [74] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] + //SEG159 [74] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] b1_from_b3: - //SEG157 [74] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy - //SEG158 [74] phi (word) divr16u::quotient#3 = (word) divr16u::return#1 [phi:divr16u::@3->divr16u::@1#1] -- register_copy - //SEG159 [74] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#1 [phi:divr16u::@3->divr16u::@1#2] -- register_copy - //SEG160 [74] phi (word) divr16u::rem#5 = (word) divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy + //SEG160 [74] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy + //SEG161 [74] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy + //SEG162 [74] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy + //SEG163 [74] phi (word) divr16u::rem#5 = (word) divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy jmp b1 - //SEG161 divr16u::@1 + //SEG164 divr16u::@1 b1: - //SEG162 [75] (word) divr16u::rem#1 ← (word) divr16u::rem#5 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) -- vwuz1=vwuz1_rol_1 + //SEG165 [75] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ) -- vwuz1=vwuz1_rol_1 asl rem rol rem+1 - //SEG163 [76] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$1 ] ) -- vbuaa=_hi_vwuz1 + //SEG166 [76] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) -- vbuaa=_hi_vwuz1 lda dividend+1 - //SEG164 [77] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$2 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$2 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$2 ] ) -- vbuaa=vbuaa_band_vbuc1 + //SEG167 [77] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ) -- vbuaa=vbuaa_band_vbuc1 and #$80 - //SEG165 [78] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) -- vbuaa_eq_0_then_la1 + //SEG168 [78] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ) -- vbuaa_eq_0_then_la1 cmp #0 beq b2_from_b1 jmp b4 - //SEG166 divr16u::@4 + //SEG169 divr16u::@4 b4: - //SEG167 [79] (word) divr16u::rem#2 ← (word) divr16u::rem#1 | (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#2 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#2 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#2 ] ) -- vwuz1=vwuz1_bor_vbuc1 + //SEG170 [79] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) -- vwuz1=vwuz1_bor_vbuc1 lda #1 ora rem sta rem - //SEG168 [80] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] + //SEG171 [80] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] b2_from_b1: b2_from_b4: - //SEG169 [80] phi (word) divr16u::rem#6 = (word) divr16u::rem#1 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy + //SEG172 [80] phi (word) divr16u::rem#6 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy jmp b2 - //SEG170 divr16u::@2 + //SEG173 divr16u::@2 b2: - //SEG171 [81] (word) divr16u::dividend#1 ← (word) divr16u::dividend#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#6 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 ] ) -- vwuz1=vwuz1_rol_1 + //SEG174 [81] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#6 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 ] ) -- vwuz1=vwuz1_rol_1 asl dividend rol dividend+1 - //SEG172 [82] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#1 ] ) -- vwuz1=vwuz1_rol_1 + //SEG175 [82] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ) -- vwuz1=vwuz1_rol_1 asl quotient rol quotient+1 - //SEG173 [83] if((word) divr16u::rem#6<(word) divr16u::divisor#6) goto divr16u::@3 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#1 ] ) -- vwuz1_lt_vwuz2_then_la1 + //SEG176 [83] if((word) divr16u::rem#6<(word) divr16u::divisor#6) goto divr16u::@3 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ) -- vwuz1_lt_vwuz2_then_la1 lda rem+1 cmp divisor+1 bcc b3_from_b2 @@ -4609,14 +4471,14 @@ divr16u: { bcc b3_from_b2 !: jmp b5 - //SEG174 divr16u::@5 + //SEG177 divr16u::@5 b5: - //SEG175 [84] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#2 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#2 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#2 ] ) -- vwuz1=_inc_vwuz1 + //SEG178 [84] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#2 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#2 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#2 ] ) -- vwuz1=_inc_vwuz1 inc quotient bne !+ inc quotient+1 !: - //SEG176 [85] (word) divr16u::rem#3 ← (word) divr16u::rem#6 - (word) divr16u::divisor#6 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::quotient#2 divr16u::rem#3 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::quotient#2 divr16u::rem#3 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::quotient#2 divr16u::rem#3 ] ) -- vwuz1=vwuz1_minus_vwuz2 + //SEG179 [85] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (word) divr16u::divisor#6 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) -- vwuz1=vwuz1_minus_vwuz2 lda rem sec sbc divisor @@ -4624,64 +4486,28 @@ divr16u: { lda rem+1 sbc divisor+1 sta rem+1 - //SEG177 [86] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] + //SEG180 [86] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] b3_from_b2: b3_from_b5: - //SEG178 [86] phi (word) divr16u::return#1 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy - //SEG179 [86] phi (word) divr16u::rem#11 = (word) divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy + //SEG181 [86] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy + //SEG182 [86] phi (word) divr16u::rem#11 = (word) divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy jmp b3 - //SEG180 divr16u::@3 + //SEG183 divr16u::@3 b3: - //SEG181 [87] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::return#1 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#1 divr16u::i#1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::return#1 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#1 divr16u::i#1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::return#1 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#1 divr16u::i#1 ] ) -- vbuxx=_inc_vbuxx + //SEG184 [87] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::return#0 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#0 divr16u::i#1 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::return#0 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#0 divr16u::i#1 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::return#0 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#0 divr16u::i#1 ] ) -- vbuxx=_inc_vbuxx inx - //SEG182 [88] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::return#1 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#1 divr16u::i#1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::return#1 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#1 divr16u::i#1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::return#1 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#1 divr16u::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1 + //SEG185 [88] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::return#0 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#0 divr16u::i#1 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::return#0 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#0 divr16u::i#1 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::return#0 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#0 divr16u::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1 cpx #$10 bne b1_from_b3 jmp b6 - //SEG183 divr16u::@6 + //SEG186 divr16u::@6 b6: - //SEG184 [89] (word) rem16u#13 ← (word) divr16u::rem#11 [ rem16u#13 divr16u::return#1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 rem16u#13 divr16u::return#1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ rem16u#13 divr16u::return#1 ] ) - // (word) rem16u#13 = (word) divr16u::rem#11 // register copy zp ZP_WORD:5 + //SEG187 [89] (word) rem16u#1 ← (word) divr16u::rem#11 [ divr16u::return#0 rem16u#1 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::return#0 rem16u#1 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::return#0 rem16u#1 ] ) + // (word) rem16u#1 = (word) divr16u::rem#11 // register copy zp ZP_WORD:5 jmp breturn - //SEG185 divr16u::@return + //SEG188 divr16u::@return breturn: - //SEG186 [90] return [ rem16u#13 divr16u::return#1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 rem16u#13 divr16u::return#1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ rem16u#13 divr16u::return#1 ] ) - rts -} -//SEG187 div16u -div16u: { - .const divisor = lin16u_gen.length-1 - .label return = $d - //SEG188 [92] call divr16u param-assignment [ rem16u#13 divr16u::return#1 ] ( main:2::lin16u_gen:5::div16u:57 [ rem16u#13 divr16u::return#1 ] ) - //SEG189 [73] phi from div16u to divr16u [phi:div16u->divr16u] - divr16u_from_div16u: - //SEG190 [73] phi (word) divr16u::divisor#6 = (const word) div16u::divisor#0 [phi:div16u->divr16u#0] -- vwuz1=vwuc1 - lda #divisor - sta divr16u.divisor+1 - //SEG191 [73] phi (word) divr16u::dividend#5 = (const word) lin16u_gen::ampl#0 [phi:div16u->divr16u#1] -- vwuz1=vwuc1 - lda #lin16u_gen.ampl - sta divr16u.dividend+1 - //SEG192 [73] phi (word) divr16u::rem#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:div16u->divr16u#2] -- vwuz1=vbuc1 - lda #<0 - sta divr16u.rem - lda #>0 - sta divr16u.rem+1 - jsr divr16u - //SEG193 [93] (word) divr16u::return#0 ← (word) divr16u::return#1 [ rem16u#13 divr16u::return#0 ] ( main:2::lin16u_gen:5::div16u:57 [ rem16u#13 divr16u::return#0 ] ) - // (word) divr16u::return#0 = (word) divr16u::return#1 // register copy zp ZP_WORD:13 - jmp b2 - //SEG194 div16u::@2 - b2: - //SEG195 [94] (word) div16u::return#0 ← (word) divr16u::return#0 [ div16u::return#0 rem16u#13 ] ( main:2::lin16u_gen:5::div16u:57 [ div16u::return#0 rem16u#13 ] ) - // (word) div16u::return#0 = (word) divr16u::return#0 // register copy zp ZP_WORD:13 - jmp breturn - //SEG196 div16u::@return - breturn: - //SEG197 [95] return [ div16u::return#0 rem16u#13 ] ( main:2::lin16u_gen:5::div16u:57 [ div16u::return#0 rem16u#13 ] ) + //SEG189 [90] return [ divr16u::return#0 rem16u#1 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::return#0 rem16u#1 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::return#0 rem16u#1 ] ) rts } @@ -4717,15 +4543,13 @@ Removing instruction jmp b5 Removing instruction jmp b3 Removing instruction jmp b6 Removing instruction jmp breturn -Removing instruction jmp b2 -Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction lda i Removing instruction ldy #0 Removing instruction lda #>0 Removing instruction lda #>0 -Replacing instruction lda #<0 with TXA Removing instruction lda #>0 +Replacing instruction lda #<0 with TXA Removing instruction lda #>0 Succesful ASM optimization Pass5UnnecesaryLoadElimination Replacing label b1_from_b1 with b1 @@ -4785,7 +4609,7 @@ Removing instruction breturn: Removing instruction b1_from_b2: Removing instruction b1_from_print_cls: Removing instruction breturn: -Removing instruction div16u_from_lin16u_gen: +Removing instruction divr16u_from_lin16u_gen: Removing instruction b3: Removing instruction divr16u_from_b3: Removing instruction b4: @@ -4796,9 +4620,6 @@ Removing instruction b4: Removing instruction b5: Removing instruction b6: Removing instruction breturn: -Removing instruction divr16u_from_div16u: -Removing instruction b2: -Removing instruction breturn: Succesful ASM optimization Pass5UnusedLabelElimination Removing instruction jmp b1 Removing instruction jmp b1 @@ -4819,15 +4640,6 @@ FINAL SYMBOL TABLE (byte*) char_cursor#45 char_cursor zp ZP_WORD:5 5.666666666666667 (byte*) char_cursor#47 char_cursor zp ZP_WORD:5 11.0 (byte*~) char_cursor#51 char_cursor zp ZP_WORD:5 22.0 -(word()) div16u((word) div16u::dividend , (word) div16u::divisor) -(label) div16u::@2 -(label) div16u::@return -(word) div16u::dividend -(word) div16u::divisor -(const word) div16u::divisor#0 divisor = (const word) lin16u_gen::length#0-(byte/signed byte/word/signed word/dword/signed dword) 1 -(word) div16u::return -(word) div16u::return#0 return zp ZP_WORD:13 1.3333333333333333 -(word) div16u::return#2 return zp ZP_WORD:13 4.0 (word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem) (byte~) divr16u::$1 reg byte a 22.0 (byte~) divr16u::$2 reg byte a 22.0 @@ -4839,7 +4651,7 @@ FINAL SYMBOL TABLE (label) divr16u::@6 (label) divr16u::@return (word) divr16u::dividend -(word) divr16u::dividend#1 dividend zp ZP_WORD:7 2.75 +(word) divr16u::dividend#0 dividend zp ZP_WORD:7 2.75 (word) divr16u::dividend#3 dividend zp ZP_WORD:7 5.0 (word) divr16u::dividend#5 dividend zp ZP_WORD:7 2.0 (word) divr16u::divisor @@ -4852,17 +4664,17 @@ FINAL SYMBOL TABLE (word) divr16u::quotient#2 quotient zp ZP_WORD:13 11.0 (word) divr16u::quotient#3 quotient zp ZP_WORD:13 2.75 (word) divr16u::rem -(word) divr16u::rem#1 rem zp ZP_WORD:5 8.25 +(word) divr16u::rem#0 rem zp ZP_WORD:5 8.25 +(word) divr16u::rem#1 rem zp ZP_WORD:5 22.0 (word) divr16u::rem#10 rem zp ZP_WORD:5 4.0 (word) divr16u::rem#11 rem zp ZP_WORD:5 11.666666666666666 (word) divr16u::rem#2 rem zp ZP_WORD:5 22.0 -(word) divr16u::rem#3 rem zp ZP_WORD:5 22.0 (word) divr16u::rem#4 rem zp ZP_WORD:5 4.0 (word) divr16u::rem#5 rem zp ZP_WORD:5 24.0 (word) divr16u::rem#6 rem zp ZP_WORD:5 11.0 (word) divr16u::return -(word) divr16u::return#0 return zp ZP_WORD:13 4.0 -(word) divr16u::return#1 return zp ZP_WORD:13 5.285714285714286 +(word) divr16u::return#0 return zp ZP_WORD:13 5.285714285714286 +(word) divr16u::return#2 return zp ZP_WORD:13 4.0 (word) divr16u::return#3 return zp ZP_WORD:13 4.0 (void()) lin16u_gen((word) lin16u_gen::min , (word) lin16u_gen::max , (word*) lin16u_gen::lintab , (word) lin16u_gen::length) (word~) lin16u_gen::$5 $5 zp ZP_WORD:7 22.0 @@ -4952,16 +4764,16 @@ FINAL SYMBOL TABLE (word) print_word::w (word) print_word::w#0 w zp ZP_WORD:7 5.0 (word) rem16u -(word) rem16u#13 rem16u zp ZP_WORD:5 0.4444444444444444 +(word) rem16u#1 rem16u zp ZP_WORD:5 0.8 zp ZP_BYTE:2 [ main::i#2 main::i#1 ] zp ZP_WORD:3 [ line_cursor#9 line_cursor#19 line_cursor#1 print_cls::sc#2 print_cls::sc#1 lin16u_gen::lintab#2 lin16u_gen::lintab#1 divr16u::divisor#6 ] reg byte x [ print_byte::b#3 print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] -zp ZP_WORD:5 [ char_cursor#32 char_cursor#45 char_cursor#47 char_cursor#51 char_cursor#2 char_cursor#11 char_cursor#1 lin16u_gen::i#2 lin16u_gen::i#1 divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#1 divr16u::rem#2 divr16u::rem#3 rem16u#13 ] -zp ZP_WORD:7 [ print_str::str#2 print_str::str#0 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 print_word::w#0 lin16u_gen::$5 ] +zp ZP_WORD:5 [ char_cursor#32 char_cursor#45 char_cursor#47 char_cursor#51 char_cursor#2 char_cursor#11 char_cursor#1 lin16u_gen::i#2 lin16u_gen::i#1 divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 ] +zp ZP_WORD:7 [ print_str::str#2 print_str::str#0 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 print_word::w#0 lin16u_gen::$5 ] zp ZP_DWORD:9 [ lin16u_gen::val#2 lin16u_gen::val#1 ] -zp ZP_WORD:13 [ divr16u::quotient#3 divr16u::return#1 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#3 lin16u_gen::stepf#0 divr16u::return#0 div16u::return#0 div16u::return#2 ] +zp ZP_WORD:13 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 lin16u_gen::stepf#0 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ] @@ -4972,7 +4784,7 @@ reg byte a [ divr16u::$2 ] FINAL ASSEMBLER -Score: 14356 +Score: 14344 //SEG0 Basic Upstart .pc = $801 "Basic" @@ -4980,9 +4792,9 @@ Score: 14356 .pc = $80d "Program" //SEG1 Global Constants & labels .label SCREEN = $400 + .label rem16u = 5 .label char_cursor = 5 .label line_cursor = 3 - .label rem16u = 5 //SEG2 @begin //SEG3 [1] phi from @begin to @18 [phi:@begin->@18] //SEG4 @18 @@ -5247,8 +5059,8 @@ print_cls: { lin16u_gen: { .const min = $22d .const max = $7461 - .label length = $14 - .label ampl = max-min + .const length = $14 + .const ampl = max-min .label _5 = 7 .label stepi = $f .label stepf = $d @@ -5256,38 +5068,52 @@ lin16u_gen: { .label val = 9 .label lintab = 3 .label i = 5 - //SEG118 [57] call div16u param-assignment [ div16u::return#0 rem16u#13 ] ( main:2::lin16u_gen:5 [ div16u::return#0 rem16u#13 ] ) - //SEG119 [91] phi from lin16u_gen to div16u [phi:lin16u_gen->div16u] - jsr div16u - //SEG120 [58] (word) div16u::return#2 ← (word) div16u::return#0 [ div16u::return#2 rem16u#13 ] ( main:2::lin16u_gen:5 [ div16u::return#2 rem16u#13 ] ) - // (word) div16u::return#2 = (word) div16u::return#0 // register copy zp ZP_WORD:13 - //SEG121 lin16u_gen::@3 - //SEG122 [59] (word) lin16u_gen::stepi#0 ← (word) div16u::return#2 [ lin16u_gen::stepi#0 rem16u#13 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 rem16u#13 ] ) -- vwuz1=vwuz2 - lda div16u.return - sta stepi - lda div16u.return+1 - sta stepi+1 - //SEG123 [60] (word) divr16u::rem#4 ← (word) rem16u#13 [ lin16u_gen::stepi#0 divr16u::rem#4 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 divr16u::rem#4 ] ) - // (word) divr16u::rem#4 = (word) rem16u#13 // register copy zp ZP_WORD:5 - //SEG124 [61] call divr16u param-assignment [ lin16u_gen::stepi#0 divr16u::return#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 divr16u::return#1 ] ) - //SEG125 [73] phi from lin16u_gen::@3 to divr16u [phi:lin16u_gen::@3->divr16u] - //SEG126 [73] phi (word) divr16u::divisor#6 = (const word) lin16u_gen::length#0-(byte/signed byte/word/signed word/dword/signed dword) 1 [phi:lin16u_gen::@3->divr16u#0] -- vwuz1=vbuc1 + //SEG118 [57] call divr16u param-assignment [ divr16u::return#0 rem16u#1 ] ( main:2::lin16u_gen:5 [ divr16u::return#0 rem16u#1 ] ) + //SEG119 [73] phi from lin16u_gen to divr16u [phi:lin16u_gen->divr16u] + //SEG120 [73] phi (word) divr16u::divisor#6 = (const word) lin16u_gen::length#0-(byte/signed byte/word/signed word/dword/signed dword) 1 [phi:lin16u_gen->divr16u#0] -- vwuz1=vbuc1 lda #length-1 sta divr16u.divisor+1 - //SEG127 [73] phi (word) divr16u::dividend#5 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:lin16u_gen::@3->divr16u#1] -- vwuz1=vbuc1 + //SEG121 [73] phi (word) divr16u::dividend#5 = (const word) lin16u_gen::ampl#0 [phi:lin16u_gen->divr16u#1] -- vwuz1=vwuc1 + lda #ampl + sta divr16u.dividend+1 + //SEG122 [73] phi (word) divr16u::rem#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:lin16u_gen->divr16u#2] -- vwuz1=vbuc1 + lda #<0 + sta divr16u.rem + sta divr16u.rem+1 + jsr divr16u + //SEG123 [58] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 rem16u#1 ] ( main:2::lin16u_gen:5 [ divr16u::return#2 rem16u#1 ] ) + // (word) divr16u::return#2 = (word) divr16u::return#0 // register copy zp ZP_WORD:13 + //SEG124 lin16u_gen::@3 + //SEG125 [59] (word) lin16u_gen::stepi#0 ← (word) divr16u::return#2 [ lin16u_gen::stepi#0 rem16u#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 rem16u#1 ] ) -- vwuz1=vwuz2 + lda divr16u.return + sta stepi + lda divr16u.return+1 + sta stepi+1 + //SEG126 [60] (word) divr16u::rem#4 ← (word) rem16u#1 [ lin16u_gen::stepi#0 divr16u::rem#4 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 divr16u::rem#4 ] ) + // (word) divr16u::rem#4 = (word) rem16u#1 // register copy zp ZP_WORD:5 + //SEG127 [61] call divr16u param-assignment [ divr16u::return#0 lin16u_gen::stepi#0 ] ( main:2::lin16u_gen:5 [ divr16u::return#0 lin16u_gen::stepi#0 ] ) + //SEG128 [73] phi from lin16u_gen::@3 to divr16u [phi:lin16u_gen::@3->divr16u] + //SEG129 [73] phi (word) divr16u::divisor#6 = (const word) lin16u_gen::length#0-(byte/signed byte/word/signed word/dword/signed dword) 1 [phi:lin16u_gen::@3->divr16u#0] -- vwuz1=vbuc1 + lda #length-1 + sta divr16u.divisor+1 + //SEG130 [73] phi (word) divr16u::dividend#5 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:lin16u_gen::@3->divr16u#1] -- vwuz1=vbuc1 lda #<0 sta divr16u.dividend sta divr16u.dividend+1 - //SEG128 [73] phi (word) divr16u::rem#10 = (word) divr16u::rem#4 [phi:lin16u_gen::@3->divr16u#2] -- register_copy + //SEG131 [73] phi (word) divr16u::rem#10 = (word) divr16u::rem#4 [phi:lin16u_gen::@3->divr16u#2] -- register_copy jsr divr16u - //SEG129 [62] (word) divr16u::return#3 ← (word) divr16u::return#1 [ lin16u_gen::stepi#0 divr16u::return#3 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 divr16u::return#3 ] ) - // (word) divr16u::return#3 = (word) divr16u::return#1 // register copy zp ZP_WORD:13 - //SEG130 lin16u_gen::@4 - //SEG131 [63] (word) lin16u_gen::stepf#0 ← (word) divr16u::return#3 [ lin16u_gen::stepi#0 lin16u_gen::stepf#0 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 lin16u_gen::stepf#0 ] ) + //SEG132 [62] (word) divr16u::return#3 ← (word) divr16u::return#0 [ lin16u_gen::stepi#0 divr16u::return#3 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 divr16u::return#3 ] ) + // (word) divr16u::return#3 = (word) divr16u::return#0 // register copy zp ZP_WORD:13 + //SEG133 lin16u_gen::@4 + //SEG134 [63] (word) lin16u_gen::stepf#0 ← (word) divr16u::return#3 [ lin16u_gen::stepi#0 lin16u_gen::stepf#0 ] ( main:2::lin16u_gen:5 [ lin16u_gen::stepi#0 lin16u_gen::stepf#0 ] ) // (word) lin16u_gen::stepf#0 = (word) divr16u::return#3 // register copy zp ZP_WORD:13 - //SEG132 [64] (dword) lin16u_gen::step#0 ← (word) lin16u_gen::stepi#0 dw= (word) lin16u_gen::stepf#0 [ lin16u_gen::step#0 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 ] ) -- vduz1=vwuz2_dword_vwuz3 + //SEG135 [64] (dword) lin16u_gen::step#0 ← (word) lin16u_gen::stepi#0 dw= (word) lin16u_gen::stepf#0 [ lin16u_gen::step#0 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 ] ) -- vduz1=vwuz2_dword_vwuz3 lda stepi sta step+2 lda stepi+1 @@ -5296,17 +5122,17 @@ lin16u_gen: { sta step lda stepf+1 sta step+1 - //SEG133 [65] phi from lin16u_gen::@4 to lin16u_gen::@1 [phi:lin16u_gen::@4->lin16u_gen::@1] - //SEG134 [65] phi (word) lin16u_gen::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:lin16u_gen::@4->lin16u_gen::@1#0] -- vwuz1=vbuc1 + //SEG136 [65] phi from lin16u_gen::@4 to lin16u_gen::@1 [phi:lin16u_gen::@4->lin16u_gen::@1] + //SEG137 [65] phi (word) lin16u_gen::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:lin16u_gen::@4->lin16u_gen::@1#0] -- vwuz1=vbuc1 lda #<0 sta i sta i+1 - //SEG135 [65] phi (word*) lin16u_gen::lintab#2 = (const word[20]) main::lintab#0 [phi:lin16u_gen::@4->lin16u_gen::@1#1] -- pwuz1=pwuc1 + //SEG138 [65] phi (word*) lin16u_gen::lintab#2 = (const word[20]) main::lintab#0 [phi:lin16u_gen::@4->lin16u_gen::@1#1] -- pwuz1=pwuc1 lda #main.lintab sta lintab+1 - //SEG136 [65] phi (dword) lin16u_gen::val#2 = (const word) lin16u_gen::min#0*(dword/signed dword) 65536+(byte/signed byte/word/signed word/dword/signed dword) 0 [phi:lin16u_gen::@4->lin16u_gen::@1#2] -- vduz1=vduc1 + //SEG139 [65] phi (dword) lin16u_gen::val#2 = (const word) lin16u_gen::min#0*(dword/signed dword) 65536+(byte/signed byte/word/signed word/dword/signed dword) 0 [phi:lin16u_gen::@4->lin16u_gen::@1#2] -- vduz1=vduc1 lda #min*$10000+0 @@ -5315,25 +5141,25 @@ lin16u_gen: { sta val+2 lda #>min*$10000+0>>$10 sta val+3 - //SEG137 [65] phi from lin16u_gen::@1 to lin16u_gen::@1 [phi:lin16u_gen::@1->lin16u_gen::@1] - //SEG138 [65] phi (word) lin16u_gen::i#2 = (word) lin16u_gen::i#1 [phi:lin16u_gen::@1->lin16u_gen::@1#0] -- register_copy - //SEG139 [65] phi (word*) lin16u_gen::lintab#2 = (word*) lin16u_gen::lintab#1 [phi:lin16u_gen::@1->lin16u_gen::@1#1] -- register_copy - //SEG140 [65] phi (dword) lin16u_gen::val#2 = (dword) lin16u_gen::val#1 [phi:lin16u_gen::@1->lin16u_gen::@1#2] -- register_copy - //SEG141 lin16u_gen::@1 + //SEG140 [65] phi from lin16u_gen::@1 to lin16u_gen::@1 [phi:lin16u_gen::@1->lin16u_gen::@1] + //SEG141 [65] phi (word) lin16u_gen::i#2 = (word) lin16u_gen::i#1 [phi:lin16u_gen::@1->lin16u_gen::@1#0] -- register_copy + //SEG142 [65] phi (word*) lin16u_gen::lintab#2 = (word*) lin16u_gen::lintab#1 [phi:lin16u_gen::@1->lin16u_gen::@1#1] -- register_copy + //SEG143 [65] phi (dword) lin16u_gen::val#2 = (dword) lin16u_gen::val#1 [phi:lin16u_gen::@1->lin16u_gen::@1#2] -- register_copy + //SEG144 lin16u_gen::@1 b1: - //SEG142 [66] (word~) lin16u_gen::$5 ← > (dword) lin16u_gen::val#2 [ lin16u_gen::step#0 lin16u_gen::val#2 lin16u_gen::lintab#2 lin16u_gen::i#2 lin16u_gen::$5 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::val#2 lin16u_gen::lintab#2 lin16u_gen::i#2 lin16u_gen::$5 ] ) -- vwuz1=_hi_vduz2 + //SEG145 [66] (word~) lin16u_gen::$5 ← > (dword) lin16u_gen::val#2 [ lin16u_gen::step#0 lin16u_gen::val#2 lin16u_gen::lintab#2 lin16u_gen::i#2 lin16u_gen::$5 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::val#2 lin16u_gen::lintab#2 lin16u_gen::i#2 lin16u_gen::$5 ] ) -- vwuz1=_hi_vduz2 lda val+2 sta _5 lda val+3 sta _5+1 - //SEG143 [67] *((word*) lin16u_gen::lintab#2) ← (word~) lin16u_gen::$5 [ lin16u_gen::step#0 lin16u_gen::val#2 lin16u_gen::lintab#2 lin16u_gen::i#2 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::val#2 lin16u_gen::lintab#2 lin16u_gen::i#2 ] ) -- _deref_pwuz1=vwuz2 + //SEG146 [67] *((word*) lin16u_gen::lintab#2) ← (word~) lin16u_gen::$5 [ lin16u_gen::step#0 lin16u_gen::val#2 lin16u_gen::lintab#2 lin16u_gen::i#2 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::val#2 lin16u_gen::lintab#2 lin16u_gen::i#2 ] ) -- _deref_pwuz1=vwuz2 ldy #0 lda _5 sta (lintab),y iny lda _5+1 sta (lintab),y - //SEG144 [68] (dword) lin16u_gen::val#1 ← (dword) lin16u_gen::val#2 + (dword) lin16u_gen::step#0 [ lin16u_gen::step#0 lin16u_gen::lintab#2 lin16u_gen::i#2 lin16u_gen::val#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::lintab#2 lin16u_gen::i#2 lin16u_gen::val#1 ] ) -- vduz1=vduz1_plus_vduz2 + //SEG147 [68] (dword) lin16u_gen::val#1 ← (dword) lin16u_gen::val#2 + (dword) lin16u_gen::step#0 [ lin16u_gen::step#0 lin16u_gen::lintab#2 lin16u_gen::i#2 lin16u_gen::val#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::lintab#2 lin16u_gen::i#2 lin16u_gen::val#1 ] ) -- vduz1=vduz1_plus_vduz2 lda val clc adc step @@ -5347,7 +5173,7 @@ lin16u_gen: { lda val+3 adc step+3 sta val+3 - //SEG145 [69] (word*) lin16u_gen::lintab#1 ← (word*) lin16u_gen::lintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#1 ] ) -- pwuz1=pwuz1_plus_vbuc1 + //SEG148 [69] (word*) lin16u_gen::lintab#1 ← (word*) lin16u_gen::lintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::i#2 lin16u_gen::val#1 lin16u_gen::lintab#1 ] ) -- pwuz1=pwuz1_plus_vbuc1 clc lda lintab adc #<2 @@ -5355,12 +5181,12 @@ lin16u_gen: { lda lintab+1 adc #>2 sta lintab+1 - //SEG146 [70] (word) lin16u_gen::i#1 ← ++ (word) lin16u_gen::i#2 [ lin16u_gen::step#0 lin16u_gen::val#1 lin16u_gen::lintab#1 lin16u_gen::i#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::val#1 lin16u_gen::lintab#1 lin16u_gen::i#1 ] ) -- vwuz1=_inc_vwuz1 + //SEG149 [70] (word) lin16u_gen::i#1 ← ++ (word) lin16u_gen::i#2 [ lin16u_gen::step#0 lin16u_gen::val#1 lin16u_gen::lintab#1 lin16u_gen::i#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::val#1 lin16u_gen::lintab#1 lin16u_gen::i#1 ] ) -- vwuz1=_inc_vwuz1 inc i bne !+ inc i+1 !: - //SEG147 [71] if((word) lin16u_gen::i#1<(const word) lin16u_gen::length#0) goto lin16u_gen::@1 [ lin16u_gen::step#0 lin16u_gen::val#1 lin16u_gen::lintab#1 lin16u_gen::i#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::val#1 lin16u_gen::lintab#1 lin16u_gen::i#1 ] ) -- vwuz1_lt_vwuc1_then_la1 + //SEG150 [71] if((word) lin16u_gen::i#1<(const word) lin16u_gen::length#0) goto lin16u_gen::@1 [ lin16u_gen::step#0 lin16u_gen::val#1 lin16u_gen::lintab#1 lin16u_gen::i#1 ] ( main:2::lin16u_gen:5 [ lin16u_gen::step#0 lin16u_gen::val#1 lin16u_gen::lintab#1 lin16u_gen::i#1 ] ) -- vwuz1_lt_vwuc1_then_la1 lda i+1 cmp #>length bcc b1 @@ -5369,59 +5195,59 @@ lin16u_gen: { cmp #divr16u::@1] - //SEG152 [74] phi (byte) divr16u::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 + //SEG154 [74] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] + //SEG155 [74] phi (byte) divr16u::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 ldx #0 - //SEG153 [74] phi (word) divr16u::quotient#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + //SEG156 [74] phi (word) divr16u::quotient#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 txa sta quotient sta quotient+1 - //SEG154 [74] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy - //SEG155 [74] phi (word) divr16u::rem#5 = (word) divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy - //SEG156 [74] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] - //SEG157 [74] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy - //SEG158 [74] phi (word) divr16u::quotient#3 = (word) divr16u::return#1 [phi:divr16u::@3->divr16u::@1#1] -- register_copy - //SEG159 [74] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#1 [phi:divr16u::@3->divr16u::@1#2] -- register_copy - //SEG160 [74] phi (word) divr16u::rem#5 = (word) divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy - //SEG161 divr16u::@1 + //SEG157 [74] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy + //SEG158 [74] phi (word) divr16u::rem#5 = (word) divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy + //SEG159 [74] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] + //SEG160 [74] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy + //SEG161 [74] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy + //SEG162 [74] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy + //SEG163 [74] phi (word) divr16u::rem#5 = (word) divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy + //SEG164 divr16u::@1 b1: - //SEG162 [75] (word) divr16u::rem#1 ← (word) divr16u::rem#5 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) -- vwuz1=vwuz1_rol_1 + //SEG165 [75] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ) -- vwuz1=vwuz1_rol_1 asl rem rol rem+1 - //SEG163 [76] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$1 ] ) -- vbuaa=_hi_vwuz1 + //SEG166 [76] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) -- vbuaa=_hi_vwuz1 lda dividend+1 - //SEG164 [77] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$2 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$2 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$2 ] ) -- vbuaa=vbuaa_band_vbuc1 + //SEG167 [77] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ) -- vbuaa=vbuaa_band_vbuc1 and #$80 - //SEG165 [78] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) -- vbuaa_eq_0_then_la1 + //SEG168 [78] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ) -- vbuaa_eq_0_then_la1 cmp #0 beq b2 - //SEG166 divr16u::@4 - //SEG167 [79] (word) divr16u::rem#2 ← (word) divr16u::rem#1 | (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#2 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#2 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#2 ] ) -- vwuz1=vwuz1_bor_vbuc1 + //SEG169 divr16u::@4 + //SEG170 [79] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) -- vwuz1=vwuz1_bor_vbuc1 lda #1 ora rem sta rem - //SEG168 [80] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] - //SEG169 [80] phi (word) divr16u::rem#6 = (word) divr16u::rem#1 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy - //SEG170 divr16u::@2 + //SEG171 [80] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] + //SEG172 [80] phi (word) divr16u::rem#6 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy + //SEG173 divr16u::@2 b2: - //SEG171 [81] (word) divr16u::dividend#1 ← (word) divr16u::dividend#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#6 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 ] ) -- vwuz1=vwuz1_rol_1 + //SEG174 [81] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#6 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 ] ) -- vwuz1=vwuz1_rol_1 asl dividend rol dividend+1 - //SEG172 [82] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#1 ] ) -- vwuz1=vwuz1_rol_1 + //SEG175 [82] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ) -- vwuz1=vwuz1_rol_1 asl quotient rol quotient+1 - //SEG173 [83] if((word) divr16u::rem#6<(word) divr16u::divisor#6) goto divr16u::@3 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#1 ] ) -- vwuz1_lt_vwuz2_then_la1 + //SEG176 [83] if((word) divr16u::rem#6<(word) divr16u::divisor#6) goto divr16u::@3 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ) -- vwuz1_lt_vwuz2_then_la1 lda rem+1 cmp divisor+1 bcc b3 @@ -5430,13 +5256,13 @@ divr16u: { cmp divisor bcc b3 !: - //SEG174 divr16u::@5 - //SEG175 [84] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#2 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#2 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::rem#6 divr16u::quotient#2 ] ) -- vwuz1=_inc_vwuz1 + //SEG177 divr16u::@5 + //SEG178 [84] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#2 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#2 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#2 ] ) -- vwuz1=_inc_vwuz1 inc quotient bne !+ inc quotient+1 !: - //SEG176 [85] (word) divr16u::rem#3 ← (word) divr16u::rem#6 - (word) divr16u::divisor#6 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::quotient#2 divr16u::rem#3 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::quotient#2 divr16u::rem#3 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#1 divr16u::quotient#2 divr16u::rem#3 ] ) -- vwuz1=vwuz1_minus_vwuz2 + //SEG179 [85] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (word) divr16u::divisor#6 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::divisor#6 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) -- vwuz1=vwuz1_minus_vwuz2 lda rem sec sbc divisor @@ -5444,51 +5270,21 @@ divr16u: { lda rem+1 sbc divisor+1 sta rem+1 - //SEG177 [86] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] - //SEG178 [86] phi (word) divr16u::return#1 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy - //SEG179 [86] phi (word) divr16u::rem#11 = (word) divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy - //SEG180 divr16u::@3 + //SEG180 [86] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] + //SEG181 [86] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy + //SEG182 [86] phi (word) divr16u::rem#11 = (word) divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy + //SEG183 divr16u::@3 b3: - //SEG181 [87] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::return#1 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#1 divr16u::i#1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::return#1 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#1 divr16u::i#1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::return#1 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#1 divr16u::i#1 ] ) -- vbuxx=_inc_vbuxx + //SEG184 [87] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::return#0 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#0 divr16u::i#1 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::return#0 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#0 divr16u::i#1 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::return#0 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#0 divr16u::i#1 ] ) -- vbuxx=_inc_vbuxx inx - //SEG182 [88] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::return#1 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#1 divr16u::i#1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::return#1 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#1 divr16u::i#1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ divr16u::return#1 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#1 divr16u::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1 + //SEG185 [88] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::return#0 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#0 divr16u::i#1 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::return#0 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#0 divr16u::i#1 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::return#0 divr16u::divisor#6 divr16u::rem#11 divr16u::dividend#0 divr16u::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1 cpx #$10 bne b1 - //SEG183 divr16u::@6 - //SEG184 [89] (word) rem16u#13 ← (word) divr16u::rem#11 [ rem16u#13 divr16u::return#1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 rem16u#13 divr16u::return#1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ rem16u#13 divr16u::return#1 ] ) - // (word) rem16u#13 = (word) divr16u::rem#11 // register copy zp ZP_WORD:5 - //SEG185 divr16u::@return - //SEG186 [90] return [ rem16u#13 divr16u::return#1 ] ( main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 rem16u#13 divr16u::return#1 ] main:2::lin16u_gen:5::div16u:57::divr16u:92 [ rem16u#13 divr16u::return#1 ] ) - rts -} -//SEG187 div16u -div16u: { - .const divisor = lin16u_gen.length-1 - .label return = $d - //SEG188 [92] call divr16u param-assignment [ rem16u#13 divr16u::return#1 ] ( main:2::lin16u_gen:5::div16u:57 [ rem16u#13 divr16u::return#1 ] ) - //SEG189 [73] phi from div16u to divr16u [phi:div16u->divr16u] - //SEG190 [73] phi (word) divr16u::divisor#6 = (const word) div16u::divisor#0 [phi:div16u->divr16u#0] -- vwuz1=vwuc1 - lda #divisor - sta divr16u.divisor+1 - //SEG191 [73] phi (word) divr16u::dividend#5 = (const word) lin16u_gen::ampl#0 [phi:div16u->divr16u#1] -- vwuz1=vwuc1 - lda #lin16u_gen.ampl - sta divr16u.dividend+1 - //SEG192 [73] phi (word) divr16u::rem#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:div16u->divr16u#2] -- vwuz1=vbuc1 - lda #<0 - sta divr16u.rem - sta divr16u.rem+1 - jsr divr16u - //SEG193 [93] (word) divr16u::return#0 ← (word) divr16u::return#1 [ rem16u#13 divr16u::return#0 ] ( main:2::lin16u_gen:5::div16u:57 [ rem16u#13 divr16u::return#0 ] ) - // (word) divr16u::return#0 = (word) divr16u::return#1 // register copy zp ZP_WORD:13 - //SEG194 div16u::@2 - //SEG195 [94] (word) div16u::return#0 ← (word) divr16u::return#0 [ div16u::return#0 rem16u#13 ] ( main:2::lin16u_gen:5::div16u:57 [ div16u::return#0 rem16u#13 ] ) - // (word) div16u::return#0 = (word) divr16u::return#0 // register copy zp ZP_WORD:13 - //SEG196 div16u::@return - //SEG197 [95] return [ div16u::return#0 rem16u#13 ] ( main:2::lin16u_gen:5::div16u:57 [ div16u::return#0 rem16u#13 ] ) + //SEG186 divr16u::@6 + //SEG187 [89] (word) rem16u#1 ← (word) divr16u::rem#11 [ divr16u::return#0 rem16u#1 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::return#0 rem16u#1 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::return#0 rem16u#1 ] ) + // (word) rem16u#1 = (word) divr16u::rem#11 // register copy zp ZP_WORD:5 + //SEG188 divr16u::@return + //SEG189 [90] return [ divr16u::return#0 rem16u#1 ] ( main:2::lin16u_gen:5::divr16u:57 [ divr16u::return#0 rem16u#1 ] main:2::lin16u_gen:5::divr16u:61 [ lin16u_gen::stepi#0 divr16u::return#0 rem16u#1 ] ) rts } diff --git a/src/test/java/dk/camelot64/kickc/test/ref/linegen.sym b/src/test/java/dk/camelot64/kickc/test/ref/linegen.sym index 14edddbf7..a59699f4f 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/linegen.sym +++ b/src/test/java/dk/camelot64/kickc/test/ref/linegen.sym @@ -11,15 +11,6 @@ (byte*) char_cursor#45 char_cursor zp ZP_WORD:5 5.666666666666667 (byte*) char_cursor#47 char_cursor zp ZP_WORD:5 11.0 (byte*~) char_cursor#51 char_cursor zp ZP_WORD:5 22.0 -(word()) div16u((word) div16u::dividend , (word) div16u::divisor) -(label) div16u::@2 -(label) div16u::@return -(word) div16u::dividend -(word) div16u::divisor -(const word) div16u::divisor#0 divisor = (const word) lin16u_gen::length#0-(byte/signed byte/word/signed word/dword/signed dword) 1 -(word) div16u::return -(word) div16u::return#0 return zp ZP_WORD:13 1.3333333333333333 -(word) div16u::return#2 return zp ZP_WORD:13 4.0 (word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem) (byte~) divr16u::$1 reg byte a 22.0 (byte~) divr16u::$2 reg byte a 22.0 @@ -31,7 +22,7 @@ (label) divr16u::@6 (label) divr16u::@return (word) divr16u::dividend -(word) divr16u::dividend#1 dividend zp ZP_WORD:7 2.75 +(word) divr16u::dividend#0 dividend zp ZP_WORD:7 2.75 (word) divr16u::dividend#3 dividend zp ZP_WORD:7 5.0 (word) divr16u::dividend#5 dividend zp ZP_WORD:7 2.0 (word) divr16u::divisor @@ -44,17 +35,17 @@ (word) divr16u::quotient#2 quotient zp ZP_WORD:13 11.0 (word) divr16u::quotient#3 quotient zp ZP_WORD:13 2.75 (word) divr16u::rem -(word) divr16u::rem#1 rem zp ZP_WORD:5 8.25 +(word) divr16u::rem#0 rem zp ZP_WORD:5 8.25 +(word) divr16u::rem#1 rem zp ZP_WORD:5 22.0 (word) divr16u::rem#10 rem zp ZP_WORD:5 4.0 (word) divr16u::rem#11 rem zp ZP_WORD:5 11.666666666666666 (word) divr16u::rem#2 rem zp ZP_WORD:5 22.0 -(word) divr16u::rem#3 rem zp ZP_WORD:5 22.0 (word) divr16u::rem#4 rem zp ZP_WORD:5 4.0 (word) divr16u::rem#5 rem zp ZP_WORD:5 24.0 (word) divr16u::rem#6 rem zp ZP_WORD:5 11.0 (word) divr16u::return -(word) divr16u::return#0 return zp ZP_WORD:13 4.0 -(word) divr16u::return#1 return zp ZP_WORD:13 5.285714285714286 +(word) divr16u::return#0 return zp ZP_WORD:13 5.285714285714286 +(word) divr16u::return#2 return zp ZP_WORD:13 4.0 (word) divr16u::return#3 return zp ZP_WORD:13 4.0 (void()) lin16u_gen((word) lin16u_gen::min , (word) lin16u_gen::max , (word*) lin16u_gen::lintab , (word) lin16u_gen::length) (word~) lin16u_gen::$5 $5 zp ZP_WORD:7 22.0 @@ -144,16 +135,16 @@ (word) print_word::w (word) print_word::w#0 w zp ZP_WORD:7 5.0 (word) rem16u -(word) rem16u#13 rem16u zp ZP_WORD:5 0.4444444444444444 +(word) rem16u#1 rem16u zp ZP_WORD:5 0.8 zp ZP_BYTE:2 [ main::i#2 main::i#1 ] zp ZP_WORD:3 [ line_cursor#9 line_cursor#19 line_cursor#1 print_cls::sc#2 print_cls::sc#1 lin16u_gen::lintab#2 lin16u_gen::lintab#1 divr16u::divisor#6 ] reg byte x [ print_byte::b#3 print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] -zp ZP_WORD:5 [ char_cursor#32 char_cursor#45 char_cursor#47 char_cursor#51 char_cursor#2 char_cursor#11 char_cursor#1 lin16u_gen::i#2 lin16u_gen::i#1 divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#1 divr16u::rem#2 divr16u::rem#3 rem16u#13 ] -zp ZP_WORD:7 [ print_str::str#2 print_str::str#0 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#1 print_word::w#0 lin16u_gen::$5 ] +zp ZP_WORD:5 [ char_cursor#32 char_cursor#45 char_cursor#47 char_cursor#51 char_cursor#2 char_cursor#11 char_cursor#1 lin16u_gen::i#2 lin16u_gen::i#1 divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 ] +zp ZP_WORD:7 [ print_str::str#2 print_str::str#0 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 print_word::w#0 lin16u_gen::$5 ] zp ZP_DWORD:9 [ lin16u_gen::val#2 lin16u_gen::val#1 ] -zp ZP_WORD:13 [ divr16u::quotient#3 divr16u::return#1 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#3 lin16u_gen::stepf#0 divr16u::return#0 div16u::return#0 div16u::return#2 ] +zp ZP_WORD:13 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 lin16u_gen::stepf#0 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ]