mirror of
https://gitlab.com/camelot/kickc.git
synced 2025-04-11 20:37:40 +00:00
Assignments are now expressions. For-loops can now contain assignments in the increment part. LValue handling reimplemented (lvalue no longer exist in parser - only expression). RValues now also contains pointer derefs. Complex array expressions (SCREEN+$100)[i] now possible as LValues. ASM fragment generation improved to handle new more complex LValues & RValues. Closes #5. Closes #43
This commit is contained in:
parent
2c44783879
commit
b412a4aefc
@ -106,7 +106,6 @@ public class Compiler {
|
||||
|
||||
private Program pass1GenerateSSA() {
|
||||
|
||||
new Pass1FixLvalueLoHi(program).execute();
|
||||
new Pass1TypeInference(program).execute();
|
||||
getLog().append("PROGRAM");
|
||||
getLog().append(program.getStatementSequence().toString(program));
|
||||
@ -114,6 +113,8 @@ public class Compiler {
|
||||
getLog().append(program.getScope().getSymbolTableContents(program));
|
||||
|
||||
new Pass1GenerateControlFlowGraph(program).execute();
|
||||
new Pass1FixLValuesLoHi(program).execute();
|
||||
new Pass1AssertNoLValueIntermediate(program).execute();
|
||||
new Pass1AddTypePromotions(program).execute();
|
||||
|
||||
getLog().append("INITIAL CONTROL FLOW GRAPH");
|
||||
|
@ -89,9 +89,18 @@ public class AsmFragmentManager {
|
||||
Map<String, String> mapZ = new LinkedHashMap<>();
|
||||
mapZ.put("z2", "z1");
|
||||
mapZ.put("z3", "z2");
|
||||
Map<String, String> mapConst = new LinkedHashMap<>();
|
||||
mapConst.put("c2", "c1");
|
||||
mapConst.put("c3", "c2");
|
||||
Map<String, String> mapZ2 = new LinkedHashMap<>();
|
||||
mapZ2.put("z3", "z1");
|
||||
Map<String, String> mapZ3 = new LinkedHashMap<>();
|
||||
mapZ3.put("z3", "z2");
|
||||
Map<String, String> mapC = new LinkedHashMap<>();
|
||||
mapC.put("c2", "c1");
|
||||
mapC.put("c3", "c2");
|
||||
Map<String, String> mapC3 = new LinkedHashMap<>();
|
||||
mapC3.put("c3", "c2");
|
||||
Map<String, String> mapZC = new LinkedHashMap<>();
|
||||
mapZC.putAll(mapZ);
|
||||
mapZC.putAll(mapC);
|
||||
Map<String, String> mapSToU = new LinkedHashMap<>();
|
||||
mapSToU.put("vbsz1", "vbuz1");
|
||||
mapSToU.put("vbsz2", "vbuz2");
|
||||
@ -124,9 +133,14 @@ public class AsmFragmentManager {
|
||||
synths.add(new FragmentSynthesis("vbsyy=(.*)", null, null, "vbsaa=$1", "tay\n", null));
|
||||
synths.add(new FragmentSynthesis("vbuz1=(.*)", ".*=.*vb.z1.*", null, "vbuaa=$1", "sta {z1}\n", mapZ));
|
||||
synths.add(new FragmentSynthesis("vbsz1=(.*)", ".*=.*vb.z1.*", null, "vbsaa=$1", "sta {z1}\n", mapZ));
|
||||
synths.add(new FragmentSynthesis("_deref_vwuc1=(.*)", null, null, "vbuaa=$1", "sta {c1}\n", mapConst));
|
||||
synths.add(new FragmentSynthesis("_deref_vwuc1=(.*)", null, null, "vbuaa=$1", "sta {c1}\n", mapC));
|
||||
synths.add(new FragmentSynthesis("_deref_pbuz1=(.*)", ".*=.*z1.*", null, "vbuaa=$1", "ldy #0\n" + "sta ({z1}),y\n", mapZ));
|
||||
synths.add(new FragmentSynthesis("vwuc1_derefidx_vbuz1=(.*)", null, null, "vbuaa=$1", "ldx {z1}\n"+"sta {c1},x\n", mapZ));
|
||||
|
||||
synths.add(new FragmentSynthesis("pb(.)c1_derefidx_vbuz1=(.*)", ".*z1.*z1.*|.*c1.*c1.*", null, "vb$1aa=$2", "ldx {z1}\n"+"sta {c1},x\n", mapZC));
|
||||
synths.add(new FragmentSynthesis("pb(.)c1_derefidx_vbuz1=(.*c1.*)", ".*z1.*z1.*", null, "vb$1aa=$2", "ldx {z1}\n"+"sta {c1},x\n", mapZ));
|
||||
synths.add(new FragmentSynthesis("pb(.)c1_derefidx_vbuyy=(.*)", ".*c1.*c1.*", null, "vb$1aa=$2", "sta {c1},y\n", mapC));
|
||||
synths.add(new FragmentSynthesis("pb(.)c1_derefidx_vbuxx=(.*)", ".*c1.*c1.*", null, "vb$1aa=$2", "sta {c1},x\n", mapC));
|
||||
synths.add(new FragmentSynthesis("pb(.)z1_derefidx_vbuz2=(.*)", ".*z1.*z1.*|.*z2.*z2.*", null, "vb$1aa=$2", "ldy {z2}\n"+"sta ({z1}),y\n", mapZ2));
|
||||
|
||||
synths.add(new FragmentSynthesis("(.*)=vbuxx(.*)", ".*=.*vb.aa.*", "txa\n", "$1=vbuaa$2", null, null));
|
||||
synths.add(new FragmentSynthesis("(.*)=vbuyy(.*)", ".*=.*vb.aa.*", "tya\n", "$1=vbuaa$2", null, null));
|
||||
@ -136,11 +150,39 @@ public class AsmFragmentManager {
|
||||
synths.add(new FragmentSynthesis("(.*)=vbsz2(.*)", ".*=.*vb.aa.*|.*z2.*z2.*|.*z3.*", "lda {z2}\n", "$1=vbsaa$2", null, null));
|
||||
synths.add(new FragmentSynthesis("(.*)=vbuz2", ".*=.*aa.*|.*z2.*=.*", "lda {z2}\n", "$1=vbuaa", null, null));
|
||||
synths.add(new FragmentSynthesis("(.*)=vbsz2", ".*=.*aa.*|.*z2.*=.*", "lda {z2}\n", "$1=vbuaa", null, null));
|
||||
synths.add(new FragmentSynthesis("(.*)=vbuc1", ".*=.*aa.*", "lda #{c1}\n", "$1=vbuaa", null, mapConst));
|
||||
synths.add(new FragmentSynthesis("(.*)=vbsc1", ".*=.*aa.*", "lda #{c1}\n", "$1=vbsaa", null, mapConst));
|
||||
synths.add(new FragmentSynthesis("(.*)=_deref_vwuc1(.*)", ".*=.*aa.*", "lda {c1}\n", "$1=vbuaa$2", null, mapConst));
|
||||
synths.add(new FragmentSynthesis("(.*)=vbuc1", ".*=.*aa.*", "lda #{c1}\n", "$1=vbuaa", null, mapC));
|
||||
synths.add(new FragmentSynthesis("(.*)=vbsc1", ".*=.*aa.*", "lda #{c1}\n", "$1=vbsaa", null, mapC));
|
||||
synths.add(new FragmentSynthesis("(.*)=_deref_vwuc1(.*)", ".*=.*aa.*", "lda {c1}\n", "$1=vbuaa$2", null, mapC));
|
||||
synths.add(new FragmentSynthesis("(.*)=_deref_pb(.)z1(.*)", ".*z1.*z1.*|.*=.*aa.*|.*=.*yy.*", "ldy #0\n" + "lda ({z1}),y\n", "$1=vb$2aa$3", null, mapZ));
|
||||
|
||||
synths.add(new FragmentSynthesis("(.*)=(.*)pb(.)c1_derefidx_vbuxx(.*)", ".*=.*aa.*|.*c1.*c1.*", "lda {c1},x\n", "$1=$2vb$3aa$4", null, mapC));
|
||||
synths.add(new FragmentSynthesis("(.*)=(.*c1.*)pb(.)c1_derefidx_vbuxx(.*)", ".*=.*aa.*", "lda {c1},x\n", "$1=$2vb$3aa$4", null, null));
|
||||
synths.add(new FragmentSynthesis("(.*)=(.*)pb(.)c1_derefidx_vbuxx(.*c1.*)", ".*=.*aa.*", "lda {c1},x\n", "$1=$2vb$3aa$4", null, null));
|
||||
synths.add(new FragmentSynthesis("(.*)=(.*)pb(.)c1_derefidx_vbuyy(.*)", ".*=.*aa.*|.*c1.*c1.*", "lda {c1},y\n", "$1=$2vb$3aa$4", null, mapC));
|
||||
synths.add(new FragmentSynthesis("(.*)=(.*c1.*)pb(.)c1_derefidx_vbuyy(.*)", ".*=.*aa.*", "lda {c1},y\n", "$1=$2vb$3aa$4", null, null));
|
||||
synths.add(new FragmentSynthesis("(.*)=(.*)pb(.)c1_derefidx_vbuyy(.*c1.*)", ".*=.*aa.*", "lda {c1},y\n", "$1=$2vb$3aa$4", null, null));
|
||||
|
||||
synths.add(new FragmentSynthesis("(.*)=(.*)pb(.)c2_derefidx_vbuxx(.*)", ".*=.*aa.*|.*c2.*c2.*", "lda {c2},x\n", "$1=$2vb$3aa$4", null, mapC3));
|
||||
synths.add(new FragmentSynthesis("(.*)=(.*c2.*)pb(.)c2_derefidx_vbuxx(.*)", ".*=.*aa.*", "lda {c2},x\n", "$1=$2vb$3aa$4", null, null));
|
||||
synths.add(new FragmentSynthesis("(.*)=(.*)pb(.)c2_derefidx_vbuxx(.*c2.*)", ".*=.*aa.*", "lda {c2},x\n", "$1=$2vb$3aa$4", null, null));
|
||||
synths.add(new FragmentSynthesis("(.*)=(.*)pb(.)c2_derefidx_vbuyy(.*)", ".*=.*aa.*|.*c2.*c2.*", "lda {c2},y\n", "$1=$2vb$3aa$4", null, mapC3));
|
||||
synths.add(new FragmentSynthesis("(.*)=(.*c2.*)pb(.)c2_derefidx_vbuyy(.*)", ".*=.*aa.*", "lda {c2},y\n", "$1=$2vb$3aa$4", null, null));
|
||||
synths.add(new FragmentSynthesis("(.*)=(.*)pb(.)c2_derefidx_vbuyy(.*c2.*)", ".*=.*aa.*", "lda {c2},y\n", "$1=$2vb$3aa$4", null, null));
|
||||
|
||||
synths.add(new FragmentSynthesis("(.*)=(.*)_derefidx_vbuaa(.*)", ".*=.*xx.*", "tax\n", "$1=$2_derefidx_vbuxx$3", null, null));
|
||||
synths.add(new FragmentSynthesis("(.*)=(.*)_derefidx_vbuaa(.*)", ".*=.*yy.*", "tay\n", "$1=$2_derefidx_vbuyy$3", null, null));
|
||||
synths.add(new FragmentSynthesis("(.*)=(.*)_derefidx_vbuz1(.*)", ".*=.*xx.*|.*z1.*z1.*", "ldx {z1}\n", "$1=$2_derefidx_vbuxx$3", null, mapZ));
|
||||
synths.add(new FragmentSynthesis("(.*)=(.*)_derefidx_vbuz1(.*)", ".*=.*yy.*|.*z1.*z1.*", "ldy {z1}\n", "$1=$2_derefidx_vbuyy$3", null, mapZ));
|
||||
synths.add(new FragmentSynthesis("(.*)=(.*)_derefidx_vbuz2(.*)", ".*=.*xx.*|.*z2.*z2.*", "ldx {z2}\n", "$1=$2_derefidx_vbuxx$3", null, mapZ3));
|
||||
synths.add(new FragmentSynthesis("(.*)=(.*)_derefidx_vbuz2(.*)", ".*=.*yy.*|.*z2.*z2.*", "ldy {z2}\n", "$1=$2_derefidx_vbuyy$3", null, mapZ3));
|
||||
synths.add(new FragmentSynthesis("(.*)=(.*)_derefidx_vbuz3(.*)", ".*=.*yy.*", "ldy {z3}\n", "$1=$2_derefidx_vbuyy$3", null, null));
|
||||
synths.add(new FragmentSynthesis("(.*)=(.*)_derefidx_vbuz3(.*)", ".*=.*xx.*", "ldx {z3}\n", "$1=$2_derefidx_vbuxx$3", null, null));
|
||||
|
||||
synths.add(new FragmentSynthesis("(.*)_derefidx_vbuz1(.*)_derefidx_vbuz1(.*)", ".*z1.*z1.*z1.*|.*xx.*", null, "$1_derefidx_vbuxx$2_derefidx_vbuxx$3", "ldx {z1}\n", mapZ));
|
||||
synths.add(new FragmentSynthesis("(.*)_derefidx_vbuz1(.*)_derefidx_vbuz1(.*)", ".*z1.*z1.*z1.*|.*yy.*", null, "$1_derefidx_vbuyy$2_derefidx_vbuyy$3", "ldy {z1}\n", mapZ));
|
||||
synths.add(new FragmentSynthesis("(.*)_derefidx_vbuz2(.*)_derefidx_vbuz2(.*)", ".*z2.*z2.*z2.*|.*xx.*", null, "$1_derefidx_vbuxx$2_derefidx_vbuxx$3", "ldx {z2}\n", mapZ));
|
||||
synths.add(new FragmentSynthesis("(.*)_derefidx_vbuz2(.*)_derefidx_vbuz2(.*)", ".*z2.*z2.*z2.*|.*yy.*", null, "$1_derefidx_vbuyy$2_derefidx_vbuyy$3", "ldy {z2}\n", mapZ));
|
||||
|
||||
synths.add(new FragmentSynthesis("(.*)=(.*)_vbuxx", ".*=.*[ax][ax].*xx|.*derefidx_vb.xx", "txa\n", "$1=$2_vbuaa", null, null));
|
||||
synths.add(new FragmentSynthesis("(.*)=(.*)_vbsxx", ".*=.*[ax][ax].*xx|.*derefidx_vb.xx", "txa\n", "$1=$2_vbsaa", null, null));
|
||||
synths.add(new FragmentSynthesis("(.*)=(.*)_vbuyy", ".*=.*[ay][ay].*yy|.*derefidx_vb.yy", "tya\n", "$1=$2_vbuaa", null, null));
|
||||
@ -153,20 +195,19 @@ public class AsmFragmentManager {
|
||||
synths.add(new FragmentSynthesis("vbuz1=vbuz1(.*)", ".*=.*vb.aa.*|.*z1.*z1.*z1.*", "lda {z1}\n", "vbuaa=vbuaa$1", "sta {z1}\n", mapZ));
|
||||
synths.add(new FragmentSynthesis("vbsz1=vbsz1(.*)", ".*=.*vb.aa.*|.*z1.*z1.*z1.*", "lda {z1}\n", "vbsaa=vbsaa$1", "sta {z1}\n", mapZ));
|
||||
|
||||
synths.add(new FragmentSynthesis("(.*)=(.*)_derefidx_vbuaa", ".*=.*yy.*", "tay\n", "$1=$2_derefidx_vbuyy", null, null));
|
||||
synths.add(new FragmentSynthesis("(.*)=(.*)_derefidx_vbuaa", ".*=.*xx.*", "tax\n", "$1=$2_derefidx_vbuxx", null, null));
|
||||
synths.add(new FragmentSynthesis("(.*)=(.*)_derefidx_vbuz1", ".*=.*yy.*|.*z1.*z1.*", "ldy {z1}\n", "$1=$2_derefidx_vbuyy", null, mapZ));
|
||||
synths.add(new FragmentSynthesis("(.*)=(.*)_derefidx_vbuz1", ".*=.*xx.*|.*z1.*z1.*", "ldx {z1}\n", "$1=$2_derefidx_vbuxx", null, mapZ));
|
||||
synths.add(new FragmentSynthesis("(.*)=(.*)_derefidx_vbuz2", ".*=.*xx.*|.*z2.*z2.*", "ldx {z2}\n", "$1=$2_derefidx_vbuxx", null, mapZ));
|
||||
synths.add(new FragmentSynthesis("(.*)=(.*)_derefidx_vbuz2", ".*=.*yy.*|.*z2.*z2.*", "ldy {z2}\n", "$1=$2_derefidx_vbuyy", null, mapZ));
|
||||
synths.add(new FragmentSynthesis("(.*)=(.*)_derefidx_vbuz3", ".*=.*xx.*|.*z3.*z3.*", "ldx {z3}\n", "$1=$2_derefidx_vbuxx", null, mapZ));
|
||||
synths.add(new FragmentSynthesis("(.*)=(.*)_derefidx_vbuz3", ".*=.*yy.*|.*z3.*z3.*", "ldy {z3}\n", "$1=$2_derefidx_vbuyy", null, mapZ));
|
||||
|
||||
synths.add(new FragmentSynthesis("vbuz1_(lt|gt|le|ge|eq|neq)_(.*)", ".*vb.aa.*", "lda {z1}\n", "vbuaa_$1_$2", null, mapZ));
|
||||
synths.add(new FragmentSynthesis("vbsz1_(lt|gt|le|ge|eq|neq)_(.*)", ".*vb.aa.*", "lda {z1}\n", "vbsaa_$1_$2", null, mapZ));
|
||||
synths.add(new FragmentSynthesis("_deref_vwuc1_(lt|gt|le|ge|eq|neq)_(.*)", ".*vb.aa.*", "lda {c1}\n", "vbuaa_$1_$2", null, mapConst));
|
||||
synths.add(new FragmentSynthesis("_deref_vwuc1_(lt|gt|le|ge|eq|neq)_(.*)", ".*vb.aa.*", "lda {c1}\n", "vbuaa_$1_$2", null, mapC));
|
||||
synths.add(new FragmentSynthesis("_deref_pb(.)z1_(lt|gt|le|ge|eq|neq)_(.*)", ".*vb.aa.*|.*vb.yy.*|.*z1.*z1.*", "ldy #0\n" + "lda ({z1}),y\n", "vb$1aa_$2_$3", null, mapZ));
|
||||
|
||||
synths.add(new FragmentSynthesis("(.*)_derefidx_vbuz1_(lt|gt|le|ge|eq|neq)_(.*)", ".*z1.*z1.*|.*vb.yy.*", "ldy {z1}\n", "$1_derefidx_vbuyy_$2_$3", null, mapZ));
|
||||
synths.add(new FragmentSynthesis("(.*)_derefidx_vbuz1_(lt|gt|le|ge|eq|neq)_(.*)", ".*z1.*z1.*|.*vb.xx.*", "ldx {z1}\n", "$1_derefidx_vbuxx_$2_$3", null, mapZ));
|
||||
synths.add(new FragmentSynthesis("pb(.)c1_derefidx_vbuyy_(lt|gt|le|ge|eq|neq)_(.*)", ".*c1.*c1.*|.*aa.*", "lda {c1},y\n", "vb$1aa_$2_$3", null, mapC));
|
||||
synths.add(new FragmentSynthesis("pb(.)c1_derefidx_vbuyy_(lt|gt|le|ge|eq|neq)_(.*c1.*)", ".*aa.*", "lda {c1},y\n", "vb$1aa_$2_$3", null, null));
|
||||
synths.add(new FragmentSynthesis("pb(.)c1_derefidx_vbuxx_(lt|gt|le|ge|eq|neq)_(.*)", ".*c1.*c1.*|.*aa.*", "lda {c1},x\n", "vb$1aa_$2_$3", null, mapC));
|
||||
synths.add(new FragmentSynthesis("pb(.)c1_derefidx_vbuxx_(lt|gt|le|ge|eq|neq)_(.*c1.*)", ".*aa.*", "lda {c1},x\n", "vb$1aa_$2_$3", null, null));
|
||||
|
||||
synths.add(new FragmentSynthesis("(.*)_ge_(vb.aa)_then_(.*)", ".*vb.aa.*_ge.*", null, "$2_lt_$1_then_$3", null, null));
|
||||
synths.add(new FragmentSynthesis("(.*)_ge_(vb.xx)_then_(.*)", ".*vb.[ax][ax].*_ge.*", null, "$2_lt_$1_then_$3", null, null));
|
||||
synths.add(new FragmentSynthesis("(.*)_ge_(vb.yy)_then_(.*)", ".*vb.[axy][axy].*_ge.*", null, "$2_lt_$1_then_$3", null, null));
|
||||
|
@ -0,0 +1,27 @@
|
||||
package dk.camelot64.kickc.model;
|
||||
|
||||
/**
|
||||
* LValue containing an intermediate variable during parsing. Must be resolved to a proper LValue in Pass 1 - or result in failure
|
||||
*/
|
||||
public class LvalueIntermediate implements LValue {
|
||||
|
||||
private VariableRef variable;
|
||||
|
||||
public LvalueIntermediate(VariableRef variable) {
|
||||
this.variable = variable;
|
||||
}
|
||||
|
||||
public VariableRef getVariable() {
|
||||
return variable;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString(Program program) {
|
||||
return "lval" + "(" + variable.toString(program) + ")";
|
||||
}
|
||||
|
||||
public void setVariable(VariableRef variable) {
|
||||
this.variable = variable;
|
||||
}
|
||||
|
||||
}
|
@ -18,6 +18,9 @@ public class SymbolTypeInference {
|
||||
* @return The type of the resulting value
|
||||
*/
|
||||
public static SymbolType inferType(ProgramScope programScope, Operator operator, RValue rValue) {
|
||||
if(operator==null) {
|
||||
return inferType(programScope, rValue);
|
||||
}
|
||||
if (operator.equals(Operator.CAST_BYTE)) {
|
||||
return SymbolType.BYTE;
|
||||
} else if (operator.equals(Operator.CAST_SBYTE)) {
|
||||
@ -375,4 +378,45 @@ public class SymbolTypeInference {
|
||||
return false;
|
||||
}
|
||||
|
||||
public static void inferCallLValue(ProgramScope programScope, StatementCall call) {
|
||||
LValue lValue = call.getlValue();
|
||||
if(lValue instanceof VariableRef) {
|
||||
Variable lValueVar = programScope.getVariable((VariableRef) lValue);
|
||||
if(SymbolType.VAR.equals(lValueVar.getType())) {
|
||||
Procedure procedure = programScope.getProcedure(call.getProcedure());
|
||||
lValueVar.setTypeInferred(procedure.getReturnType());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void inferAssignmentLValue(ProgramScope programScope, StatementAssignment assignment) {
|
||||
LValue lValue = assignment.getlValue();
|
||||
if (lValue instanceof VariableRef) {
|
||||
Variable symbol = programScope.getVariable((VariableRef) lValue);
|
||||
if (SymbolType.VAR.equals(symbol.getType())) {
|
||||
// Unresolved symbol - perform inference
|
||||
Operator operator = assignment.getOperator();
|
||||
if (operator == null || assignment.getrValue1() == null) {
|
||||
// Copy operation or Unary operation
|
||||
RValue rValue = assignment.getrValue2();
|
||||
SymbolType type = inferType(programScope, operator, rValue);
|
||||
symbol.setTypeInferred(type);
|
||||
} else {
|
||||
// Binary operation
|
||||
SymbolType type = inferType(programScope, assignment.getrValue1(), assignment.getOperator(), assignment.getrValue2());
|
||||
symbol.setTypeInferred(type);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void inferLValue(ProgramScope programScope, StatementLValue statementLValue) {
|
||||
if(statementLValue instanceof StatementAssignment) {
|
||||
inferAssignmentLValue(programScope, (StatementAssignment) statementLValue);
|
||||
} else if(statementLValue instanceof StatementCall) {
|
||||
inferCallLValue(programScope, (StatementCall) statementLValue);
|
||||
} else {
|
||||
throw new RuntimeException("LValue statement not implemented "+statementLValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -43,7 +43,6 @@ stmtSeq
|
||||
stmt
|
||||
: declVar #stmtDeclVar
|
||||
| '{' stmtSeq? '}' #stmtBlock
|
||||
| lvalue '=' expr ';' #stmtAssignment
|
||||
| expr ';' #stmtExpr
|
||||
| 'if' '(' expr ')' stmt ( 'else' stmt )? #stmtIfElse
|
||||
| 'while' '(' expr ')' stmt #stmtWhile
|
||||
@ -58,7 +57,7 @@ forDeclaration
|
||||
;
|
||||
|
||||
forIteration
|
||||
: ';' expr ';' expr? # forClassic
|
||||
: ';' expr ';' expr # forClassic
|
||||
| ':' expr ( '..' ) expr #forRange
|
||||
;
|
||||
|
||||
@ -69,14 +68,6 @@ typeDecl
|
||||
| typeDecl '[' (expr)? ']' #typeArray
|
||||
;
|
||||
|
||||
lvalue
|
||||
: NAME #lvalueName
|
||||
| '*' NAME #lvaluePtr
|
||||
| '*' '(' expr ')' #lvaluePtrExpr
|
||||
| ('<' | '>' ) lvalue #lvalueLoHi
|
||||
| lvalue '[' expr ']' #lvalueArray
|
||||
;
|
||||
|
||||
expr
|
||||
: '(' expr ')' #exprPar
|
||||
| NAME '(' parameterList? ')' #exprCall
|
||||
@ -84,7 +75,8 @@ expr
|
||||
| expr '[' expr ']' #exprArray
|
||||
| ('--' | '++' ) expr #exprPreMod
|
||||
| expr ('--' | '++' ) #exprPostMod
|
||||
| ('+' | '-' | '!' | '&' | '*' | '~') expr #exprUnary
|
||||
| '*' expr #exprPtr
|
||||
| ('+' | '-' | '!' | '&' | '~') expr #exprUnary
|
||||
| expr ('>>' | '<<' ) expr #exprBinary
|
||||
| expr ('*' | '/' | '%' ) expr #exprBinary
|
||||
| expr ( '+' | '-') expr #exprBinary
|
||||
@ -95,6 +87,7 @@ expr
|
||||
| expr ( '|' ) expr #exprBinary
|
||||
| expr ( '&&' ) expr #exprBinary
|
||||
| expr ( '||' ) expr #exprBinary
|
||||
| <assoc=right> expr '=' expr #exprAssignment
|
||||
| '{' expr (',' expr )* '}' #initList
|
||||
| NAME #exprId
|
||||
| NUMBER #exprNumber
|
||||
|
@ -86,19 +86,19 @@ COMMENT_BLOCK=66
|
||||
'*'=20
|
||||
'['=21
|
||||
']'=22
|
||||
'<'=23
|
||||
'>'=24
|
||||
'--'=25
|
||||
'++'=26
|
||||
'+'=27
|
||||
'-'=28
|
||||
'!'=29
|
||||
'&'=30
|
||||
'~'=31
|
||||
'>>'=32
|
||||
'<<'=33
|
||||
'/'=34
|
||||
'%'=35
|
||||
'--'=23
|
||||
'++'=24
|
||||
'+'=25
|
||||
'-'=26
|
||||
'!'=27
|
||||
'&'=28
|
||||
'~'=29
|
||||
'>>'=30
|
||||
'<<'=31
|
||||
'/'=32
|
||||
'%'=33
|
||||
'<'=34
|
||||
'>'=35
|
||||
'=='=36
|
||||
'!='=37
|
||||
'<>'=38
|
||||
|
@ -167,18 +167,6 @@ public class KickCBaseListener implements KickCListener {
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void exitStmtBlock(KickCParser.StmtBlockContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void enterStmtAssignment(KickCParser.StmtAssignmentContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void exitStmtAssignment(KickCParser.StmtAssignmentContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
@ -352,61 +340,13 @@ public class KickCBaseListener implements KickCListener {
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void enterLvalueName(KickCParser.LvalueNameContext ctx) { }
|
||||
@Override public void enterExprPtr(KickCParser.ExprPtrContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void exitLvalueName(KickCParser.LvalueNameContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void enterLvaluePtr(KickCParser.LvaluePtrContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void exitLvaluePtr(KickCParser.LvaluePtrContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void enterLvaluePtrExpr(KickCParser.LvaluePtrExprContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void exitLvaluePtrExpr(KickCParser.LvaluePtrExprContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void enterLvalueArray(KickCParser.LvalueArrayContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void exitLvalueArray(KickCParser.LvalueArrayContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void enterLvalueLoHi(KickCParser.LvalueLoHiContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void exitLvalueLoHi(KickCParser.LvalueLoHiContext ctx) { }
|
||||
@Override public void exitExprPtr(KickCParser.ExprPtrContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
@ -563,6 +503,18 @@ public class KickCBaseListener implements KickCListener {
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void exitExprId(KickCParser.ExprIdContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void enterExprAssignment(KickCParser.ExprAssignmentContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void exitExprAssignment(KickCParser.ExprAssignmentContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
|
@ -102,13 +102,6 @@ public class KickCBaseVisitor<T> extends AbstractParseTreeVisitor<T> implements
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitStmtBlock(KickCParser.StmtBlockContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitStmtAssignment(KickCParser.StmtAssignmentContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
@ -213,35 +206,7 @@ public class KickCBaseVisitor<T> extends AbstractParseTreeVisitor<T> implements
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitLvalueName(KickCParser.LvalueNameContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitLvaluePtr(KickCParser.LvaluePtrContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitLvaluePtrExpr(KickCParser.LvaluePtrExprContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitLvalueArray(KickCParser.LvalueArrayContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitLvalueLoHi(KickCParser.LvalueLoHiContext ctx) { return visitChildren(ctx); }
|
||||
@Override public T visitExprPtr(KickCParser.ExprPtrContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
@ -333,6 +298,13 @@ public class KickCBaseVisitor<T> extends AbstractParseTreeVisitor<T> implements
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitExprId(KickCParser.ExprIdContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitExprAssignment(KickCParser.ExprAssignmentContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
|
@ -51,8 +51,8 @@ public class KickCLexer extends Lexer {
|
||||
private static final String[] _LITERAL_NAMES = {
|
||||
null, "'import'", "'('", "')'", "'{'", "'}'", "','", "'const'", "'='",
|
||||
"';'", "'if'", "'else'", "'while'", "'do'", "'for'", "'return'", "'asm'",
|
||||
"':'", "'..'", "'signed'", "'*'", "'['", "']'", "'<'", "'>'", "'--'",
|
||||
"'++'", "'+'", "'-'", "'!'", "'&'", "'~'", "'>>'", "'<<'", "'/'", "'%'",
|
||||
"':'", "'..'", "'signed'", "'*'", "'['", "']'", "'--'", "'++'", "'+'",
|
||||
"'-'", "'!'", "'&'", "'~'", "'>>'", "'<<'", "'/'", "'%'", "'<'", "'>'",
|
||||
"'=='", "'!='", "'<>'", "'<='", "'=<'", "'>='", "'=>'", "'^'", "'|'",
|
||||
"'&&'", "'||'", "'#'"
|
||||
};
|
||||
@ -137,10 +137,10 @@ public class KickCLexer extends Lexer {
|
||||
"\3\r\3\r\3\r\3\r\3\r\3\r\3\16\3\16\3\16\3\17\3\17\3\17\3\17\3\20\3\20"+
|
||||
"\3\20\3\20\3\20\3\20\3\20\3\21\3\21\3\21\3\21\3\22\3\22\3\23\3\23\3\23"+
|
||||
"\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\25\3\25\3\26\3\26\3\27\3\27\3\30"+
|
||||
"\3\30\3\31\3\31\3\32\3\32\3\32\3\33\3\33\3\33\3\34\3\34\3\35\3\35\3\36"+
|
||||
"\3\36\3\37\3\37\3 \3 \3!\3!\3!\3\"\3\"\3\"\3#\3#\3$\3$\3%\3%\3%\3&\3&"+
|
||||
"\3&\3\'\3\'\3\'\3(\3(\3(\3)\3)\3)\3*\3*\3*\3+\3+\3+\3,\3,\3-\3-\3.\3."+
|
||||
"\3.\3/\3/\3/\3\60\3\60\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3"+
|
||||
"\3\30\3\30\3\31\3\31\3\31\3\32\3\32\3\33\3\33\3\34\3\34\3\35\3\35\3\36"+
|
||||
"\3\36\3\37\3\37\3\37\3 \3 \3 \3!\3!\3\"\3\"\3#\3#\3$\3$\3%\3%\3%\3&\3"+
|
||||
"&\3&\3\'\3\'\3\'\3(\3(\3(\3)\3)\3)\3*\3*\3*\3+\3+\3+\3,\3,\3-\3-\3.\3"+
|
||||
".\3.\3/\3/\3/\3\60\3\60\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3"+
|
||||
"\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3"+
|
||||
"\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3"+
|
||||
"\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3"+
|
||||
@ -193,9 +193,9 @@ public class KickCLexer extends Lexer {
|
||||
"\2\25\u00ac\3\2\2\2\27\u00af\3\2\2\2\31\u00b4\3\2\2\2\33\u00ba\3\2\2\2"+
|
||||
"\35\u00bd\3\2\2\2\37\u00c1\3\2\2\2!\u00c8\3\2\2\2#\u00cc\3\2\2\2%\u00ce"+
|
||||
"\3\2\2\2\'\u00d1\3\2\2\2)\u00d8\3\2\2\2+\u00da\3\2\2\2-\u00dc\3\2\2\2"+
|
||||
"/\u00de\3\2\2\2\61\u00e0\3\2\2\2\63\u00e2\3\2\2\2\65\u00e5\3\2\2\2\67"+
|
||||
"\u00e8\3\2\2\29\u00ea\3\2\2\2;\u00ec\3\2\2\2=\u00ee\3\2\2\2?\u00f0\3\2"+
|
||||
"\2\2A\u00f2\3\2\2\2C\u00f5\3\2\2\2E\u00f8\3\2\2\2G\u00fa\3\2\2\2I\u00fc"+
|
||||
"/\u00de\3\2\2\2\61\u00e1\3\2\2\2\63\u00e4\3\2\2\2\65\u00e6\3\2\2\2\67"+
|
||||
"\u00e8\3\2\2\29\u00ea\3\2\2\2;\u00ec\3\2\2\2=\u00ee\3\2\2\2?\u00f1\3\2"+
|
||||
"\2\2A\u00f4\3\2\2\2C\u00f6\3\2\2\2E\u00f8\3\2\2\2G\u00fa\3\2\2\2I\u00fc"+
|
||||
"\3\2\2\2K\u00ff\3\2\2\2M\u0102\3\2\2\2O\u0105\3\2\2\2Q\u0108\3\2\2\2S"+
|
||||
"\u010b\3\2\2\2U\u010e\3\2\2\2W\u0111\3\2\2\2Y\u0113\3\2\2\2[\u0115\3\2"+
|
||||
"\2\2]\u0118\3\2\2\2_\u011b\3\2\2\2a\u01f8\3\2\2\2c\u020d\3\2\2\2e\u020f"+
|
||||
@ -224,14 +224,14 @@ public class KickCLexer extends Lexer {
|
||||
"\u00d2\u00d3\7k\2\2\u00d3\u00d4\7i\2\2\u00d4\u00d5\7p\2\2\u00d5\u00d6"+
|
||||
"\7g\2\2\u00d6\u00d7\7f\2\2\u00d7(\3\2\2\2\u00d8\u00d9\7,\2\2\u00d9*\3"+
|
||||
"\2\2\2\u00da\u00db\7]\2\2\u00db,\3\2\2\2\u00dc\u00dd\7_\2\2\u00dd.\3\2"+
|
||||
"\2\2\u00de\u00df\7>\2\2\u00df\60\3\2\2\2\u00e0\u00e1\7@\2\2\u00e1\62\3"+
|
||||
"\2\2\2\u00e2\u00e3\7/\2\2\u00e3\u00e4\7/\2\2\u00e4\64\3\2\2\2\u00e5\u00e6"+
|
||||
"\7-\2\2\u00e6\u00e7\7-\2\2\u00e7\66\3\2\2\2\u00e8\u00e9\7-\2\2\u00e98"+
|
||||
"\3\2\2\2\u00ea\u00eb\7/\2\2\u00eb:\3\2\2\2\u00ec\u00ed\7#\2\2\u00ed<\3"+
|
||||
"\2\2\2\u00ee\u00ef\7(\2\2\u00ef>\3\2\2\2\u00f0\u00f1\7\u0080\2\2\u00f1"+
|
||||
"@\3\2\2\2\u00f2\u00f3\7@\2\2\u00f3\u00f4\7@\2\2\u00f4B\3\2\2\2\u00f5\u00f6"+
|
||||
"\7>\2\2\u00f6\u00f7\7>\2\2\u00f7D\3\2\2\2\u00f8\u00f9\7\61\2\2\u00f9F"+
|
||||
"\3\2\2\2\u00fa\u00fb\7\'\2\2\u00fbH\3\2\2\2\u00fc\u00fd\7?\2\2\u00fd\u00fe"+
|
||||
"\2\2\u00de\u00df\7/\2\2\u00df\u00e0\7/\2\2\u00e0\60\3\2\2\2\u00e1\u00e2"+
|
||||
"\7-\2\2\u00e2\u00e3\7-\2\2\u00e3\62\3\2\2\2\u00e4\u00e5\7-\2\2\u00e5\64"+
|
||||
"\3\2\2\2\u00e6\u00e7\7/\2\2\u00e7\66\3\2\2\2\u00e8\u00e9\7#\2\2\u00e9"+
|
||||
"8\3\2\2\2\u00ea\u00eb\7(\2\2\u00eb:\3\2\2\2\u00ec\u00ed\7\u0080\2\2\u00ed"+
|
||||
"<\3\2\2\2\u00ee\u00ef\7@\2\2\u00ef\u00f0\7@\2\2\u00f0>\3\2\2\2\u00f1\u00f2"+
|
||||
"\7>\2\2\u00f2\u00f3\7>\2\2\u00f3@\3\2\2\2\u00f4\u00f5\7\61\2\2\u00f5B"+
|
||||
"\3\2\2\2\u00f6\u00f7\7\'\2\2\u00f7D\3\2\2\2\u00f8\u00f9\7>\2\2\u00f9F"+
|
||||
"\3\2\2\2\u00fa\u00fb\7@\2\2\u00fbH\3\2\2\2\u00fc\u00fd\7?\2\2\u00fd\u00fe"+
|
||||
"\7?\2\2\u00feJ\3\2\2\2\u00ff\u0100\7#\2\2\u0100\u0101\7?\2\2\u0101L\3"+
|
||||
"\2\2\2\u0102\u0103\7>\2\2\u0103\u0104\7@\2\2\u0104N\3\2\2\2\u0105\u0106"+
|
||||
"\7>\2\2\u0106\u0107\7?\2\2\u0107P\3\2\2\2\u0108\u0109\7?\2\2\u0109\u010a"+
|
||||
|
@ -86,19 +86,19 @@ COMMENT_BLOCK=66
|
||||
'*'=20
|
||||
'['=21
|
||||
']'=22
|
||||
'<'=23
|
||||
'>'=24
|
||||
'--'=25
|
||||
'++'=26
|
||||
'+'=27
|
||||
'-'=28
|
||||
'!'=29
|
||||
'&'=30
|
||||
'~'=31
|
||||
'>>'=32
|
||||
'<<'=33
|
||||
'/'=34
|
||||
'%'=35
|
||||
'--'=23
|
||||
'++'=24
|
||||
'+'=25
|
||||
'-'=26
|
||||
'!'=27
|
||||
'&'=28
|
||||
'~'=29
|
||||
'>>'=30
|
||||
'<<'=31
|
||||
'/'=32
|
||||
'%'=33
|
||||
'<'=34
|
||||
'>'=35
|
||||
'=='=36
|
||||
'!='=37
|
||||
'<>'=38
|
||||
|
@ -145,18 +145,6 @@ public interface KickCListener extends ParseTreeListener {
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void exitStmtBlock(KickCParser.StmtBlockContext ctx);
|
||||
/**
|
||||
* Enter a parse tree produced by the {@code stmtAssignment}
|
||||
* labeled alternative in {@link KickCParser#stmt}.
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void enterStmtAssignment(KickCParser.StmtAssignmentContext ctx);
|
||||
/**
|
||||
* Exit a parse tree produced by the {@code stmtAssignment}
|
||||
* labeled alternative in {@link KickCParser#stmt}.
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void exitStmtAssignment(KickCParser.StmtAssignmentContext ctx);
|
||||
/**
|
||||
* Enter a parse tree produced by the {@code stmtExpr}
|
||||
* labeled alternative in {@link KickCParser#stmt}.
|
||||
@ -326,65 +314,17 @@ public interface KickCListener extends ParseTreeListener {
|
||||
*/
|
||||
void exitTypeSignedSimple(KickCParser.TypeSignedSimpleContext ctx);
|
||||
/**
|
||||
* Enter a parse tree produced by the {@code lvalueName}
|
||||
* labeled alternative in {@link KickCParser#lvalue}.
|
||||
* Enter a parse tree produced by the {@code exprPtr}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void enterLvalueName(KickCParser.LvalueNameContext ctx);
|
||||
void enterExprPtr(KickCParser.ExprPtrContext ctx);
|
||||
/**
|
||||
* Exit a parse tree produced by the {@code lvalueName}
|
||||
* labeled alternative in {@link KickCParser#lvalue}.
|
||||
* Exit a parse tree produced by the {@code exprPtr}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void exitLvalueName(KickCParser.LvalueNameContext ctx);
|
||||
/**
|
||||
* Enter a parse tree produced by the {@code lvaluePtr}
|
||||
* labeled alternative in {@link KickCParser#lvalue}.
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void enterLvaluePtr(KickCParser.LvaluePtrContext ctx);
|
||||
/**
|
||||
* Exit a parse tree produced by the {@code lvaluePtr}
|
||||
* labeled alternative in {@link KickCParser#lvalue}.
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void exitLvaluePtr(KickCParser.LvaluePtrContext ctx);
|
||||
/**
|
||||
* Enter a parse tree produced by the {@code lvaluePtrExpr}
|
||||
* labeled alternative in {@link KickCParser#lvalue}.
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void enterLvaluePtrExpr(KickCParser.LvaluePtrExprContext ctx);
|
||||
/**
|
||||
* Exit a parse tree produced by the {@code lvaluePtrExpr}
|
||||
* labeled alternative in {@link KickCParser#lvalue}.
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void exitLvaluePtrExpr(KickCParser.LvaluePtrExprContext ctx);
|
||||
/**
|
||||
* Enter a parse tree produced by the {@code lvalueArray}
|
||||
* labeled alternative in {@link KickCParser#lvalue}.
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void enterLvalueArray(KickCParser.LvalueArrayContext ctx);
|
||||
/**
|
||||
* Exit a parse tree produced by the {@code lvalueArray}
|
||||
* labeled alternative in {@link KickCParser#lvalue}.
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void exitLvalueArray(KickCParser.LvalueArrayContext ctx);
|
||||
/**
|
||||
* Enter a parse tree produced by the {@code lvalueLoHi}
|
||||
* labeled alternative in {@link KickCParser#lvalue}.
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void enterLvalueLoHi(KickCParser.LvalueLoHiContext ctx);
|
||||
/**
|
||||
* Exit a parse tree produced by the {@code lvalueLoHi}
|
||||
* labeled alternative in {@link KickCParser#lvalue}.
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void exitLvalueLoHi(KickCParser.LvalueLoHiContext ctx);
|
||||
void exitExprPtr(KickCParser.ExprPtrContext ctx);
|
||||
/**
|
||||
* Enter a parse tree produced by the {@code exprPreMod}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
@ -541,6 +481,18 @@ public interface KickCListener extends ParseTreeListener {
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void exitExprId(KickCParser.ExprIdContext ctx);
|
||||
/**
|
||||
* Enter a parse tree produced by the {@code exprAssignment}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void enterExprAssignment(KickCParser.ExprAssignmentContext ctx);
|
||||
/**
|
||||
* Exit a parse tree produced by the {@code exprAssignment}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void exitExprAssignment(KickCParser.ExprAssignmentContext ctx);
|
||||
/**
|
||||
* Enter a parse tree produced by the {@code exprArray}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -92,13 +92,6 @@ public interface KickCVisitor<T> extends ParseTreeVisitor<T> {
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitStmtBlock(KickCParser.StmtBlockContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by the {@code stmtAssignment}
|
||||
* labeled alternative in {@link KickCParser#stmt}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitStmtAssignment(KickCParser.StmtAssignmentContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by the {@code stmtExpr}
|
||||
* labeled alternative in {@link KickCParser#stmt}.
|
||||
@ -198,40 +191,12 @@ public interface KickCVisitor<T> extends ParseTreeVisitor<T> {
|
||||
*/
|
||||
T visitTypeSignedSimple(KickCParser.TypeSignedSimpleContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by the {@code lvalueName}
|
||||
* labeled alternative in {@link KickCParser#lvalue}.
|
||||
* Visit a parse tree produced by the {@code exprPtr}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitLvalueName(KickCParser.LvalueNameContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by the {@code lvaluePtr}
|
||||
* labeled alternative in {@link KickCParser#lvalue}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitLvaluePtr(KickCParser.LvaluePtrContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by the {@code lvaluePtrExpr}
|
||||
* labeled alternative in {@link KickCParser#lvalue}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitLvaluePtrExpr(KickCParser.LvaluePtrExprContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by the {@code lvalueArray}
|
||||
* labeled alternative in {@link KickCParser#lvalue}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitLvalueArray(KickCParser.LvalueArrayContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by the {@code lvalueLoHi}
|
||||
* labeled alternative in {@link KickCParser#lvalue}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitLvalueLoHi(KickCParser.LvalueLoHiContext ctx);
|
||||
T visitExprPtr(KickCParser.ExprPtrContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by the {@code exprPreMod}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
@ -323,6 +288,13 @@ public interface KickCVisitor<T> extends ParseTreeVisitor<T> {
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitExprId(KickCParser.ExprIdContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by the {@code exprAssignment}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitExprAssignment(KickCParser.ExprAssignmentContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by the {@code exprArray}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
|
@ -0,0 +1,32 @@
|
||||
package dk.camelot64.kickc.passes;
|
||||
|
||||
import dk.camelot64.kickc.model.*;
|
||||
|
||||
/**
|
||||
* Asserts that all intermediate lvalues have been replaced by something else
|
||||
*/
|
||||
public class Pass1AssertNoLValueIntermediate extends Pass1Base {
|
||||
|
||||
public Pass1AssertNoLValueIntermediate(Program program) {
|
||||
super(program);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean executeStep() {
|
||||
for (ControlFlowBlock block : getGraph().getAllBlocks()) {
|
||||
for (Statement statement : block.getStatements()) {
|
||||
if(statement instanceof StatementLValue) {
|
||||
LValue lValue = ((StatementLValue) statement).getlValue();
|
||||
if(lValue instanceof LvalueIntermediate) {
|
||||
VariableRef intermediateVar = ((LvalueIntermediate) lValue).getVariable();
|
||||
StatementAssignment assignment = getGraph().getAssignment(intermediateVar);
|
||||
throw new CompileError("Error! LValue is illegal. "+statement+" - definition of lValue "+assignment);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,65 @@
|
||||
package dk.camelot64.kickc.passes;
|
||||
|
||||
import dk.camelot64.kickc.model.*;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.ListIterator;
|
||||
|
||||
/**
|
||||
* Replaces all LValue intermediate lo/hi-assignments with a separate assignment to the modified variable.
|
||||
* <br>Example: <code><plotter = x & 8 </code>
|
||||
* <br>Becomes: <code> $1 =x & 8 , plotter = plotter lo= $1 </code>
|
||||
*/
|
||||
public class Pass1FixLValuesLoHi extends Pass1Base {
|
||||
|
||||
public Pass1FixLValuesLoHi(Program program) {
|
||||
super(program);
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean executeStep() {
|
||||
ProgramScope programScope = getProgram().getScope();
|
||||
for (ControlFlowBlock block : getProgram().getGraph().getAllBlocks()) {
|
||||
List<Statement> statements = block.getStatements();
|
||||
ListIterator<Statement> statementsIt = statements.listIterator();
|
||||
while (statementsIt.hasNext()) {
|
||||
Statement statement = statementsIt.next();
|
||||
if (statement instanceof StatementLValue && ((StatementLValue) statement).getlValue() instanceof LvalueIntermediate) {
|
||||
StatementLValue statementLValue = (StatementLValue) statement;
|
||||
LvalueIntermediate intermediate = (LvalueIntermediate) statementLValue.getlValue();
|
||||
StatementAssignment intermediateAssignment = getProgram().getGraph().getAssignment(intermediate.getVariable());
|
||||
if (Operator.LOWBYTE.equals(intermediateAssignment.getOperator()) && intermediateAssignment.getrValue1() == null) {
|
||||
// Found assignment to an intermediate low byte lValue <x = ...
|
||||
fixLoHiLValue(programScope, statementsIt, statementLValue, intermediate, intermediateAssignment, Operator.SET_LOWBYTE);
|
||||
} else if (Operator.HIBYTE.equals(intermediateAssignment.getOperator()) && intermediateAssignment.getrValue1() == null) {
|
||||
// Found assignment to an intermediate low byte lValue >x = ...
|
||||
fixLoHiLValue(programScope, statementsIt, statementLValue, intermediate, intermediateAssignment, Operator.SET_HIBYTE);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void fixLoHiLValue(
|
||||
ProgramScope programScope,
|
||||
ListIterator<Statement> statementsIt,
|
||||
StatementLValue statementLValue,
|
||||
LvalueIntermediate intermediate,
|
||||
StatementAssignment intermediateAssignment,
|
||||
Operator loHiOperator) {
|
||||
VariableRef loHiVar = (VariableRef) intermediateAssignment.getrValue2();
|
||||
Variable intermediateVar = programScope.getVariable(intermediate.getVariable());
|
||||
Scope currentScope = intermediateVar.getScope();
|
||||
// Let assignment put value into a tmp Var
|
||||
VariableIntermediate tmpVar = currentScope.addVariableIntermediate();
|
||||
VariableRef tmpVarRef = tmpVar.getRef();
|
||||
statementLValue.setlValue(tmpVarRef);
|
||||
SymbolTypeInference.inferLValue(programScope, statementLValue);
|
||||
// Insert an extra "set low" assignment statement
|
||||
Statement setLoHiAssignment = new StatementAssignment(loHiVar, loHiVar, loHiOperator, tmpVarRef);
|
||||
statementsIt.add(setLoHiAssignment);
|
||||
getLog().append("Fixing lo/hi-lvalue with new tmpVar " + tmpVarRef + " " + statementLValue.toString());
|
||||
}
|
||||
|
||||
}
|
@ -1,60 +0,0 @@
|
||||
package dk.camelot64.kickc.passes;
|
||||
|
||||
import dk.camelot64.kickc.model.*;
|
||||
|
||||
import java.util.Stack;
|
||||
|
||||
/**
|
||||
* Replaces all LValueLoHi with a separate assignment to the modified variable.
|
||||
* <br>Example: <code><plotter = x & 8 </code>
|
||||
* <br>Becomes: <code> $1 =x & 8 , plotter = plotter lo= $1 </code>
|
||||
*/
|
||||
public class Pass1FixLvalueLoHi extends Pass1Base {
|
||||
|
||||
public Pass1FixLvalueLoHi(Program program) {
|
||||
super(program);
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean executeStep() {
|
||||
Stack<Scope> scopeStack = new Stack<>();
|
||||
scopeStack.push(getScope());
|
||||
StatementSequence fixedSequence = new StatementSequence();
|
||||
for (Statement statement : getProgram().getStatementSequence().getStatements()) {
|
||||
if (statement instanceof StatementAssignment) {
|
||||
StatementAssignment assignment = (StatementAssignment) statement;
|
||||
if (assignment.getlValue() instanceof LvalueLoHiByte) {
|
||||
LvalueLoHiByte loHiByte = (LvalueLoHiByte) assignment.getlValue();
|
||||
if (assignment.getOperator() != null || assignment.getrValue1()!=null) {
|
||||
Scope currentScope = scopeStack.peek();
|
||||
VariableIntermediate tmpVar = currentScope.addVariableIntermediate();
|
||||
VariableRef tmpVarRef = tmpVar.getRef();
|
||||
Statement tmpAssignment = new StatementAssignment(tmpVarRef, assignment.getrValue1(), assignment.getOperator(), assignment.getrValue2());
|
||||
fixedSequence.addStatement(tmpAssignment);
|
||||
Statement setLoHiAssignment = new StatementAssignment(loHiByte.getVariable(), loHiByte.getVariable(), loHiByte.getOperator(), tmpVarRef);
|
||||
fixedSequence.addStatement(setLoHiAssignment);
|
||||
getLog().append("Fixing lo/hi-lvalue with new tmpVar " + tmpVarRef + " " + assignment.toString());
|
||||
} else {
|
||||
Statement setLoHiAssignment = new StatementAssignment(loHiByte.getVariable(), loHiByte.getVariable(), loHiByte.getOperator(), assignment.getrValue2());
|
||||
fixedSequence.addStatement(setLoHiAssignment);
|
||||
getLog().append("Fixing lo/hi-lvalue " + assignment.toString());
|
||||
}
|
||||
} else {
|
||||
fixedSequence.addStatement(statement);
|
||||
}
|
||||
} else {
|
||||
fixedSequence.addStatement(statement);
|
||||
}
|
||||
if (statement instanceof StatementProcedureBegin) {
|
||||
ProcedureRef procedureRef = ((StatementProcedureBegin) statement).getProcedure();
|
||||
Procedure procedure = getScope().getProcedure(procedureRef);
|
||||
scopeStack.push(procedure);
|
||||
} else if (statement instanceof StatementProcedureEnd) {
|
||||
scopeStack.pop();
|
||||
}
|
||||
}
|
||||
getProgram().setStatementSequence(fixedSequence);
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
@ -29,27 +29,9 @@ public class Pass1TypeInference extends Pass1Base {
|
||||
scopes.pop();
|
||||
} else if (statement instanceof StatementAssignment) {
|
||||
StatementAssignment assignment = (StatementAssignment) statement;
|
||||
LValue lValue = assignment.getlValue();
|
||||
if (lValue instanceof VariableRef) {
|
||||
Variable symbol = programScope.getVariable((VariableRef) lValue);
|
||||
if (SymbolType.VAR.equals(symbol.getType())) {
|
||||
// Unresolved symbol - perform inference
|
||||
Operator operator = assignment.getOperator();
|
||||
if (operator == null || assignment.getrValue1() == null) {
|
||||
// Copy operation or Unary operation
|
||||
RValue rValue = assignment.getrValue2();
|
||||
SymbolType type = SymbolTypeInference.inferType(programScope, operator, rValue);
|
||||
symbol.setTypeInferred(type);
|
||||
} else {
|
||||
// Binary operation
|
||||
SymbolType type = SymbolTypeInference.inferType(programScope, assignment.getrValue1(), assignment.getOperator(), assignment.getrValue2());
|
||||
symbol.setTypeInferred(type);
|
||||
}
|
||||
}
|
||||
}
|
||||
SymbolTypeInference.inferAssignmentLValue(programScope, assignment);
|
||||
} else if(statement instanceof StatementCall) {
|
||||
StatementCall call = (StatementCall) statement;
|
||||
LValue lValue = call.getlValue();
|
||||
String procedureName = call.getProcedureName();
|
||||
Procedure procedure = scopes.peek().getProcedure(procedureName);
|
||||
if(procedure==null) {
|
||||
@ -59,10 +41,7 @@ public class Pass1TypeInference extends Pass1Base {
|
||||
if(procedure.getParameters().size()!=call.getParameters().size()) {
|
||||
throw new CompileError("Wrong number of parameters in call. Expected " +procedure.getParameters().size()+". "+statement.toString());
|
||||
}
|
||||
if(lValue instanceof VariableRef) {
|
||||
Variable lValueVar = programScope.getVariable((VariableRef) lValue);
|
||||
lValueVar.setTypeInferred(procedure.getReturnType());
|
||||
}
|
||||
SymbolTypeInference.inferCallLValue(programScope, (StatementCall) statement);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
@ -39,8 +39,15 @@ public class Pass2ConstantAdditionElimination extends Pass2SsaOptimization {
|
||||
if (statement instanceof StatementAssignment) {
|
||||
StatementAssignment assignment = (StatementAssignment) statement;
|
||||
if(assignment.getlValue() instanceof PointerDereferenceIndexed) {
|
||||
optimized |= optimizePointerDereferenceIndexed(assignment);
|
||||
optimized |= optimizePointerDereferenceIndexed(new VariableReplacer.ReplacableLValue(assignment));
|
||||
}
|
||||
if(assignment.getrValue1() instanceof PointerDereferenceIndexed) {
|
||||
optimized |= optimizePointerDereferenceIndexed(new VariableReplacer.ReplacableRValue1(assignment));
|
||||
}
|
||||
if(assignment.getrValue2() instanceof PointerDereferenceIndexed) {
|
||||
optimized |= optimizePointerDereferenceIndexed(new VariableReplacer.ReplacableRValue2(assignment));
|
||||
}
|
||||
|
||||
Operator operator = assignment.getOperator();
|
||||
if (operator != null) {
|
||||
switch (operator.getOperator()) {
|
||||
@ -52,20 +59,28 @@ public class Pass2ConstantAdditionElimination extends Pass2SsaOptimization {
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else if(statement instanceof StatementConditionalJump) {
|
||||
StatementConditionalJump jump = (StatementConditionalJump) statement;
|
||||
if(jump.getrValue1() instanceof PointerDereferenceIndexed) {
|
||||
optimized |= optimizePointerDereferenceIndexed(new VariableReplacer.ReplacableCondRValue1(jump));
|
||||
}
|
||||
if(jump.getrValue2() instanceof PointerDereferenceIndexed) {
|
||||
optimized |= optimizePointerDereferenceIndexed(new VariableReplacer.ReplacableCondRValue2(jump));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return optimized;
|
||||
}
|
||||
|
||||
private boolean optimizePointerDereferenceIndexed(StatementAssignment assignment) {
|
||||
PointerDereferenceIndexed pointerDereferenceIndexed = (PointerDereferenceIndexed) assignment.getlValue();
|
||||
private boolean optimizePointerDereferenceIndexed(VariableReplacer.ReplacableValue value) {
|
||||
PointerDereferenceIndexed pointerDereferenceIndexed = (PointerDereferenceIndexed) value.get();
|
||||
if(pointerDereferenceIndexed.getPointer() instanceof ConstantValue && pointerDereferenceIndexed.getIndex() instanceof ConstantValue) {
|
||||
ConstantValue ptrConstant = (ConstantValue) pointerDereferenceIndexed.getPointer();
|
||||
ConstantValue idxConstant = (ConstantValue) pointerDereferenceIndexed.getIndex();
|
||||
ConstantValue newPtr = new ConstantBinary(ptrConstant, Operator.PLUS, idxConstant);
|
||||
assignment.setlValue(new PointerDereferenceSimple(newPtr));
|
||||
getLog().append("Consolidated assigned array index constant in assignment " + assignment.getlValue());
|
||||
value.set(new PointerDereferenceSimple(newPtr));
|
||||
getLog().append("Consolidated array index constant in " + value.get().toString());
|
||||
return true;
|
||||
}
|
||||
if(pointerDereferenceIndexed.getPointer() instanceof ConstantValue && pointerDereferenceIndexed.getIndex() instanceof VariableRef) {
|
||||
@ -75,7 +90,7 @@ public class Pass2ConstantAdditionElimination extends Pass2SsaOptimization {
|
||||
ConstantValue ptrConstant = (ConstantValue) pointerDereferenceIndexed.getPointer();
|
||||
ConstantValue newPtr = new ConstantBinary(ptrConstant, Operator.PLUS, consolidated);
|
||||
pointerDereferenceIndexed.setPointer(newPtr);
|
||||
getLog().append("Consolidated assigned array index constant in assignment " + assignment.getlValue());
|
||||
getLog().append("Consolidated array index constant in assignment " + value.get().toString());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -396,58 +396,6 @@ public class StatementSequenceGenerator extends KickCBaseVisitor<Object> {
|
||||
PrePostModifierHandler.addPostModifiers(this, initializer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void visitStmtAssignment(KickCParser.StmtAssignmentContext ctx) {
|
||||
PrePostModifierHandler.addPreModifiers(this, ctx);
|
||||
LValue lValue = (LValue) visit(ctx.lvalue());
|
||||
RValue rValue = (RValue) this.visit(ctx.expr());
|
||||
Statement stmt = new StatementAssignment(lValue, rValue);
|
||||
sequence.addStatement(stmt);
|
||||
PrePostModifierHandler.addPostModifiers(this, ctx);
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public LValue visitLvalueName(KickCParser.LvalueNameContext ctx) {
|
||||
Variable variable = getCurrentSymbols().getVariable(ctx.NAME().getText());
|
||||
return variable.getRef();
|
||||
}
|
||||
|
||||
@Override
|
||||
public LValue visitLvaluePtr(KickCParser.LvaluePtrContext ctx) {
|
||||
Variable variable = getCurrentSymbols().getVariable(ctx.NAME().getText());
|
||||
return new PointerDereferenceSimple(variable.getRef());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object visitLvaluePtrExpr(KickCParser.LvaluePtrExprContext ctx) {
|
||||
RValue rValue = (RValue) this.visit(ctx.expr());
|
||||
return new PointerDereferenceSimple(rValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object visitLvalueLoHi(KickCParser.LvalueLoHiContext ctx) {
|
||||
LValue lval = (LValue) visit(ctx.lvalue());
|
||||
if (lval instanceof VariableRef) {
|
||||
String opTxt = ctx.getChild(0).getText();
|
||||
if (opTxt.equals("<")) {
|
||||
return new LvalueLoHiByte(Operator.SET_LOWBYTE, (VariableRef) lval);
|
||||
} else if (opTxt.equals(">")) {
|
||||
return new LvalueLoHiByte(Operator.SET_HIBYTE, (VariableRef) lval);
|
||||
} else {
|
||||
throw new RuntimeException("Not implemented - lo/hi-lvalue operator " + opTxt);
|
||||
}
|
||||
}
|
||||
throw new RuntimeException("Not implemented - lo/hi lvalues of non-variables");
|
||||
}
|
||||
|
||||
@Override
|
||||
public LValue visitLvalueArray(KickCParser.LvalueArrayContext ctx) {
|
||||
LValue lval = (LValue) visit(ctx.lvalue());
|
||||
RValue index = (RValue) visit(ctx.expr());
|
||||
return new PointerDereferenceIndexed(lval, index);
|
||||
}
|
||||
|
||||
@Override
|
||||
public RValue visitInitList(KickCParser.InitListContext ctx) {
|
||||
List<RValue> initValues = new ArrayList<>();
|
||||
@ -489,6 +437,19 @@ public class StatementSequenceGenerator extends KickCBaseVisitor<Object> {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object visitExprAssignment(KickCParser.ExprAssignmentContext ctx) {
|
||||
LValue lValue = (LValue) visit(ctx.expr(0));
|
||||
if(lValue instanceof VariableRef && ((VariableRef) lValue).isIntermediate()) {
|
||||
// Encountered an intermediate variable. This must be turned into a proper LValue later. Put it into a marker to signify that
|
||||
lValue = new LvalueIntermediate((VariableRef) lValue);
|
||||
}
|
||||
RValue rValue = (RValue) this.visit(ctx.expr(1));
|
||||
Statement stmt = new StatementAssignment(lValue, rValue);
|
||||
sequence.addStatement(stmt);
|
||||
return lValue;
|
||||
}
|
||||
|
||||
@Override
|
||||
public RValue visitExprCast(KickCParser.ExprCastContext ctx) {
|
||||
RValue child = (RValue) this.visit(ctx.expr());
|
||||
@ -530,12 +491,7 @@ public class StatementSequenceGenerator extends KickCBaseVisitor<Object> {
|
||||
public RValue visitExprArray(KickCParser.ExprArrayContext ctx) {
|
||||
RValue array = (LValue) visit(ctx.expr(0));
|
||||
RValue index = (RValue) visit(ctx.expr(1));
|
||||
Operator operator = Operator.DEREF_IDX;
|
||||
VariableIntermediate tmpVar = getCurrentSymbols().addVariableIntermediate();
|
||||
VariableRef tmpVarRef = tmpVar.getRef();
|
||||
Statement stmt = new StatementAssignment(tmpVarRef, array, operator, index);
|
||||
sequence.addStatement(stmt);
|
||||
return tmpVarRef;
|
||||
return new PointerDereferenceIndexed(array, index);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -578,20 +534,22 @@ public class StatementSequenceGenerator extends KickCBaseVisitor<Object> {
|
||||
return tmpVarRef;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object visitExprPtr(KickCParser.ExprPtrContext ctx) {
|
||||
RValue child = (RValue) this.visit(ctx.expr());
|
||||
return new PointerDereferenceSimple(child);
|
||||
}
|
||||
|
||||
@Override
|
||||
public RValue visitExprUnary(KickCParser.ExprUnaryContext ctx) {
|
||||
RValue child = (RValue) this.visit(ctx.expr());
|
||||
String op = ((TerminalNode) ctx.getChild(0)).getSymbol().getText();
|
||||
Operator operator = Operator.getUnary(op);
|
||||
if (Operator.DEREF.equals(operator)) {
|
||||
return new PointerDereferenceSimple(child);
|
||||
} else {
|
||||
VariableIntermediate tmpVar = getCurrentSymbols().addVariableIntermediate();
|
||||
VariableRef tmpVarRef = tmpVar.getRef();
|
||||
Statement stmt = new StatementAssignment(tmpVarRef, operator, child);
|
||||
sequence.addStatement(stmt);
|
||||
return tmpVarRef;
|
||||
}
|
||||
VariableIntermediate tmpVar = getCurrentSymbols().addVariableIntermediate();
|
||||
VariableRef tmpVarRef = tmpVar.getRef();
|
||||
Statement stmt = new StatementAssignment(tmpVarRef, operator, child);
|
||||
sequence.addStatement(stmt);
|
||||
return tmpVarRef;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -28,10 +28,6 @@ public class TestErrors extends TestCase {
|
||||
compileAndCompare("nocast");
|
||||
}
|
||||
|
||||
public void testConstants() throws IOException, URISyntaxException {
|
||||
compileAndCompare("constants");
|
||||
}
|
||||
|
||||
public void testInlineAsmParam() throws IOException, URISyntaxException {
|
||||
compileAndCompare("inline-asm-param");
|
||||
}
|
||||
@ -41,11 +37,6 @@ public class TestErrors extends TestCase {
|
||||
compileAndCompare(filename);
|
||||
}
|
||||
|
||||
public void testForIncrementAssign() throws IOException, URISyntaxException {
|
||||
String filename = "forincrementassign";
|
||||
compileAndCompare(filename);
|
||||
}
|
||||
|
||||
private void compileAndCompare(String filename) throws IOException, URISyntaxException {
|
||||
TestErrors tester = new TestErrors();
|
||||
tester.testFile(filename);
|
||||
|
@ -22,6 +22,18 @@ public class TestPrograms extends TestCase {
|
||||
helper = new ReferenceHelper("dk/camelot64/kickc/test/ref/");
|
||||
}
|
||||
|
||||
public void testForIncrementAssign() throws IOException, URISyntaxException {
|
||||
compileAndCompare("forincrementassign");
|
||||
}
|
||||
|
||||
public void testConstants() throws IOException, URISyntaxException {
|
||||
compileAndCompare("constants");
|
||||
}
|
||||
|
||||
public void testInlineAssignment() throws IOException, URISyntaxException {
|
||||
compileAndCompare("inline-assignment");
|
||||
}
|
||||
|
||||
public void testInlineWord() throws IOException, URISyntaxException {
|
||||
compileAndCompare("inline-word");
|
||||
}
|
||||
@ -307,6 +319,10 @@ public class TestPrograms extends TestCase {
|
||||
assertError("procedurenotfound", "Called procedure not found");
|
||||
}
|
||||
|
||||
public void testIllegalLValue() throws IOException, URISyntaxException {
|
||||
assertError("illegallvalue", "LValue is illegal");
|
||||
}
|
||||
|
||||
private void assertError(String kcFile, String expectError) throws IOException, URISyntaxException {
|
||||
try {
|
||||
compileAndCompare(kcFile);
|
||||
|
@ -1,3 +1,4 @@
|
||||
import "print.kc"
|
||||
const byte* BGCOL = $d021;
|
||||
const byte GREEN = 5;
|
||||
const byte RED = 2 ;
|
||||
@ -56,28 +57,3 @@ void assert_sbyte(byte* msg, signed byte b, signed byte c) {
|
||||
}
|
||||
print_ln();
|
||||
}
|
||||
|
||||
byte* line_cursor = $0400;
|
||||
byte* char_cursor = line_cursor;
|
||||
|
||||
// Print a zero-terminated string
|
||||
void print_str(byte* str) {
|
||||
while(*str!='@') {
|
||||
*(char_cursor++) = *(str++);
|
||||
}
|
||||
}
|
||||
|
||||
// Print a newline
|
||||
void print_ln() {
|
||||
do {
|
||||
line_cursor = line_cursor + $28;
|
||||
} while (line_cursor<char_cursor);
|
||||
char_cursor = line_cursor;
|
||||
}
|
||||
|
||||
// Clear the screen
|
||||
void print_cls() {
|
||||
for(byte* sc=$0400; sc!=$0400+1000; sc++) {
|
||||
*sc = ' ';
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
// Classic for() does not allow assignment as increment, eg. for(byte i=0;i<25;i=i+2) {}
|
||||
// Classic for() does not allow assignment as increment, eg. for(byte i=0;i<40;i=i+2) {}
|
||||
// The following should give a program rendering a char on every second char of the first line - but results in a syntax error
|
||||
|
||||
byte* SCREEN = $0400;
|
||||
|
5
src/main/java/dk/camelot64/kickc/test/illegallvalue.kc
Normal file
5
src/main/java/dk/camelot64/kickc/test/illegallvalue.kc
Normal file
@ -0,0 +1,5 @@
|
||||
|
||||
void main() {
|
||||
byte q=0;
|
||||
q+1=1;
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
const byte* SCREEN = $400;
|
||||
|
||||
void main() {
|
||||
byte a;
|
||||
for( byte i : 0..39) {
|
||||
SCREEN[i] = a = i;
|
||||
(SCREEN+80)[i] = a;
|
||||
}
|
||||
}
|
@ -1,8 +1,8 @@
|
||||
const byte* SCREEN = $400;
|
||||
|
||||
void main() {
|
||||
byte[] his = { >SCREEN, >SCREEN+$100 };
|
||||
for( byte h: 0..1) {
|
||||
byte[] his = { >SCREEN, >SCREEN+$100, >SCREEN+$200 };
|
||||
for( byte h: 0..2) {
|
||||
for (byte l: 4..7) {
|
||||
word w = { his[h], l };
|
||||
byte* sc = (byte*)w;
|
||||
|
@ -36,3 +36,11 @@ void print_char(byte ch) {
|
||||
*(char_cursor++) = ch;
|
||||
}
|
||||
|
||||
// Clear the screen
|
||||
void print_cls() {
|
||||
for(byte* sc=$0400; sc!=$0400+1000; sc++) {
|
||||
*sc = ' ';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -222,8 +222,7 @@ line_ydxi: {
|
||||
rts
|
||||
}
|
||||
plot: {
|
||||
.label _2 = $a
|
||||
.label _4 = 8
|
||||
.label _0 = 8
|
||||
.label plotter_x = 8
|
||||
.label plotter_y = $b
|
||||
.label plotter = 8
|
||||
@ -232,21 +231,19 @@ plot: {
|
||||
lda plot_xlo,x
|
||||
sta plotter_x
|
||||
lda plot_yhi,y
|
||||
sta _2
|
||||
sta plotter_y+1
|
||||
lda plot_ylo,y
|
||||
sta plotter_y
|
||||
lda _2
|
||||
sta plotter_y+1
|
||||
lda _4
|
||||
lda _0
|
||||
clc
|
||||
adc plotter_y
|
||||
sta _4
|
||||
lda _4+1
|
||||
sta _0
|
||||
lda _0+1
|
||||
adc plotter_y+1
|
||||
sta _4+1
|
||||
lda plot_bit,x
|
||||
sta _0+1
|
||||
ldy #0
|
||||
ora (plotter),y
|
||||
lda (plotter),y
|
||||
ora plot_bit,x
|
||||
sta (plotter),y
|
||||
rts
|
||||
}
|
||||
|
@ -33,10 +33,10 @@ lines: scope:[lines] from main::@1
|
||||
to:lines::@1
|
||||
lines::@1: scope:[lines] from lines lines::@3
|
||||
[16] (byte) lines::l#2 ← phi( lines/(byte/signed byte/word/signed word) 0 lines::@3/(byte) lines::l#1 ) [ lines::l#2 ] ( main:2::lines:12 [ lines::l#2 ] )
|
||||
[17] (byte) line::x0#0 ← (const byte[]) lines_x#0 *idx (byte) lines::l#2 [ lines::l#2 line::x0#0 ] ( main:2::lines:12 [ lines::l#2 line::x0#0 ] )
|
||||
[18] (byte) line::x1#0 ← (const byte[]) lines_x#0+(byte/signed byte/word/signed word) 1 *idx (byte) lines::l#2 [ lines::l#2 line::x0#0 line::x1#0 ] ( main:2::lines:12 [ lines::l#2 line::x0#0 line::x1#0 ] )
|
||||
[19] (byte) line::y0#0 ← (const byte[]) lines_y#0 *idx (byte) lines::l#2 [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 ] ( main:2::lines:12 [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 ] )
|
||||
[20] (byte) line::y1#0 ← (const byte[]) lines_y#0+(byte/signed byte/word/signed word) 1 *idx (byte) lines::l#2 [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 line::y1#0 ] ( main:2::lines:12 [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 line::y1#0 ] )
|
||||
[17] (byte) line::x0#0 ← *((const byte[]) lines_x#0 + (byte) lines::l#2) [ lines::l#2 line::x0#0 ] ( main:2::lines:12 [ lines::l#2 line::x0#0 ] )
|
||||
[18] (byte) line::x1#0 ← *((const byte[]) lines_x#0+(byte/signed byte/word/signed word) 1 + (byte) lines::l#2) [ lines::l#2 line::x0#0 line::x1#0 ] ( main:2::lines:12 [ lines::l#2 line::x0#0 line::x1#0 ] )
|
||||
[19] (byte) line::y0#0 ← *((const byte[]) lines_y#0 + (byte) lines::l#2) [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 ] ( main:2::lines:12 [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 ] )
|
||||
[20] (byte) line::y1#0 ← *((const byte[]) lines_y#0+(byte/signed byte/word/signed word) 1 + (byte) lines::l#2) [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 line::y1#0 ] ( main:2::lines:12 [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 line::y1#0 ] )
|
||||
[21] call line param-assignment [ lines::l#2 ] ( main:2::lines:12 [ lines::l#2 ] )
|
||||
to:lines::@3
|
||||
lines::@3: scope:[lines] from lines::@1
|
||||
@ -175,184 +175,179 @@ line_ydxi::@return: scope:[line_ydxi] from line_ydxi::@2
|
||||
[101] return [ ] ( main:2::lines:12::line:21::line_ydxi:42 [ lines::l#2 ] main:2::lines:12::line:21::line_ydxi:86 [ lines::l#2 ] )
|
||||
to:@return
|
||||
plot: scope:[plot] from line_xdyd::@1 line_xdyi::@1 line_ydxd::@1 line_ydxi::@1
|
||||
[102] (byte) plot::y#4 ← phi( line_xdyd::@1/(byte) plot::y#1 line_xdyi::@1/(byte) plot::y#0 line_ydxd::@1/(byte) plot::y#3 line_ydxi::@1/(byte) plot::y#2 ) [ plot::x#4 plot::y#4 ] ( main:2::lines:12::line:21::line_ydxi:42::plot:92 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#3 line_ydxi::y#3 line_ydxi::e#3 plot::x#4 plot::y#4 ] main:2::lines:12::line:21::line_ydxi:86::plot:92 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#3 line_ydxi::y#3 line_ydxi::e#3 plot::x#4 plot::y#4 ] main:2::lines:12::line:21::line_xdyi:35::plot:120 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 plot::x#4 plot::y#4 ] main:2::lines:12::line:21::line_xdyi:80::plot:120 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 plot::x#4 plot::y#4 ] main:2::lines:12::line:21::line_ydxd:56::plot:135 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 plot::x#4 plot::y#4 ] main:2::lines:12::line:21::line_ydxd:72::plot:135 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 plot::x#4 plot::y#4 ] main:2::lines:12::line:21::line_xdyd:50::plot:150 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 plot::x#4 plot::y#4 ] main:2::lines:12::line:21::line_xdyd:66::plot:150 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 plot::x#4 plot::y#4 ] )
|
||||
[102] (byte) plot::x#4 ← phi( line_xdyd::@1/(byte) plot::x#1 line_xdyi::@1/(byte) plot::x#0 line_ydxd::@1/(byte) plot::x#3 line_ydxi::@1/(byte) plot::x#2 ) [ plot::x#4 plot::y#4 ] ( main:2::lines:12::line:21::line_ydxi:42::plot:92 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#3 line_ydxi::y#3 line_ydxi::e#3 plot::x#4 plot::y#4 ] main:2::lines:12::line:21::line_ydxi:86::plot:92 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#3 line_ydxi::y#3 line_ydxi::e#3 plot::x#4 plot::y#4 ] main:2::lines:12::line:21::line_xdyi:35::plot:120 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 plot::x#4 plot::y#4 ] main:2::lines:12::line:21::line_xdyi:80::plot:120 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 plot::x#4 plot::y#4 ] main:2::lines:12::line:21::line_ydxd:56::plot:135 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 plot::x#4 plot::y#4 ] main:2::lines:12::line:21::line_ydxd:72::plot:135 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 plot::x#4 plot::y#4 ] main:2::lines:12::line:21::line_xdyd:50::plot:150 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 plot::x#4 plot::y#4 ] main:2::lines:12::line:21::line_xdyd:66::plot:150 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 plot::x#4 plot::y#4 ] )
|
||||
[103] (byte~) plot::$0 ← (const byte[]) plot_xhi#0 *idx (byte) plot::x#4 [ plot::x#4 plot::y#4 plot::$0 ] ( main:2::lines:12::line:21::line_ydxi:42::plot:92 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#3 line_ydxi::y#3 line_ydxi::e#3 plot::x#4 plot::y#4 plot::$0 ] main:2::lines:12::line:21::line_ydxi:86::plot:92 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#3 line_ydxi::y#3 line_ydxi::e#3 plot::x#4 plot::y#4 plot::$0 ] main:2::lines:12::line:21::line_xdyi:35::plot:120 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 plot::x#4 plot::y#4 plot::$0 ] main:2::lines:12::line:21::line_xdyi:80::plot:120 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 plot::x#4 plot::y#4 plot::$0 ] main:2::lines:12::line:21::line_ydxd:56::plot:135 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 plot::x#4 plot::y#4 plot::$0 ] main:2::lines:12::line:21::line_ydxd:72::plot:135 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 plot::x#4 plot::y#4 plot::$0 ] main:2::lines:12::line:21::line_xdyd:50::plot:150 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 plot::x#4 plot::y#4 plot::$0 ] main:2::lines:12::line:21::line_xdyd:66::plot:150 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 plot::x#4 plot::y#4 plot::$0 ] )
|
||||
[104] (byte~) plot::$1 ← (const byte[]) plot_xlo#0 *idx (byte) plot::x#4 [ plot::x#4 plot::y#4 plot::$0 plot::$1 ] ( main:2::lines:12::line:21::line_ydxi:42::plot:92 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#3 line_ydxi::y#3 line_ydxi::e#3 plot::x#4 plot::y#4 plot::$0 plot::$1 ] main:2::lines:12::line:21::line_ydxi:86::plot:92 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#3 line_ydxi::y#3 line_ydxi::e#3 plot::x#4 plot::y#4 plot::$0 plot::$1 ] main:2::lines:12::line:21::line_xdyi:35::plot:120 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 plot::x#4 plot::y#4 plot::$0 plot::$1 ] main:2::lines:12::line:21::line_xdyi:80::plot:120 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 plot::x#4 plot::y#4 plot::$0 plot::$1 ] main:2::lines:12::line:21::line_ydxd:56::plot:135 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 plot::x#4 plot::y#4 plot::$0 plot::$1 ] main:2::lines:12::line:21::line_ydxd:72::plot:135 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 plot::x#4 plot::y#4 plot::$0 plot::$1 ] main:2::lines:12::line:21::line_xdyd:50::plot:150 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 plot::x#4 plot::y#4 plot::$0 plot::$1 ] main:2::lines:12::line:21::line_xdyd:66::plot:150 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 plot::x#4 plot::y#4 plot::$0 plot::$1 ] )
|
||||
[105] (word) plot::plotter_x#0 ← (byte~) plot::$0 w= (byte~) plot::$1 [ plot::x#4 plot::y#4 plot::plotter_x#0 ] ( main:2::lines:12::line:21::line_ydxi:42::plot:92 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#3 line_ydxi::y#3 line_ydxi::e#3 plot::x#4 plot::y#4 plot::plotter_x#0 ] main:2::lines:12::line:21::line_ydxi:86::plot:92 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#3 line_ydxi::y#3 line_ydxi::e#3 plot::x#4 plot::y#4 plot::plotter_x#0 ] main:2::lines:12::line:21::line_xdyi:35::plot:120 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 plot::x#4 plot::y#4 plot::plotter_x#0 ] main:2::lines:12::line:21::line_xdyi:80::plot:120 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 plot::x#4 plot::y#4 plot::plotter_x#0 ] main:2::lines:12::line:21::line_ydxd:56::plot:135 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 plot::x#4 plot::y#4 plot::plotter_x#0 ] main:2::lines:12::line:21::line_ydxd:72::plot:135 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 plot::x#4 plot::y#4 plot::plotter_x#0 ] main:2::lines:12::line:21::line_xdyd:50::plot:150 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 plot::x#4 plot::y#4 plot::plotter_x#0 ] main:2::lines:12::line:21::line_xdyd:66::plot:150 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 plot::x#4 plot::y#4 plot::plotter_x#0 ] )
|
||||
[106] (byte~) plot::$2 ← (const byte[]) plot_yhi#0 *idx (byte) plot::y#4 [ plot::x#4 plot::y#4 plot::plotter_x#0 plot::$2 ] ( main:2::lines:12::line:21::line_ydxi:42::plot:92 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#3 line_ydxi::y#3 line_ydxi::e#3 plot::x#4 plot::y#4 plot::plotter_x#0 plot::$2 ] main:2::lines:12::line:21::line_ydxi:86::plot:92 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#3 line_ydxi::y#3 line_ydxi::e#3 plot::x#4 plot::y#4 plot::plotter_x#0 plot::$2 ] main:2::lines:12::line:21::line_xdyi:35::plot:120 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 plot::x#4 plot::y#4 plot::plotter_x#0 plot::$2 ] main:2::lines:12::line:21::line_xdyi:80::plot:120 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 plot::x#4 plot::y#4 plot::plotter_x#0 plot::$2 ] main:2::lines:12::line:21::line_ydxd:56::plot:135 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 plot::x#4 plot::y#4 plot::plotter_x#0 plot::$2 ] main:2::lines:12::line:21::line_ydxd:72::plot:135 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 plot::x#4 plot::y#4 plot::plotter_x#0 plot::$2 ] main:2::lines:12::line:21::line_xdyd:50::plot:150 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 plot::x#4 plot::y#4 plot::plotter_x#0 plot::$2 ] main:2::lines:12::line:21::line_xdyd:66::plot:150 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 plot::x#4 plot::y#4 plot::plotter_x#0 plot::$2 ] )
|
||||
[107] (byte~) plot::$3 ← (const byte[]) plot_ylo#0 *idx (byte) plot::y#4 [ plot::x#4 plot::plotter_x#0 plot::$2 plot::$3 ] ( main:2::lines:12::line:21::line_ydxi:42::plot:92 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#3 line_ydxi::y#3 line_ydxi::e#3 plot::x#4 plot::plotter_x#0 plot::$2 plot::$3 ] main:2::lines:12::line:21::line_ydxi:86::plot:92 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#3 line_ydxi::y#3 line_ydxi::e#3 plot::x#4 plot::plotter_x#0 plot::$2 plot::$3 ] main:2::lines:12::line:21::line_xdyi:35::plot:120 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 plot::x#4 plot::plotter_x#0 plot::$2 plot::$3 ] main:2::lines:12::line:21::line_xdyi:80::plot:120 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 plot::x#4 plot::plotter_x#0 plot::$2 plot::$3 ] main:2::lines:12::line:21::line_ydxd:56::plot:135 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 plot::x#4 plot::plotter_x#0 plot::$2 plot::$3 ] main:2::lines:12::line:21::line_ydxd:72::plot:135 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 plot::x#4 plot::plotter_x#0 plot::$2 plot::$3 ] main:2::lines:12::line:21::line_xdyd:50::plot:150 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 plot::x#4 plot::plotter_x#0 plot::$2 plot::$3 ] main:2::lines:12::line:21::line_xdyd:66::plot:150 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 plot::x#4 plot::plotter_x#0 plot::$2 plot::$3 ] )
|
||||
[108] (word) plot::plotter_y#0 ← (byte~) plot::$2 w= (byte~) plot::$3 [ plot::x#4 plot::plotter_x#0 plot::plotter_y#0 ] ( main:2::lines:12::line:21::line_ydxi:42::plot:92 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#3 line_ydxi::y#3 line_ydxi::e#3 plot::x#4 plot::plotter_x#0 plot::plotter_y#0 ] main:2::lines:12::line:21::line_ydxi:86::plot:92 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#3 line_ydxi::y#3 line_ydxi::e#3 plot::x#4 plot::plotter_x#0 plot::plotter_y#0 ] main:2::lines:12::line:21::line_xdyi:35::plot:120 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 plot::x#4 plot::plotter_x#0 plot::plotter_y#0 ] main:2::lines:12::line:21::line_xdyi:80::plot:120 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 plot::x#4 plot::plotter_x#0 plot::plotter_y#0 ] main:2::lines:12::line:21::line_ydxd:56::plot:135 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 plot::x#4 plot::plotter_x#0 plot::plotter_y#0 ] main:2::lines:12::line:21::line_ydxd:72::plot:135 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 plot::x#4 plot::plotter_x#0 plot::plotter_y#0 ] main:2::lines:12::line:21::line_xdyd:50::plot:150 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 plot::x#4 plot::plotter_x#0 plot::plotter_y#0 ] main:2::lines:12::line:21::line_xdyd:66::plot:150 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 plot::x#4 plot::plotter_x#0 plot::plotter_y#0 ] )
|
||||
[109] (word~) plot::$4 ← (word) plot::plotter_x#0 + (word) plot::plotter_y#0 [ plot::x#4 plot::$4 ] ( main:2::lines:12::line:21::line_ydxi:42::plot:92 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#3 line_ydxi::y#3 line_ydxi::e#3 plot::x#4 plot::$4 ] main:2::lines:12::line:21::line_ydxi:86::plot:92 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#3 line_ydxi::y#3 line_ydxi::e#3 plot::x#4 plot::$4 ] main:2::lines:12::line:21::line_xdyi:35::plot:120 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 plot::x#4 plot::$4 ] main:2::lines:12::line:21::line_xdyi:80::plot:120 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 plot::x#4 plot::$4 ] main:2::lines:12::line:21::line_ydxd:56::plot:135 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 plot::x#4 plot::$4 ] main:2::lines:12::line:21::line_ydxd:72::plot:135 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 plot::x#4 plot::$4 ] main:2::lines:12::line:21::line_xdyd:50::plot:150 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 plot::x#4 plot::$4 ] main:2::lines:12::line:21::line_xdyd:66::plot:150 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 plot::x#4 plot::$4 ] )
|
||||
[110] (byte*) plot::plotter#0 ← ((byte*)) (word~) plot::$4 [ plot::x#4 plot::plotter#0 ] ( main:2::lines:12::line:21::line_ydxi:42::plot:92 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#3 line_ydxi::y#3 line_ydxi::e#3 plot::x#4 plot::plotter#0 ] main:2::lines:12::line:21::line_ydxi:86::plot:92 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#3 line_ydxi::y#3 line_ydxi::e#3 plot::x#4 plot::plotter#0 ] main:2::lines:12::line:21::line_xdyi:35::plot:120 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 plot::x#4 plot::plotter#0 ] main:2::lines:12::line:21::line_xdyi:80::plot:120 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 plot::x#4 plot::plotter#0 ] main:2::lines:12::line:21::line_ydxd:56::plot:135 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 plot::x#4 plot::plotter#0 ] main:2::lines:12::line:21::line_ydxd:72::plot:135 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 plot::x#4 plot::plotter#0 ] main:2::lines:12::line:21::line_xdyd:50::plot:150 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 plot::x#4 plot::plotter#0 ] main:2::lines:12::line:21::line_xdyd:66::plot:150 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 plot::x#4 plot::plotter#0 ] )
|
||||
[111] (byte~) plot::$5 ← (const byte[]) plot_bit#0 *idx (byte) plot::x#4 [ plot::plotter#0 plot::$5 ] ( main:2::lines:12::line:21::line_ydxi:42::plot:92 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#3 line_ydxi::y#3 line_ydxi::e#3 plot::plotter#0 plot::$5 ] main:2::lines:12::line:21::line_ydxi:86::plot:92 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#3 line_ydxi::y#3 line_ydxi::e#3 plot::plotter#0 plot::$5 ] main:2::lines:12::line:21::line_xdyi:35::plot:120 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 plot::plotter#0 plot::$5 ] main:2::lines:12::line:21::line_xdyi:80::plot:120 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 plot::plotter#0 plot::$5 ] main:2::lines:12::line:21::line_ydxd:56::plot:135 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 plot::plotter#0 plot::$5 ] main:2::lines:12::line:21::line_ydxd:72::plot:135 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 plot::plotter#0 plot::$5 ] main:2::lines:12::line:21::line_xdyd:50::plot:150 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 plot::plotter#0 plot::$5 ] main:2::lines:12::line:21::line_xdyd:66::plot:150 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 plot::plotter#0 plot::$5 ] )
|
||||
[112] (byte~) plot::$6 ← *((byte*) plot::plotter#0) | (byte~) plot::$5 [ plot::plotter#0 plot::$6 ] ( main:2::lines:12::line:21::line_ydxi:42::plot:92 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#3 line_ydxi::y#3 line_ydxi::e#3 plot::plotter#0 plot::$6 ] main:2::lines:12::line:21::line_ydxi:86::plot:92 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#3 line_ydxi::y#3 line_ydxi::e#3 plot::plotter#0 plot::$6 ] main:2::lines:12::line:21::line_xdyi:35::plot:120 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 plot::plotter#0 plot::$6 ] main:2::lines:12::line:21::line_xdyi:80::plot:120 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 plot::plotter#0 plot::$6 ] main:2::lines:12::line:21::line_ydxd:56::plot:135 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 plot::plotter#0 plot::$6 ] main:2::lines:12::line:21::line_ydxd:72::plot:135 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 plot::plotter#0 plot::$6 ] main:2::lines:12::line:21::line_xdyd:50::plot:150 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 plot::plotter#0 plot::$6 ] main:2::lines:12::line:21::line_xdyd:66::plot:150 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 plot::plotter#0 plot::$6 ] )
|
||||
[113] *((byte*) plot::plotter#0) ← (byte~) plot::$6 [ ] ( main:2::lines:12::line:21::line_ydxi:42::plot:92 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#3 line_ydxi::y#3 line_ydxi::e#3 ] main:2::lines:12::line:21::line_ydxi:86::plot:92 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#3 line_ydxi::y#3 line_ydxi::e#3 ] main:2::lines:12::line:21::line_xdyi:35::plot:120 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 ] main:2::lines:12::line:21::line_xdyi:80::plot:120 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 ] main:2::lines:12::line:21::line_ydxd:56::plot:135 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 ] main:2::lines:12::line:21::line_ydxd:72::plot:135 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 ] main:2::lines:12::line:21::line_xdyd:50::plot:150 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 ] main:2::lines:12::line:21::line_xdyd:66::plot:150 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 ] )
|
||||
[102] (byte) plot::y#4 ← phi( line_xdyd::@1/(byte) plot::y#1 line_xdyi::@1/(byte) plot::y#0 line_ydxd::@1/(byte) plot::y#3 line_ydxi::@1/(byte) plot::y#2 ) [ plot::x#4 plot::y#4 ] ( main:2::lines:12::line:21::line_ydxi:42::plot:92 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#3 line_ydxi::y#3 line_ydxi::e#3 plot::x#4 plot::y#4 ] main:2::lines:12::line:21::line_ydxi:86::plot:92 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#3 line_ydxi::y#3 line_ydxi::e#3 plot::x#4 plot::y#4 ] main:2::lines:12::line:21::line_xdyi:35::plot:115 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 plot::x#4 plot::y#4 ] main:2::lines:12::line:21::line_xdyi:80::plot:115 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 plot::x#4 plot::y#4 ] main:2::lines:12::line:21::line_ydxd:56::plot:130 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 plot::x#4 plot::y#4 ] main:2::lines:12::line:21::line_ydxd:72::plot:130 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 plot::x#4 plot::y#4 ] main:2::lines:12::line:21::line_xdyd:50::plot:145 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 plot::x#4 plot::y#4 ] main:2::lines:12::line:21::line_xdyd:66::plot:145 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 plot::x#4 plot::y#4 ] )
|
||||
[102] (byte) plot::x#4 ← phi( line_xdyd::@1/(byte) plot::x#1 line_xdyi::@1/(byte) plot::x#0 line_ydxd::@1/(byte) plot::x#3 line_ydxi::@1/(byte) plot::x#2 ) [ plot::x#4 plot::y#4 ] ( main:2::lines:12::line:21::line_ydxi:42::plot:92 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#3 line_ydxi::y#3 line_ydxi::e#3 plot::x#4 plot::y#4 ] main:2::lines:12::line:21::line_ydxi:86::plot:92 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#3 line_ydxi::y#3 line_ydxi::e#3 plot::x#4 plot::y#4 ] main:2::lines:12::line:21::line_xdyi:35::plot:115 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 plot::x#4 plot::y#4 ] main:2::lines:12::line:21::line_xdyi:80::plot:115 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 plot::x#4 plot::y#4 ] main:2::lines:12::line:21::line_ydxd:56::plot:130 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 plot::x#4 plot::y#4 ] main:2::lines:12::line:21::line_ydxd:72::plot:130 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 plot::x#4 plot::y#4 ] main:2::lines:12::line:21::line_xdyd:50::plot:145 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 plot::x#4 plot::y#4 ] main:2::lines:12::line:21::line_xdyd:66::plot:145 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 plot::x#4 plot::y#4 ] )
|
||||
[103] (word) plot::plotter_x#0 ← *((const byte[]) plot_xhi#0 + (byte) plot::x#4) w= *((const byte[]) plot_xlo#0 + (byte) plot::x#4) [ plot::x#4 plot::y#4 plot::plotter_x#0 ] ( main:2::lines:12::line:21::line_ydxi:42::plot:92 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#3 line_ydxi::y#3 line_ydxi::e#3 plot::x#4 plot::y#4 plot::plotter_x#0 ] main:2::lines:12::line:21::line_ydxi:86::plot:92 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#3 line_ydxi::y#3 line_ydxi::e#3 plot::x#4 plot::y#4 plot::plotter_x#0 ] main:2::lines:12::line:21::line_xdyi:35::plot:115 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 plot::x#4 plot::y#4 plot::plotter_x#0 ] main:2::lines:12::line:21::line_xdyi:80::plot:115 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 plot::x#4 plot::y#4 plot::plotter_x#0 ] main:2::lines:12::line:21::line_ydxd:56::plot:130 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 plot::x#4 plot::y#4 plot::plotter_x#0 ] main:2::lines:12::line:21::line_ydxd:72::plot:130 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 plot::x#4 plot::y#4 plot::plotter_x#0 ] main:2::lines:12::line:21::line_xdyd:50::plot:145 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 plot::x#4 plot::y#4 plot::plotter_x#0 ] main:2::lines:12::line:21::line_xdyd:66::plot:145 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 plot::x#4 plot::y#4 plot::plotter_x#0 ] )
|
||||
[104] (word) plot::plotter_y#0 ← *((const byte[]) plot_yhi#0 + (byte) plot::y#4) w= *((const byte[]) plot_ylo#0 + (byte) plot::y#4) [ plot::x#4 plot::plotter_x#0 plot::plotter_y#0 ] ( main:2::lines:12::line:21::line_ydxi:42::plot:92 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#3 line_ydxi::y#3 line_ydxi::e#3 plot::x#4 plot::plotter_x#0 plot::plotter_y#0 ] main:2::lines:12::line:21::line_ydxi:86::plot:92 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#3 line_ydxi::y#3 line_ydxi::e#3 plot::x#4 plot::plotter_x#0 plot::plotter_y#0 ] main:2::lines:12::line:21::line_xdyi:35::plot:115 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 plot::x#4 plot::plotter_x#0 plot::plotter_y#0 ] main:2::lines:12::line:21::line_xdyi:80::plot:115 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 plot::x#4 plot::plotter_x#0 plot::plotter_y#0 ] main:2::lines:12::line:21::line_ydxd:56::plot:130 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 plot::x#4 plot::plotter_x#0 plot::plotter_y#0 ] main:2::lines:12::line:21::line_ydxd:72::plot:130 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 plot::x#4 plot::plotter_x#0 plot::plotter_y#0 ] main:2::lines:12::line:21::line_xdyd:50::plot:145 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 plot::x#4 plot::plotter_x#0 plot::plotter_y#0 ] main:2::lines:12::line:21::line_xdyd:66::plot:145 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 plot::x#4 plot::plotter_x#0 plot::plotter_y#0 ] )
|
||||
[105] (word~) plot::$0 ← (word) plot::plotter_x#0 + (word) plot::plotter_y#0 [ plot::x#4 plot::$0 ] ( main:2::lines:12::line:21::line_ydxi:42::plot:92 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#3 line_ydxi::y#3 line_ydxi::e#3 plot::x#4 plot::$0 ] main:2::lines:12::line:21::line_ydxi:86::plot:92 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#3 line_ydxi::y#3 line_ydxi::e#3 plot::x#4 plot::$0 ] main:2::lines:12::line:21::line_xdyi:35::plot:115 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 plot::x#4 plot::$0 ] main:2::lines:12::line:21::line_xdyi:80::plot:115 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 plot::x#4 plot::$0 ] main:2::lines:12::line:21::line_ydxd:56::plot:130 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 plot::x#4 plot::$0 ] main:2::lines:12::line:21::line_ydxd:72::plot:130 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 plot::x#4 plot::$0 ] main:2::lines:12::line:21::line_xdyd:50::plot:145 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 plot::x#4 plot::$0 ] main:2::lines:12::line:21::line_xdyd:66::plot:145 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 plot::x#4 plot::$0 ] )
|
||||
[106] (byte*) plot::plotter#0 ← ((byte*)) (word~) plot::$0 [ plot::x#4 plot::plotter#0 ] ( main:2::lines:12::line:21::line_ydxi:42::plot:92 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#3 line_ydxi::y#3 line_ydxi::e#3 plot::x#4 plot::plotter#0 ] main:2::lines:12::line:21::line_ydxi:86::plot:92 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#3 line_ydxi::y#3 line_ydxi::e#3 plot::x#4 plot::plotter#0 ] main:2::lines:12::line:21::line_xdyi:35::plot:115 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 plot::x#4 plot::plotter#0 ] main:2::lines:12::line:21::line_xdyi:80::plot:115 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 plot::x#4 plot::plotter#0 ] main:2::lines:12::line:21::line_ydxd:56::plot:130 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 plot::x#4 plot::plotter#0 ] main:2::lines:12::line:21::line_ydxd:72::plot:130 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 plot::x#4 plot::plotter#0 ] main:2::lines:12::line:21::line_xdyd:50::plot:145 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 plot::x#4 plot::plotter#0 ] main:2::lines:12::line:21::line_xdyd:66::plot:145 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 plot::x#4 plot::plotter#0 ] )
|
||||
[107] (byte~) plot::$1 ← *((byte*) plot::plotter#0) | *((const byte[]) plot_bit#0 + (byte) plot::x#4) [ plot::plotter#0 plot::$1 ] ( main:2::lines:12::line:21::line_ydxi:42::plot:92 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#3 line_ydxi::y#3 line_ydxi::e#3 plot::plotter#0 plot::$1 ] main:2::lines:12::line:21::line_ydxi:86::plot:92 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#3 line_ydxi::y#3 line_ydxi::e#3 plot::plotter#0 plot::$1 ] main:2::lines:12::line:21::line_xdyi:35::plot:115 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 plot::plotter#0 plot::$1 ] main:2::lines:12::line:21::line_xdyi:80::plot:115 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 plot::plotter#0 plot::$1 ] main:2::lines:12::line:21::line_ydxd:56::plot:130 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 plot::plotter#0 plot::$1 ] main:2::lines:12::line:21::line_ydxd:72::plot:130 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 plot::plotter#0 plot::$1 ] main:2::lines:12::line:21::line_xdyd:50::plot:145 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 plot::plotter#0 plot::$1 ] main:2::lines:12::line:21::line_xdyd:66::plot:145 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 plot::plotter#0 plot::$1 ] )
|
||||
[108] *((byte*) plot::plotter#0) ← (byte~) plot::$1 [ ] ( main:2::lines:12::line:21::line_ydxi:42::plot:92 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#3 line_ydxi::y#3 line_ydxi::e#3 ] main:2::lines:12::line:21::line_ydxi:86::plot:92 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#3 line_ydxi::y#3 line_ydxi::e#3 ] main:2::lines:12::line:21::line_xdyi:35::plot:115 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 ] main:2::lines:12::line:21::line_xdyi:80::plot:115 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 ] main:2::lines:12::line:21::line_ydxd:56::plot:130 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 ] main:2::lines:12::line:21::line_ydxd:72::plot:130 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 ] main:2::lines:12::line:21::line_xdyd:50::plot:145 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 ] main:2::lines:12::line:21::line_xdyd:66::plot:145 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 ] )
|
||||
to:plot::@return
|
||||
plot::@return: scope:[plot] from plot
|
||||
[114] return [ ] ( main:2::lines:12::line:21::line_ydxi:42::plot:92 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#3 line_ydxi::y#3 line_ydxi::e#3 ] main:2::lines:12::line:21::line_ydxi:86::plot:92 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#3 line_ydxi::y#3 line_ydxi::e#3 ] main:2::lines:12::line:21::line_xdyi:35::plot:120 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 ] main:2::lines:12::line:21::line_xdyi:80::plot:120 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 ] main:2::lines:12::line:21::line_ydxd:56::plot:135 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 ] main:2::lines:12::line:21::line_ydxd:72::plot:135 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 ] main:2::lines:12::line:21::line_xdyd:50::plot:150 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 ] main:2::lines:12::line:21::line_xdyd:66::plot:150 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 ] )
|
||||
[109] return [ ] ( main:2::lines:12::line:21::line_ydxi:42::plot:92 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#3 line_ydxi::y#3 line_ydxi::e#3 ] main:2::lines:12::line:21::line_ydxi:86::plot:92 [ lines::l#2 line_ydxi::xd#2 line_ydxi::yd#5 line_ydxi::y1#6 line_ydxi::x#3 line_ydxi::y#3 line_ydxi::e#3 ] main:2::lines:12::line:21::line_xdyi:35::plot:115 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 ] main:2::lines:12::line:21::line_xdyi:80::plot:115 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 ] main:2::lines:12::line:21::line_ydxd:56::plot:130 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 ] main:2::lines:12::line:21::line_ydxd:72::plot:130 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 ] main:2::lines:12::line:21::line_xdyd:50::plot:145 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 ] main:2::lines:12::line:21::line_xdyd:66::plot:145 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 ] )
|
||||
to:@return
|
||||
line_xdyi: scope:[line_xdyi] from line::@17 line::@27
|
||||
[115] (byte) line_xdyi::x1#6 ← phi( line::@17/(byte) line_xdyi::x1#0 line::@27/(byte) line_xdyi::x1#1 ) [ line_xdyi::yd#2 line_xdyi::x#6 line_xdyi::y#5 line_xdyi::xd#5 line_xdyi::x1#6 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::x#6 line_xdyi::y#5 line_xdyi::xd#5 line_xdyi::x1#6 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::x#6 line_xdyi::y#5 line_xdyi::xd#5 line_xdyi::x1#6 ] )
|
||||
[115] (byte) line_xdyi::xd#5 ← phi( line::@17/(byte) line_xdyi::xd#0 line::@27/(byte) line_xdyi::xd#1 ) [ line_xdyi::yd#2 line_xdyi::x#6 line_xdyi::y#5 line_xdyi::xd#5 line_xdyi::x1#6 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::x#6 line_xdyi::y#5 line_xdyi::xd#5 line_xdyi::x1#6 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::x#6 line_xdyi::y#5 line_xdyi::xd#5 line_xdyi::x1#6 ] )
|
||||
[115] (byte) line_xdyi::y#5 ← phi( line::@17/(byte) line_xdyi::y#0 line::@27/(byte) line_xdyi::y#1 ) [ line_xdyi::yd#2 line_xdyi::x#6 line_xdyi::y#5 line_xdyi::xd#5 line_xdyi::x1#6 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::x#6 line_xdyi::y#5 line_xdyi::xd#5 line_xdyi::x1#6 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::x#6 line_xdyi::y#5 line_xdyi::xd#5 line_xdyi::x1#6 ] )
|
||||
[115] (byte) line_xdyi::x#6 ← phi( line::@17/(byte) line_xdyi::x#0 line::@27/(byte) line_xdyi::x#1 ) [ line_xdyi::yd#2 line_xdyi::x#6 line_xdyi::y#5 line_xdyi::xd#5 line_xdyi::x1#6 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::x#6 line_xdyi::y#5 line_xdyi::xd#5 line_xdyi::x1#6 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::x#6 line_xdyi::y#5 line_xdyi::xd#5 line_xdyi::x1#6 ] )
|
||||
[115] (byte) line_xdyi::yd#2 ← phi( line::@17/(byte) line_xdyi::yd#0 line::@27/(byte) line_xdyi::yd#1 ) [ line_xdyi::yd#2 line_xdyi::x#6 line_xdyi::y#5 line_xdyi::xd#5 line_xdyi::x1#6 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::x#6 line_xdyi::y#5 line_xdyi::xd#5 line_xdyi::x1#6 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::x#6 line_xdyi::y#5 line_xdyi::xd#5 line_xdyi::x1#6 ] )
|
||||
[116] (byte) line_xdyi::e#0 ← (byte) line_xdyi::yd#2 >> (byte/signed byte/word/signed word) 1 [ line_xdyi::yd#2 line_xdyi::x#6 line_xdyi::y#5 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::e#0 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::x#6 line_xdyi::y#5 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::e#0 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::x#6 line_xdyi::y#5 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::e#0 ] )
|
||||
[110] (byte) line_xdyi::x1#6 ← phi( line::@17/(byte) line_xdyi::x1#0 line::@27/(byte) line_xdyi::x1#1 ) [ line_xdyi::yd#2 line_xdyi::x#6 line_xdyi::y#5 line_xdyi::xd#5 line_xdyi::x1#6 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::x#6 line_xdyi::y#5 line_xdyi::xd#5 line_xdyi::x1#6 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::x#6 line_xdyi::y#5 line_xdyi::xd#5 line_xdyi::x1#6 ] )
|
||||
[110] (byte) line_xdyi::xd#5 ← phi( line::@17/(byte) line_xdyi::xd#0 line::@27/(byte) line_xdyi::xd#1 ) [ line_xdyi::yd#2 line_xdyi::x#6 line_xdyi::y#5 line_xdyi::xd#5 line_xdyi::x1#6 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::x#6 line_xdyi::y#5 line_xdyi::xd#5 line_xdyi::x1#6 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::x#6 line_xdyi::y#5 line_xdyi::xd#5 line_xdyi::x1#6 ] )
|
||||
[110] (byte) line_xdyi::y#5 ← phi( line::@17/(byte) line_xdyi::y#0 line::@27/(byte) line_xdyi::y#1 ) [ line_xdyi::yd#2 line_xdyi::x#6 line_xdyi::y#5 line_xdyi::xd#5 line_xdyi::x1#6 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::x#6 line_xdyi::y#5 line_xdyi::xd#5 line_xdyi::x1#6 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::x#6 line_xdyi::y#5 line_xdyi::xd#5 line_xdyi::x1#6 ] )
|
||||
[110] (byte) line_xdyi::x#6 ← phi( line::@17/(byte) line_xdyi::x#0 line::@27/(byte) line_xdyi::x#1 ) [ line_xdyi::yd#2 line_xdyi::x#6 line_xdyi::y#5 line_xdyi::xd#5 line_xdyi::x1#6 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::x#6 line_xdyi::y#5 line_xdyi::xd#5 line_xdyi::x1#6 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::x#6 line_xdyi::y#5 line_xdyi::xd#5 line_xdyi::x1#6 ] )
|
||||
[110] (byte) line_xdyi::yd#2 ← phi( line::@17/(byte) line_xdyi::yd#0 line::@27/(byte) line_xdyi::yd#1 ) [ line_xdyi::yd#2 line_xdyi::x#6 line_xdyi::y#5 line_xdyi::xd#5 line_xdyi::x1#6 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::x#6 line_xdyi::y#5 line_xdyi::xd#5 line_xdyi::x1#6 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::x#6 line_xdyi::y#5 line_xdyi::xd#5 line_xdyi::x1#6 ] )
|
||||
[111] (byte) line_xdyi::e#0 ← (byte) line_xdyi::yd#2 >> (byte/signed byte/word/signed word) 1 [ line_xdyi::yd#2 line_xdyi::x#6 line_xdyi::y#5 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::e#0 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::x#6 line_xdyi::y#5 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::e#0 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::x#6 line_xdyi::y#5 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::e#0 ] )
|
||||
to:line_xdyi::@1
|
||||
line_xdyi::@1: scope:[line_xdyi] from line_xdyi line_xdyi::@2
|
||||
[117] (byte) line_xdyi::e#3 ← phi( line_xdyi/(byte) line_xdyi::e#0 line_xdyi::@2/(byte) line_xdyi::e#6 ) [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 ] )
|
||||
[117] (byte) line_xdyi::y#3 ← phi( line_xdyi/(byte) line_xdyi::y#5 line_xdyi::@2/(byte) line_xdyi::y#6 ) [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 ] )
|
||||
[117] (byte) line_xdyi::x#3 ← phi( line_xdyi/(byte) line_xdyi::x#6 line_xdyi::@2/(byte) line_xdyi::x#2 ) [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 ] )
|
||||
[118] (byte) plot::x#0 ← (byte) line_xdyi::x#3 [ plot::x#0 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 plot::x#0 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 plot::x#0 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 ] )
|
||||
[119] (byte) plot::y#0 ← (byte) line_xdyi::y#3 [ plot::x#0 plot::y#0 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 plot::x#0 plot::y#0 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 plot::x#0 plot::y#0 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 ] )
|
||||
[120] call plot param-assignment [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 ] )
|
||||
[112] (byte) line_xdyi::e#3 ← phi( line_xdyi/(byte) line_xdyi::e#0 line_xdyi::@2/(byte) line_xdyi::e#6 ) [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 ] )
|
||||
[112] (byte) line_xdyi::y#3 ← phi( line_xdyi/(byte) line_xdyi::y#5 line_xdyi::@2/(byte) line_xdyi::y#6 ) [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 ] )
|
||||
[112] (byte) line_xdyi::x#3 ← phi( line_xdyi/(byte) line_xdyi::x#6 line_xdyi::@2/(byte) line_xdyi::x#2 ) [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 ] )
|
||||
[113] (byte) plot::x#0 ← (byte) line_xdyi::x#3 [ plot::x#0 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 plot::x#0 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 plot::x#0 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 ] )
|
||||
[114] (byte) plot::y#0 ← (byte) line_xdyi::y#3 [ plot::x#0 plot::y#0 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 plot::x#0 plot::y#0 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 plot::x#0 plot::y#0 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 ] )
|
||||
[115] call plot param-assignment [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#3 line_xdyi::y#3 line_xdyi::e#3 ] )
|
||||
to:line_xdyi::@5
|
||||
line_xdyi::@5: scope:[line_xdyi] from line_xdyi::@1
|
||||
[121] (byte) line_xdyi::x#2 ← (byte) line_xdyi::x#3 + (byte/signed byte/word/signed word) 1 [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::y#3 line_xdyi::e#3 line_xdyi::x#2 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::y#3 line_xdyi::e#3 line_xdyi::x#2 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::y#3 line_xdyi::e#3 line_xdyi::x#2 ] )
|
||||
[122] (byte) line_xdyi::e#1 ← (byte) line_xdyi::e#3 + (byte) line_xdyi::yd#2 [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::y#3 line_xdyi::x#2 line_xdyi::e#1 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::y#3 line_xdyi::x#2 line_xdyi::e#1 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::y#3 line_xdyi::x#2 line_xdyi::e#1 ] )
|
||||
[123] if((byte) line_xdyi::xd#5>=(byte) line_xdyi::e#1) goto line_xdyi::@2 [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::y#3 line_xdyi::x#2 line_xdyi::e#1 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::y#3 line_xdyi::x#2 line_xdyi::e#1 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::y#3 line_xdyi::x#2 line_xdyi::e#1 ] )
|
||||
[116] (byte) line_xdyi::x#2 ← (byte) line_xdyi::x#3 + (byte/signed byte/word/signed word) 1 [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::y#3 line_xdyi::e#3 line_xdyi::x#2 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::y#3 line_xdyi::e#3 line_xdyi::x#2 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::y#3 line_xdyi::e#3 line_xdyi::x#2 ] )
|
||||
[117] (byte) line_xdyi::e#1 ← (byte) line_xdyi::e#3 + (byte) line_xdyi::yd#2 [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::y#3 line_xdyi::x#2 line_xdyi::e#1 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::y#3 line_xdyi::x#2 line_xdyi::e#1 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::y#3 line_xdyi::x#2 line_xdyi::e#1 ] )
|
||||
[118] if((byte) line_xdyi::xd#5>=(byte) line_xdyi::e#1) goto line_xdyi::@2 [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::y#3 line_xdyi::x#2 line_xdyi::e#1 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::y#3 line_xdyi::x#2 line_xdyi::e#1 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::y#3 line_xdyi::x#2 line_xdyi::e#1 ] )
|
||||
to:line_xdyi::@3
|
||||
line_xdyi::@3: scope:[line_xdyi] from line_xdyi::@5
|
||||
[124] (byte) line_xdyi::y#2 ← (byte) line_xdyi::y#3 + (byte/signed byte/word/signed word) 1 [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::e#1 line_xdyi::y#2 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::e#1 line_xdyi::y#2 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::e#1 line_xdyi::y#2 ] )
|
||||
[125] (byte) line_xdyi::e#2 ← (byte) line_xdyi::e#1 - (byte) line_xdyi::xd#5 [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#2 line_xdyi::e#2 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#2 line_xdyi::e#2 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#2 line_xdyi::e#2 ] )
|
||||
[119] (byte) line_xdyi::y#2 ← (byte) line_xdyi::y#3 + (byte/signed byte/word/signed word) 1 [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::e#1 line_xdyi::y#2 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::e#1 line_xdyi::y#2 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::e#1 line_xdyi::y#2 ] )
|
||||
[120] (byte) line_xdyi::e#2 ← (byte) line_xdyi::e#1 - (byte) line_xdyi::xd#5 [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#2 line_xdyi::e#2 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#2 line_xdyi::e#2 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#2 line_xdyi::e#2 ] )
|
||||
to:line_xdyi::@2
|
||||
line_xdyi::@2: scope:[line_xdyi] from line_xdyi::@3 line_xdyi::@5
|
||||
[126] (byte) line_xdyi::e#6 ← phi( line_xdyi::@3/(byte) line_xdyi::e#2 line_xdyi::@5/(byte) line_xdyi::e#1 ) [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] )
|
||||
[126] (byte) line_xdyi::y#6 ← phi( line_xdyi::@3/(byte) line_xdyi::y#2 line_xdyi::@5/(byte) line_xdyi::y#3 ) [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] )
|
||||
[127] (byte~) line_xdyi::$8 ← (byte) line_xdyi::x1#6 + (byte/signed byte/word/signed word) 1 [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 line_xdyi::$8 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 line_xdyi::$8 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 line_xdyi::$8 ] )
|
||||
[128] if((byte) line_xdyi::x#2<(byte~) line_xdyi::$8) goto line_xdyi::@1 [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] )
|
||||
[121] (byte) line_xdyi::e#6 ← phi( line_xdyi::@3/(byte) line_xdyi::e#2 line_xdyi::@5/(byte) line_xdyi::e#1 ) [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] )
|
||||
[121] (byte) line_xdyi::y#6 ← phi( line_xdyi::@3/(byte) line_xdyi::y#2 line_xdyi::@5/(byte) line_xdyi::y#3 ) [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] )
|
||||
[122] (byte~) line_xdyi::$8 ← (byte) line_xdyi::x1#6 + (byte/signed byte/word/signed word) 1 [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 line_xdyi::$8 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 line_xdyi::$8 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 line_xdyi::$8 ] )
|
||||
[123] if((byte) line_xdyi::x#2<(byte~) line_xdyi::$8) goto line_xdyi::@1 [ line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 line_xdyi::yd#2 line_xdyi::xd#5 line_xdyi::x1#6 line_xdyi::x#2 line_xdyi::y#6 line_xdyi::e#6 ] )
|
||||
to:line_xdyi::@return
|
||||
line_xdyi::@return: scope:[line_xdyi] from line_xdyi::@2
|
||||
[129] return [ ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 ] )
|
||||
[124] return [ ] ( main:2::lines:12::line:21::line_xdyi:35 [ lines::l#2 ] main:2::lines:12::line:21::line_xdyi:80 [ lines::l#2 ] )
|
||||
to:@return
|
||||
line_ydxd: scope:[line_ydxd] from line::@10 line::@6
|
||||
[130] (byte) line_ydxd::y1#6 ← phi( line::@10/(byte) line_ydxd::y1#1 line::@6/(byte) line_ydxd::y1#0 ) [ line_ydxd::xd#2 line_ydxd::x#5 line_ydxd::y#6 line_ydxd::yd#5 line_ydxd::y1#6 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::x#5 line_ydxd::y#6 line_ydxd::yd#5 line_ydxd::y1#6 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::x#5 line_ydxd::y#6 line_ydxd::yd#5 line_ydxd::y1#6 ] )
|
||||
[130] (byte) line_ydxd::yd#5 ← phi( line::@10/(byte) line_ydxd::yd#1 line::@6/(byte) line_ydxd::yd#0 ) [ line_ydxd::xd#2 line_ydxd::x#5 line_ydxd::y#6 line_ydxd::yd#5 line_ydxd::y1#6 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::x#5 line_ydxd::y#6 line_ydxd::yd#5 line_ydxd::y1#6 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::x#5 line_ydxd::y#6 line_ydxd::yd#5 line_ydxd::y1#6 ] )
|
||||
[130] (byte) line_ydxd::y#6 ← phi( line::@10/(byte) line_ydxd::y#1 line::@6/(byte) line_ydxd::y#0 ) [ line_ydxd::xd#2 line_ydxd::x#5 line_ydxd::y#6 line_ydxd::yd#5 line_ydxd::y1#6 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::x#5 line_ydxd::y#6 line_ydxd::yd#5 line_ydxd::y1#6 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::x#5 line_ydxd::y#6 line_ydxd::yd#5 line_ydxd::y1#6 ] )
|
||||
[130] (byte) line_ydxd::x#5 ← phi( line::@10/(byte) line_ydxd::x#1 line::@6/(byte) line_ydxd::x#0 ) [ line_ydxd::xd#2 line_ydxd::x#5 line_ydxd::y#6 line_ydxd::yd#5 line_ydxd::y1#6 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::x#5 line_ydxd::y#6 line_ydxd::yd#5 line_ydxd::y1#6 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::x#5 line_ydxd::y#6 line_ydxd::yd#5 line_ydxd::y1#6 ] )
|
||||
[130] (byte) line_ydxd::xd#2 ← phi( line::@10/(byte) line_ydxd::xd#1 line::@6/(byte) line_ydxd::xd#0 ) [ line_ydxd::xd#2 line_ydxd::x#5 line_ydxd::y#6 line_ydxd::yd#5 line_ydxd::y1#6 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::x#5 line_ydxd::y#6 line_ydxd::yd#5 line_ydxd::y1#6 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::x#5 line_ydxd::y#6 line_ydxd::yd#5 line_ydxd::y1#6 ] )
|
||||
[131] (byte) line_ydxd::e#0 ← (byte) line_ydxd::xd#2 >> (byte/signed byte/word/signed word) 1 [ line_ydxd::xd#2 line_ydxd::x#5 line_ydxd::y#6 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::e#0 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::x#5 line_ydxd::y#6 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::e#0 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::x#5 line_ydxd::y#6 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::e#0 ] )
|
||||
[125] (byte) line_ydxd::y1#6 ← phi( line::@10/(byte) line_ydxd::y1#1 line::@6/(byte) line_ydxd::y1#0 ) [ line_ydxd::xd#2 line_ydxd::x#5 line_ydxd::y#6 line_ydxd::yd#5 line_ydxd::y1#6 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::x#5 line_ydxd::y#6 line_ydxd::yd#5 line_ydxd::y1#6 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::x#5 line_ydxd::y#6 line_ydxd::yd#5 line_ydxd::y1#6 ] )
|
||||
[125] (byte) line_ydxd::yd#5 ← phi( line::@10/(byte) line_ydxd::yd#1 line::@6/(byte) line_ydxd::yd#0 ) [ line_ydxd::xd#2 line_ydxd::x#5 line_ydxd::y#6 line_ydxd::yd#5 line_ydxd::y1#6 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::x#5 line_ydxd::y#6 line_ydxd::yd#5 line_ydxd::y1#6 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::x#5 line_ydxd::y#6 line_ydxd::yd#5 line_ydxd::y1#6 ] )
|
||||
[125] (byte) line_ydxd::y#6 ← phi( line::@10/(byte) line_ydxd::y#1 line::@6/(byte) line_ydxd::y#0 ) [ line_ydxd::xd#2 line_ydxd::x#5 line_ydxd::y#6 line_ydxd::yd#5 line_ydxd::y1#6 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::x#5 line_ydxd::y#6 line_ydxd::yd#5 line_ydxd::y1#6 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::x#5 line_ydxd::y#6 line_ydxd::yd#5 line_ydxd::y1#6 ] )
|
||||
[125] (byte) line_ydxd::x#5 ← phi( line::@10/(byte) line_ydxd::x#1 line::@6/(byte) line_ydxd::x#0 ) [ line_ydxd::xd#2 line_ydxd::x#5 line_ydxd::y#6 line_ydxd::yd#5 line_ydxd::y1#6 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::x#5 line_ydxd::y#6 line_ydxd::yd#5 line_ydxd::y1#6 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::x#5 line_ydxd::y#6 line_ydxd::yd#5 line_ydxd::y1#6 ] )
|
||||
[125] (byte) line_ydxd::xd#2 ← phi( line::@10/(byte) line_ydxd::xd#1 line::@6/(byte) line_ydxd::xd#0 ) [ line_ydxd::xd#2 line_ydxd::x#5 line_ydxd::y#6 line_ydxd::yd#5 line_ydxd::y1#6 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::x#5 line_ydxd::y#6 line_ydxd::yd#5 line_ydxd::y1#6 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::x#5 line_ydxd::y#6 line_ydxd::yd#5 line_ydxd::y1#6 ] )
|
||||
[126] (byte) line_ydxd::e#0 ← (byte) line_ydxd::xd#2 >> (byte/signed byte/word/signed word) 1 [ line_ydxd::xd#2 line_ydxd::x#5 line_ydxd::y#6 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::e#0 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::x#5 line_ydxd::y#6 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::e#0 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::x#5 line_ydxd::y#6 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::e#0 ] )
|
||||
to:line_ydxd::@1
|
||||
line_ydxd::@1: scope:[line_ydxd] from line_ydxd line_ydxd::@2
|
||||
[132] (byte) line_ydxd::e#3 ← phi( line_ydxd/(byte) line_ydxd::e#0 line_ydxd::@2/(byte) line_ydxd::e#6 ) [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 ] )
|
||||
[132] (byte) line_ydxd::y#3 ← phi( line_ydxd/(byte) line_ydxd::y#6 line_ydxd::@2/(byte) line_ydxd::y#2 ) [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 ] )
|
||||
[132] (byte) line_ydxd::x#3 ← phi( line_ydxd/(byte) line_ydxd::x#5 line_ydxd::@2/(byte) line_ydxd::x#6 ) [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 ] )
|
||||
[133] (byte) plot::x#3 ← (byte) line_ydxd::x#3 [ plot::x#3 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 plot::x#3 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 plot::x#3 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 ] )
|
||||
[134] (byte) plot::y#3 ← (byte) line_ydxd::y#3 [ plot::x#3 plot::y#3 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 plot::x#3 plot::y#3 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 plot::x#3 plot::y#3 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 ] )
|
||||
[135] call plot param-assignment [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 ] )
|
||||
[127] (byte) line_ydxd::e#3 ← phi( line_ydxd/(byte) line_ydxd::e#0 line_ydxd::@2/(byte) line_ydxd::e#6 ) [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 ] )
|
||||
[127] (byte) line_ydxd::y#3 ← phi( line_ydxd/(byte) line_ydxd::y#6 line_ydxd::@2/(byte) line_ydxd::y#2 ) [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 ] )
|
||||
[127] (byte) line_ydxd::x#3 ← phi( line_ydxd/(byte) line_ydxd::x#5 line_ydxd::@2/(byte) line_ydxd::x#6 ) [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 ] )
|
||||
[128] (byte) plot::x#3 ← (byte) line_ydxd::x#3 [ plot::x#3 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 plot::x#3 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 plot::x#3 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 ] )
|
||||
[129] (byte) plot::y#3 ← (byte) line_ydxd::y#3 [ plot::x#3 plot::y#3 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 plot::x#3 plot::y#3 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 plot::x#3 plot::y#3 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 ] )
|
||||
[130] call plot param-assignment [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#3 line_ydxd::e#3 ] )
|
||||
to:line_ydxd::@5
|
||||
line_ydxd::@5: scope:[line_ydxd] from line_ydxd::@1
|
||||
[136] (byte) line_ydxd::y#2 ← (byte) line_ydxd::y#3 + (byte/signed byte/word/signed word) 1 [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::e#3 line_ydxd::y#2 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::e#3 line_ydxd::y#2 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::e#3 line_ydxd::y#2 ] )
|
||||
[137] (byte) line_ydxd::e#1 ← (byte) line_ydxd::e#3 + (byte) line_ydxd::xd#2 [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#2 line_ydxd::e#1 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#2 line_ydxd::e#1 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#2 line_ydxd::e#1 ] )
|
||||
[138] if((byte) line_ydxd::yd#5>=(byte) line_ydxd::e#1) goto line_ydxd::@2 [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#2 line_ydxd::e#1 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#2 line_ydxd::e#1 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#2 line_ydxd::e#1 ] )
|
||||
[131] (byte) line_ydxd::y#2 ← (byte) line_ydxd::y#3 + (byte/signed byte/word/signed word) 1 [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::e#3 line_ydxd::y#2 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::e#3 line_ydxd::y#2 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::e#3 line_ydxd::y#2 ] )
|
||||
[132] (byte) line_ydxd::e#1 ← (byte) line_ydxd::e#3 + (byte) line_ydxd::xd#2 [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#2 line_ydxd::e#1 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#2 line_ydxd::e#1 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#2 line_ydxd::e#1 ] )
|
||||
[133] if((byte) line_ydxd::yd#5>=(byte) line_ydxd::e#1) goto line_ydxd::@2 [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#2 line_ydxd::e#1 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#2 line_ydxd::e#1 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#3 line_ydxd::y#2 line_ydxd::e#1 ] )
|
||||
to:line_ydxd::@3
|
||||
line_ydxd::@3: scope:[line_ydxd] from line_ydxd::@5
|
||||
[139] (byte) line_ydxd::x#2 ← (byte) line_ydxd::x#3 - (byte/signed byte/word/signed word) 1 [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::y#2 line_ydxd::e#1 line_ydxd::x#2 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::y#2 line_ydxd::e#1 line_ydxd::x#2 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::y#2 line_ydxd::e#1 line_ydxd::x#2 ] )
|
||||
[140] (byte) line_ydxd::e#2 ← (byte) line_ydxd::e#1 - (byte) line_ydxd::yd#5 [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::y#2 line_ydxd::x#2 line_ydxd::e#2 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::y#2 line_ydxd::x#2 line_ydxd::e#2 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::y#2 line_ydxd::x#2 line_ydxd::e#2 ] )
|
||||
[134] (byte) line_ydxd::x#2 ← (byte) line_ydxd::x#3 - (byte/signed byte/word/signed word) 1 [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::y#2 line_ydxd::e#1 line_ydxd::x#2 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::y#2 line_ydxd::e#1 line_ydxd::x#2 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::y#2 line_ydxd::e#1 line_ydxd::x#2 ] )
|
||||
[135] (byte) line_ydxd::e#2 ← (byte) line_ydxd::e#1 - (byte) line_ydxd::yd#5 [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::y#2 line_ydxd::x#2 line_ydxd::e#2 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::y#2 line_ydxd::x#2 line_ydxd::e#2 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::y#2 line_ydxd::x#2 line_ydxd::e#2 ] )
|
||||
to:line_ydxd::@2
|
||||
line_ydxd::@2: scope:[line_ydxd] from line_ydxd::@3 line_ydxd::@5
|
||||
[141] (byte) line_ydxd::e#6 ← phi( line_ydxd::@3/(byte) line_ydxd::e#2 line_ydxd::@5/(byte) line_ydxd::e#1 ) [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#2 line_ydxd::e#6 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#2 line_ydxd::e#6 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#2 line_ydxd::e#6 ] )
|
||||
[141] (byte) line_ydxd::x#6 ← phi( line_ydxd::@3/(byte) line_ydxd::x#2 line_ydxd::@5/(byte) line_ydxd::x#3 ) [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#2 line_ydxd::e#6 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#2 line_ydxd::e#6 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#2 line_ydxd::e#6 ] )
|
||||
[142] (byte~) line_ydxd::$8 ← (byte) line_ydxd::y1#6 + (byte/signed byte/word/signed word) 1 [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#2 line_ydxd::e#6 line_ydxd::$8 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#2 line_ydxd::e#6 line_ydxd::$8 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#2 line_ydxd::e#6 line_ydxd::$8 ] )
|
||||
[143] if((byte) line_ydxd::y#2<(byte~) line_ydxd::$8) goto line_ydxd::@1 [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#2 line_ydxd::e#6 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#2 line_ydxd::e#6 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#2 line_ydxd::e#6 ] )
|
||||
[136] (byte) line_ydxd::e#6 ← phi( line_ydxd::@3/(byte) line_ydxd::e#2 line_ydxd::@5/(byte) line_ydxd::e#1 ) [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#2 line_ydxd::e#6 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#2 line_ydxd::e#6 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#2 line_ydxd::e#6 ] )
|
||||
[136] (byte) line_ydxd::x#6 ← phi( line_ydxd::@3/(byte) line_ydxd::x#2 line_ydxd::@5/(byte) line_ydxd::x#3 ) [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#2 line_ydxd::e#6 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#2 line_ydxd::e#6 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#2 line_ydxd::e#6 ] )
|
||||
[137] (byte~) line_ydxd::$8 ← (byte) line_ydxd::y1#6 + (byte/signed byte/word/signed word) 1 [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#2 line_ydxd::e#6 line_ydxd::$8 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#2 line_ydxd::e#6 line_ydxd::$8 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#2 line_ydxd::e#6 line_ydxd::$8 ] )
|
||||
[138] if((byte) line_ydxd::y#2<(byte~) line_ydxd::$8) goto line_ydxd::@1 [ line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#2 line_ydxd::e#6 ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#2 line_ydxd::e#6 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 line_ydxd::xd#2 line_ydxd::yd#5 line_ydxd::y1#6 line_ydxd::x#6 line_ydxd::y#2 line_ydxd::e#6 ] )
|
||||
to:line_ydxd::@return
|
||||
line_ydxd::@return: scope:[line_ydxd] from line_ydxd::@2
|
||||
[144] return [ ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 ] )
|
||||
[139] return [ ] ( main:2::lines:12::line:21::line_ydxd:56 [ lines::l#2 ] main:2::lines:12::line:21::line_ydxd:72 [ lines::l#2 ] )
|
||||
to:@return
|
||||
line_xdyd: scope:[line_xdyd] from line::@20 line::@24
|
||||
[145] (byte) line_xdyd::x1#6 ← phi( line::@20/(byte) line_xdyd::x1#0 line::@24/(byte) line_xdyd::x1#1 ) [ line_xdyd::yd#2 line_xdyd::x#6 line_xdyd::y#5 line_xdyd::xd#5 line_xdyd::x1#6 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::x#6 line_xdyd::y#5 line_xdyd::xd#5 line_xdyd::x1#6 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::x#6 line_xdyd::y#5 line_xdyd::xd#5 line_xdyd::x1#6 ] )
|
||||
[145] (byte) line_xdyd::xd#5 ← phi( line::@20/(byte) line_xdyd::xd#0 line::@24/(byte) line_xdyd::xd#1 ) [ line_xdyd::yd#2 line_xdyd::x#6 line_xdyd::y#5 line_xdyd::xd#5 line_xdyd::x1#6 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::x#6 line_xdyd::y#5 line_xdyd::xd#5 line_xdyd::x1#6 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::x#6 line_xdyd::y#5 line_xdyd::xd#5 line_xdyd::x1#6 ] )
|
||||
[145] (byte) line_xdyd::y#5 ← phi( line::@20/(byte) line_xdyd::y#0 line::@24/(byte) line_xdyd::y#1 ) [ line_xdyd::yd#2 line_xdyd::x#6 line_xdyd::y#5 line_xdyd::xd#5 line_xdyd::x1#6 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::x#6 line_xdyd::y#5 line_xdyd::xd#5 line_xdyd::x1#6 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::x#6 line_xdyd::y#5 line_xdyd::xd#5 line_xdyd::x1#6 ] )
|
||||
[145] (byte) line_xdyd::x#6 ← phi( line::@20/(byte) line_xdyd::x#0 line::@24/(byte) line_xdyd::x#1 ) [ line_xdyd::yd#2 line_xdyd::x#6 line_xdyd::y#5 line_xdyd::xd#5 line_xdyd::x1#6 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::x#6 line_xdyd::y#5 line_xdyd::xd#5 line_xdyd::x1#6 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::x#6 line_xdyd::y#5 line_xdyd::xd#5 line_xdyd::x1#6 ] )
|
||||
[145] (byte) line_xdyd::yd#2 ← phi( line::@20/(byte) line_xdyd::yd#0 line::@24/(byte) line_xdyd::yd#1 ) [ line_xdyd::yd#2 line_xdyd::x#6 line_xdyd::y#5 line_xdyd::xd#5 line_xdyd::x1#6 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::x#6 line_xdyd::y#5 line_xdyd::xd#5 line_xdyd::x1#6 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::x#6 line_xdyd::y#5 line_xdyd::xd#5 line_xdyd::x1#6 ] )
|
||||
[146] (byte) line_xdyd::e#0 ← (byte) line_xdyd::yd#2 >> (byte/signed byte/word/signed word) 1 [ line_xdyd::yd#2 line_xdyd::x#6 line_xdyd::y#5 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::e#0 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::x#6 line_xdyd::y#5 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::e#0 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::x#6 line_xdyd::y#5 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::e#0 ] )
|
||||
[140] (byte) line_xdyd::x1#6 ← phi( line::@20/(byte) line_xdyd::x1#0 line::@24/(byte) line_xdyd::x1#1 ) [ line_xdyd::yd#2 line_xdyd::x#6 line_xdyd::y#5 line_xdyd::xd#5 line_xdyd::x1#6 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::x#6 line_xdyd::y#5 line_xdyd::xd#5 line_xdyd::x1#6 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::x#6 line_xdyd::y#5 line_xdyd::xd#5 line_xdyd::x1#6 ] )
|
||||
[140] (byte) line_xdyd::xd#5 ← phi( line::@20/(byte) line_xdyd::xd#0 line::@24/(byte) line_xdyd::xd#1 ) [ line_xdyd::yd#2 line_xdyd::x#6 line_xdyd::y#5 line_xdyd::xd#5 line_xdyd::x1#6 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::x#6 line_xdyd::y#5 line_xdyd::xd#5 line_xdyd::x1#6 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::x#6 line_xdyd::y#5 line_xdyd::xd#5 line_xdyd::x1#6 ] )
|
||||
[140] (byte) line_xdyd::y#5 ← phi( line::@20/(byte) line_xdyd::y#0 line::@24/(byte) line_xdyd::y#1 ) [ line_xdyd::yd#2 line_xdyd::x#6 line_xdyd::y#5 line_xdyd::xd#5 line_xdyd::x1#6 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::x#6 line_xdyd::y#5 line_xdyd::xd#5 line_xdyd::x1#6 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::x#6 line_xdyd::y#5 line_xdyd::xd#5 line_xdyd::x1#6 ] )
|
||||
[140] (byte) line_xdyd::x#6 ← phi( line::@20/(byte) line_xdyd::x#0 line::@24/(byte) line_xdyd::x#1 ) [ line_xdyd::yd#2 line_xdyd::x#6 line_xdyd::y#5 line_xdyd::xd#5 line_xdyd::x1#6 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::x#6 line_xdyd::y#5 line_xdyd::xd#5 line_xdyd::x1#6 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::x#6 line_xdyd::y#5 line_xdyd::xd#5 line_xdyd::x1#6 ] )
|
||||
[140] (byte) line_xdyd::yd#2 ← phi( line::@20/(byte) line_xdyd::yd#0 line::@24/(byte) line_xdyd::yd#1 ) [ line_xdyd::yd#2 line_xdyd::x#6 line_xdyd::y#5 line_xdyd::xd#5 line_xdyd::x1#6 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::x#6 line_xdyd::y#5 line_xdyd::xd#5 line_xdyd::x1#6 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::x#6 line_xdyd::y#5 line_xdyd::xd#5 line_xdyd::x1#6 ] )
|
||||
[141] (byte) line_xdyd::e#0 ← (byte) line_xdyd::yd#2 >> (byte/signed byte/word/signed word) 1 [ line_xdyd::yd#2 line_xdyd::x#6 line_xdyd::y#5 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::e#0 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::x#6 line_xdyd::y#5 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::e#0 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::x#6 line_xdyd::y#5 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::e#0 ] )
|
||||
to:line_xdyd::@1
|
||||
line_xdyd::@1: scope:[line_xdyd] from line_xdyd line_xdyd::@2
|
||||
[147] (byte) line_xdyd::e#3 ← phi( line_xdyd/(byte) line_xdyd::e#0 line_xdyd::@2/(byte) line_xdyd::e#6 ) [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 ] )
|
||||
[147] (byte) line_xdyd::y#3 ← phi( line_xdyd/(byte) line_xdyd::y#5 line_xdyd::@2/(byte) line_xdyd::y#6 ) [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 ] )
|
||||
[147] (byte) line_xdyd::x#3 ← phi( line_xdyd/(byte) line_xdyd::x#6 line_xdyd::@2/(byte) line_xdyd::x#2 ) [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 ] )
|
||||
[148] (byte) plot::x#1 ← (byte) line_xdyd::x#3 [ plot::x#1 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 plot::x#1 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 plot::x#1 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 ] )
|
||||
[149] (byte) plot::y#1 ← (byte) line_xdyd::y#3 [ plot::x#1 plot::y#1 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 plot::x#1 plot::y#1 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 plot::x#1 plot::y#1 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 ] )
|
||||
[150] call plot param-assignment [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 ] )
|
||||
[142] (byte) line_xdyd::e#3 ← phi( line_xdyd/(byte) line_xdyd::e#0 line_xdyd::@2/(byte) line_xdyd::e#6 ) [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 ] )
|
||||
[142] (byte) line_xdyd::y#3 ← phi( line_xdyd/(byte) line_xdyd::y#5 line_xdyd::@2/(byte) line_xdyd::y#6 ) [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 ] )
|
||||
[142] (byte) line_xdyd::x#3 ← phi( line_xdyd/(byte) line_xdyd::x#6 line_xdyd::@2/(byte) line_xdyd::x#2 ) [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 ] )
|
||||
[143] (byte) plot::x#1 ← (byte) line_xdyd::x#3 [ plot::x#1 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 plot::x#1 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 plot::x#1 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 ] )
|
||||
[144] (byte) plot::y#1 ← (byte) line_xdyd::y#3 [ plot::x#1 plot::y#1 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 plot::x#1 plot::y#1 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 plot::x#1 plot::y#1 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 ] )
|
||||
[145] call plot param-assignment [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#3 line_xdyd::y#3 line_xdyd::e#3 ] )
|
||||
to:line_xdyd::@5
|
||||
line_xdyd::@5: scope:[line_xdyd] from line_xdyd::@1
|
||||
[151] (byte) line_xdyd::x#2 ← (byte) line_xdyd::x#3 + (byte/signed byte/word/signed word) 1 [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::y#3 line_xdyd::e#3 line_xdyd::x#2 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::y#3 line_xdyd::e#3 line_xdyd::x#2 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::y#3 line_xdyd::e#3 line_xdyd::x#2 ] )
|
||||
[152] (byte) line_xdyd::e#1 ← (byte) line_xdyd::e#3 + (byte) line_xdyd::yd#2 [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::y#3 line_xdyd::x#2 line_xdyd::e#1 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::y#3 line_xdyd::x#2 line_xdyd::e#1 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::y#3 line_xdyd::x#2 line_xdyd::e#1 ] )
|
||||
[153] if((byte) line_xdyd::xd#5>=(byte) line_xdyd::e#1) goto line_xdyd::@2 [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::y#3 line_xdyd::x#2 line_xdyd::e#1 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::y#3 line_xdyd::x#2 line_xdyd::e#1 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::y#3 line_xdyd::x#2 line_xdyd::e#1 ] )
|
||||
[146] (byte) line_xdyd::x#2 ← (byte) line_xdyd::x#3 + (byte/signed byte/word/signed word) 1 [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::y#3 line_xdyd::e#3 line_xdyd::x#2 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::y#3 line_xdyd::e#3 line_xdyd::x#2 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::y#3 line_xdyd::e#3 line_xdyd::x#2 ] )
|
||||
[147] (byte) line_xdyd::e#1 ← (byte) line_xdyd::e#3 + (byte) line_xdyd::yd#2 [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::y#3 line_xdyd::x#2 line_xdyd::e#1 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::y#3 line_xdyd::x#2 line_xdyd::e#1 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::y#3 line_xdyd::x#2 line_xdyd::e#1 ] )
|
||||
[148] if((byte) line_xdyd::xd#5>=(byte) line_xdyd::e#1) goto line_xdyd::@2 [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::y#3 line_xdyd::x#2 line_xdyd::e#1 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::y#3 line_xdyd::x#2 line_xdyd::e#1 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::y#3 line_xdyd::x#2 line_xdyd::e#1 ] )
|
||||
to:line_xdyd::@3
|
||||
line_xdyd::@3: scope:[line_xdyd] from line_xdyd::@5
|
||||
[154] (byte) line_xdyd::y#2 ← (byte) line_xdyd::y#3 - (byte/signed byte/word/signed word) 1 [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::e#1 line_xdyd::y#2 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::e#1 line_xdyd::y#2 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::e#1 line_xdyd::y#2 ] )
|
||||
[155] (byte) line_xdyd::e#2 ← (byte) line_xdyd::e#1 - (byte) line_xdyd::xd#5 [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#2 line_xdyd::e#2 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#2 line_xdyd::e#2 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#2 line_xdyd::e#2 ] )
|
||||
[149] (byte) line_xdyd::y#2 ← (byte) line_xdyd::y#3 - (byte/signed byte/word/signed word) 1 [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::e#1 line_xdyd::y#2 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::e#1 line_xdyd::y#2 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::e#1 line_xdyd::y#2 ] )
|
||||
[150] (byte) line_xdyd::e#2 ← (byte) line_xdyd::e#1 - (byte) line_xdyd::xd#5 [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#2 line_xdyd::e#2 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#2 line_xdyd::e#2 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#2 line_xdyd::e#2 ] )
|
||||
to:line_xdyd::@2
|
||||
line_xdyd::@2: scope:[line_xdyd] from line_xdyd::@3 line_xdyd::@5
|
||||
[156] (byte) line_xdyd::e#6 ← phi( line_xdyd::@3/(byte) line_xdyd::e#2 line_xdyd::@5/(byte) line_xdyd::e#1 ) [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] )
|
||||
[156] (byte) line_xdyd::y#6 ← phi( line_xdyd::@3/(byte) line_xdyd::y#2 line_xdyd::@5/(byte) line_xdyd::y#3 ) [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] )
|
||||
[157] (byte~) line_xdyd::$8 ← (byte) line_xdyd::x1#6 + (byte/signed byte/word/signed word) 1 [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 line_xdyd::$8 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 line_xdyd::$8 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 line_xdyd::$8 ] )
|
||||
[158] if((byte) line_xdyd::x#2<(byte~) line_xdyd::$8) goto line_xdyd::@1 [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] )
|
||||
[151] (byte) line_xdyd::e#6 ← phi( line_xdyd::@3/(byte) line_xdyd::e#2 line_xdyd::@5/(byte) line_xdyd::e#1 ) [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] )
|
||||
[151] (byte) line_xdyd::y#6 ← phi( line_xdyd::@3/(byte) line_xdyd::y#2 line_xdyd::@5/(byte) line_xdyd::y#3 ) [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] )
|
||||
[152] (byte~) line_xdyd::$8 ← (byte) line_xdyd::x1#6 + (byte/signed byte/word/signed word) 1 [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 line_xdyd::$8 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 line_xdyd::$8 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 line_xdyd::$8 ] )
|
||||
[153] if((byte) line_xdyd::x#2<(byte~) line_xdyd::$8) goto line_xdyd::@1 [ line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 line_xdyd::yd#2 line_xdyd::xd#5 line_xdyd::x1#6 line_xdyd::x#2 line_xdyd::y#6 line_xdyd::e#6 ] )
|
||||
to:line_xdyd::@return
|
||||
line_xdyd::@return: scope:[line_xdyd] from line_xdyd::@2
|
||||
[159] return [ ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 ] )
|
||||
[154] return [ ] ( main:2::lines:12::line:21::line_xdyd:50 [ lines::l#2 ] main:2::lines:12::line:21::line_xdyd:66 [ lines::l#2 ] )
|
||||
to:@return
|
||||
init_plot_tables: scope:[init_plot_tables] from main::@3
|
||||
[160] phi() [ ] ( main:2::init_plot_tables:10 [ ] )
|
||||
[155] phi() [ ] ( main:2::init_plot_tables:10 [ ] )
|
||||
to:init_plot_tables::@1
|
||||
init_plot_tables::@1: scope:[init_plot_tables] from init_plot_tables init_plot_tables::@2
|
||||
[161] (byte) init_plot_tables::bits#3 ← phi( init_plot_tables/(byte/word/signed word) 128 init_plot_tables::@2/(byte) init_plot_tables::bits#4 ) [ init_plot_tables::x#2 init_plot_tables::bits#3 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] )
|
||||
[161] (byte) init_plot_tables::x#2 ← phi( init_plot_tables/(byte/signed byte/word/signed word) 0 init_plot_tables::@2/(byte) init_plot_tables::x#1 ) [ init_plot_tables::x#2 init_plot_tables::bits#3 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] )
|
||||
[162] (byte~) init_plot_tables::$0 ← (byte) init_plot_tables::x#2 & (byte/word/signed word) 248 [ init_plot_tables::x#2 init_plot_tables::bits#3 init_plot_tables::$0 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#3 init_plot_tables::$0 ] )
|
||||
[163] *((const byte[]) plot_xlo#0 + (byte) init_plot_tables::x#2) ← (byte~) init_plot_tables::$0 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] )
|
||||
[164] *((const byte[]) plot_xhi#0 + (byte) init_plot_tables::x#2) ← >(const byte*) BITMAP#0 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] )
|
||||
[165] *((const byte[]) plot_bit#0 + (byte) init_plot_tables::x#2) ← (byte) init_plot_tables::bits#3 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] )
|
||||
[166] (byte) init_plot_tables::bits#1 ← (byte) init_plot_tables::bits#3 >> (byte/signed byte/word/signed word) 1 [ init_plot_tables::x#2 init_plot_tables::bits#1 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#1 ] )
|
||||
[167] if((byte) init_plot_tables::bits#1!=(byte/signed byte/word/signed word) 0) goto init_plot_tables::@10 [ init_plot_tables::x#2 init_plot_tables::bits#1 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#1 ] )
|
||||
[156] (byte) init_plot_tables::bits#3 ← phi( init_plot_tables/(byte/word/signed word) 128 init_plot_tables::@2/(byte) init_plot_tables::bits#4 ) [ init_plot_tables::x#2 init_plot_tables::bits#3 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] )
|
||||
[156] (byte) init_plot_tables::x#2 ← phi( init_plot_tables/(byte/signed byte/word/signed word) 0 init_plot_tables::@2/(byte) init_plot_tables::x#1 ) [ init_plot_tables::x#2 init_plot_tables::bits#3 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] )
|
||||
[157] (byte~) init_plot_tables::$0 ← (byte) init_plot_tables::x#2 & (byte/word/signed word) 248 [ init_plot_tables::x#2 init_plot_tables::bits#3 init_plot_tables::$0 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#3 init_plot_tables::$0 ] )
|
||||
[158] *((const byte[]) plot_xlo#0 + (byte) init_plot_tables::x#2) ← (byte~) init_plot_tables::$0 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] )
|
||||
[159] *((const byte[]) plot_xhi#0 + (byte) init_plot_tables::x#2) ← >(const byte*) BITMAP#0 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] )
|
||||
[160] *((const byte[]) plot_bit#0 + (byte) init_plot_tables::x#2) ← (byte) init_plot_tables::bits#3 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] )
|
||||
[161] (byte) init_plot_tables::bits#1 ← (byte) init_plot_tables::bits#3 >> (byte/signed byte/word/signed word) 1 [ init_plot_tables::x#2 init_plot_tables::bits#1 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#1 ] )
|
||||
[162] if((byte) init_plot_tables::bits#1!=(byte/signed byte/word/signed word) 0) goto init_plot_tables::@10 [ init_plot_tables::x#2 init_plot_tables::bits#1 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#1 ] )
|
||||
to:init_plot_tables::@2
|
||||
init_plot_tables::@2: scope:[init_plot_tables] from init_plot_tables::@1 init_plot_tables::@10
|
||||
[168] (byte) init_plot_tables::bits#4 ← phi( init_plot_tables::@10/(byte) init_plot_tables::bits#1 init_plot_tables::@1/(byte/word/signed word) 128 ) [ init_plot_tables::x#2 init_plot_tables::bits#4 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#4 ] )
|
||||
[169] (byte) init_plot_tables::x#1 ← ++ (byte) init_plot_tables::x#2 [ init_plot_tables::x#1 init_plot_tables::bits#4 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#1 init_plot_tables::bits#4 ] )
|
||||
[170] if((byte) init_plot_tables::x#1!=(byte/signed byte/word/signed word) 0) goto init_plot_tables::@1 [ init_plot_tables::x#1 init_plot_tables::bits#4 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#1 init_plot_tables::bits#4 ] )
|
||||
[163] (byte) init_plot_tables::bits#4 ← phi( init_plot_tables::@10/(byte) init_plot_tables::bits#1 init_plot_tables::@1/(byte/word/signed word) 128 ) [ init_plot_tables::x#2 init_plot_tables::bits#4 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#4 ] )
|
||||
[164] (byte) init_plot_tables::x#1 ← ++ (byte) init_plot_tables::x#2 [ init_plot_tables::x#1 init_plot_tables::bits#4 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#1 init_plot_tables::bits#4 ] )
|
||||
[165] if((byte) init_plot_tables::x#1!=(byte/signed byte/word/signed word) 0) goto init_plot_tables::@1 [ init_plot_tables::x#1 init_plot_tables::bits#4 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#1 init_plot_tables::bits#4 ] )
|
||||
to:init_plot_tables::@3
|
||||
init_plot_tables::@3: scope:[init_plot_tables] from init_plot_tables::@2 init_plot_tables::@4
|
||||
[171] (byte*) init_plot_tables::yoffs#2 ← phi( init_plot_tables::@4/(byte*) init_plot_tables::yoffs#4 init_plot_tables::@2/((byte*))(byte/signed byte/word/signed word) 0 ) [ init_plot_tables::y#2 init_plot_tables::yoffs#2 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 ] )
|
||||
[171] (byte) init_plot_tables::y#2 ← phi( init_plot_tables::@4/(byte) init_plot_tables::y#1 init_plot_tables::@2/(byte/signed byte/word/signed word) 0 ) [ init_plot_tables::y#2 init_plot_tables::yoffs#2 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 ] )
|
||||
[172] (byte~) init_plot_tables::$6 ← (byte) init_plot_tables::y#2 & (byte/signed byte/word/signed word) 7 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 init_plot_tables::$6 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 init_plot_tables::$6 ] )
|
||||
[173] (byte~) init_plot_tables::$7 ← < (byte*) init_plot_tables::yoffs#2 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 init_plot_tables::$6 init_plot_tables::$7 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 init_plot_tables::$6 init_plot_tables::$7 ] )
|
||||
[174] (byte~) init_plot_tables::$8 ← (byte~) init_plot_tables::$6 | (byte~) init_plot_tables::$7 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 init_plot_tables::$8 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 init_plot_tables::$8 ] )
|
||||
[175] *((const byte[]) plot_ylo#0 + (byte) init_plot_tables::y#2) ← (byte~) init_plot_tables::$8 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 ] )
|
||||
[176] (byte~) init_plot_tables::$9 ← > (byte*) init_plot_tables::yoffs#2 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 init_plot_tables::$9 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 init_plot_tables::$9 ] )
|
||||
[177] *((const byte[]) plot_yhi#0 + (byte) init_plot_tables::y#2) ← (byte~) init_plot_tables::$9 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 ] )
|
||||
[178] (byte~) init_plot_tables::$10 ← (byte) init_plot_tables::y#2 & (byte/signed byte/word/signed word) 7 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 init_plot_tables::$10 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 init_plot_tables::$10 ] )
|
||||
[179] if((byte~) init_plot_tables::$10!=(byte/signed byte/word/signed word) 7) goto init_plot_tables::@4 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 ] )
|
||||
[166] (byte*) init_plot_tables::yoffs#2 ← phi( init_plot_tables::@4/(byte*) init_plot_tables::yoffs#4 init_plot_tables::@2/((byte*))(byte/signed byte/word/signed word) 0 ) [ init_plot_tables::y#2 init_plot_tables::yoffs#2 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 ] )
|
||||
[166] (byte) init_plot_tables::y#2 ← phi( init_plot_tables::@4/(byte) init_plot_tables::y#1 init_plot_tables::@2/(byte/signed byte/word/signed word) 0 ) [ init_plot_tables::y#2 init_plot_tables::yoffs#2 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 ] )
|
||||
[167] (byte~) init_plot_tables::$6 ← (byte) init_plot_tables::y#2 & (byte/signed byte/word/signed word) 7 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 init_plot_tables::$6 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 init_plot_tables::$6 ] )
|
||||
[168] (byte~) init_plot_tables::$7 ← < (byte*) init_plot_tables::yoffs#2 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 init_plot_tables::$6 init_plot_tables::$7 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 init_plot_tables::$6 init_plot_tables::$7 ] )
|
||||
[169] (byte~) init_plot_tables::$8 ← (byte~) init_plot_tables::$6 | (byte~) init_plot_tables::$7 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 init_plot_tables::$8 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 init_plot_tables::$8 ] )
|
||||
[170] *((const byte[]) plot_ylo#0 + (byte) init_plot_tables::y#2) ← (byte~) init_plot_tables::$8 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 ] )
|
||||
[171] (byte~) init_plot_tables::$9 ← > (byte*) init_plot_tables::yoffs#2 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 init_plot_tables::$9 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 init_plot_tables::$9 ] )
|
||||
[172] *((const byte[]) plot_yhi#0 + (byte) init_plot_tables::y#2) ← (byte~) init_plot_tables::$9 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 ] )
|
||||
[173] (byte~) init_plot_tables::$10 ← (byte) init_plot_tables::y#2 & (byte/signed byte/word/signed word) 7 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 init_plot_tables::$10 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 init_plot_tables::$10 ] )
|
||||
[174] if((byte~) init_plot_tables::$10!=(byte/signed byte/word/signed word) 7) goto init_plot_tables::@4 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 ] )
|
||||
to:init_plot_tables::@7
|
||||
init_plot_tables::@7: scope:[init_plot_tables] from init_plot_tables::@3
|
||||
[180] (byte*) init_plot_tables::yoffs#1 ← (byte*) init_plot_tables::yoffs#2 + (byte/signed byte/word/signed word) 40*(byte/signed byte/word/signed word) 8 [ init_plot_tables::y#2 init_plot_tables::yoffs#1 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#1 ] )
|
||||
[175] (byte*) init_plot_tables::yoffs#1 ← (byte*) init_plot_tables::yoffs#2 + (byte/signed byte/word/signed word) 40*(byte/signed byte/word/signed word) 8 [ init_plot_tables::y#2 init_plot_tables::yoffs#1 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#1 ] )
|
||||
to:init_plot_tables::@4
|
||||
init_plot_tables::@4: scope:[init_plot_tables] from init_plot_tables::@3 init_plot_tables::@7
|
||||
[181] (byte*) init_plot_tables::yoffs#4 ← phi( init_plot_tables::@3/(byte*) init_plot_tables::yoffs#2 init_plot_tables::@7/(byte*) init_plot_tables::yoffs#1 ) [ init_plot_tables::y#2 init_plot_tables::yoffs#4 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#4 ] )
|
||||
[182] (byte) init_plot_tables::y#1 ← ++ (byte) init_plot_tables::y#2 [ init_plot_tables::y#1 init_plot_tables::yoffs#4 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#1 init_plot_tables::yoffs#4 ] )
|
||||
[183] if((byte) init_plot_tables::y#1!=(byte/signed byte/word/signed word) 0) goto init_plot_tables::@3 [ init_plot_tables::y#1 init_plot_tables::yoffs#4 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#1 init_plot_tables::yoffs#4 ] )
|
||||
[176] (byte*) init_plot_tables::yoffs#4 ← phi( init_plot_tables::@3/(byte*) init_plot_tables::yoffs#2 init_plot_tables::@7/(byte*) init_plot_tables::yoffs#1 ) [ init_plot_tables::y#2 init_plot_tables::yoffs#4 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#4 ] )
|
||||
[177] (byte) init_plot_tables::y#1 ← ++ (byte) init_plot_tables::y#2 [ init_plot_tables::y#1 init_plot_tables::yoffs#4 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#1 init_plot_tables::yoffs#4 ] )
|
||||
[178] if((byte) init_plot_tables::y#1!=(byte/signed byte/word/signed word) 0) goto init_plot_tables::@3 [ init_plot_tables::y#1 init_plot_tables::yoffs#4 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#1 init_plot_tables::yoffs#4 ] )
|
||||
to:init_plot_tables::@return
|
||||
init_plot_tables::@return: scope:[init_plot_tables] from init_plot_tables::@4
|
||||
[184] return [ ] ( main:2::init_plot_tables:10 [ ] )
|
||||
[179] return [ ] ( main:2::init_plot_tables:10 [ ] )
|
||||
to:@return
|
||||
init_plot_tables::@10: scope:[init_plot_tables] from init_plot_tables::@1
|
||||
[185] phi() [ init_plot_tables::x#2 init_plot_tables::bits#1 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#1 ] )
|
||||
[180] phi() [ init_plot_tables::x#2 init_plot_tables::bits#1 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#1 ] )
|
||||
to:init_plot_tables::@2
|
||||
init_screen: scope:[init_screen] from main
|
||||
[186] phi() [ ] ( main:2::init_screen:8 [ ] )
|
||||
[181] phi() [ ] ( main:2::init_screen:8 [ ] )
|
||||
to:init_screen::@1
|
||||
init_screen::@1: scope:[init_screen] from init_screen init_screen::@1
|
||||
[187] (byte*) init_screen::b#2 ← phi( init_screen/(const byte*) BITMAP#0 init_screen::@1/(byte*) init_screen::b#1 ) [ init_screen::b#2 ] ( main:2::init_screen:8 [ init_screen::b#2 ] )
|
||||
[188] *((byte*) init_screen::b#2) ← (byte/signed byte/word/signed word) 0 [ init_screen::b#2 ] ( main:2::init_screen:8 [ init_screen::b#2 ] )
|
||||
[189] (byte*) init_screen::b#1 ← ++ (byte*) init_screen::b#2 [ init_screen::b#1 ] ( main:2::init_screen:8 [ init_screen::b#1 ] )
|
||||
[190] if((byte*) init_screen::b#1!=(const byte*) BITMAP#0+(word/signed word) 8192) goto init_screen::@1 [ init_screen::b#1 ] ( main:2::init_screen:8 [ init_screen::b#1 ] )
|
||||
[182] (byte*) init_screen::b#2 ← phi( init_screen/(const byte*) BITMAP#0 init_screen::@1/(byte*) init_screen::b#1 ) [ init_screen::b#2 ] ( main:2::init_screen:8 [ init_screen::b#2 ] )
|
||||
[183] *((byte*) init_screen::b#2) ← (byte/signed byte/word/signed word) 0 [ init_screen::b#2 ] ( main:2::init_screen:8 [ init_screen::b#2 ] )
|
||||
[184] (byte*) init_screen::b#1 ← ++ (byte*) init_screen::b#2 [ init_screen::b#1 ] ( main:2::init_screen:8 [ init_screen::b#1 ] )
|
||||
[185] if((byte*) init_screen::b#1!=(const byte*) BITMAP#0+(word/signed word) 8192) goto init_screen::@1 [ init_screen::b#1 ] ( main:2::init_screen:8 [ init_screen::b#1 ] )
|
||||
to:init_screen::@2
|
||||
init_screen::@2: scope:[init_screen] from init_screen::@1 init_screen::@2
|
||||
[191] (byte*) init_screen::c#2 ← phi( init_screen::@2/(byte*) init_screen::c#1 init_screen::@1/(const byte*) SCREEN#0 ) [ init_screen::c#2 ] ( main:2::init_screen:8 [ init_screen::c#2 ] )
|
||||
[192] *((byte*) init_screen::c#2) ← (byte/signed byte/word/signed word) 20 [ init_screen::c#2 ] ( main:2::init_screen:8 [ init_screen::c#2 ] )
|
||||
[193] (byte*) init_screen::c#1 ← ++ (byte*) init_screen::c#2 [ init_screen::c#1 ] ( main:2::init_screen:8 [ init_screen::c#1 ] )
|
||||
[194] if((byte*) init_screen::c#1!=(const byte*) SCREEN#0+(word/signed word) 1024) goto init_screen::@2 [ init_screen::c#1 ] ( main:2::init_screen:8 [ init_screen::c#1 ] )
|
||||
[186] (byte*) init_screen::c#2 ← phi( init_screen::@2/(byte*) init_screen::c#1 init_screen::@1/(const byte*) SCREEN#0 ) [ init_screen::c#2 ] ( main:2::init_screen:8 [ init_screen::c#2 ] )
|
||||
[187] *((byte*) init_screen::c#2) ← (byte/signed byte/word/signed word) 20 [ init_screen::c#2 ] ( main:2::init_screen:8 [ init_screen::c#2 ] )
|
||||
[188] (byte*) init_screen::c#1 ← ++ (byte*) init_screen::c#2 [ init_screen::c#1 ] ( main:2::init_screen:8 [ init_screen::c#1 ] )
|
||||
[189] if((byte*) init_screen::c#1!=(const byte*) SCREEN#0+(word/signed word) 1024) goto init_screen::@2 [ init_screen::c#1 ] ( main:2::init_screen:8 [ init_screen::c#1 ] )
|
||||
to:init_screen::@return
|
||||
init_screen::@return: scope:[init_screen] from init_screen::@2
|
||||
[195] return [ ] ( main:2::init_screen:8 [ ] )
|
||||
[190] return [ ] ( main:2::init_screen:8 [ ] )
|
||||
to:@return
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -260,18 +260,13 @@
|
||||
(label) main::@5
|
||||
(label) main::@return
|
||||
(void()) plot((byte) plot::x , (byte) plot::y)
|
||||
(byte~) plot::$0 reg byte a 2.0
|
||||
(byte~) plot::$1 reg byte alu 4.0
|
||||
(byte~) plot::$2 $2 zp ZP_BYTE:10 2.0
|
||||
(byte~) plot::$3 reg byte a 4.0
|
||||
(word~) plot::$4 $4 zp ZP_WORD:8 4.0
|
||||
(byte~) plot::$5 reg byte a 4.0
|
||||
(byte~) plot::$6 reg byte a 4.0
|
||||
(word~) plot::$0 $0 zp ZP_WORD:8 4.0
|
||||
(byte~) plot::$1 reg byte a 4.0
|
||||
(label) plot::@return
|
||||
(byte*) plot::plotter
|
||||
(byte*) plot::plotter#0 plotter zp ZP_WORD:8 2.0
|
||||
(byte*) plot::plotter#0 plotter zp ZP_WORD:8 3.0
|
||||
(word) plot::plotter_x
|
||||
(word) plot::plotter_x#0 plotter_x zp ZP_WORD:8 1.0
|
||||
(word) plot::plotter_x#0 plotter_x zp ZP_WORD:8 2.0
|
||||
(word) plot::plotter_y
|
||||
(word) plot::plotter_y#0 plotter_y zp ZP_WORD:11 4.0
|
||||
(byte) plot::x
|
||||
@ -279,13 +274,13 @@
|
||||
(byte) plot::x#1 reg byte x 11.0
|
||||
(byte) plot::x#2 reg byte x 11.0
|
||||
(byte) plot::x#3 reg byte x 11.0
|
||||
(byte) plot::x#4 reg byte x 5.555555555555556
|
||||
(byte) plot::x#4 reg byte x 10.000000000000002
|
||||
(byte) plot::y
|
||||
(byte) plot::y#0 reg byte y 22.0
|
||||
(byte) plot::y#1 reg byte y 22.0
|
||||
(byte) plot::y#2 reg byte y 22.0
|
||||
(byte) plot::y#3 reg byte y 22.0
|
||||
(byte) plot::y#4 reg byte y 9.600000000000001
|
||||
(byte) plot::y#4 reg byte y 24.0
|
||||
(byte[]) plot_bit
|
||||
(const byte[]) plot_bit#0 plot_bit = ((byte*))(word/signed word) 5120
|
||||
(byte[]) plot_xhi
|
||||
@ -312,16 +307,12 @@ reg byte x [ line_xdyd::x#3 line_xdyd::x#6 line_xdyd::x#0 line_xdyd::x#1 line_xd
|
||||
reg byte x [ init_plot_tables::x#2 init_plot_tables::x#1 ]
|
||||
reg byte y [ init_plot_tables::bits#3 init_plot_tables::bits#4 init_plot_tables::bits#1 ]
|
||||
reg byte x [ init_plot_tables::y#2 init_plot_tables::y#1 ]
|
||||
zp ZP_WORD:8 [ init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 init_screen::b#2 init_screen::b#1 init_screen::c#2 init_screen::c#1 plot::plotter_x#0 plot::$4 plot::plotter#0 ]
|
||||
zp ZP_WORD:8 [ init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 init_screen::b#2 init_screen::b#1 init_screen::c#2 init_screen::c#1 plot::plotter_x#0 plot::$0 plot::plotter#0 ]
|
||||
reg byte y [ line::y0#0 ]
|
||||
zp ZP_BYTE:10 [ line::yd#1 line::yd#0 line::yd#3 line::yd#10 plot::$2 line_xdyi::$8 line_xdyd::$8 ]
|
||||
zp ZP_BYTE:10 [ line::yd#1 line::yd#0 line::yd#3 line::yd#10 line_xdyi::$8 line_xdyd::$8 ]
|
||||
reg byte a [ line_ydxi::$8 ]
|
||||
reg byte a [ plot::$0 ]
|
||||
reg byte alu [ plot::$1 ]
|
||||
reg byte a [ plot::$3 ]
|
||||
zp ZP_WORD:11 [ plot::plotter_y#0 ]
|
||||
reg byte a [ plot::$5 ]
|
||||
reg byte a [ plot::$6 ]
|
||||
reg byte a [ plot::$1 ]
|
||||
reg byte a [ line_ydxd::$8 ]
|
||||
reg byte a [ init_plot_tables::$0 ]
|
||||
reg byte a [ init_plot_tables::$7 ]
|
||||
|
@ -37,8 +37,8 @@ plots: scope:[plots] from main::@3
|
||||
to:plots::@1
|
||||
plots::@1: scope:[plots] from plots plots::@3
|
||||
[18] (byte) plots::i#2 ← phi( plots/(byte/signed byte/word/signed word) 0 plots::@3/(byte) plots::i#1 ) [ plots::i#2 ] ( main:2::plots:13 [ plots::i#2 ] )
|
||||
[19] (byte) plot::x#0 ← (const byte[]) plots_x#0 *idx (byte) plots::i#2 [ plots::i#2 plot::x#0 ] ( main:2::plots:13 [ plots::i#2 plot::x#0 ] )
|
||||
[20] (byte) plot::y#0 ← (const byte[]) plots_y#0 *idx (byte) plots::i#2 [ plots::i#2 plot::x#0 plot::y#0 ] ( main:2::plots:13 [ plots::i#2 plot::x#0 plot::y#0 ] )
|
||||
[19] (byte) plot::x#0 ← *((const byte[]) plots_x#0 + (byte) plots::i#2) [ plots::i#2 plot::x#0 ] ( main:2::plots:13 [ plots::i#2 plot::x#0 ] )
|
||||
[20] (byte) plot::y#0 ← *((const byte[]) plots_y#0 + (byte) plots::i#2) [ plots::i#2 plot::x#0 plot::y#0 ] ( main:2::plots:13 [ plots::i#2 plot::x#0 plot::y#0 ] )
|
||||
[21] call plot param-assignment [ plots::i#2 ] ( main:2::plots:13 [ plots::i#2 ] )
|
||||
to:plots::@3
|
||||
plots::@3: scope:[plots] from plots::@1
|
||||
@ -49,81 +49,80 @@ plots::@return: scope:[plots] from plots::@3
|
||||
[24] return [ ] ( main:2::plots:13 [ ] )
|
||||
to:@return
|
||||
plot: scope:[plot] from plots::@1
|
||||
[25] (byte~) plot::$0 ← (const byte[]) plot_xhi#0 *idx (byte) plot::x#0 [ plot::x#0 plot::y#0 plot::$0 ] ( main:2::plots:13::plot:21 [ plots::i#2 plot::x#0 plot::y#0 plot::$0 ] )
|
||||
[26] (byte*) plot::plotter_x#1 ← ((byte*))(byte/signed byte/word/signed word) 0 hi= (byte~) plot::$0 [ plot::x#0 plot::y#0 plot::plotter_x#1 ] ( main:2::plots:13::plot:21 [ plots::i#2 plot::x#0 plot::y#0 plot::plotter_x#1 ] )
|
||||
[27] (byte~) plot::$1 ← (const byte[]) plot_xlo#0 *idx (byte) plot::x#0 [ plot::x#0 plot::y#0 plot::plotter_x#1 plot::$1 ] ( main:2::plots:13::plot:21 [ plots::i#2 plot::x#0 plot::y#0 plot::plotter_x#1 plot::$1 ] )
|
||||
[28] (byte*) plot::plotter_x#2 ← (byte*) plot::plotter_x#1 lo= (byte~) plot::$1 [ plot::x#0 plot::y#0 plot::plotter_x#2 ] ( main:2::plots:13::plot:21 [ plots::i#2 plot::x#0 plot::y#0 plot::plotter_x#2 ] )
|
||||
[29] (byte~) plot::$2 ← (const byte[]) plot_yhi#0 *idx (byte) plot::y#0 [ plot::x#0 plot::y#0 plot::plotter_x#2 plot::$2 ] ( main:2::plots:13::plot:21 [ plots::i#2 plot::x#0 plot::y#0 plot::plotter_x#2 plot::$2 ] )
|
||||
[30] (word) plot::plotter_y#1 ← (byte/signed byte/word/signed word) 0 hi= (byte~) plot::$2 [ plot::x#0 plot::y#0 plot::plotter_x#2 plot::plotter_y#1 ] ( main:2::plots:13::plot:21 [ plots::i#2 plot::x#0 plot::y#0 plot::plotter_x#2 plot::plotter_y#1 ] )
|
||||
[31] (byte~) plot::$3 ← (const byte[]) plot_ylo#0 *idx (byte) plot::y#0 [ plot::x#0 plot::plotter_x#2 plot::plotter_y#1 plot::$3 ] ( main:2::plots:13::plot:21 [ plots::i#2 plot::x#0 plot::plotter_x#2 plot::plotter_y#1 plot::$3 ] )
|
||||
[32] (word) plot::plotter_y#2 ← (word) plot::plotter_y#1 lo= (byte~) plot::$3 [ plot::x#0 plot::plotter_x#2 plot::plotter_y#2 ] ( main:2::plots:13::plot:21 [ plots::i#2 plot::x#0 plot::plotter_x#2 plot::plotter_y#2 ] )
|
||||
[25] (byte~) plot::$6 ← *((const byte[]) plot_xhi#0 + (byte) plot::x#0) [ plot::x#0 plot::y#0 plot::$6 ] ( main:2::plots:13::plot:21 [ plots::i#2 plot::x#0 plot::y#0 plot::$6 ] )
|
||||
[26] (byte*) plot::plotter_x#1 ← ((byte*))(byte/signed byte/word/signed word) 0 hi= (byte~) plot::$6 [ plot::x#0 plot::y#0 plot::plotter_x#1 ] ( main:2::plots:13::plot:21 [ plots::i#2 plot::x#0 plot::y#0 plot::plotter_x#1 ] )
|
||||
[27] (byte~) plot::$7 ← *((const byte[]) plot_xlo#0 + (byte) plot::x#0) [ plot::x#0 plot::y#0 plot::plotter_x#1 plot::$7 ] ( main:2::plots:13::plot:21 [ plots::i#2 plot::x#0 plot::y#0 plot::plotter_x#1 plot::$7 ] )
|
||||
[28] (byte*) plot::plotter_x#2 ← (byte*) plot::plotter_x#1 lo= (byte~) plot::$7 [ plot::x#0 plot::y#0 plot::plotter_x#2 ] ( main:2::plots:13::plot:21 [ plots::i#2 plot::x#0 plot::y#0 plot::plotter_x#2 ] )
|
||||
[29] (byte~) plot::$8 ← *((const byte[]) plot_yhi#0 + (byte) plot::y#0) [ plot::x#0 plot::y#0 plot::plotter_x#2 plot::$8 ] ( main:2::plots:13::plot:21 [ plots::i#2 plot::x#0 plot::y#0 plot::plotter_x#2 plot::$8 ] )
|
||||
[30] (word) plot::plotter_y#1 ← (byte/signed byte/word/signed word) 0 hi= (byte~) plot::$8 [ plot::x#0 plot::y#0 plot::plotter_x#2 plot::plotter_y#1 ] ( main:2::plots:13::plot:21 [ plots::i#2 plot::x#0 plot::y#0 plot::plotter_x#2 plot::plotter_y#1 ] )
|
||||
[31] (byte~) plot::$9 ← *((const byte[]) plot_ylo#0 + (byte) plot::y#0) [ plot::x#0 plot::plotter_x#2 plot::plotter_y#1 plot::$9 ] ( main:2::plots:13::plot:21 [ plots::i#2 plot::x#0 plot::plotter_x#2 plot::plotter_y#1 plot::$9 ] )
|
||||
[32] (word) plot::plotter_y#2 ← (word) plot::plotter_y#1 lo= (byte~) plot::$9 [ plot::x#0 plot::plotter_x#2 plot::plotter_y#2 ] ( main:2::plots:13::plot:21 [ plots::i#2 plot::x#0 plot::plotter_x#2 plot::plotter_y#2 ] )
|
||||
[33] (byte*) plot::plotter#0 ← (byte*) plot::plotter_x#2 + (word) plot::plotter_y#2 [ plot::x#0 plot::plotter#0 ] ( main:2::plots:13::plot:21 [ plots::i#2 plot::x#0 plot::plotter#0 ] )
|
||||
[34] (byte~) plot::$5 ← (const byte[]) plot_bit#0 *idx (byte) plot::x#0 [ plot::plotter#0 plot::$5 ] ( main:2::plots:13::plot:21 [ plots::i#2 plot::plotter#0 plot::$5 ] )
|
||||
[35] (byte~) plot::$6 ← *((byte*) plot::plotter#0) | (byte~) plot::$5 [ plot::plotter#0 plot::$6 ] ( main:2::plots:13::plot:21 [ plots::i#2 plot::plotter#0 plot::$6 ] )
|
||||
[36] *((byte*) plot::plotter#0) ← (byte~) plot::$6 [ ] ( main:2::plots:13::plot:21 [ plots::i#2 ] )
|
||||
[34] (byte~) plot::$5 ← *((byte*) plot::plotter#0) | *((const byte[]) plot_bit#0 + (byte) plot::x#0) [ plot::plotter#0 plot::$5 ] ( main:2::plots:13::plot:21 [ plots::i#2 plot::plotter#0 plot::$5 ] )
|
||||
[35] *((byte*) plot::plotter#0) ← (byte~) plot::$5 [ ] ( main:2::plots:13::plot:21 [ plots::i#2 ] )
|
||||
to:plot::@return
|
||||
plot::@return: scope:[plot] from plot
|
||||
[37] return [ ] ( main:2::plots:13::plot:21 [ plots::i#2 ] )
|
||||
[36] return [ ] ( main:2::plots:13::plot:21 [ plots::i#2 ] )
|
||||
to:@return
|
||||
init_plot_tables: scope:[init_plot_tables] from main::@5
|
||||
[38] phi() [ ] ( main:2::init_plot_tables:10 [ ] )
|
||||
[37] phi() [ ] ( main:2::init_plot_tables:10 [ ] )
|
||||
to:init_plot_tables::@1
|
||||
init_plot_tables::@1: scope:[init_plot_tables] from init_plot_tables init_plot_tables::@2
|
||||
[39] (byte) init_plot_tables::bits#3 ← phi( init_plot_tables/(byte/word/signed word) 128 init_plot_tables::@2/(byte) init_plot_tables::bits#4 ) [ init_plot_tables::x#2 init_plot_tables::bits#3 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] )
|
||||
[39] (byte) init_plot_tables::x#2 ← phi( init_plot_tables/(byte/signed byte/word/signed word) 0 init_plot_tables::@2/(byte) init_plot_tables::x#1 ) [ init_plot_tables::x#2 init_plot_tables::bits#3 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] )
|
||||
[40] (byte~) init_plot_tables::$0 ← (byte) init_plot_tables::x#2 & (byte/word/signed word) 248 [ init_plot_tables::x#2 init_plot_tables::bits#3 init_plot_tables::$0 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#3 init_plot_tables::$0 ] )
|
||||
[41] *((const byte[]) plot_xlo#0 + (byte) init_plot_tables::x#2) ← (byte~) init_plot_tables::$0 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] )
|
||||
[42] *((const byte[]) plot_xhi#0 + (byte) init_plot_tables::x#2) ← >(const byte*) BITMAP#0 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] )
|
||||
[43] *((const byte[]) plot_bit#0 + (byte) init_plot_tables::x#2) ← (byte) init_plot_tables::bits#3 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] )
|
||||
[44] (byte) init_plot_tables::bits#1 ← (byte) init_plot_tables::bits#3 >> (byte/signed byte/word/signed word) 1 [ init_plot_tables::x#2 init_plot_tables::bits#1 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#1 ] )
|
||||
[45] if((byte) init_plot_tables::bits#1!=(byte/signed byte/word/signed word) 0) goto init_plot_tables::@10 [ init_plot_tables::x#2 init_plot_tables::bits#1 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#1 ] )
|
||||
[38] (byte) init_plot_tables::bits#3 ← phi( init_plot_tables/(byte/word/signed word) 128 init_plot_tables::@2/(byte) init_plot_tables::bits#4 ) [ init_plot_tables::x#2 init_plot_tables::bits#3 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] )
|
||||
[38] (byte) init_plot_tables::x#2 ← phi( init_plot_tables/(byte/signed byte/word/signed word) 0 init_plot_tables::@2/(byte) init_plot_tables::x#1 ) [ init_plot_tables::x#2 init_plot_tables::bits#3 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] )
|
||||
[39] (byte~) init_plot_tables::$0 ← (byte) init_plot_tables::x#2 & (byte/word/signed word) 248 [ init_plot_tables::x#2 init_plot_tables::bits#3 init_plot_tables::$0 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#3 init_plot_tables::$0 ] )
|
||||
[40] *((const byte[]) plot_xlo#0 + (byte) init_plot_tables::x#2) ← (byte~) init_plot_tables::$0 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] )
|
||||
[41] *((const byte[]) plot_xhi#0 + (byte) init_plot_tables::x#2) ← >(const byte*) BITMAP#0 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] )
|
||||
[42] *((const byte[]) plot_bit#0 + (byte) init_plot_tables::x#2) ← (byte) init_plot_tables::bits#3 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#3 ] )
|
||||
[43] (byte) init_plot_tables::bits#1 ← (byte) init_plot_tables::bits#3 >> (byte/signed byte/word/signed word) 1 [ init_plot_tables::x#2 init_plot_tables::bits#1 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#1 ] )
|
||||
[44] if((byte) init_plot_tables::bits#1!=(byte/signed byte/word/signed word) 0) goto init_plot_tables::@10 [ init_plot_tables::x#2 init_plot_tables::bits#1 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#1 ] )
|
||||
to:init_plot_tables::@2
|
||||
init_plot_tables::@2: scope:[init_plot_tables] from init_plot_tables::@1 init_plot_tables::@10
|
||||
[46] (byte) init_plot_tables::bits#4 ← phi( init_plot_tables::@10/(byte) init_plot_tables::bits#1 init_plot_tables::@1/(byte/word/signed word) 128 ) [ init_plot_tables::x#2 init_plot_tables::bits#4 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#4 ] )
|
||||
[47] (byte) init_plot_tables::x#1 ← ++ (byte) init_plot_tables::x#2 [ init_plot_tables::x#1 init_plot_tables::bits#4 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#1 init_plot_tables::bits#4 ] )
|
||||
[48] if((byte) init_plot_tables::x#1!=(byte/signed byte/word/signed word) 0) goto init_plot_tables::@1 [ init_plot_tables::x#1 init_plot_tables::bits#4 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#1 init_plot_tables::bits#4 ] )
|
||||
[45] (byte) init_plot_tables::bits#4 ← phi( init_plot_tables::@10/(byte) init_plot_tables::bits#1 init_plot_tables::@1/(byte/word/signed word) 128 ) [ init_plot_tables::x#2 init_plot_tables::bits#4 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#4 ] )
|
||||
[46] (byte) init_plot_tables::x#1 ← ++ (byte) init_plot_tables::x#2 [ init_plot_tables::x#1 init_plot_tables::bits#4 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#1 init_plot_tables::bits#4 ] )
|
||||
[47] if((byte) init_plot_tables::x#1!=(byte/signed byte/word/signed word) 0) goto init_plot_tables::@1 [ init_plot_tables::x#1 init_plot_tables::bits#4 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#1 init_plot_tables::bits#4 ] )
|
||||
to:init_plot_tables::@3
|
||||
init_plot_tables::@3: scope:[init_plot_tables] from init_plot_tables::@2 init_plot_tables::@4
|
||||
[49] (byte*) init_plot_tables::yoffs#2 ← phi( init_plot_tables::@4/(byte*) init_plot_tables::yoffs#4 init_plot_tables::@2/((byte*))(byte/signed byte/word/signed word) 0 ) [ init_plot_tables::y#2 init_plot_tables::yoffs#2 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 ] )
|
||||
[49] (byte) init_plot_tables::y#2 ← phi( init_plot_tables::@4/(byte) init_plot_tables::y#1 init_plot_tables::@2/(byte/signed byte/word/signed word) 0 ) [ init_plot_tables::y#2 init_plot_tables::yoffs#2 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 ] )
|
||||
[50] (byte~) init_plot_tables::$6 ← (byte) init_plot_tables::y#2 & (byte/signed byte/word/signed word) 7 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 init_plot_tables::$6 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 init_plot_tables::$6 ] )
|
||||
[51] (byte~) init_plot_tables::$7 ← < (byte*) init_plot_tables::yoffs#2 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 init_plot_tables::$6 init_plot_tables::$7 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 init_plot_tables::$6 init_plot_tables::$7 ] )
|
||||
[52] (byte~) init_plot_tables::$8 ← (byte~) init_plot_tables::$6 | (byte~) init_plot_tables::$7 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 init_plot_tables::$8 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 init_plot_tables::$8 ] )
|
||||
[53] *((const byte[]) plot_ylo#0 + (byte) init_plot_tables::y#2) ← (byte~) init_plot_tables::$8 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 ] )
|
||||
[54] (byte~) init_plot_tables::$9 ← > (byte*) init_plot_tables::yoffs#2 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 init_plot_tables::$9 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 init_plot_tables::$9 ] )
|
||||
[55] *((const byte[]) plot_yhi#0 + (byte) init_plot_tables::y#2) ← (byte~) init_plot_tables::$9 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 ] )
|
||||
[56] (byte~) init_plot_tables::$10 ← (byte) init_plot_tables::y#2 & (byte/signed byte/word/signed word) 7 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 init_plot_tables::$10 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 init_plot_tables::$10 ] )
|
||||
[57] if((byte~) init_plot_tables::$10!=(byte/signed byte/word/signed word) 7) goto init_plot_tables::@4 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 ] )
|
||||
[48] (byte*) init_plot_tables::yoffs#2 ← phi( init_plot_tables::@4/(byte*) init_plot_tables::yoffs#4 init_plot_tables::@2/((byte*))(byte/signed byte/word/signed word) 0 ) [ init_plot_tables::y#2 init_plot_tables::yoffs#2 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 ] )
|
||||
[48] (byte) init_plot_tables::y#2 ← phi( init_plot_tables::@4/(byte) init_plot_tables::y#1 init_plot_tables::@2/(byte/signed byte/word/signed word) 0 ) [ init_plot_tables::y#2 init_plot_tables::yoffs#2 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 ] )
|
||||
[49] (byte~) init_plot_tables::$6 ← (byte) init_plot_tables::y#2 & (byte/signed byte/word/signed word) 7 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 init_plot_tables::$6 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 init_plot_tables::$6 ] )
|
||||
[50] (byte~) init_plot_tables::$7 ← < (byte*) init_plot_tables::yoffs#2 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 init_plot_tables::$6 init_plot_tables::$7 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 init_plot_tables::$6 init_plot_tables::$7 ] )
|
||||
[51] (byte~) init_plot_tables::$8 ← (byte~) init_plot_tables::$6 | (byte~) init_plot_tables::$7 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 init_plot_tables::$8 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 init_plot_tables::$8 ] )
|
||||
[52] *((const byte[]) plot_ylo#0 + (byte) init_plot_tables::y#2) ← (byte~) init_plot_tables::$8 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 ] )
|
||||
[53] (byte~) init_plot_tables::$9 ← > (byte*) init_plot_tables::yoffs#2 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 init_plot_tables::$9 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 init_plot_tables::$9 ] )
|
||||
[54] *((const byte[]) plot_yhi#0 + (byte) init_plot_tables::y#2) ← (byte~) init_plot_tables::$9 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 ] )
|
||||
[55] (byte~) init_plot_tables::$10 ← (byte) init_plot_tables::y#2 & (byte/signed byte/word/signed word) 7 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 init_plot_tables::$10 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 init_plot_tables::$10 ] )
|
||||
[56] if((byte~) init_plot_tables::$10!=(byte/signed byte/word/signed word) 7) goto init_plot_tables::@4 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#2 ] )
|
||||
to:init_plot_tables::@7
|
||||
init_plot_tables::@7: scope:[init_plot_tables] from init_plot_tables::@3
|
||||
[58] (byte*) init_plot_tables::yoffs#1 ← (byte*) init_plot_tables::yoffs#2 + (byte/signed byte/word/signed word) 40*(byte/signed byte/word/signed word) 8 [ init_plot_tables::y#2 init_plot_tables::yoffs#1 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#1 ] )
|
||||
[57] (byte*) init_plot_tables::yoffs#1 ← (byte*) init_plot_tables::yoffs#2 + (byte/signed byte/word/signed word) 40*(byte/signed byte/word/signed word) 8 [ init_plot_tables::y#2 init_plot_tables::yoffs#1 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#1 ] )
|
||||
to:init_plot_tables::@4
|
||||
init_plot_tables::@4: scope:[init_plot_tables] from init_plot_tables::@3 init_plot_tables::@7
|
||||
[59] (byte*) init_plot_tables::yoffs#4 ← phi( init_plot_tables::@3/(byte*) init_plot_tables::yoffs#2 init_plot_tables::@7/(byte*) init_plot_tables::yoffs#1 ) [ init_plot_tables::y#2 init_plot_tables::yoffs#4 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#4 ] )
|
||||
[60] (byte) init_plot_tables::y#1 ← ++ (byte) init_plot_tables::y#2 [ init_plot_tables::y#1 init_plot_tables::yoffs#4 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#1 init_plot_tables::yoffs#4 ] )
|
||||
[61] if((byte) init_plot_tables::y#1!=(byte/signed byte/word/signed word) 0) goto init_plot_tables::@3 [ init_plot_tables::y#1 init_plot_tables::yoffs#4 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#1 init_plot_tables::yoffs#4 ] )
|
||||
[58] (byte*) init_plot_tables::yoffs#4 ← phi( init_plot_tables::@3/(byte*) init_plot_tables::yoffs#2 init_plot_tables::@7/(byte*) init_plot_tables::yoffs#1 ) [ init_plot_tables::y#2 init_plot_tables::yoffs#4 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#4 ] )
|
||||
[59] (byte) init_plot_tables::y#1 ← ++ (byte) init_plot_tables::y#2 [ init_plot_tables::y#1 init_plot_tables::yoffs#4 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#1 init_plot_tables::yoffs#4 ] )
|
||||
[60] if((byte) init_plot_tables::y#1!=(byte/signed byte/word/signed word) 0) goto init_plot_tables::@3 [ init_plot_tables::y#1 init_plot_tables::yoffs#4 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#1 init_plot_tables::yoffs#4 ] )
|
||||
to:init_plot_tables::@return
|
||||
init_plot_tables::@return: scope:[init_plot_tables] from init_plot_tables::@4
|
||||
[62] return [ ] ( main:2::init_plot_tables:10 [ ] )
|
||||
[61] return [ ] ( main:2::init_plot_tables:10 [ ] )
|
||||
to:@return
|
||||
init_plot_tables::@10: scope:[init_plot_tables] from init_plot_tables::@1
|
||||
[63] phi() [ init_plot_tables::x#2 init_plot_tables::bits#1 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#1 ] )
|
||||
[62] phi() [ init_plot_tables::x#2 init_plot_tables::bits#1 ] ( main:2::init_plot_tables:10 [ init_plot_tables::x#2 init_plot_tables::bits#1 ] )
|
||||
to:init_plot_tables::@2
|
||||
init_screen: scope:[init_screen] from main
|
||||
[64] phi() [ ] ( main:2::init_screen:8 [ ] )
|
||||
[63] phi() [ ] ( main:2::init_screen:8 [ ] )
|
||||
to:init_screen::@1
|
||||
init_screen::@1: scope:[init_screen] from init_screen init_screen::@1
|
||||
[65] (byte*) init_screen::b#2 ← phi( init_screen/(const byte*) BITMAP#0 init_screen::@1/(byte*) init_screen::b#1 ) [ init_screen::b#2 ] ( main:2::init_screen:8 [ init_screen::b#2 ] )
|
||||
[66] *((byte*) init_screen::b#2) ← (byte/signed byte/word/signed word) 0 [ init_screen::b#2 ] ( main:2::init_screen:8 [ init_screen::b#2 ] )
|
||||
[67] (byte*) init_screen::b#1 ← ++ (byte*) init_screen::b#2 [ init_screen::b#1 ] ( main:2::init_screen:8 [ init_screen::b#1 ] )
|
||||
[68] if((byte*) init_screen::b#1!=(const byte*) BITMAP#0+(word/signed word) 8192) goto init_screen::@1 [ init_screen::b#1 ] ( main:2::init_screen:8 [ init_screen::b#1 ] )
|
||||
[64] (byte*) init_screen::b#2 ← phi( init_screen/(const byte*) BITMAP#0 init_screen::@1/(byte*) init_screen::b#1 ) [ init_screen::b#2 ] ( main:2::init_screen:8 [ init_screen::b#2 ] )
|
||||
[65] *((byte*) init_screen::b#2) ← (byte/signed byte/word/signed word) 0 [ init_screen::b#2 ] ( main:2::init_screen:8 [ init_screen::b#2 ] )
|
||||
[66] (byte*) init_screen::b#1 ← ++ (byte*) init_screen::b#2 [ init_screen::b#1 ] ( main:2::init_screen:8 [ init_screen::b#1 ] )
|
||||
[67] if((byte*) init_screen::b#1!=(const byte*) BITMAP#0+(word/signed word) 8192) goto init_screen::@1 [ init_screen::b#1 ] ( main:2::init_screen:8 [ init_screen::b#1 ] )
|
||||
to:init_screen::@2
|
||||
init_screen::@2: scope:[init_screen] from init_screen::@1 init_screen::@2
|
||||
[69] (byte*) init_screen::c#2 ← phi( init_screen::@2/(byte*) init_screen::c#1 init_screen::@1/(const byte*) SCREEN#0 ) [ init_screen::c#2 ] ( main:2::init_screen:8 [ init_screen::c#2 ] )
|
||||
[70] *((byte*) init_screen::c#2) ← (byte/signed byte/word/signed word) 20 [ init_screen::c#2 ] ( main:2::init_screen:8 [ init_screen::c#2 ] )
|
||||
[71] (byte*) init_screen::c#1 ← ++ (byte*) init_screen::c#2 [ init_screen::c#1 ] ( main:2::init_screen:8 [ init_screen::c#1 ] )
|
||||
[72] if((byte*) init_screen::c#1!=(const byte*) SCREEN#0+(word/signed word) 1024) goto init_screen::@2 [ init_screen::c#1 ] ( main:2::init_screen:8 [ init_screen::c#1 ] )
|
||||
[68] (byte*) init_screen::c#2 ← phi( init_screen::@2/(byte*) init_screen::c#1 init_screen::@1/(const byte*) SCREEN#0 ) [ init_screen::c#2 ] ( main:2::init_screen:8 [ init_screen::c#2 ] )
|
||||
[69] *((byte*) init_screen::c#2) ← (byte/signed byte/word/signed word) 20 [ init_screen::c#2 ] ( main:2::init_screen:8 [ init_screen::c#2 ] )
|
||||
[70] (byte*) init_screen::c#1 ← ++ (byte*) init_screen::c#2 [ init_screen::c#1 ] ( main:2::init_screen:8 [ init_screen::c#1 ] )
|
||||
[71] if((byte*) init_screen::c#1!=(const byte*) SCREEN#0+(word/signed word) 1024) goto init_screen::@2 [ init_screen::c#1 ] ( main:2::init_screen:8 [ init_screen::c#1 ] )
|
||||
to:init_screen::@return
|
||||
init_screen::@return: scope:[init_screen] from init_screen::@2
|
||||
[73] return [ ] ( main:2::init_screen:8 [ ] )
|
||||
[72] return [ ] ( main:2::init_screen:8 [ ] )
|
||||
to:@return
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -66,15 +66,14 @@
|
||||
(label) main::@7
|
||||
(label) main::@return
|
||||
(void()) plot((byte) plot::x , (byte) plot::y)
|
||||
(byte~) plot::$0 reg byte a 4.0
|
||||
(byte~) plot::$1 reg byte a 4.0
|
||||
(byte~) plot::$2 reg byte a 4.0
|
||||
(byte~) plot::$3 reg byte a 4.0
|
||||
(byte~) plot::$5 reg byte a 4.0
|
||||
(byte~) plot::$6 reg byte a 4.0
|
||||
(byte~) plot::$7 reg byte a 4.0
|
||||
(byte~) plot::$8 reg byte a 4.0
|
||||
(byte~) plot::$9 reg byte a 4.0
|
||||
(label) plot::@return
|
||||
(byte*) plot::plotter
|
||||
(byte*) plot::plotter#0 plotter zp ZP_WORD:3 2.0
|
||||
(byte*) plot::plotter#0 plotter zp ZP_WORD:3 3.0
|
||||
(byte*) plot::plotter_x
|
||||
(byte*) plot::plotter_x#1 plotter_x zp ZP_WORD:3 2.0
|
||||
(byte*) plot::plotter_x#2 plotter_x zp ZP_WORD:3 0.8
|
||||
@ -116,13 +115,12 @@ reg byte x [ init_plot_tables::y#2 init_plot_tables::y#1 ]
|
||||
zp ZP_WORD:3 [ init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 init_screen::b#2 init_screen::b#1 init_screen::c#2 init_screen::c#1 plot::plotter_x#1 plot::plotter_x#2 plot::plotter#0 ]
|
||||
reg byte y [ plot::x#0 ]
|
||||
reg byte x [ plot::y#0 ]
|
||||
reg byte a [ plot::$0 ]
|
||||
reg byte a [ plot::$1 ]
|
||||
reg byte a [ plot::$2 ]
|
||||
zp ZP_WORD:5 [ plot::plotter_y#1 plot::plotter_y#2 ]
|
||||
reg byte a [ plot::$3 ]
|
||||
reg byte a [ plot::$5 ]
|
||||
reg byte a [ plot::$6 ]
|
||||
reg byte a [ plot::$7 ]
|
||||
reg byte a [ plot::$8 ]
|
||||
zp ZP_WORD:5 [ plot::plotter_y#1 plot::plotter_y#2 ]
|
||||
reg byte a [ plot::$9 ]
|
||||
reg byte a [ plot::$5 ]
|
||||
reg byte a [ init_plot_tables::$0 ]
|
||||
reg byte a [ init_plot_tables::$7 ]
|
||||
reg byte a [ init_plot_tables::$8 ]
|
||||
|
@ -14,14 +14,14 @@ main: scope:[main] from @1
|
||||
main::@1: scope:[main] from main main::@5
|
||||
[6] (byte*) main::sc#7 ← phi( main/(const byte*) SCREEN#0 main::@5/(byte*) main::sc#2 ) [ main::y#2 main::sc#7 ] ( main:2 [ main::y#2 main::sc#7 ] )
|
||||
[6] (byte) main::y#2 ← phi( main/(byte/signed byte/word/signed word) 0 main::@5/(byte) main::y#1 ) [ main::y#2 main::sc#7 ] ( main:2 [ main::y#2 main::sc#7 ] )
|
||||
[7] (byte) main::bits#0 ← (const byte*) main::CHAR_A#0 *idx (byte) main::y#2 [ main::y#2 main::sc#7 main::bits#0 ] ( main:2 [ main::y#2 main::sc#7 main::bits#0 ] )
|
||||
[7] (byte) main::bits#0 ← *((const byte*) main::CHAR_A#0 + (byte) main::y#2) [ main::y#2 main::sc#7 main::bits#0 ] ( main:2 [ main::y#2 main::sc#7 main::bits#0 ] )
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
[8] (byte) main::x#2 ← phi( main::@1/(byte/signed byte/word/signed word) 0 main::@3/(byte) main::x#1 ) [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] ( main:2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] )
|
||||
[8] (byte*) main::sc#3 ← phi( main::@1/(byte*) main::sc#7 main::@3/(byte*) main::sc#1 ) [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] ( main:2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] )
|
||||
[8] (byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@3/(byte) main::bits#1 ) [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] ( main:2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] )
|
||||
[9] (byte~) main::$2 ← (byte) main::bits#2 & (byte/word/signed word) 128 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$2 ] ( main:2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$2 ] )
|
||||
[10] if((byte~) main::$2==(byte/signed byte/word/signed word) 0) goto main::@3 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] ( main:2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] )
|
||||
[9] (byte~) main::$1 ← (byte) main::bits#2 & (byte/word/signed word) 128 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$1 ] ( main:2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$1 ] )
|
||||
[10] if((byte~) main::$1==(byte/signed byte/word/signed word) 0) goto main::@3 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] ( main:2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] )
|
||||
to:main::@4
|
||||
main::@4: scope:[main] from main::@2
|
||||
[11] phi() [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] ( main:2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] )
|
||||
|
@ -37,29 +37,28 @@ proc (void()) main()
|
||||
(byte*) main::sc ← (byte*) SCREEN
|
||||
(byte) main::y ← (byte/signed byte/word/signed word) 0
|
||||
main::@1:
|
||||
(byte~) main::$1 ← (byte*) main::CHAR_A *idx (byte) main::y
|
||||
(byte) main::bits ← (byte~) main::$1
|
||||
(byte) main::bits ← *((byte*) main::CHAR_A + (byte) main::y)
|
||||
(byte) main::x ← (byte/signed byte/word/signed word) 0
|
||||
main::@2:
|
||||
(byte) main::c ← (byte) '.'
|
||||
(byte~) main::$2 ← (byte) main::bits & (byte/word/signed word) 128
|
||||
(boolean~) main::$3 ← (byte~) main::$2 != (byte/signed byte/word/signed word) 0
|
||||
(boolean~) main::$4 ← ! (boolean~) main::$3
|
||||
if((boolean~) main::$4) goto main::@3
|
||||
(byte~) main::$1 ← (byte) main::bits & (byte/word/signed word) 128
|
||||
(boolean~) main::$2 ← (byte~) main::$1 != (byte/signed byte/word/signed word) 0
|
||||
(boolean~) main::$3 ← ! (boolean~) main::$2
|
||||
if((boolean~) main::$3) goto main::@3
|
||||
(byte) main::c ← (byte) '*'
|
||||
main::@3:
|
||||
*((byte*) main::sc) ← (byte) main::c
|
||||
(byte*) main::sc ← ++ (byte*) main::sc
|
||||
(byte~) main::$5 ← (byte) main::bits << (byte/signed byte/word/signed word) 1
|
||||
(byte) main::bits ← (byte~) main::$5
|
||||
(byte~) main::$4 ← (byte) main::bits << (byte/signed byte/word/signed word) 1
|
||||
(byte) main::bits ← (byte~) main::$4
|
||||
(byte) main::x ← ++ (byte) main::x
|
||||
(boolean~) main::$6 ← (byte) main::x != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$6) goto main::@2
|
||||
(byte*~) main::$7 ← (byte*) main::sc + (byte/signed byte/word/signed word) 32
|
||||
(byte*) main::sc ← (byte*~) main::$7
|
||||
(boolean~) main::$5 ← (byte) main::x != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$5) goto main::@2
|
||||
(byte*~) main::$6 ← (byte*) main::sc + (byte/signed byte/word/signed word) 32
|
||||
(byte*) main::sc ← (byte*~) main::$6
|
||||
(byte) main::y ← ++ (byte) main::y
|
||||
(boolean~) main::$8 ← (byte) main::y != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$8) goto main::@1
|
||||
(boolean~) main::$7 ← (byte) main::y != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$7) goto main::@1
|
||||
*((byte*) PROCPORT) ← (byte/signed byte/word/signed word) 55
|
||||
asm { cli }
|
||||
main::@return:
|
||||
@ -74,13 +73,12 @@ SYMBOLS
|
||||
(void()) main()
|
||||
(byte*~) main::$0
|
||||
(byte~) main::$1
|
||||
(byte~) main::$2
|
||||
(boolean~) main::$2
|
||||
(boolean~) main::$3
|
||||
(boolean~) main::$4
|
||||
(byte~) main::$5
|
||||
(boolean~) main::$6
|
||||
(byte*~) main::$7
|
||||
(boolean~) main::$8
|
||||
(byte~) main::$4
|
||||
(boolean~) main::$5
|
||||
(byte*~) main::$6
|
||||
(boolean~) main::$7
|
||||
(label) main::@1
|
||||
(label) main::@2
|
||||
(label) main::@3
|
||||
@ -110,35 +108,34 @@ main: scope:[main] from
|
||||
(byte) main::y ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@5
|
||||
(byte~) main::$1 ← (byte*) main::CHAR_A *idx (byte) main::y
|
||||
(byte) main::bits ← (byte~) main::$1
|
||||
(byte) main::bits ← *((byte*) main::CHAR_A + (byte) main::y)
|
||||
(byte) main::x ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte) main::c ← (byte) '.'
|
||||
(byte~) main::$2 ← (byte) main::bits & (byte/word/signed word) 128
|
||||
(boolean~) main::$3 ← (byte~) main::$2 != (byte/signed byte/word/signed word) 0
|
||||
(boolean~) main::$4 ← ! (boolean~) main::$3
|
||||
if((boolean~) main::$4) goto main::@3
|
||||
(byte~) main::$1 ← (byte) main::bits & (byte/word/signed word) 128
|
||||
(boolean~) main::$2 ← (byte~) main::$1 != (byte/signed byte/word/signed word) 0
|
||||
(boolean~) main::$3 ← ! (boolean~) main::$2
|
||||
if((boolean~) main::$3) goto main::@3
|
||||
to:main::@4
|
||||
main::@3: scope:[main] from main::@2 main::@4
|
||||
*((byte*) main::sc) ← (byte) main::c
|
||||
(byte*) main::sc ← ++ (byte*) main::sc
|
||||
(byte~) main::$5 ← (byte) main::bits << (byte/signed byte/word/signed word) 1
|
||||
(byte) main::bits ← (byte~) main::$5
|
||||
(byte~) main::$4 ← (byte) main::bits << (byte/signed byte/word/signed word) 1
|
||||
(byte) main::bits ← (byte~) main::$4
|
||||
(byte) main::x ← ++ (byte) main::x
|
||||
(boolean~) main::$6 ← (byte) main::x != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$6) goto main::@2
|
||||
(boolean~) main::$5 ← (byte) main::x != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$5) goto main::@2
|
||||
to:main::@5
|
||||
main::@4: scope:[main] from main::@2
|
||||
(byte) main::c ← (byte) '*'
|
||||
to:main::@3
|
||||
main::@5: scope:[main] from main::@3
|
||||
(byte*~) main::$7 ← (byte*) main::sc + (byte/signed byte/word/signed word) 32
|
||||
(byte*) main::sc ← (byte*~) main::$7
|
||||
(byte*~) main::$6 ← (byte*) main::sc + (byte/signed byte/word/signed word) 32
|
||||
(byte*) main::sc ← (byte*~) main::$6
|
||||
(byte) main::y ← ++ (byte) main::y
|
||||
(boolean~) main::$8 ← (byte) main::y != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$8) goto main::@1
|
||||
(boolean~) main::$7 ← (byte) main::y != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$7) goto main::@1
|
||||
to:main::@6
|
||||
main::@6: scope:[main] from main::@5
|
||||
*((byte*) PROCPORT) ← (byte/signed byte/word/signed word) 55
|
||||
@ -167,35 +164,34 @@ main: scope:[main] from
|
||||
(byte) main::y ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@5
|
||||
(byte~) main::$1 ← (byte*) main::CHAR_A *idx (byte) main::y
|
||||
(byte) main::bits ← (byte~) main::$1
|
||||
(byte) main::bits ← *((byte*) main::CHAR_A + (byte) main::y)
|
||||
(byte) main::x ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte) main::c ← (byte) '.'
|
||||
(byte~) main::$2 ← (byte) main::bits & (byte/word/signed word) 128
|
||||
(boolean~) main::$3 ← (byte~) main::$2 != (byte/signed byte/word/signed word) 0
|
||||
(boolean~) main::$4 ← ! (boolean~) main::$3
|
||||
if((boolean~) main::$4) goto main::@3
|
||||
(byte~) main::$1 ← (byte) main::bits & (byte/word/signed word) 128
|
||||
(boolean~) main::$2 ← (byte~) main::$1 != (byte/signed byte/word/signed word) 0
|
||||
(boolean~) main::$3 ← ! (boolean~) main::$2
|
||||
if((boolean~) main::$3) goto main::@3
|
||||
to:main::@4
|
||||
main::@3: scope:[main] from main::@2 main::@4
|
||||
*((byte*) main::sc) ← (byte) main::c
|
||||
(byte*) main::sc ← ++ (byte*) main::sc
|
||||
(byte~) main::$5 ← (byte) main::bits << (byte/signed byte/word/signed word) 1
|
||||
(byte) main::bits ← (byte~) main::$5
|
||||
(byte~) main::$4 ← (byte) main::bits << (byte/signed byte/word/signed word) 1
|
||||
(byte) main::bits ← (byte~) main::$4
|
||||
(byte) main::x ← ++ (byte) main::x
|
||||
(boolean~) main::$6 ← (byte) main::x != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$6) goto main::@2
|
||||
(boolean~) main::$5 ← (byte) main::x != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$5) goto main::@2
|
||||
to:main::@5
|
||||
main::@4: scope:[main] from main::@2
|
||||
(byte) main::c ← (byte) '*'
|
||||
to:main::@3
|
||||
main::@5: scope:[main] from main::@3
|
||||
(byte*~) main::$7 ← (byte*) main::sc + (byte/signed byte/word/signed word) 32
|
||||
(byte*) main::sc ← (byte*~) main::$7
|
||||
(byte*~) main::$6 ← (byte*) main::sc + (byte/signed byte/word/signed word) 32
|
||||
(byte*) main::sc ← (byte*~) main::$6
|
||||
(byte) main::y ← ++ (byte) main::y
|
||||
(boolean~) main::$8 ← (byte) main::y != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$8) goto main::@1
|
||||
(boolean~) main::$7 ← (byte) main::y != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$7) goto main::@1
|
||||
to:main::@6
|
||||
main::@6: scope:[main] from main::@5
|
||||
*((byte*) PROCPORT) ← (byte/signed byte/word/signed word) 55
|
||||
@ -226,35 +222,34 @@ main: scope:[main] from @1
|
||||
(byte) main::y ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@5
|
||||
(byte~) main::$1 ← (byte*) main::CHAR_A *idx (byte) main::y
|
||||
(byte) main::bits ← (byte~) main::$1
|
||||
(byte) main::bits ← *((byte*) main::CHAR_A + (byte) main::y)
|
||||
(byte) main::x ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte) main::c ← (byte) '.'
|
||||
(byte~) main::$2 ← (byte) main::bits & (byte/word/signed word) 128
|
||||
(boolean~) main::$3 ← (byte~) main::$2 != (byte/signed byte/word/signed word) 0
|
||||
(boolean~) main::$4 ← ! (boolean~) main::$3
|
||||
if((boolean~) main::$4) goto main::@3
|
||||
(byte~) main::$1 ← (byte) main::bits & (byte/word/signed word) 128
|
||||
(boolean~) main::$2 ← (byte~) main::$1 != (byte/signed byte/word/signed word) 0
|
||||
(boolean~) main::$3 ← ! (boolean~) main::$2
|
||||
if((boolean~) main::$3) goto main::@3
|
||||
to:main::@4
|
||||
main::@3: scope:[main] from main::@2 main::@4
|
||||
*((byte*) main::sc) ← (byte) main::c
|
||||
(byte*) main::sc ← ++ (byte*) main::sc
|
||||
(byte~) main::$5 ← (byte) main::bits << (byte/signed byte/word/signed word) 1
|
||||
(byte) main::bits ← (byte~) main::$5
|
||||
(byte~) main::$4 ← (byte) main::bits << (byte/signed byte/word/signed word) 1
|
||||
(byte) main::bits ← (byte~) main::$4
|
||||
(byte) main::x ← ++ (byte) main::x
|
||||
(boolean~) main::$6 ← (byte) main::x != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$6) goto main::@2
|
||||
(boolean~) main::$5 ← (byte) main::x != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$5) goto main::@2
|
||||
to:main::@5
|
||||
main::@4: scope:[main] from main::@2
|
||||
(byte) main::c ← (byte) '*'
|
||||
to:main::@3
|
||||
main::@5: scope:[main] from main::@3
|
||||
(byte*~) main::$7 ← (byte*) main::sc + (byte/signed byte/word/signed word) 32
|
||||
(byte*) main::sc ← (byte*~) main::$7
|
||||
(byte*~) main::$6 ← (byte*) main::sc + (byte/signed byte/word/signed word) 32
|
||||
(byte*) main::sc ← (byte*~) main::$6
|
||||
(byte) main::y ← ++ (byte) main::y
|
||||
(boolean~) main::$8 ← (byte) main::y != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$8) goto main::@1
|
||||
(boolean~) main::$7 ← (byte) main::y != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$7) goto main::@1
|
||||
to:main::@6
|
||||
main::@6: scope:[main] from main::@5
|
||||
*((byte*) PROCPORT) ← (byte/signed byte/word/signed word) 55
|
||||
@ -297,8 +292,7 @@ main::@1: scope:[main] from main main::@5
|
||||
(byte*) main::sc#7 ← phi( main/(byte*) main::sc#0 main::@5/(byte*) main::sc#2 )
|
||||
(byte) main::y#2 ← phi( main/(byte) main::y#0 main::@5/(byte) main::y#1 )
|
||||
(byte*) main::CHAR_A#1 ← phi( main/(byte*) main::CHAR_A#0 main::@5/(byte*) main::CHAR_A#2 )
|
||||
(byte~) main::$1 ← (byte*) main::CHAR_A#1 *idx (byte) main::y#2
|
||||
(byte) main::bits#0 ← (byte~) main::$1
|
||||
(byte) main::bits#0 ← *((byte*) main::CHAR_A#1 + (byte) main::y#2)
|
||||
(byte) main::x#0 ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
@ -309,10 +303,10 @@ main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte*) main::sc#5 ← phi( main::@1/(byte*) main::sc#7 main::@3/(byte*) main::sc#1 )
|
||||
(byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@3/(byte) main::bits#1 )
|
||||
(byte) main::c#0 ← (byte) '.'
|
||||
(byte~) main::$2 ← (byte) main::bits#2 & (byte/word/signed word) 128
|
||||
(boolean~) main::$3 ← (byte~) main::$2 != (byte/signed byte/word/signed word) 0
|
||||
(boolean~) main::$4 ← ! (boolean~) main::$3
|
||||
if((boolean~) main::$4) goto main::@3
|
||||
(byte~) main::$1 ← (byte) main::bits#2 & (byte/word/signed word) 128
|
||||
(boolean~) main::$2 ← (byte~) main::$1 != (byte/signed byte/word/signed word) 0
|
||||
(boolean~) main::$3 ← ! (boolean~) main::$2
|
||||
if((boolean~) main::$3) goto main::@3
|
||||
to:main::@4
|
||||
main::@3: scope:[main] from main::@2 main::@4
|
||||
(byte*) PROCPORT#5 ← phi( main::@2/(byte*) PROCPORT#6 main::@4/(byte*) PROCPORT#7 )
|
||||
@ -324,11 +318,11 @@ main::@3: scope:[main] from main::@2 main::@4
|
||||
(byte) main::c#2 ← phi( main::@2/(byte) main::c#0 main::@4/(byte) main::c#1 )
|
||||
*((byte*) main::sc#3) ← (byte) main::c#2
|
||||
(byte*) main::sc#1 ← ++ (byte*) main::sc#3
|
||||
(byte~) main::$5 ← (byte) main::bits#3 << (byte/signed byte/word/signed word) 1
|
||||
(byte) main::bits#1 ← (byte~) main::$5
|
||||
(byte~) main::$4 ← (byte) main::bits#3 << (byte/signed byte/word/signed word) 1
|
||||
(byte) main::bits#1 ← (byte~) main::$4
|
||||
(byte) main::x#1 ← ++ (byte) main::x#2
|
||||
(boolean~) main::$6 ← (byte) main::x#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$6) goto main::@2
|
||||
(boolean~) main::$5 ← (byte) main::x#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$5) goto main::@2
|
||||
to:main::@5
|
||||
main::@4: scope:[main] from main::@2
|
||||
(byte*) PROCPORT#7 ← phi( main::@2/(byte*) PROCPORT#6 )
|
||||
@ -344,11 +338,11 @@ main::@5: scope:[main] from main::@3
|
||||
(byte*) main::CHAR_A#2 ← phi( main::@3/(byte*) main::CHAR_A#3 )
|
||||
(byte) main::y#3 ← phi( main::@3/(byte) main::y#4 )
|
||||
(byte*) main::sc#4 ← phi( main::@3/(byte*) main::sc#1 )
|
||||
(byte*~) main::$7 ← (byte*) main::sc#4 + (byte/signed byte/word/signed word) 32
|
||||
(byte*) main::sc#2 ← (byte*~) main::$7
|
||||
(byte*~) main::$6 ← (byte*) main::sc#4 + (byte/signed byte/word/signed word) 32
|
||||
(byte*) main::sc#2 ← (byte*~) main::$6
|
||||
(byte) main::y#1 ← ++ (byte) main::y#3
|
||||
(boolean~) main::$8 ← (byte) main::y#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$8) goto main::@1
|
||||
(boolean~) main::$7 ← (byte) main::y#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$7) goto main::@1
|
||||
to:main::@6
|
||||
main::@6: scope:[main] from main::@5
|
||||
(byte*) PROCPORT#2 ← phi( main::@5/(byte*) PROCPORT#4 )
|
||||
@ -390,8 +384,7 @@ main::@1: scope:[main] from main main::@5
|
||||
(byte*) main::sc#7 ← phi( main/(byte*) main::sc#0 main::@5/(byte*) main::sc#2 )
|
||||
(byte) main::y#2 ← phi( main/(byte) main::y#0 main::@5/(byte) main::y#1 )
|
||||
(byte*) main::CHAR_A#1 ← phi( main/(byte*) main::CHAR_A#0 main::@5/(byte*) main::CHAR_A#2 )
|
||||
(byte~) main::$1 ← (byte*) main::CHAR_A#1 *idx (byte) main::y#2
|
||||
(byte) main::bits#0 ← (byte~) main::$1
|
||||
(byte) main::bits#0 ← *((byte*) main::CHAR_A#1 + (byte) main::y#2)
|
||||
(byte) main::x#0 ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
@ -402,10 +395,10 @@ main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte*) main::sc#5 ← phi( main::@1/(byte*) main::sc#7 main::@3/(byte*) main::sc#1 )
|
||||
(byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@3/(byte) main::bits#1 )
|
||||
(byte) main::c#0 ← (byte) '.'
|
||||
(byte~) main::$2 ← (byte) main::bits#2 & (byte/word/signed word) 128
|
||||
(boolean~) main::$3 ← (byte~) main::$2 != (byte/signed byte/word/signed word) 0
|
||||
(boolean~) main::$4 ← ! (boolean~) main::$3
|
||||
if((boolean~) main::$4) goto main::@3
|
||||
(byte~) main::$1 ← (byte) main::bits#2 & (byte/word/signed word) 128
|
||||
(boolean~) main::$2 ← (byte~) main::$1 != (byte/signed byte/word/signed word) 0
|
||||
(boolean~) main::$3 ← ! (boolean~) main::$2
|
||||
if((boolean~) main::$3) goto main::@3
|
||||
to:main::@4
|
||||
main::@3: scope:[main] from main::@2 main::@4
|
||||
(byte*) PROCPORT#5 ← phi( main::@2/(byte*) PROCPORT#6 main::@4/(byte*) PROCPORT#7 )
|
||||
@ -417,11 +410,11 @@ main::@3: scope:[main] from main::@2 main::@4
|
||||
(byte) main::c#2 ← phi( main::@2/(byte) main::c#0 main::@4/(byte) main::c#1 )
|
||||
*((byte*) main::sc#3) ← (byte) main::c#2
|
||||
(byte*) main::sc#1 ← ++ (byte*) main::sc#3
|
||||
(byte~) main::$5 ← (byte) main::bits#3 << (byte/signed byte/word/signed word) 1
|
||||
(byte) main::bits#1 ← (byte~) main::$5
|
||||
(byte~) main::$4 ← (byte) main::bits#3 << (byte/signed byte/word/signed word) 1
|
||||
(byte) main::bits#1 ← (byte~) main::$4
|
||||
(byte) main::x#1 ← ++ (byte) main::x#2
|
||||
(boolean~) main::$6 ← (byte) main::x#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$6) goto main::@2
|
||||
(boolean~) main::$5 ← (byte) main::x#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$5) goto main::@2
|
||||
to:main::@5
|
||||
main::@4: scope:[main] from main::@2
|
||||
(byte*) PROCPORT#7 ← phi( main::@2/(byte*) PROCPORT#6 )
|
||||
@ -437,11 +430,11 @@ main::@5: scope:[main] from main::@3
|
||||
(byte*) main::CHAR_A#2 ← phi( main::@3/(byte*) main::CHAR_A#3 )
|
||||
(byte) main::y#3 ← phi( main::@3/(byte) main::y#4 )
|
||||
(byte*) main::sc#4 ← phi( main::@3/(byte*) main::sc#1 )
|
||||
(byte*~) main::$7 ← (byte*) main::sc#4 + (byte/signed byte/word/signed word) 32
|
||||
(byte*) main::sc#2 ← (byte*~) main::$7
|
||||
(byte*~) main::$6 ← (byte*) main::sc#4 + (byte/signed byte/word/signed word) 32
|
||||
(byte*) main::sc#2 ← (byte*~) main::$6
|
||||
(byte) main::y#1 ← ++ (byte) main::y#3
|
||||
(boolean~) main::$8 ← (byte) main::y#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$8) goto main::@1
|
||||
(boolean~) main::$7 ← (byte) main::y#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$7) goto main::@1
|
||||
to:main::@6
|
||||
main::@6: scope:[main] from main::@5
|
||||
(byte*) PROCPORT#2 ← phi( main::@5/(byte*) PROCPORT#4 )
|
||||
@ -487,13 +480,12 @@ INITIAL SSA SYMBOL TABLE
|
||||
(void()) main()
|
||||
(byte*~) main::$0
|
||||
(byte~) main::$1
|
||||
(byte~) main::$2
|
||||
(boolean~) main::$2
|
||||
(boolean~) main::$3
|
||||
(boolean~) main::$4
|
||||
(byte~) main::$5
|
||||
(boolean~) main::$6
|
||||
(byte*~) main::$7
|
||||
(boolean~) main::$8
|
||||
(byte~) main::$4
|
||||
(boolean~) main::$5
|
||||
(byte*~) main::$6
|
||||
(boolean~) main::$7
|
||||
(label) main::@1
|
||||
(label) main::@2
|
||||
(label) main::@3
|
||||
@ -566,8 +558,7 @@ main::@1: scope:[main] from main main::@5
|
||||
(byte*) main::sc#7 ← phi( main/(byte*) main::sc#0 main::@5/(byte*) main::sc#2 )
|
||||
(byte) main::y#2 ← phi( main/(byte) main::y#0 main::@5/(byte) main::y#1 )
|
||||
(byte*) main::CHAR_A#1 ← phi( main/(byte*) main::CHAR_A#0 main::@5/(byte*) main::CHAR_A#2 )
|
||||
(byte~) main::$1 ← (byte*) main::CHAR_A#1 *idx (byte) main::y#2
|
||||
(byte) main::bits#0 ← (byte~) main::$1
|
||||
(byte) main::bits#0 ← *((byte*) main::CHAR_A#1 + (byte) main::y#2)
|
||||
(byte) main::x#0 ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
@ -578,10 +569,10 @@ main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte*) main::sc#5 ← phi( main::@1/(byte*) main::sc#7 main::@3/(byte*) main::sc#1 )
|
||||
(byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@3/(byte) main::bits#1 )
|
||||
(byte) main::c#0 ← (byte) '.'
|
||||
(byte~) main::$2 ← (byte) main::bits#2 & (byte/word/signed word) 128
|
||||
(boolean~) main::$3 ← (byte~) main::$2 != (byte/signed byte/word/signed word) 0
|
||||
(boolean~) main::$4 ← ! (boolean~) main::$3
|
||||
if((boolean~) main::$4) goto main::@3
|
||||
(byte~) main::$1 ← (byte) main::bits#2 & (byte/word/signed word) 128
|
||||
(boolean~) main::$2 ← (byte~) main::$1 != (byte/signed byte/word/signed word) 0
|
||||
(boolean~) main::$3 ← ! (boolean~) main::$2
|
||||
if((boolean~) main::$3) goto main::@3
|
||||
to:main::@4
|
||||
main::@3: scope:[main] from main::@2 main::@4
|
||||
(byte*) PROCPORT#5 ← phi( main::@2/(byte*) PROCPORT#6 main::@4/(byte*) PROCPORT#7 )
|
||||
@ -593,11 +584,11 @@ main::@3: scope:[main] from main::@2 main::@4
|
||||
(byte) main::c#2 ← phi( main::@2/(byte) main::c#0 main::@4/(byte) main::c#1 )
|
||||
*((byte*) main::sc#3) ← (byte) main::c#2
|
||||
(byte*) main::sc#1 ← ++ (byte*) main::sc#3
|
||||
(byte~) main::$5 ← (byte) main::bits#3 << (byte/signed byte/word/signed word) 1
|
||||
(byte) main::bits#1 ← (byte~) main::$5
|
||||
(byte~) main::$4 ← (byte) main::bits#3 << (byte/signed byte/word/signed word) 1
|
||||
(byte) main::bits#1 ← (byte~) main::$4
|
||||
(byte) main::x#1 ← ++ (byte) main::x#2
|
||||
(boolean~) main::$6 ← (byte) main::x#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$6) goto main::@2
|
||||
(boolean~) main::$5 ← (byte) main::x#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$5) goto main::@2
|
||||
to:main::@5
|
||||
main::@4: scope:[main] from main::@2
|
||||
(byte*) PROCPORT#7 ← phi( main::@2/(byte*) PROCPORT#6 )
|
||||
@ -613,11 +604,11 @@ main::@5: scope:[main] from main::@3
|
||||
(byte*) main::CHAR_A#2 ← phi( main::@3/(byte*) main::CHAR_A#3 )
|
||||
(byte) main::y#3 ← phi( main::@3/(byte) main::y#4 )
|
||||
(byte*) main::sc#4 ← phi( main::@3/(byte*) main::sc#1 )
|
||||
(byte*~) main::$7 ← (byte*) main::sc#4 + (byte/signed byte/word/signed word) 32
|
||||
(byte*) main::sc#2 ← (byte*~) main::$7
|
||||
(byte*~) main::$6 ← (byte*) main::sc#4 + (byte/signed byte/word/signed word) 32
|
||||
(byte*) main::sc#2 ← (byte*~) main::$6
|
||||
(byte) main::y#1 ← ++ (byte) main::y#3
|
||||
(boolean~) main::$8 ← (byte) main::y#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$8) goto main::@1
|
||||
(boolean~) main::$7 ← (byte) main::y#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$7) goto main::@1
|
||||
to:main::@6
|
||||
main::@6: scope:[main] from main::@5
|
||||
(byte*) PROCPORT#2 ← phi( main::@5/(byte*) PROCPORT#4 )
|
||||
@ -635,7 +626,7 @@ main::@return: scope:[main] from main::@6
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
|
||||
Inversing boolean not (boolean~) main::$4 ← (byte~) main::$2 == (byte/signed byte/word/signed word) 0 from (boolean~) main::$3 ← (byte~) main::$2 != (byte/signed byte/word/signed word) 0
|
||||
Inversing boolean not (boolean~) main::$3 ← (byte~) main::$1 == (byte/signed byte/word/signed word) 0 from (boolean~) main::$2 ← (byte~) main::$1 != (byte/signed byte/word/signed word) 0
|
||||
Succesful SSA optimization Pass2UnaryNotSimplification
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
@ -659,8 +650,7 @@ main::@1: scope:[main] from main main::@5
|
||||
(byte*) main::sc#7 ← phi( main/(byte*) main::sc#0 main::@5/(byte*) main::sc#2 )
|
||||
(byte) main::y#2 ← phi( main/(byte) main::y#0 main::@5/(byte) main::y#1 )
|
||||
(byte*) main::CHAR_A#1 ← phi( main/(byte*) main::CHAR_A#0 main::@5/(byte*) main::CHAR_A#2 )
|
||||
(byte~) main::$1 ← (byte*) main::CHAR_A#1 *idx (byte) main::y#2
|
||||
(byte) main::bits#0 ← (byte~) main::$1
|
||||
(byte) main::bits#0 ← *((byte*) main::CHAR_A#1 + (byte) main::y#2)
|
||||
(byte) main::x#0 ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
@ -671,9 +661,9 @@ main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte*) main::sc#5 ← phi( main::@1/(byte*) main::sc#7 main::@3/(byte*) main::sc#1 )
|
||||
(byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@3/(byte) main::bits#1 )
|
||||
(byte) main::c#0 ← (byte) '.'
|
||||
(byte~) main::$2 ← (byte) main::bits#2 & (byte/word/signed word) 128
|
||||
(boolean~) main::$4 ← (byte~) main::$2 == (byte/signed byte/word/signed word) 0
|
||||
if((boolean~) main::$4) goto main::@3
|
||||
(byte~) main::$1 ← (byte) main::bits#2 & (byte/word/signed word) 128
|
||||
(boolean~) main::$3 ← (byte~) main::$1 == (byte/signed byte/word/signed word) 0
|
||||
if((boolean~) main::$3) goto main::@3
|
||||
to:main::@4
|
||||
main::@3: scope:[main] from main::@2 main::@4
|
||||
(byte*) PROCPORT#5 ← phi( main::@2/(byte*) PROCPORT#6 main::@4/(byte*) PROCPORT#7 )
|
||||
@ -685,11 +675,11 @@ main::@3: scope:[main] from main::@2 main::@4
|
||||
(byte) main::c#2 ← phi( main::@2/(byte) main::c#0 main::@4/(byte) main::c#1 )
|
||||
*((byte*) main::sc#3) ← (byte) main::c#2
|
||||
(byte*) main::sc#1 ← ++ (byte*) main::sc#3
|
||||
(byte~) main::$5 ← (byte) main::bits#3 << (byte/signed byte/word/signed word) 1
|
||||
(byte) main::bits#1 ← (byte~) main::$5
|
||||
(byte~) main::$4 ← (byte) main::bits#3 << (byte/signed byte/word/signed word) 1
|
||||
(byte) main::bits#1 ← (byte~) main::$4
|
||||
(byte) main::x#1 ← ++ (byte) main::x#2
|
||||
(boolean~) main::$6 ← (byte) main::x#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$6) goto main::@2
|
||||
(boolean~) main::$5 ← (byte) main::x#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$5) goto main::@2
|
||||
to:main::@5
|
||||
main::@4: scope:[main] from main::@2
|
||||
(byte*) PROCPORT#7 ← phi( main::@2/(byte*) PROCPORT#6 )
|
||||
@ -705,11 +695,11 @@ main::@5: scope:[main] from main::@3
|
||||
(byte*) main::CHAR_A#2 ← phi( main::@3/(byte*) main::CHAR_A#3 )
|
||||
(byte) main::y#3 ← phi( main::@3/(byte) main::y#4 )
|
||||
(byte*) main::sc#4 ← phi( main::@3/(byte*) main::sc#1 )
|
||||
(byte*~) main::$7 ← (byte*) main::sc#4 + (byte/signed byte/word/signed word) 32
|
||||
(byte*) main::sc#2 ← (byte*~) main::$7
|
||||
(byte*~) main::$6 ← (byte*) main::sc#4 + (byte/signed byte/word/signed word) 32
|
||||
(byte*) main::sc#2 ← (byte*~) main::$6
|
||||
(byte) main::y#1 ← ++ (byte) main::y#3
|
||||
(boolean~) main::$8 ← (byte) main::y#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$8) goto main::@1
|
||||
(boolean~) main::$7 ← (byte) main::y#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$7) goto main::@1
|
||||
to:main::@6
|
||||
main::@6: scope:[main] from main::@5
|
||||
(byte*) PROCPORT#2 ← phi( main::@5/(byte*) PROCPORT#4 )
|
||||
@ -732,8 +722,7 @@ Not aliassing across scopes: PROCPORT#1 PROCPORT#3
|
||||
Not aliassing across scopes: SCREEN#1 SCREEN#2
|
||||
Not aliassing across scopes: main::sc#0 SCREEN#1
|
||||
Alias (byte*) main::CHAR_A#0 = (byte*~) main::$0
|
||||
Alias (byte) main::bits#0 = (byte~) main::$1
|
||||
Alias (byte) main::bits#1 = (byte~) main::$5
|
||||
Alias (byte) main::bits#1 = (byte~) main::$4
|
||||
Alias (byte*) main::sc#5 = (byte*) main::sc#6
|
||||
Alias (byte) main::bits#2 = (byte) main::bits#4
|
||||
Alias (byte) main::x#3 = (byte) main::x#4
|
||||
@ -744,7 +733,7 @@ Alias (byte*) main::sc#1 = (byte*) main::sc#4
|
||||
Alias (byte) main::y#3 = (byte) main::y#4
|
||||
Alias (byte*) main::CHAR_A#2 = (byte*) main::CHAR_A#3
|
||||
Alias (byte*) PROCPORT#2 = (byte*) PROCPORT#4 (byte*) PROCPORT#5
|
||||
Alias (byte*) main::sc#2 = (byte*~) main::$7
|
||||
Alias (byte*) main::sc#2 = (byte*~) main::$6
|
||||
Alias (byte*) CHARGEN#0 = (byte*) CHARGEN#2
|
||||
Alias (byte*) PROCPORT#0 = (byte*) PROCPORT#3
|
||||
Alias (byte*) SCREEN#0 = (byte*) SCREEN#2
|
||||
@ -770,7 +759,7 @@ main::@1: scope:[main] from main main::@5
|
||||
(byte*) main::sc#7 ← phi( main/(byte*) main::sc#0 main::@5/(byte*) main::sc#2 )
|
||||
(byte) main::y#2 ← phi( main/(byte) main::y#0 main::@5/(byte) main::y#1 )
|
||||
(byte*) main::CHAR_A#1 ← phi( main/(byte*) main::CHAR_A#0 main::@5/(byte*) main::CHAR_A#2 )
|
||||
(byte) main::bits#0 ← (byte*) main::CHAR_A#1 *idx (byte) main::y#2
|
||||
(byte) main::bits#0 ← *((byte*) main::CHAR_A#1 + (byte) main::y#2)
|
||||
(byte) main::x#0 ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
@ -781,9 +770,9 @@ main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte*) main::sc#5 ← phi( main::@1/(byte*) main::sc#7 main::@3/(byte*) main::sc#1 )
|
||||
(byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@3/(byte) main::bits#1 )
|
||||
(byte) main::c#0 ← (byte) '.'
|
||||
(byte~) main::$2 ← (byte) main::bits#2 & (byte/word/signed word) 128
|
||||
(boolean~) main::$4 ← (byte~) main::$2 == (byte/signed byte/word/signed word) 0
|
||||
if((boolean~) main::$4) goto main::@3
|
||||
(byte~) main::$1 ← (byte) main::bits#2 & (byte/word/signed word) 128
|
||||
(boolean~) main::$3 ← (byte~) main::$1 == (byte/signed byte/word/signed word) 0
|
||||
if((boolean~) main::$3) goto main::@3
|
||||
to:main::@4
|
||||
main::@3: scope:[main] from main::@2 main::@4
|
||||
(byte*) PROCPORT#2 ← phi( main::@2/(byte*) PROCPORT#6 main::@4/(byte*) PROCPORT#6 )
|
||||
@ -797,8 +786,8 @@ main::@3: scope:[main] from main::@2 main::@4
|
||||
(byte*) main::sc#1 ← ++ (byte*) main::sc#3
|
||||
(byte) main::bits#1 ← (byte) main::bits#3 << (byte/signed byte/word/signed word) 1
|
||||
(byte) main::x#1 ← ++ (byte) main::x#2
|
||||
(boolean~) main::$6 ← (byte) main::x#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$6) goto main::@2
|
||||
(boolean~) main::$5 ← (byte) main::x#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$5) goto main::@2
|
||||
to:main::@5
|
||||
main::@4: scope:[main] from main::@2
|
||||
(byte) main::c#1 ← (byte) '*'
|
||||
@ -806,8 +795,8 @@ main::@4: scope:[main] from main::@2
|
||||
main::@5: scope:[main] from main::@3
|
||||
(byte*) main::sc#2 ← (byte*) main::sc#1 + (byte/signed byte/word/signed word) 32
|
||||
(byte) main::y#1 ← ++ (byte) main::y#3
|
||||
(boolean~) main::$8 ← (byte) main::y#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$8) goto main::@1
|
||||
(boolean~) main::$7 ← (byte) main::y#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$7) goto main::@1
|
||||
to:main::@6
|
||||
main::@6: scope:[main] from main::@5
|
||||
*((byte*) PROCPORT#2) ← (byte/signed byte/word/signed word) 55
|
||||
@ -853,7 +842,7 @@ main::@1: scope:[main] from main main::@5
|
||||
(byte*) main::sc#7 ← phi( main/(byte*) main::sc#0 main::@5/(byte*) main::sc#2 )
|
||||
(byte) main::y#2 ← phi( main/(byte) main::y#0 main::@5/(byte) main::y#1 )
|
||||
(byte*) main::CHAR_A#1 ← phi( main/(byte*) main::CHAR_A#0 main::@5/(byte*) main::CHAR_A#2 )
|
||||
(byte) main::bits#0 ← (byte*) main::CHAR_A#1 *idx (byte) main::y#2
|
||||
(byte) main::bits#0 ← *((byte*) main::CHAR_A#1 + (byte) main::y#2)
|
||||
(byte) main::x#0 ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
@ -864,9 +853,9 @@ main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte*) main::sc#3 ← phi( main::@1/(byte*) main::sc#7 main::@3/(byte*) main::sc#1 )
|
||||
(byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@3/(byte) main::bits#1 )
|
||||
(byte) main::c#0 ← (byte) '.'
|
||||
(byte~) main::$2 ← (byte) main::bits#2 & (byte/word/signed word) 128
|
||||
(boolean~) main::$4 ← (byte~) main::$2 == (byte/signed byte/word/signed word) 0
|
||||
if((boolean~) main::$4) goto main::@3
|
||||
(byte~) main::$1 ← (byte) main::bits#2 & (byte/word/signed word) 128
|
||||
(boolean~) main::$3 ← (byte~) main::$1 == (byte/signed byte/word/signed word) 0
|
||||
if((boolean~) main::$3) goto main::@3
|
||||
to:main::@4
|
||||
main::@3: scope:[main] from main::@2 main::@4
|
||||
(byte) main::c#2 ← phi( main::@2/(byte) main::c#0 main::@4/(byte) main::c#1 )
|
||||
@ -874,8 +863,8 @@ main::@3: scope:[main] from main::@2 main::@4
|
||||
(byte*) main::sc#1 ← ++ (byte*) main::sc#3
|
||||
(byte) main::bits#1 ← (byte) main::bits#2 << (byte/signed byte/word/signed word) 1
|
||||
(byte) main::x#1 ← ++ (byte) main::x#2
|
||||
(boolean~) main::$6 ← (byte) main::x#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$6) goto main::@2
|
||||
(boolean~) main::$5 ← (byte) main::x#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$5) goto main::@2
|
||||
to:main::@5
|
||||
main::@4: scope:[main] from main::@2
|
||||
(byte) main::c#1 ← (byte) '*'
|
||||
@ -883,8 +872,8 @@ main::@4: scope:[main] from main::@2
|
||||
main::@5: scope:[main] from main::@3
|
||||
(byte*) main::sc#2 ← (byte*) main::sc#1 + (byte/signed byte/word/signed word) 32
|
||||
(byte) main::y#1 ← ++ (byte) main::y#3
|
||||
(boolean~) main::$8 ← (byte) main::y#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$8) goto main::@1
|
||||
(boolean~) main::$7 ← (byte) main::y#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$7) goto main::@1
|
||||
to:main::@6
|
||||
main::@6: scope:[main] from main::@5
|
||||
*((byte*) PROCPORT#2) ← (byte/signed byte/word/signed word) 55
|
||||
@ -927,7 +916,7 @@ main::@1: scope:[main] from main main::@5
|
||||
(byte*) main::sc#7 ← phi( main/(byte*) main::sc#0 main::@5/(byte*) main::sc#2 )
|
||||
(byte) main::y#2 ← phi( main/(byte) main::y#0 main::@5/(byte) main::y#1 )
|
||||
(byte*) main::CHAR_A#1 ← phi( main/(byte*) main::CHAR_A#0 main::@5/(byte*) main::CHAR_A#2 )
|
||||
(byte) main::bits#0 ← (byte*) main::CHAR_A#1 *idx (byte) main::y#2
|
||||
(byte) main::bits#0 ← *((byte*) main::CHAR_A#1 + (byte) main::y#2)
|
||||
(byte) main::x#0 ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
@ -938,9 +927,9 @@ main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte*) main::sc#3 ← phi( main::@1/(byte*) main::sc#7 main::@3/(byte*) main::sc#1 )
|
||||
(byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@3/(byte) main::bits#1 )
|
||||
(byte) main::c#0 ← (byte) '.'
|
||||
(byte~) main::$2 ← (byte) main::bits#2 & (byte/word/signed word) 128
|
||||
(boolean~) main::$4 ← (byte~) main::$2 == (byte/signed byte/word/signed word) 0
|
||||
if((boolean~) main::$4) goto main::@3
|
||||
(byte~) main::$1 ← (byte) main::bits#2 & (byte/word/signed word) 128
|
||||
(boolean~) main::$3 ← (byte~) main::$1 == (byte/signed byte/word/signed word) 0
|
||||
if((boolean~) main::$3) goto main::@3
|
||||
to:main::@4
|
||||
main::@3: scope:[main] from main::@2 main::@4
|
||||
(byte) main::c#2 ← phi( main::@2/(byte) main::c#0 main::@4/(byte) main::c#1 )
|
||||
@ -948,8 +937,8 @@ main::@3: scope:[main] from main::@2 main::@4
|
||||
(byte*) main::sc#1 ← ++ (byte*) main::sc#3
|
||||
(byte) main::bits#1 ← (byte) main::bits#2 << (byte/signed byte/word/signed word) 1
|
||||
(byte) main::x#1 ← ++ (byte) main::x#2
|
||||
(boolean~) main::$6 ← (byte) main::x#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$6) goto main::@2
|
||||
(boolean~) main::$5 ← (byte) main::x#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$5) goto main::@2
|
||||
to:main::@5
|
||||
main::@4: scope:[main] from main::@2
|
||||
(byte) main::c#1 ← (byte) '*'
|
||||
@ -957,8 +946,8 @@ main::@4: scope:[main] from main::@2
|
||||
main::@5: scope:[main] from main::@3
|
||||
(byte*) main::sc#2 ← (byte*) main::sc#1 + (byte/signed byte/word/signed word) 32
|
||||
(byte) main::y#1 ← ++ (byte) main::y#3
|
||||
(boolean~) main::$8 ← (byte) main::y#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$8) goto main::@1
|
||||
(boolean~) main::$7 ← (byte) main::y#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$7) goto main::@1
|
||||
to:main::@6
|
||||
main::@6: scope:[main] from main::@5
|
||||
*((byte*) PROCPORT#2) ← (byte/signed byte/word/signed word) 55
|
||||
@ -997,7 +986,7 @@ main::@1: scope:[main] from main main::@5
|
||||
(byte*) main::sc#7 ← phi( main/(byte*) main::sc#0 main::@5/(byte*) main::sc#2 )
|
||||
(byte) main::y#2 ← phi( main/(byte) main::y#0 main::@5/(byte) main::y#1 )
|
||||
(byte*) main::CHAR_A#1 ← phi( main/(byte*) main::CHAR_A#0 main::@5/(byte*) main::CHAR_A#1 )
|
||||
(byte) main::bits#0 ← (byte*) main::CHAR_A#1 *idx (byte) main::y#2
|
||||
(byte) main::bits#0 ← *((byte*) main::CHAR_A#1 + (byte) main::y#2)
|
||||
(byte) main::x#0 ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
@ -1005,9 +994,9 @@ main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte*) main::sc#3 ← phi( main::@1/(byte*) main::sc#7 main::@3/(byte*) main::sc#1 )
|
||||
(byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@3/(byte) main::bits#1 )
|
||||
(byte) main::c#0 ← (byte) '.'
|
||||
(byte~) main::$2 ← (byte) main::bits#2 & (byte/word/signed word) 128
|
||||
(boolean~) main::$4 ← (byte~) main::$2 == (byte/signed byte/word/signed word) 0
|
||||
if((boolean~) main::$4) goto main::@3
|
||||
(byte~) main::$1 ← (byte) main::bits#2 & (byte/word/signed word) 128
|
||||
(boolean~) main::$3 ← (byte~) main::$1 == (byte/signed byte/word/signed word) 0
|
||||
if((boolean~) main::$3) goto main::@3
|
||||
to:main::@4
|
||||
main::@3: scope:[main] from main::@2 main::@4
|
||||
(byte) main::c#2 ← phi( main::@2/(byte) main::c#0 main::@4/(byte) main::c#1 )
|
||||
@ -1015,8 +1004,8 @@ main::@3: scope:[main] from main::@2 main::@4
|
||||
(byte*) main::sc#1 ← ++ (byte*) main::sc#3
|
||||
(byte) main::bits#1 ← (byte) main::bits#2 << (byte/signed byte/word/signed word) 1
|
||||
(byte) main::x#1 ← ++ (byte) main::x#2
|
||||
(boolean~) main::$6 ← (byte) main::x#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$6) goto main::@2
|
||||
(boolean~) main::$5 ← (byte) main::x#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$5) goto main::@2
|
||||
to:main::@5
|
||||
main::@4: scope:[main] from main::@2
|
||||
(byte) main::c#1 ← (byte) '*'
|
||||
@ -1024,8 +1013,8 @@ main::@4: scope:[main] from main::@2
|
||||
main::@5: scope:[main] from main::@3
|
||||
(byte*) main::sc#2 ← (byte*) main::sc#1 + (byte/signed byte/word/signed word) 32
|
||||
(byte) main::y#1 ← ++ (byte) main::y#2
|
||||
(boolean~) main::$8 ← (byte) main::y#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$8) goto main::@1
|
||||
(boolean~) main::$7 ← (byte) main::y#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$7) goto main::@1
|
||||
to:main::@6
|
||||
main::@6: scope:[main] from main::@5
|
||||
*((byte*) PROCPORT#8) ← (byte/signed byte/word/signed word) 55
|
||||
@ -1039,9 +1028,9 @@ main::@return: scope:[main] from main::@6
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
|
||||
Simple Condition (boolean~) main::$4 if((byte~) main::$2==(byte/signed byte/word/signed word) 0) goto main::@3
|
||||
Simple Condition (boolean~) main::$6 if((byte) main::x#1!=(byte/signed byte/word/signed word) 8) goto main::@2
|
||||
Simple Condition (boolean~) main::$8 if((byte) main::y#1!=(byte/signed byte/word/signed word) 8) goto main::@1
|
||||
Simple Condition (boolean~) main::$3 if((byte~) main::$1==(byte/signed byte/word/signed word) 0) goto main::@3
|
||||
Simple Condition (boolean~) main::$5 if((byte) main::x#1!=(byte/signed byte/word/signed word) 8) goto main::@2
|
||||
Simple Condition (boolean~) main::$7 if((byte) main::y#1!=(byte/signed byte/word/signed word) 8) goto main::@1
|
||||
Succesful SSA optimization Pass2ConditionalJumpSimplification
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
@ -1061,7 +1050,7 @@ main::@1: scope:[main] from main main::@5
|
||||
(byte*) main::sc#7 ← phi( main/(byte*) main::sc#0 main::@5/(byte*) main::sc#2 )
|
||||
(byte) main::y#2 ← phi( main/(byte) main::y#0 main::@5/(byte) main::y#1 )
|
||||
(byte*) main::CHAR_A#1 ← phi( main/(byte*) main::CHAR_A#0 main::@5/(byte*) main::CHAR_A#1 )
|
||||
(byte) main::bits#0 ← (byte*) main::CHAR_A#1 *idx (byte) main::y#2
|
||||
(byte) main::bits#0 ← *((byte*) main::CHAR_A#1 + (byte) main::y#2)
|
||||
(byte) main::x#0 ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
@ -1069,8 +1058,8 @@ main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte*) main::sc#3 ← phi( main::@1/(byte*) main::sc#7 main::@3/(byte*) main::sc#1 )
|
||||
(byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@3/(byte) main::bits#1 )
|
||||
(byte) main::c#0 ← (byte) '.'
|
||||
(byte~) main::$2 ← (byte) main::bits#2 & (byte/word/signed word) 128
|
||||
if((byte~) main::$2==(byte/signed byte/word/signed word) 0) goto main::@3
|
||||
(byte~) main::$1 ← (byte) main::bits#2 & (byte/word/signed word) 128
|
||||
if((byte~) main::$1==(byte/signed byte/word/signed word) 0) goto main::@3
|
||||
to:main::@4
|
||||
main::@3: scope:[main] from main::@2 main::@4
|
||||
(byte) main::c#2 ← phi( main::@2/(byte) main::c#0 main::@4/(byte) main::c#1 )
|
||||
@ -1122,14 +1111,14 @@ main::@1: scope:[main] from main main::@5
|
||||
(byte*) main::sc#7 ← phi( main/(byte*) main::sc#0 main::@5/(byte*) main::sc#2 )
|
||||
(byte) main::y#2 ← phi( main/(const byte) main::y#0 main::@5/(byte) main::y#1 )
|
||||
(byte*) main::CHAR_A#1 ← phi( main/(byte*) main::CHAR_A#0 main::@5/(byte*) main::CHAR_A#1 )
|
||||
(byte) main::bits#0 ← (byte*) main::CHAR_A#1 *idx (byte) main::y#2
|
||||
(byte) main::bits#0 ← *((byte*) main::CHAR_A#1 + (byte) main::y#2)
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte) main::x#2 ← phi( main::@1/(const byte) main::x#0 main::@3/(byte) main::x#1 )
|
||||
(byte*) main::sc#3 ← phi( main::@1/(byte*) main::sc#7 main::@3/(byte*) main::sc#1 )
|
||||
(byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@3/(byte) main::bits#1 )
|
||||
(byte~) main::$2 ← (byte) main::bits#2 & (byte/word/signed word) 128
|
||||
if((byte~) main::$2==(byte/signed byte/word/signed word) 0) goto main::@3
|
||||
(byte~) main::$1 ← (byte) main::bits#2 & (byte/word/signed word) 128
|
||||
if((byte~) main::$1==(byte/signed byte/word/signed word) 0) goto main::@3
|
||||
to:main::@4
|
||||
main::@3: scope:[main] from main::@2 main::@4
|
||||
(byte) main::c#2 ← phi( main::@2/(const byte) main::c#0 main::@4/(const byte) main::c#1 )
|
||||
@ -1173,14 +1162,14 @@ main::@1: scope:[main] from main main::@5
|
||||
(byte*) main::sc#7 ← phi( main/(const byte*) main::sc#0 main::@5/(byte*) main::sc#2 )
|
||||
(byte) main::y#2 ← phi( main/(const byte) main::y#0 main::@5/(byte) main::y#1 )
|
||||
(byte*) main::CHAR_A#1 ← phi( main/(const byte*) main::CHAR_A#0 main::@5/(byte*) main::CHAR_A#1 )
|
||||
(byte) main::bits#0 ← (byte*) main::CHAR_A#1 *idx (byte) main::y#2
|
||||
(byte) main::bits#0 ← *((byte*) main::CHAR_A#1 + (byte) main::y#2)
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte) main::x#2 ← phi( main::@1/(const byte) main::x#0 main::@3/(byte) main::x#1 )
|
||||
(byte*) main::sc#3 ← phi( main::@1/(byte*) main::sc#7 main::@3/(byte*) main::sc#1 )
|
||||
(byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@3/(byte) main::bits#1 )
|
||||
(byte~) main::$2 ← (byte) main::bits#2 & (byte/word/signed word) 128
|
||||
if((byte~) main::$2==(byte/signed byte/word/signed word) 0) goto main::@3
|
||||
(byte~) main::$1 ← (byte) main::bits#2 & (byte/word/signed word) 128
|
||||
if((byte~) main::$1==(byte/signed byte/word/signed word) 0) goto main::@3
|
||||
to:main::@4
|
||||
main::@3: scope:[main] from main::@2 main::@4
|
||||
(byte) main::c#2 ← phi( main::@2/(const byte) main::c#0 main::@4/(const byte) main::c#1 )
|
||||
@ -1226,14 +1215,14 @@ main::@1: scope:[main] from main main::@5
|
||||
(byte*) main::sc#7 ← phi( main/(const byte*) main::sc#0 main::@5/(byte*) main::sc#2 )
|
||||
(byte) main::y#2 ← phi( main/(const byte) main::y#0 main::@5/(byte) main::y#1 )
|
||||
(byte*) main::CHAR_A#1 ← phi( main/(const byte*) main::CHAR_A#0 )
|
||||
(byte) main::bits#0 ← (byte*) main::CHAR_A#1 *idx (byte) main::y#2
|
||||
(byte) main::bits#0 ← *((byte*) main::CHAR_A#1 + (byte) main::y#2)
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte) main::x#2 ← phi( main::@1/(const byte) main::x#0 main::@3/(byte) main::x#1 )
|
||||
(byte*) main::sc#3 ← phi( main::@1/(byte*) main::sc#7 main::@3/(byte*) main::sc#1 )
|
||||
(byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@3/(byte) main::bits#1 )
|
||||
(byte~) main::$2 ← (byte) main::bits#2 & (byte/word/signed word) 128
|
||||
if((byte~) main::$2==(byte/signed byte/word/signed word) 0) goto main::@3
|
||||
(byte~) main::$1 ← (byte) main::bits#2 & (byte/word/signed word) 128
|
||||
if((byte~) main::$1==(byte/signed byte/word/signed word) 0) goto main::@3
|
||||
to:main::@4
|
||||
main::@3: scope:[main] from main::@2 main::@4
|
||||
(byte) main::c#2 ← phi( main::@2/(const byte) main::c#0 main::@4/(const byte) main::c#1 )
|
||||
@ -1275,14 +1264,14 @@ main: scope:[main] from @1
|
||||
main::@1: scope:[main] from main main::@5
|
||||
(byte*) main::sc#7 ← phi( main/(const byte*) main::sc#0 main::@5/(byte*) main::sc#2 )
|
||||
(byte) main::y#2 ← phi( main/(const byte) main::y#0 main::@5/(byte) main::y#1 )
|
||||
(byte) main::bits#0 ← (const byte*) main::CHAR_A#0 *idx (byte) main::y#2
|
||||
(byte) main::bits#0 ← *((const byte*) main::CHAR_A#0 + (byte) main::y#2)
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte) main::x#2 ← phi( main::@1/(const byte) main::x#0 main::@3/(byte) main::x#1 )
|
||||
(byte*) main::sc#3 ← phi( main::@1/(byte*) main::sc#7 main::@3/(byte*) main::sc#1 )
|
||||
(byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@3/(byte) main::bits#1 )
|
||||
(byte~) main::$2 ← (byte) main::bits#2 & (byte/word/signed word) 128
|
||||
if((byte~) main::$2==(byte/signed byte/word/signed word) 0) goto main::@3
|
||||
(byte~) main::$1 ← (byte) main::bits#2 & (byte/word/signed word) 128
|
||||
if((byte~) main::$1==(byte/signed byte/word/signed word) 0) goto main::@3
|
||||
to:main::@4
|
||||
main::@3: scope:[main] from main::@2 main::@4
|
||||
(byte) main::c#2 ← phi( main::@2/(const byte) main::c#0 main::@4/(const byte) main::c#1 )
|
||||
@ -1311,10 +1300,8 @@ main::@return: scope:[main] from main::@6
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::y#2
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte*) main::sc#1
|
||||
Not culling empty block because it shares successor with its predecessor. (label) main::@4
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::y#2
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte*) main::sc#1
|
||||
Inlining constant with var siblings (const byte) main::y#0
|
||||
Inlining constant with var siblings (const byte) main::y#0
|
||||
@ -1344,14 +1331,14 @@ main: scope:[main] from @1
|
||||
main::@1: scope:[main] from main main::@5
|
||||
(byte*) main::sc#7 ← phi( main/(const byte*) SCREEN#0 main::@5/(byte*) main::sc#2 )
|
||||
(byte) main::y#2 ← phi( main/(byte/signed byte/word/signed word) 0 main::@5/(byte) main::y#1 )
|
||||
(byte) main::bits#0 ← (const byte*) main::CHAR_A#0 *idx (byte) main::y#2
|
||||
(byte) main::bits#0 ← *((const byte*) main::CHAR_A#0 + (byte) main::y#2)
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte) main::x#2 ← phi( main::@1/(byte/signed byte/word/signed word) 0 main::@3/(byte) main::x#1 )
|
||||
(byte*) main::sc#3 ← phi( main::@1/(byte*) main::sc#7 main::@3/(byte*) main::sc#1 )
|
||||
(byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@3/(byte) main::bits#1 )
|
||||
(byte~) main::$2 ← (byte) main::bits#2 & (byte/word/signed word) 128
|
||||
if((byte~) main::$2==(byte/signed byte/word/signed word) 0) goto main::@3
|
||||
(byte~) main::$1 ← (byte) main::bits#2 & (byte/word/signed word) 128
|
||||
if((byte~) main::$1==(byte/signed byte/word/signed word) 0) goto main::@3
|
||||
to:main::@4
|
||||
main::@3: scope:[main] from main::@2 main::@4
|
||||
(byte) main::c#2 ← phi( main::@2/(byte) '.' main::@4/(byte) '*' )
|
||||
@ -1391,7 +1378,7 @@ FINAL SYMBOL TABLE
|
||||
(byte*) SCREEN
|
||||
(const byte*) SCREEN#0 = ((byte*))(word/signed word) 1024
|
||||
(void()) main()
|
||||
(byte~) main::$2
|
||||
(byte~) main::$1
|
||||
(label) main::@1
|
||||
(label) main::@2
|
||||
(label) main::@3
|
||||
@ -1437,7 +1424,7 @@ main: scope:[main] from @1
|
||||
main::@1: scope:[main] from main main::@7
|
||||
(byte*) main::sc#7 ← phi( main/(const byte*) SCREEN#0 main::@7/(byte*~) main::sc#8 )
|
||||
(byte) main::y#2 ← phi( main/(byte/signed byte/word/signed word) 0 main::@7/(byte~) main::y#7 )
|
||||
(byte) main::bits#0 ← (const byte*) main::CHAR_A#0 *idx (byte) main::y#2
|
||||
(byte) main::bits#0 ← *((const byte*) main::CHAR_A#0 + (byte) main::y#2)
|
||||
(byte~) main::bits#5 ← (byte) main::bits#0
|
||||
(byte*~) main::sc#9 ← (byte*) main::sc#7
|
||||
to:main::@2
|
||||
@ -1445,8 +1432,8 @@ main::@2: scope:[main] from main::@1 main::@8
|
||||
(byte) main::x#2 ← phi( main::@1/(byte/signed byte/word/signed word) 0 main::@8/(byte~) main::x#5 )
|
||||
(byte*) main::sc#3 ← phi( main::@1/(byte*~) main::sc#9 main::@8/(byte*~) main::sc#10 )
|
||||
(byte) main::bits#2 ← phi( main::@1/(byte~) main::bits#5 main::@8/(byte~) main::bits#6 )
|
||||
(byte~) main::$2 ← (byte) main::bits#2 & (byte/word/signed word) 128
|
||||
if((byte~) main::$2==(byte/signed byte/word/signed word) 0) goto main::@3
|
||||
(byte~) main::$1 ← (byte) main::bits#2 & (byte/word/signed word) 128
|
||||
if((byte~) main::$1==(byte/signed byte/word/signed word) 0) goto main::@3
|
||||
to:main::@4
|
||||
main::@4: scope:[main] from main::@2
|
||||
to:main::@3
|
||||
@ -1518,7 +1505,7 @@ main: scope:[main] from @1
|
||||
main::@1: scope:[main] from main main::@7
|
||||
[6] (byte*) main::sc#7 ← phi( main/(const byte*) SCREEN#0 main::@7/(byte*~) main::sc#8 ) [ main::y#2 main::sc#7 ]
|
||||
[6] (byte) main::y#2 ← phi( main/(byte/signed byte/word/signed word) 0 main::@7/(byte~) main::y#7 ) [ main::y#2 main::sc#7 ]
|
||||
[7] (byte) main::bits#0 ← (const byte*) main::CHAR_A#0 *idx (byte) main::y#2 [ main::y#2 main::sc#7 main::bits#0 ]
|
||||
[7] (byte) main::bits#0 ← *((const byte*) main::CHAR_A#0 + (byte) main::y#2) [ main::y#2 main::sc#7 main::bits#0 ]
|
||||
[8] (byte~) main::bits#5 ← (byte) main::bits#0 [ main::y#2 main::sc#7 main::bits#5 ]
|
||||
[9] (byte*~) main::sc#9 ← (byte*) main::sc#7 [ main::y#2 main::bits#5 main::sc#9 ]
|
||||
to:main::@2
|
||||
@ -1526,8 +1513,8 @@ main::@2: scope:[main] from main::@1 main::@8
|
||||
[10] (byte) main::x#2 ← phi( main::@1/(byte/signed byte/word/signed word) 0 main::@8/(byte~) main::x#5 ) [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
|
||||
[10] (byte*) main::sc#3 ← phi( main::@1/(byte*~) main::sc#9 main::@8/(byte*~) main::sc#10 ) [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
|
||||
[10] (byte) main::bits#2 ← phi( main::@1/(byte~) main::bits#5 main::@8/(byte~) main::bits#6 ) [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
|
||||
[11] (byte~) main::$2 ← (byte) main::bits#2 & (byte/word/signed word) 128 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$2 ]
|
||||
[12] if((byte~) main::$2==(byte/signed byte/word/signed word) 0) goto main::@3 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
|
||||
[11] (byte~) main::$1 ← (byte) main::bits#2 & (byte/word/signed word) 128 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$1 ]
|
||||
[12] if((byte~) main::$1==(byte/signed byte/word/signed word) 0) goto main::@3 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
|
||||
to:main::@4
|
||||
main::@4: scope:[main] from main::@2
|
||||
[13] phi() [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
|
||||
@ -1608,14 +1595,14 @@ main: scope:[main] from @1
|
||||
main::@1: scope:[main] from main main::@5
|
||||
[6] (byte*) main::sc#7 ← phi( main/(const byte*) SCREEN#0 main::@5/(byte*) main::sc#2 ) [ main::y#2 main::sc#7 ]
|
||||
[6] (byte) main::y#2 ← phi( main/(byte/signed byte/word/signed word) 0 main::@5/(byte) main::y#1 ) [ main::y#2 main::sc#7 ]
|
||||
[7] (byte) main::bits#0 ← (const byte*) main::CHAR_A#0 *idx (byte) main::y#2 [ main::y#2 main::sc#7 main::bits#0 ]
|
||||
[7] (byte) main::bits#0 ← *((const byte*) main::CHAR_A#0 + (byte) main::y#2) [ main::y#2 main::sc#7 main::bits#0 ]
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
[8] (byte) main::x#2 ← phi( main::@1/(byte/signed byte/word/signed word) 0 main::@3/(byte) main::x#1 ) [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
|
||||
[8] (byte*) main::sc#3 ← phi( main::@1/(byte*) main::sc#7 main::@3/(byte*) main::sc#1 ) [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
|
||||
[8] (byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@3/(byte) main::bits#1 ) [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
|
||||
[9] (byte~) main::$2 ← (byte) main::bits#2 & (byte/word/signed word) 128 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$2 ]
|
||||
[10] if((byte~) main::$2==(byte/signed byte/word/signed word) 0) goto main::@3 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
|
||||
[9] (byte~) main::$1 ← (byte) main::bits#2 & (byte/word/signed word) 128 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$1 ]
|
||||
[10] if((byte~) main::$1==(byte/signed byte/word/signed word) 0) goto main::@3 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
|
||||
to:main::@4
|
||||
main::@4: scope:[main] from main::@2
|
||||
[11] phi() [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
|
||||
@ -1658,14 +1645,14 @@ main: scope:[main] from @1
|
||||
main::@1: scope:[main] from main main::@5
|
||||
[6] (byte*) main::sc#7 ← phi( main/(const byte*) SCREEN#0 main::@5/(byte*) main::sc#2 ) [ main::y#2 main::sc#7 ] ( main:2 [ main::y#2 main::sc#7 ] )
|
||||
[6] (byte) main::y#2 ← phi( main/(byte/signed byte/word/signed word) 0 main::@5/(byte) main::y#1 ) [ main::y#2 main::sc#7 ] ( main:2 [ main::y#2 main::sc#7 ] )
|
||||
[7] (byte) main::bits#0 ← (const byte*) main::CHAR_A#0 *idx (byte) main::y#2 [ main::y#2 main::sc#7 main::bits#0 ] ( main:2 [ main::y#2 main::sc#7 main::bits#0 ] )
|
||||
[7] (byte) main::bits#0 ← *((const byte*) main::CHAR_A#0 + (byte) main::y#2) [ main::y#2 main::sc#7 main::bits#0 ] ( main:2 [ main::y#2 main::sc#7 main::bits#0 ] )
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
[8] (byte) main::x#2 ← phi( main::@1/(byte/signed byte/word/signed word) 0 main::@3/(byte) main::x#1 ) [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] ( main:2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] )
|
||||
[8] (byte*) main::sc#3 ← phi( main::@1/(byte*) main::sc#7 main::@3/(byte*) main::sc#1 ) [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] ( main:2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] )
|
||||
[8] (byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@3/(byte) main::bits#1 ) [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] ( main:2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] )
|
||||
[9] (byte~) main::$2 ← (byte) main::bits#2 & (byte/word/signed word) 128 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$2 ] ( main:2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$2 ] )
|
||||
[10] if((byte~) main::$2==(byte/signed byte/word/signed word) 0) goto main::@3 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] ( main:2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] )
|
||||
[9] (byte~) main::$1 ← (byte) main::bits#2 & (byte/word/signed word) 128 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$1 ] ( main:2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$1 ] )
|
||||
[10] if((byte~) main::$1==(byte/signed byte/word/signed word) 0) goto main::@3 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] ( main:2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] )
|
||||
to:main::@4
|
||||
main::@4: scope:[main] from main::@2
|
||||
[11] phi() [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] ( main:2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] )
|
||||
@ -1726,7 +1713,7 @@ VARIABLE REGISTER WEIGHTS
|
||||
(byte*) PROCPORT
|
||||
(byte*) SCREEN
|
||||
(void()) main()
|
||||
(byte~) main::$2 202.0
|
||||
(byte~) main::$1 202.0
|
||||
(byte*) main::CHAR_A
|
||||
(byte) main::bits
|
||||
(byte) main::bits#0 22.0
|
||||
@ -1752,20 +1739,20 @@ Initial phi equivalence classes
|
||||
[ main::sc#3 main::sc#7 main::sc#2 main::sc#1 ]
|
||||
[ main::x#2 main::x#1 ]
|
||||
[ main::c#2 ]
|
||||
Added variable main::$2 to zero page equivalence class [ main::$2 ]
|
||||
Added variable main::$1 to zero page equivalence class [ main::$1 ]
|
||||
Complete equivalence classes
|
||||
[ main::y#2 main::y#1 ]
|
||||
[ main::bits#2 main::bits#0 main::bits#1 ]
|
||||
[ main::sc#3 main::sc#7 main::sc#2 main::sc#1 ]
|
||||
[ main::x#2 main::x#1 ]
|
||||
[ main::c#2 ]
|
||||
[ main::$2 ]
|
||||
[ main::$1 ]
|
||||
Allocated zp ZP_BYTE:2 [ main::y#2 main::y#1 ]
|
||||
Allocated zp ZP_BYTE:3 [ main::bits#2 main::bits#0 main::bits#1 ]
|
||||
Allocated zp ZP_WORD:4 [ main::sc#3 main::sc#7 main::sc#2 main::sc#1 ]
|
||||
Allocated zp ZP_BYTE:6 [ main::x#2 main::x#1 ]
|
||||
Allocated zp ZP_BYTE:7 [ main::c#2 ]
|
||||
Allocated zp ZP_BYTE:8 [ main::$2 ]
|
||||
Allocated zp ZP_BYTE:8 [ main::$1 ]
|
||||
INITIAL ASM
|
||||
//SEG0 Basic Upstart
|
||||
.pc = $801 "Basic"
|
||||
@ -1792,7 +1779,7 @@ bend:
|
||||
//SEG8 main
|
||||
main: {
|
||||
.const CHAR_A = CHARGEN+8
|
||||
.label _2 = 8
|
||||
.label _1 = 8
|
||||
.label bits = 3
|
||||
.label sc = 4
|
||||
.label x = 6
|
||||
@ -1821,7 +1808,7 @@ main: {
|
||||
jmp b1
|
||||
//SEG17 main::@1
|
||||
b1:
|
||||
//SEG18 [7] (byte) main::bits#0 ← (const byte*) main::CHAR_A#0 *idx (byte) main::y#2 [ main::y#2 main::sc#7 main::bits#0 ] ( main:2 [ main::y#2 main::sc#7 main::bits#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2
|
||||
//SEG18 [7] (byte) main::bits#0 ← *((const byte*) main::CHAR_A#0 + (byte) main::y#2) [ main::y#2 main::sc#7 main::bits#0 ] ( main:2 [ main::y#2 main::sc#7 main::bits#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2
|
||||
ldx y
|
||||
lda CHAR_A,x
|
||||
sta bits
|
||||
@ -1841,12 +1828,12 @@ main: {
|
||||
jmp b2
|
||||
//SEG27 main::@2
|
||||
b2:
|
||||
//SEG28 [9] (byte~) main::$2 ← (byte) main::bits#2 & (byte/word/signed word) 128 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$2 ] ( main:2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$2 ] ) -- vbuz1=vbuz2_band_vbuc1
|
||||
//SEG28 [9] (byte~) main::$1 ← (byte) main::bits#2 & (byte/word/signed word) 128 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$1 ] ( main:2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$1 ] ) -- vbuz1=vbuz2_band_vbuc1
|
||||
lda bits
|
||||
and #$80
|
||||
sta _2
|
||||
//SEG29 [10] if((byte~) main::$2==(byte/signed byte/word/signed word) 0) goto main::@3 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] ( main:2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] ) -- vbuz1_eq_0_then_la1
|
||||
lda _2
|
||||
sta _1
|
||||
//SEG29 [10] if((byte~) main::$1==(byte/signed byte/word/signed word) 0) goto main::@3 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] ( main:2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] ) -- vbuz1_eq_0_then_la1
|
||||
lda _1
|
||||
beq b3_from_b2
|
||||
//SEG30 [11] phi from main::@2 to main::@4 [phi:main::@2->main::@4]
|
||||
b4_from_b2:
|
||||
@ -1918,7 +1905,7 @@ main: {
|
||||
|
||||
REGISTER UPLIFT POTENTIAL REGISTERS
|
||||
Statement [5] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word) 50 [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
Statement [9] (byte~) main::$2 ← (byte) main::bits#2 & (byte/word/signed word) 128 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$2 ] ( main:2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$2 ] ) always clobbers reg byte a
|
||||
Statement [9] (byte~) main::$1 ← (byte) main::bits#2 & (byte/word/signed word) 128 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$1 ] ( main:2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$1 ] ) always clobbers reg byte a
|
||||
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::y#2 main::y#1 ]
|
||||
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ main::bits#2 main::bits#0 main::bits#1 ]
|
||||
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ main::x#2 main::x#1 ]
|
||||
@ -1929,8 +1916,8 @@ Removing always clobbered register reg byte y as potential for zp ZP_BYTE:6 [ ma
|
||||
Statement [18] (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte/signed byte/word/signed word) 32 [ main::y#2 main::sc#2 ] ( main:2 [ main::y#2 main::sc#2 ] ) always clobbers reg byte a
|
||||
Statement [21] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word) 55 [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
Statement [5] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word) 50 [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
Statement [7] (byte) main::bits#0 ← (const byte*) main::CHAR_A#0 *idx (byte) main::y#2 [ main::y#2 main::sc#7 main::bits#0 ] ( main:2 [ main::y#2 main::sc#7 main::bits#0 ] ) always clobbers reg byte a
|
||||
Statement [9] (byte~) main::$2 ← (byte) main::bits#2 & (byte/word/signed word) 128 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$2 ] ( main:2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$2 ] ) always clobbers reg byte a
|
||||
Statement [7] (byte) main::bits#0 ← *((const byte*) main::CHAR_A#0 + (byte) main::y#2) [ main::y#2 main::sc#7 main::bits#0 ] ( main:2 [ main::y#2 main::sc#7 main::bits#0 ] ) always clobbers reg byte a
|
||||
Statement [9] (byte~) main::$1 ← (byte) main::bits#2 & (byte/word/signed word) 128 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$1 ] ( main:2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$1 ] ) always clobbers reg byte a
|
||||
Statement [13] *((byte*) main::sc#3) ← (byte) main::c#2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] ( main:2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] ) always clobbers reg byte y
|
||||
Statement [18] (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte/signed byte/word/signed word) 32 [ main::y#2 main::sc#2 ] ( main:2 [ main::y#2 main::sc#2 ] ) always clobbers reg byte a
|
||||
Statement [21] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word) 55 [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
@ -1939,13 +1926,13 @@ Potential registers zp ZP_BYTE:3 [ main::bits#2 main::bits#0 main::bits#1 ] : zp
|
||||
Potential registers zp ZP_WORD:4 [ main::sc#3 main::sc#7 main::sc#2 main::sc#1 ] : zp ZP_WORD:4 ,
|
||||
Potential registers zp ZP_BYTE:6 [ main::x#2 main::x#1 ] : zp ZP_BYTE:6 , reg byte x ,
|
||||
Potential registers zp ZP_BYTE:7 [ main::c#2 ] : zp ZP_BYTE:7 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:8 [ main::$2 ] : zp ZP_BYTE:8 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:8 [ main::$1 ] : zp ZP_BYTE:8 , reg byte a , reg byte x , reg byte y ,
|
||||
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [main] 202: zp ZP_BYTE:8 [ main::$2 ] 176.75: zp ZP_BYTE:6 [ main::x#2 main::x#1 ] 134.19: zp ZP_BYTE:3 [ main::bits#2 main::bits#0 main::bits#1 ] 123.92: zp ZP_WORD:4 [ main::sc#3 main::sc#7 main::sc#2 main::sc#1 ] 101: zp ZP_BYTE:7 [ main::c#2 ] 19.04: zp ZP_BYTE:2 [ main::y#2 main::y#1 ]
|
||||
Uplift Scope [main] 202: zp ZP_BYTE:8 [ main::$1 ] 176.75: zp ZP_BYTE:6 [ main::x#2 main::x#1 ] 134.19: zp ZP_BYTE:3 [ main::bits#2 main::bits#0 main::bits#1 ] 123.92: zp ZP_WORD:4 [ main::sc#3 main::sc#7 main::sc#2 main::sc#1 ] 101: zp ZP_BYTE:7 [ main::c#2 ] 19.04: zp ZP_BYTE:2 [ main::y#2 main::y#1 ]
|
||||
Uplift Scope []
|
||||
|
||||
Uplifting [main] best 7352 combination reg byte a [ main::$2 ] reg byte x [ main::x#2 main::x#1 ] zp ZP_BYTE:3 [ main::bits#2 main::bits#0 main::bits#1 ] zp ZP_WORD:4 [ main::sc#3 main::sc#7 main::sc#2 main::sc#1 ] reg byte a [ main::c#2 ] zp ZP_BYTE:2 [ main::y#2 main::y#1 ]
|
||||
Uplifting [main] best 7352 combination reg byte a [ main::$1 ] reg byte x [ main::x#2 main::x#1 ] zp ZP_BYTE:3 [ main::bits#2 main::bits#0 main::bits#1 ] zp ZP_WORD:4 [ main::sc#3 main::sc#7 main::sc#2 main::sc#1 ] reg byte a [ main::c#2 ] zp ZP_BYTE:2 [ main::y#2 main::y#1 ]
|
||||
Uplifting [] best 7352 combination
|
||||
Attempting to uplift remaining variables inzp ZP_BYTE:3 [ main::bits#2 main::bits#0 main::bits#1 ]
|
||||
Uplifting [main] best 7352 combination zp ZP_BYTE:3 [ main::bits#2 main::bits#0 main::bits#1 ]
|
||||
@ -2004,7 +1991,7 @@ main: {
|
||||
jmp b1
|
||||
//SEG17 main::@1
|
||||
b1:
|
||||
//SEG18 [7] (byte) main::bits#0 ← (const byte*) main::CHAR_A#0 *idx (byte) main::y#2 [ main::y#2 main::sc#7 main::bits#0 ] ( main:2 [ main::y#2 main::sc#7 main::bits#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2
|
||||
//SEG18 [7] (byte) main::bits#0 ← *((const byte*) main::CHAR_A#0 + (byte) main::y#2) [ main::y#2 main::sc#7 main::bits#0 ] ( main:2 [ main::y#2 main::sc#7 main::bits#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2
|
||||
ldx y
|
||||
lda CHAR_A,x
|
||||
sta bits
|
||||
@ -2023,10 +2010,10 @@ main: {
|
||||
jmp b2
|
||||
//SEG27 main::@2
|
||||
b2:
|
||||
//SEG28 [9] (byte~) main::$2 ← (byte) main::bits#2 & (byte/word/signed word) 128 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$2 ] ( main:2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$2 ] ) -- vbuaa=vbuz1_band_vbuc1
|
||||
//SEG28 [9] (byte~) main::$1 ← (byte) main::bits#2 & (byte/word/signed word) 128 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$1 ] ( main:2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$1 ] ) -- vbuaa=vbuz1_band_vbuc1
|
||||
lda bits
|
||||
and #$80
|
||||
//SEG29 [10] if((byte~) main::$2==(byte/signed byte/word/signed word) 0) goto main::@3 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] ( main:2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] ) -- vbuaa_eq_0_then_la1
|
||||
//SEG29 [10] if((byte~) main::$1==(byte/signed byte/word/signed word) 0) goto main::@3 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] ( main:2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] ) -- vbuaa_eq_0_then_la1
|
||||
cmp #0
|
||||
beq b3_from_b2
|
||||
//SEG30 [11] phi from main::@2 to main::@4 [phi:main::@2->main::@4]
|
||||
@ -2140,7 +2127,7 @@ FINAL SYMBOL TABLE
|
||||
(byte*) SCREEN
|
||||
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word) 1024
|
||||
(void()) main()
|
||||
(byte~) main::$2 reg byte a 202.0
|
||||
(byte~) main::$1 reg byte a 202.0
|
||||
(label) main::@1
|
||||
(label) main::@2
|
||||
(label) main::@3
|
||||
@ -2173,7 +2160,7 @@ zp ZP_BYTE:3 [ main::bits#2 main::bits#0 main::bits#1 ]
|
||||
zp ZP_WORD:4 [ main::sc#3 main::sc#7 main::sc#2 main::sc#1 ]
|
||||
reg byte x [ main::x#2 main::x#1 ]
|
||||
reg byte a [ main::c#2 ]
|
||||
reg byte a [ main::$2 ]
|
||||
reg byte a [ main::$1 ]
|
||||
|
||||
FINAL CODE
|
||||
//SEG0 Basic Upstart
|
||||
@ -2216,7 +2203,7 @@ main: {
|
||||
//SEG16 [6] phi (byte) main::y#2 = (byte) main::y#1 [phi:main::@5->main::@1#1] -- register_copy
|
||||
//SEG17 main::@1
|
||||
b1:
|
||||
//SEG18 [7] (byte) main::bits#0 ← (const byte*) main::CHAR_A#0 *idx (byte) main::y#2 [ main::y#2 main::sc#7 main::bits#0 ] ( main:2 [ main::y#2 main::sc#7 main::bits#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2
|
||||
//SEG18 [7] (byte) main::bits#0 ← *((const byte*) main::CHAR_A#0 + (byte) main::y#2) [ main::y#2 main::sc#7 main::bits#0 ] ( main:2 [ main::y#2 main::sc#7 main::bits#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2
|
||||
ldx y
|
||||
lda CHAR_A,x
|
||||
sta bits
|
||||
@ -2231,10 +2218,10 @@ main: {
|
||||
//SEG26 [8] phi (byte) main::bits#2 = (byte) main::bits#1 [phi:main::@3->main::@2#2] -- register_copy
|
||||
//SEG27 main::@2
|
||||
b2:
|
||||
//SEG28 [9] (byte~) main::$2 ← (byte) main::bits#2 & (byte/word/signed word) 128 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$2 ] ( main:2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$2 ] ) -- vbuaa=vbuz1_band_vbuc1
|
||||
//SEG28 [9] (byte~) main::$1 ← (byte) main::bits#2 & (byte/word/signed word) 128 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$1 ] ( main:2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$1 ] ) -- vbuaa=vbuz1_band_vbuc1
|
||||
lda bits
|
||||
and #$80
|
||||
//SEG29 [10] if((byte~) main::$2==(byte/signed byte/word/signed word) 0) goto main::@3 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] ( main:2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] ) -- vbuaa_eq_0_then_la1
|
||||
//SEG29 [10] if((byte~) main::$1==(byte/signed byte/word/signed word) 0) goto main::@3 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] ( main:2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] ) -- vbuaa_eq_0_then_la1
|
||||
cmp #0
|
||||
beq b4
|
||||
//SEG30 [11] phi from main::@2 to main::@4 [phi:main::@2->main::@4]
|
||||
|
@ -8,7 +8,7 @@
|
||||
(byte*) SCREEN
|
||||
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word) 1024
|
||||
(void()) main()
|
||||
(byte~) main::$2 reg byte a 202.0
|
||||
(byte~) main::$1 reg byte a 202.0
|
||||
(label) main::@1
|
||||
(label) main::@2
|
||||
(label) main::@3
|
||||
@ -41,4 +41,4 @@ zp ZP_BYTE:3 [ main::bits#2 main::bits#0 main::bits#1 ]
|
||||
zp ZP_WORD:4 [ main::sc#3 main::sc#7 main::sc#2 main::sc#1 ]
|
||||
reg byte x [ main::x#2 main::x#1 ]
|
||||
reg byte a [ main::c#2 ]
|
||||
reg byte a [ main::$2 ]
|
||||
reg byte a [ main::$1 ]
|
||||
|
@ -48,11 +48,10 @@ line::@1: scope:[line] from line
|
||||
to:line::@return
|
||||
plot: scope:[plot] from line::@1 line::@2
|
||||
[23] (byte) plot::x#2 ← phi( line::@1/(const byte) line::x0#0 line::@2/(byte) plot::x#1 ) [ plot::x#2 ] ( main:2::line:11::plot:17 [ line::x#2 plot::x#2 ] main:2::line:11::plot:22 [ plot::x#2 ] )
|
||||
[24] (byte) plot::idx#0 ← (const byte[]) plots#0 *idx (byte) plot::x#2 [ plot::idx#0 ] ( main:2::line:11::plot:17 [ line::x#2 plot::idx#0 ] main:2::line:11::plot:22 [ plot::idx#0 ] )
|
||||
[25] (byte~) plot::$1 ← (const byte*) SCREEN#0 *idx (byte) plot::idx#0 [ plot::idx#0 plot::$1 ] ( main:2::line:11::plot:17 [ line::x#2 plot::idx#0 plot::$1 ] main:2::line:11::plot:22 [ plot::idx#0 plot::$1 ] )
|
||||
[26] (byte~) plot::$2 ← (byte~) plot::$1 + (byte/signed byte/word/signed word) 1 [ plot::idx#0 plot::$2 ] ( main:2::line:11::plot:17 [ line::x#2 plot::idx#0 plot::$2 ] main:2::line:11::plot:22 [ plot::idx#0 plot::$2 ] )
|
||||
[27] *((const byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte~) plot::$2 [ ] ( main:2::line:11::plot:17 [ line::x#2 ] main:2::line:11::plot:22 [ ] )
|
||||
[24] (byte) plot::idx#0 ← *((const byte[]) plots#0 + (byte) plot::x#2) [ plot::idx#0 ] ( main:2::line:11::plot:17 [ line::x#2 plot::idx#0 ] main:2::line:11::plot:22 [ plot::idx#0 ] )
|
||||
[25] (byte~) plot::$0 ← *((const byte*) SCREEN#0 + (byte) plot::idx#0) + (byte/signed byte/word/signed word) 1 [ plot::idx#0 plot::$0 ] ( main:2::line:11::plot:17 [ line::x#2 plot::idx#0 plot::$0 ] main:2::line:11::plot:22 [ plot::idx#0 plot::$0 ] )
|
||||
[26] *((const byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte~) plot::$0 [ ] ( main:2::line:11::plot:17 [ line::x#2 ] main:2::line:11::plot:22 [ ] )
|
||||
to:plot::@return
|
||||
plot::@return: scope:[plot] from plot
|
||||
[28] return [ ] ( main:2::line:11::plot:17 [ line::x#2 ] main:2::line:11::plot:22 [ ] )
|
||||
[27] return [ ] ( main:2::line:11::plot:17 [ line::x#2 ] main:2::line:11::plot:22 [ ] )
|
||||
to:@return
|
||||
|
@ -62,11 +62,9 @@ line::@return:
|
||||
return
|
||||
endproc // line()
|
||||
proc (void()) plot((byte) plot::x)
|
||||
(byte~) plot::$0 ← (byte[]) plots *idx (byte) plot::x
|
||||
(byte) plot::idx ← (byte~) plot::$0
|
||||
(byte~) plot::$1 ← (byte*) SCREEN *idx (byte) plot::idx
|
||||
(byte~) plot::$2 ← (byte~) plot::$1 + (byte/signed byte/word/signed word) 1
|
||||
*((byte*) SCREEN + (byte) plot::idx) ← (byte~) plot::$2
|
||||
(byte) plot::idx ← *((byte[]) plots + (byte) plot::x)
|
||||
(byte~) plot::$0 ← *((byte*) SCREEN + (byte) plot::idx) + (byte/signed byte/word/signed word) 1
|
||||
*((byte*) SCREEN + (byte) plot::idx) ← (byte~) plot::$0
|
||||
plot::@return:
|
||||
return
|
||||
endproc // plot()
|
||||
@ -96,8 +94,6 @@ SYMBOLS
|
||||
(byte) main::i
|
||||
(void()) plot((byte) plot::x)
|
||||
(byte~) plot::$0
|
||||
(byte~) plot::$1
|
||||
(byte~) plot::$2
|
||||
(label) plot::@return
|
||||
(byte) plot::idx
|
||||
(byte) plot::x
|
||||
@ -162,11 +158,9 @@ line::@return: scope:[line] from line::@3
|
||||
@2: scope:[] from @1
|
||||
to:@3
|
||||
plot: scope:[plot] from
|
||||
(byte~) plot::$0 ← (byte[]) plots *idx (byte) plot::x
|
||||
(byte) plot::idx ← (byte~) plot::$0
|
||||
(byte~) plot::$1 ← (byte*) SCREEN *idx (byte) plot::idx
|
||||
(byte~) plot::$2 ← (byte~) plot::$1 + (byte/signed byte/word/signed word) 1
|
||||
*((byte*) SCREEN + (byte) plot::idx) ← (byte~) plot::$2
|
||||
(byte) plot::idx ← *((byte[]) plots + (byte) plot::x)
|
||||
(byte~) plot::$0 ← *((byte*) SCREEN + (byte) plot::idx) + (byte/signed byte/word/signed word) 1
|
||||
*((byte*) SCREEN + (byte) plot::idx) ← (byte~) plot::$0
|
||||
to:plot::@return
|
||||
plot::@return: scope:[plot] from plot
|
||||
return
|
||||
@ -229,11 +223,9 @@ line::@return: scope:[line] from line::@1 line::@2
|
||||
return
|
||||
to:@return
|
||||
plot: scope:[plot] from
|
||||
(byte~) plot::$0 ← (byte[]) plots *idx (byte) plot::x
|
||||
(byte) plot::idx ← (byte~) plot::$0
|
||||
(byte~) plot::$1 ← (byte*) SCREEN *idx (byte) plot::idx
|
||||
(byte~) plot::$2 ← (byte~) plot::$1 + (byte/signed byte/word/signed word) 1
|
||||
*((byte*) SCREEN + (byte) plot::idx) ← (byte~) plot::$2
|
||||
(byte) plot::idx ← *((byte[]) plots + (byte) plot::x)
|
||||
(byte~) plot::$0 ← *((byte*) SCREEN + (byte) plot::idx) + (byte/signed byte/word/signed word) 1
|
||||
*((byte*) SCREEN + (byte) plot::idx) ← (byte~) plot::$0
|
||||
to:plot::@return
|
||||
plot::@return: scope:[plot] from plot
|
||||
return
|
||||
@ -298,11 +290,9 @@ line::@return: scope:[line] from line::@7 line::@8
|
||||
return
|
||||
to:@return
|
||||
plot: scope:[plot] from line::@1 line::@2
|
||||
(byte~) plot::$0 ← (byte[]) plots *idx (byte) plot::x
|
||||
(byte) plot::idx ← (byte~) plot::$0
|
||||
(byte~) plot::$1 ← (byte*) SCREEN *idx (byte) plot::idx
|
||||
(byte~) plot::$2 ← (byte~) plot::$1 + (byte/signed byte/word/signed word) 1
|
||||
*((byte*) SCREEN + (byte) plot::idx) ← (byte~) plot::$2
|
||||
(byte) plot::idx ← *((byte[]) plots + (byte) plot::x)
|
||||
(byte~) plot::$0 ← *((byte*) SCREEN + (byte) plot::idx) + (byte/signed byte/word/signed word) 1
|
||||
*((byte*) SCREEN + (byte) plot::idx) ← (byte~) plot::$0
|
||||
to:plot::@return
|
||||
plot::@return: scope:[plot] from plot
|
||||
return
|
||||
@ -381,11 +371,9 @@ line::@return: scope:[line] from line::@7 line::@8
|
||||
to:@return
|
||||
plot: scope:[plot] from line::@1 line::@2
|
||||
(byte) plot::x#2 ← phi( line::@1/(byte) plot::x#0 line::@2/(byte) plot::x#1 )
|
||||
(byte~) plot::$0 ← (byte[]) plots#0 *idx (byte) plot::x#2
|
||||
(byte) plot::idx#0 ← (byte~) plot::$0
|
||||
(byte~) plot::$1 ← (byte*) SCREEN#0 *idx (byte) plot::idx#0
|
||||
(byte~) plot::$2 ← (byte~) plot::$1 + (byte/signed byte/word/signed word) 1
|
||||
*((byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte~) plot::$2
|
||||
(byte) plot::idx#0 ← *((byte[]) plots#0 + (byte) plot::x#2)
|
||||
(byte~) plot::$0 ← *((byte*) SCREEN#0 + (byte) plot::idx#0) + (byte/signed byte/word/signed word) 1
|
||||
*((byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte~) plot::$0
|
||||
to:plot::@return
|
||||
plot::@return: scope:[plot] from plot
|
||||
return
|
||||
@ -461,11 +449,9 @@ line::@return: scope:[line] from line::@7 line::@8
|
||||
to:@return
|
||||
plot: scope:[plot] from line::@1 line::@2
|
||||
(byte) plot::x#2 ← phi( line::@1/(byte) plot::x#0 line::@2/(byte) plot::x#1 )
|
||||
(byte~) plot::$0 ← (byte[]) plots#0 *idx (byte) plot::x#2
|
||||
(byte) plot::idx#0 ← (byte~) plot::$0
|
||||
(byte~) plot::$1 ← (byte*) SCREEN#0 *idx (byte) plot::idx#0
|
||||
(byte~) plot::$2 ← (byte~) plot::$1 + (byte/signed byte/word/signed word) 1
|
||||
*((byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte~) plot::$2
|
||||
(byte) plot::idx#0 ← *((byte[]) plots#0 + (byte) plot::x#2)
|
||||
(byte~) plot::$0 ← *((byte*) SCREEN#0 + (byte) plot::idx#0) + (byte/signed byte/word/signed word) 1
|
||||
*((byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte~) plot::$0
|
||||
to:plot::@return
|
||||
plot::@return: scope:[plot] from plot
|
||||
return
|
||||
@ -522,8 +508,6 @@ INITIAL SSA SYMBOL TABLE
|
||||
(byte) main::i#2
|
||||
(void()) plot((byte) plot::x)
|
||||
(byte~) plot::$0
|
||||
(byte~) plot::$1
|
||||
(byte~) plot::$2
|
||||
(label) plot::@return
|
||||
(byte) plot::idx
|
||||
(byte) plot::idx#0
|
||||
@ -599,11 +583,9 @@ line::@return: scope:[line] from line::@1 line::@8
|
||||
to:@return
|
||||
plot: scope:[plot] from line::@1 line::@2
|
||||
(byte) plot::x#2 ← phi( line::@1/(byte) plot::x#0 line::@2/(byte) plot::x#1 )
|
||||
(byte~) plot::$0 ← (byte[]) plots#0 *idx (byte) plot::x#2
|
||||
(byte) plot::idx#0 ← (byte~) plot::$0
|
||||
(byte~) plot::$1 ← (byte*) SCREEN#0 *idx (byte) plot::idx#0
|
||||
(byte~) plot::$2 ← (byte~) plot::$1 + (byte/signed byte/word/signed word) 1
|
||||
*((byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte~) plot::$2
|
||||
(byte) plot::idx#0 ← *((byte[]) plots#0 + (byte) plot::x#2)
|
||||
(byte~) plot::$0 ← *((byte*) SCREEN#0 + (byte) plot::idx#0) + (byte/signed byte/word/signed word) 1
|
||||
*((byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte~) plot::$0
|
||||
to:plot::@return
|
||||
plot::@return: scope:[plot] from plot
|
||||
return
|
||||
@ -676,11 +658,9 @@ line::@return: scope:[line] from line::@1 line::@8
|
||||
to:@return
|
||||
plot: scope:[plot] from line::@1 line::@2
|
||||
(byte) plot::x#2 ← phi( line::@1/(byte) plot::x#0 line::@2/(byte) plot::x#1 )
|
||||
(byte~) plot::$0 ← (byte[]) plots#0 *idx (byte) plot::x#2
|
||||
(byte) plot::idx#0 ← (byte~) plot::$0
|
||||
(byte~) plot::$1 ← (byte*) SCREEN#0 *idx (byte) plot::idx#0
|
||||
(byte~) plot::$2 ← (byte~) plot::$1 + (byte/signed byte/word/signed word) 1
|
||||
*((byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte~) plot::$2
|
||||
(byte) plot::idx#0 ← *((byte[]) plots#0 + (byte) plot::x#2)
|
||||
(byte~) plot::$0 ← *((byte*) SCREEN#0 + (byte) plot::idx#0) + (byte/signed byte/word/signed word) 1
|
||||
*((byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte~) plot::$0
|
||||
to:plot::@return
|
||||
plot::@return: scope:[plot] from plot
|
||||
return
|
||||
@ -699,7 +679,6 @@ Alias (byte) line::x0#1 = (byte) line::x0#2 (byte) line::x0#3 (byte) line::x#0
|
||||
Alias (byte) line::x1#1 = (byte) line::x1#4
|
||||
Alias (byte) line::x#2 = (byte) line::x#3
|
||||
Alias (byte) line::x1#2 = (byte) line::x1#3
|
||||
Alias (byte) plot::idx#0 = (byte~) plot::$0
|
||||
Succesful SSA optimization Pass2AliasElimination
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
@ -756,10 +735,9 @@ line::@return: scope:[line] from line::@1 line::@8
|
||||
to:@return
|
||||
plot: scope:[plot] from line::@1 line::@2
|
||||
(byte) plot::x#2 ← phi( line::@1/(byte) plot::x#0 line::@2/(byte) plot::x#1 )
|
||||
(byte) plot::idx#0 ← (byte[]) plots#0 *idx (byte) plot::x#2
|
||||
(byte~) plot::$1 ← (byte*) SCREEN#0 *idx (byte) plot::idx#0
|
||||
(byte~) plot::$2 ← (byte~) plot::$1 + (byte/signed byte/word/signed word) 1
|
||||
*((byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte~) plot::$2
|
||||
(byte) plot::idx#0 ← *((byte[]) plots#0 + (byte) plot::x#2)
|
||||
(byte~) plot::$0 ← *((byte*) SCREEN#0 + (byte) plot::idx#0) + (byte/signed byte/word/signed word) 1
|
||||
*((byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte~) plot::$0
|
||||
to:plot::@return
|
||||
plot::@return: scope:[plot] from plot
|
||||
return
|
||||
@ -831,10 +809,9 @@ line::@return: scope:[line] from line::@1 line::@8
|
||||
to:@return
|
||||
plot: scope:[plot] from line::@1 line::@2
|
||||
(byte) plot::x#2 ← phi( line::@1/(byte) plot::x#0 line::@2/(byte) plot::x#1 )
|
||||
(byte) plot::idx#0 ← (byte[]) plots#0 *idx (byte) plot::x#2
|
||||
(byte~) plot::$1 ← (byte*) SCREEN#0 *idx (byte) plot::idx#0
|
||||
(byte~) plot::$2 ← (byte~) plot::$1 + (byte/signed byte/word/signed word) 1
|
||||
*((byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte~) plot::$2
|
||||
(byte) plot::idx#0 ← *((byte[]) plots#0 + (byte) plot::x#2)
|
||||
(byte~) plot::$0 ← *((byte*) SCREEN#0 + (byte) plot::idx#0) + (byte/signed byte/word/signed word) 1
|
||||
*((byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte~) plot::$0
|
||||
to:plot::@return
|
||||
plot::@return: scope:[plot] from plot
|
||||
return
|
||||
@ -900,10 +877,9 @@ line::@return: scope:[line] from line::@1 line::@8
|
||||
to:@return
|
||||
plot: scope:[plot] from line::@1 line::@2
|
||||
(byte) plot::x#2 ← phi( line::@1/(byte) plot::x#0 line::@2/(byte) plot::x#1 )
|
||||
(byte) plot::idx#0 ← (byte[]) plots#0 *idx (byte) plot::x#2
|
||||
(byte~) plot::$1 ← (byte*) SCREEN#0 *idx (byte) plot::idx#0
|
||||
(byte~) plot::$2 ← (byte~) plot::$1 + (byte/signed byte/word/signed word) 1
|
||||
*((byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte~) plot::$2
|
||||
(byte) plot::idx#0 ← *((byte[]) plots#0 + (byte) plot::x#2)
|
||||
(byte~) plot::$0 ← *((byte*) SCREEN#0 + (byte) plot::idx#0) + (byte/signed byte/word/signed word) 1
|
||||
*((byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte~) plot::$0
|
||||
to:plot::@return
|
||||
plot::@return: scope:[plot] from plot
|
||||
return
|
||||
@ -966,10 +942,9 @@ line::@return: scope:[line] from line::@1 line::@8
|
||||
to:@return
|
||||
plot: scope:[plot] from line::@1 line::@2
|
||||
(byte) plot::x#2 ← phi( line::@1/(byte) plot::x#0 line::@2/(byte) plot::x#1 )
|
||||
(byte) plot::idx#0 ← (byte[]) plots#0 *idx (byte) plot::x#2
|
||||
(byte~) plot::$1 ← (byte*) SCREEN#0 *idx (byte) plot::idx#0
|
||||
(byte~) plot::$2 ← (byte~) plot::$1 + (byte/signed byte/word/signed word) 1
|
||||
*((byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte~) plot::$2
|
||||
(byte) plot::idx#0 ← *((byte[]) plots#0 + (byte) plot::x#2)
|
||||
(byte~) plot::$0 ← *((byte*) SCREEN#0 + (byte) plot::idx#0) + (byte/signed byte/word/signed word) 1
|
||||
*((byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte~) plot::$0
|
||||
to:plot::@return
|
||||
plot::@return: scope:[plot] from plot
|
||||
return
|
||||
@ -1029,10 +1004,9 @@ line::@return: scope:[line] from line::@1 line::@8
|
||||
to:@return
|
||||
plot: scope:[plot] from line::@1 line::@2
|
||||
(byte) plot::x#2 ← phi( line::@1/(byte) plot::x#0 line::@2/(byte) plot::x#1 )
|
||||
(byte) plot::idx#0 ← (const byte[]) plots#0 *idx (byte) plot::x#2
|
||||
(byte~) plot::$1 ← (const byte*) SCREEN#0 *idx (byte) plot::idx#0
|
||||
(byte~) plot::$2 ← (byte~) plot::$1 + (byte/signed byte/word/signed word) 1
|
||||
*((const byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte~) plot::$2
|
||||
(byte) plot::idx#0 ← *((const byte[]) plots#0 + (byte) plot::x#2)
|
||||
(byte~) plot::$0 ← *((const byte*) SCREEN#0 + (byte) plot::idx#0) + (byte/signed byte/word/signed word) 1
|
||||
*((const byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte~) plot::$0
|
||||
to:plot::@return
|
||||
plot::@return: scope:[plot] from plot
|
||||
return
|
||||
@ -1087,10 +1061,9 @@ line::@return: scope:[line] from line::@1 line::@8
|
||||
to:@return
|
||||
plot: scope:[plot] from line::@1 line::@2
|
||||
(byte) plot::x#2 ← phi( line::@1/(const byte) plot::x#0 line::@2/(byte) plot::x#1 )
|
||||
(byte) plot::idx#0 ← (const byte[]) plots#0 *idx (byte) plot::x#2
|
||||
(byte~) plot::$1 ← (const byte*) SCREEN#0 *idx (byte) plot::idx#0
|
||||
(byte~) plot::$2 ← (byte~) plot::$1 + (byte/signed byte/word/signed word) 1
|
||||
*((const byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte~) plot::$2
|
||||
(byte) plot::idx#0 ← *((const byte[]) plots#0 + (byte) plot::x#2)
|
||||
(byte~) plot::$0 ← *((const byte*) SCREEN#0 + (byte) plot::idx#0) + (byte/signed byte/word/signed word) 1
|
||||
*((const byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte~) plot::$0
|
||||
to:plot::@return
|
||||
plot::@return: scope:[plot] from plot
|
||||
return
|
||||
@ -1145,10 +1118,9 @@ line::@return: scope:[line] from line::@1 line::@8
|
||||
to:@return
|
||||
plot: scope:[plot] from line::@1 line::@2
|
||||
(byte) plot::x#2 ← phi( line::@1/(const byte) plot::x#0 line::@2/(byte) plot::x#1 )
|
||||
(byte) plot::idx#0 ← (const byte[]) plots#0 *idx (byte) plot::x#2
|
||||
(byte~) plot::$1 ← (const byte*) SCREEN#0 *idx (byte) plot::idx#0
|
||||
(byte~) plot::$2 ← (byte~) plot::$1 + (byte/signed byte/word/signed word) 1
|
||||
*((const byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte~) plot::$2
|
||||
(byte) plot::idx#0 ← *((const byte[]) plots#0 + (byte) plot::x#2)
|
||||
(byte~) plot::$0 ← *((const byte*) SCREEN#0 + (byte) plot::idx#0) + (byte/signed byte/word/signed word) 1
|
||||
*((const byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte~) plot::$0
|
||||
to:plot::@return
|
||||
plot::@return: scope:[plot] from plot
|
||||
return
|
||||
@ -1212,10 +1184,9 @@ line::@return: scope:[line] from line::@1 line::@8
|
||||
to:@return
|
||||
plot: scope:[plot] from line::@1 line::@2
|
||||
(byte) plot::x#2 ← phi( line::@1/(const byte) line::x0#0 line::@2/(byte) plot::x#1 )
|
||||
(byte) plot::idx#0 ← (const byte[]) plots#0 *idx (byte) plot::x#2
|
||||
(byte~) plot::$1 ← (const byte*) SCREEN#0 *idx (byte) plot::idx#0
|
||||
(byte~) plot::$2 ← (byte~) plot::$1 + (byte/signed byte/word/signed word) 1
|
||||
*((const byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte~) plot::$2
|
||||
(byte) plot::idx#0 ← *((const byte[]) plots#0 + (byte) plot::x#2)
|
||||
(byte~) plot::$0 ← *((const byte*) SCREEN#0 + (byte) plot::idx#0) + (byte/signed byte/word/signed word) 1
|
||||
*((const byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte~) plot::$0
|
||||
to:plot::@return
|
||||
plot::@return: scope:[plot] from plot
|
||||
return
|
||||
@ -1252,8 +1223,7 @@ FINAL SYMBOL TABLE
|
||||
(byte) main::i#1
|
||||
(byte) main::i#2
|
||||
(void()) plot((byte) plot::x)
|
||||
(byte~) plot::$1
|
||||
(byte~) plot::$2
|
||||
(byte~) plot::$0
|
||||
(label) plot::@return
|
||||
(byte) plot::idx
|
||||
(byte) plot::idx#0
|
||||
@ -1319,10 +1289,9 @@ line::@1: scope:[line] from line
|
||||
to:line::@return
|
||||
plot: scope:[plot] from line::@1 line::@2
|
||||
(byte) plot::x#2 ← phi( line::@1/(const byte) line::x0#0 line::@2/(byte~) plot::x#3 )
|
||||
(byte) plot::idx#0 ← (const byte[]) plots#0 *idx (byte) plot::x#2
|
||||
(byte~) plot::$1 ← (const byte*) SCREEN#0 *idx (byte) plot::idx#0
|
||||
(byte~) plot::$2 ← (byte~) plot::$1 + (byte/signed byte/word/signed word) 1
|
||||
*((const byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte~) plot::$2
|
||||
(byte) plot::idx#0 ← *((const byte[]) plots#0 + (byte) plot::x#2)
|
||||
(byte~) plot::$0 ← *((const byte*) SCREEN#0 + (byte) plot::idx#0) + (byte/signed byte/word/signed word) 1
|
||||
*((const byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte~) plot::$0
|
||||
to:plot::@return
|
||||
plot::@return: scope:[plot] from plot
|
||||
return
|
||||
@ -1401,13 +1370,12 @@ line::@1: scope:[line] from line
|
||||
to:line::@return
|
||||
plot: scope:[plot] from line::@1 line::@2
|
||||
[26] (byte) plot::x#2 ← phi( line::@1/(const byte) line::x0#0 line::@2/(byte~) plot::x#3 ) [ plot::x#2 ]
|
||||
[27] (byte) plot::idx#0 ← (const byte[]) plots#0 *idx (byte) plot::x#2 [ plot::idx#0 ]
|
||||
[28] (byte~) plot::$1 ← (const byte*) SCREEN#0 *idx (byte) plot::idx#0 [ plot::idx#0 plot::$1 ]
|
||||
[29] (byte~) plot::$2 ← (byte~) plot::$1 + (byte/signed byte/word/signed word) 1 [ plot::idx#0 plot::$2 ]
|
||||
[30] *((const byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte~) plot::$2 [ ]
|
||||
[27] (byte) plot::idx#0 ← *((const byte[]) plots#0 + (byte) plot::x#2) [ plot::idx#0 ]
|
||||
[28] (byte~) plot::$0 ← *((const byte*) SCREEN#0 + (byte) plot::idx#0) + (byte/signed byte/word/signed word) 1 [ plot::idx#0 plot::$0 ]
|
||||
[29] *((const byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte~) plot::$0 [ ]
|
||||
to:plot::@return
|
||||
plot::@return: scope:[plot] from plot
|
||||
[31] return [ ]
|
||||
[30] return [ ]
|
||||
to:@return
|
||||
|
||||
Created 3 initial phi equivalence classes
|
||||
@ -1478,13 +1446,12 @@ line::@1: scope:[line] from line
|
||||
to:line::@return
|
||||
plot: scope:[plot] from line::@1 line::@2
|
||||
[23] (byte) plot::x#2 ← phi( line::@1/(const byte) line::x0#0 line::@2/(byte) plot::x#1 ) [ plot::x#2 ]
|
||||
[24] (byte) plot::idx#0 ← (const byte[]) plots#0 *idx (byte) plot::x#2 [ plot::idx#0 ]
|
||||
[25] (byte~) plot::$1 ← (const byte*) SCREEN#0 *idx (byte) plot::idx#0 [ plot::idx#0 plot::$1 ]
|
||||
[26] (byte~) plot::$2 ← (byte~) plot::$1 + (byte/signed byte/word/signed word) 1 [ plot::idx#0 plot::$2 ]
|
||||
[27] *((const byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte~) plot::$2 [ ]
|
||||
[24] (byte) plot::idx#0 ← *((const byte[]) plots#0 + (byte) plot::x#2) [ plot::idx#0 ]
|
||||
[25] (byte~) plot::$0 ← *((const byte*) SCREEN#0 + (byte) plot::idx#0) + (byte/signed byte/word/signed word) 1 [ plot::idx#0 plot::$0 ]
|
||||
[26] *((const byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte~) plot::$0 [ ]
|
||||
to:plot::@return
|
||||
plot::@return: scope:[plot] from plot
|
||||
[28] return [ ]
|
||||
[27] return [ ]
|
||||
to:@return
|
||||
|
||||
CONTROL FLOW GRAPH - PHI MEM COALESCED
|
||||
@ -1538,13 +1505,12 @@ line::@1: scope:[line] from line
|
||||
to:line::@return
|
||||
plot: scope:[plot] from line::@1 line::@2
|
||||
[23] (byte) plot::x#2 ← phi( line::@1/(const byte) line::x0#0 line::@2/(byte) plot::x#1 ) [ plot::x#2 ] ( main:2::line:11::plot:17 [ line::x#2 plot::x#2 ] main:2::line:11::plot:22 [ plot::x#2 ] )
|
||||
[24] (byte) plot::idx#0 ← (const byte[]) plots#0 *idx (byte) plot::x#2 [ plot::idx#0 ] ( main:2::line:11::plot:17 [ line::x#2 plot::idx#0 ] main:2::line:11::plot:22 [ plot::idx#0 ] )
|
||||
[25] (byte~) plot::$1 ← (const byte*) SCREEN#0 *idx (byte) plot::idx#0 [ plot::idx#0 plot::$1 ] ( main:2::line:11::plot:17 [ line::x#2 plot::idx#0 plot::$1 ] main:2::line:11::plot:22 [ plot::idx#0 plot::$1 ] )
|
||||
[26] (byte~) plot::$2 ← (byte~) plot::$1 + (byte/signed byte/word/signed word) 1 [ plot::idx#0 plot::$2 ] ( main:2::line:11::plot:17 [ line::x#2 plot::idx#0 plot::$2 ] main:2::line:11::plot:22 [ plot::idx#0 plot::$2 ] )
|
||||
[27] *((const byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte~) plot::$2 [ ] ( main:2::line:11::plot:17 [ line::x#2 ] main:2::line:11::plot:22 [ ] )
|
||||
[24] (byte) plot::idx#0 ← *((const byte[]) plots#0 + (byte) plot::x#2) [ plot::idx#0 ] ( main:2::line:11::plot:17 [ line::x#2 plot::idx#0 ] main:2::line:11::plot:22 [ plot::idx#0 ] )
|
||||
[25] (byte~) plot::$0 ← *((const byte*) SCREEN#0 + (byte) plot::idx#0) + (byte/signed byte/word/signed word) 1 [ plot::idx#0 plot::$0 ] ( main:2::line:11::plot:17 [ line::x#2 plot::idx#0 plot::$0 ] main:2::line:11::plot:22 [ plot::idx#0 plot::$0 ] )
|
||||
[26] *((const byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte~) plot::$0 [ ] ( main:2::line:11::plot:17 [ line::x#2 ] main:2::line:11::plot:22 [ ] )
|
||||
to:plot::@return
|
||||
plot::@return: scope:[plot] from plot
|
||||
[28] return [ ] ( main:2::line:11::plot:17 [ line::x#2 ] main:2::line:11::plot:22 [ ] )
|
||||
[27] return [ ] ( main:2::line:11::plot:17 [ line::x#2 ] main:2::line:11::plot:22 [ ] )
|
||||
to:@return
|
||||
|
||||
DOMINATORS
|
||||
@ -1601,10 +1567,9 @@ VARIABLE REGISTER WEIGHTS
|
||||
(byte) main::i#1 16.5
|
||||
(byte) main::i#2 18.333333333333332
|
||||
(void()) plot((byte) plot::x)
|
||||
(byte~) plot::$1 4.0
|
||||
(byte~) plot::$2 4.0
|
||||
(byte~) plot::$0 4.0
|
||||
(byte) plot::idx
|
||||
(byte) plot::idx#0 2.0
|
||||
(byte) plot::idx#0 3.0
|
||||
(byte) plot::x
|
||||
(byte) plot::x#1 202.0
|
||||
(byte) plot::x#2 103.0
|
||||
@ -1615,21 +1580,18 @@ Initial phi equivalence classes
|
||||
[ line::x#2 line::x#1 ]
|
||||
[ plot::x#2 plot::x#1 ]
|
||||
Added variable plot::idx#0 to zero page equivalence class [ plot::idx#0 ]
|
||||
Added variable plot::$1 to zero page equivalence class [ plot::$1 ]
|
||||
Added variable plot::$2 to zero page equivalence class [ plot::$2 ]
|
||||
Added variable plot::$0 to zero page equivalence class [ plot::$0 ]
|
||||
Complete equivalence classes
|
||||
[ main::i#2 main::i#1 ]
|
||||
[ line::x#2 line::x#1 ]
|
||||
[ plot::x#2 plot::x#1 ]
|
||||
[ plot::idx#0 ]
|
||||
[ plot::$1 ]
|
||||
[ plot::$2 ]
|
||||
[ plot::$0 ]
|
||||
Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
|
||||
Allocated zp ZP_BYTE:3 [ line::x#2 line::x#1 ]
|
||||
Allocated zp ZP_BYTE:4 [ plot::x#2 plot::x#1 ]
|
||||
Allocated zp ZP_BYTE:5 [ plot::idx#0 ]
|
||||
Allocated zp ZP_BYTE:6 [ plot::$1 ]
|
||||
Allocated zp ZP_BYTE:7 [ plot::$2 ]
|
||||
Allocated zp ZP_BYTE:6 [ plot::$0 ]
|
||||
INITIAL ASM
|
||||
//SEG0 Basic Upstart
|
||||
.pc = $801 "Basic"
|
||||
@ -1762,56 +1724,54 @@ line: {
|
||||
}
|
||||
//SEG47 plot
|
||||
plot: {
|
||||
.label _1 = 6
|
||||
.label _2 = 7
|
||||
.label _0 = 6
|
||||
.label x = 4
|
||||
.label idx = 5
|
||||
//SEG48 [24] (byte) plot::idx#0 ← (const byte[]) plots#0 *idx (byte) plot::x#2 [ plot::idx#0 ] ( main:2::line:11::plot:17 [ line::x#2 plot::idx#0 ] main:2::line:11::plot:22 [ plot::idx#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2
|
||||
//SEG48 [24] (byte) plot::idx#0 ← *((const byte[]) plots#0 + (byte) plot::x#2) [ plot::idx#0 ] ( main:2::line:11::plot:17 [ line::x#2 plot::idx#0 ] main:2::line:11::plot:22 [ plot::idx#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2
|
||||
ldx x
|
||||
lda plots,x
|
||||
sta idx
|
||||
//SEG49 [25] (byte~) plot::$1 ← (const byte*) SCREEN#0 *idx (byte) plot::idx#0 [ plot::idx#0 plot::$1 ] ( main:2::line:11::plot:17 [ line::x#2 plot::idx#0 plot::$1 ] main:2::line:11::plot:22 [ plot::idx#0 plot::$1 ] ) -- vbuz1=pbuc1_derefidx_vbuz2
|
||||
//SEG49 [25] (byte~) plot::$0 ← *((const byte*) SCREEN#0 + (byte) plot::idx#0) + (byte/signed byte/word/signed word) 1 [ plot::idx#0 plot::$0 ] ( main:2::line:11::plot:17 [ line::x#2 plot::idx#0 plot::$0 ] main:2::line:11::plot:22 [ plot::idx#0 plot::$0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2_plus_1
|
||||
ldx idx
|
||||
lda SCREEN,x
|
||||
sta _1
|
||||
//SEG50 [26] (byte~) plot::$2 ← (byte~) plot::$1 + (byte/signed byte/word/signed word) 1 [ plot::idx#0 plot::$2 ] ( main:2::line:11::plot:17 [ line::x#2 plot::idx#0 plot::$2 ] main:2::line:11::plot:22 [ plot::idx#0 plot::$2 ] ) -- vbuz1=vbuz2_plus_1
|
||||
lda _1
|
||||
clc
|
||||
adc #1
|
||||
sta _2
|
||||
//SEG51 [27] *((const byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte~) plot::$2 [ ] ( main:2::line:11::plot:17 [ line::x#2 ] main:2::line:11::plot:22 [ ] ) -- pbuc1_derefidx_vbuz1=vbuz2
|
||||
lda _2
|
||||
sta _0
|
||||
//SEG50 [26] *((const byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte~) plot::$0 [ ] ( main:2::line:11::plot:17 [ line::x#2 ] main:2::line:11::plot:22 [ ] ) -- pbuc1_derefidx_vbuz1=vbuz2
|
||||
lda _0
|
||||
ldx idx
|
||||
sta SCREEN,x
|
||||
jmp breturn
|
||||
//SEG52 plot::@return
|
||||
//SEG51 plot::@return
|
||||
breturn:
|
||||
//SEG53 [28] return [ ] ( main:2::line:11::plot:17 [ line::x#2 ] main:2::line:11::plot:22 [ ] )
|
||||
//SEG52 [27] return [ ] ( main:2::line:11::plot:17 [ line::x#2 ] main:2::line:11::plot:22 [ ] )
|
||||
rts
|
||||
}
|
||||
|
||||
REGISTER UPLIFT POTENTIAL REGISTERS
|
||||
Equivalence Class zp ZP_BYTE:6 [ plot::$1 ] has ALU potential.
|
||||
Statement [7] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte/signed byte/word/signed word) 0 [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a
|
||||
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
|
||||
Statement [14] if((const byte) line::x0#0>=(const byte) line::x1#0) goto line::@1 [ ] ( main:2::line:11 [ ] ) always clobbers reg byte a
|
||||
Statement [25] (byte~) plot::$0 ← *((const byte*) SCREEN#0 + (byte) plot::idx#0) + (byte/signed byte/word/signed word) 1 [ plot::idx#0 plot::$0 ] ( main:2::line:11::plot:17 [ line::x#2 plot::idx#0 plot::$0 ] main:2::line:11::plot:22 [ plot::idx#0 plot::$0 ] ) always clobbers reg byte a
|
||||
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ line::x#2 line::x#1 ]
|
||||
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ plot::idx#0 ]
|
||||
Statement [6] *((const byte[]) plots#0 + (byte) main::i#2) ← (byte) main::i#2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a
|
||||
Statement [7] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte/signed byte/word/signed word) 0 [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a
|
||||
Statement [14] if((const byte) line::x0#0>=(const byte) line::x1#0) goto line::@1 [ ] ( main:2::line:11 [ ] ) always clobbers reg byte a
|
||||
Statement [25] (byte~) plot::$0 ← *((const byte*) SCREEN#0 + (byte) plot::idx#0) + (byte/signed byte/word/signed word) 1 [ plot::idx#0 plot::$0 ] ( main:2::line:11::plot:17 [ line::x#2 plot::idx#0 plot::$0 ] main:2::line:11::plot:22 [ plot::idx#0 plot::$0 ] ) always clobbers reg byte a
|
||||
Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:3 [ line::x#2 line::x#1 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:3 [ line::x#2 line::x#1 ] : zp ZP_BYTE:3 , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:4 [ plot::x#2 plot::x#1 ] : zp ZP_BYTE:4 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:5 [ plot::idx#0 ] : zp ZP_BYTE:5 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:6 [ plot::$1 ] : zp ZP_BYTE:6 , reg byte a , reg byte x , reg byte y , reg byte alu ,
|
||||
Potential registers zp ZP_BYTE:7 [ plot::$2 ] : zp ZP_BYTE:7 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:5 [ plot::idx#0 ] : zp ZP_BYTE:5 , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:6 [ plot::$0 ] : zp ZP_BYTE:6 , reg byte a , reg byte x , reg byte y ,
|
||||
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [plot] 305: zp ZP_BYTE:4 [ plot::x#2 plot::x#1 ] 4: zp ZP_BYTE:6 [ plot::$1 ] 4: zp ZP_BYTE:7 [ plot::$2 ] 2: zp ZP_BYTE:5 [ plot::idx#0 ]
|
||||
Uplift Scope [plot] 305: zp ZP_BYTE:4 [ plot::x#2 plot::x#1 ] 4: zp ZP_BYTE:6 [ plot::$0 ] 3: zp ZP_BYTE:5 [ plot::idx#0 ]
|
||||
Uplift Scope [line] 252.5: zp ZP_BYTE:3 [ line::x#2 line::x#1 ]
|
||||
Uplift Scope [main] 34.83: zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
|
||||
Uplift Scope []
|
||||
|
||||
Uplifting [plot] best 3894 combination reg byte y [ plot::x#2 plot::x#1 ] reg byte a [ plot::$1 ] reg byte a [ plot::$2 ] reg byte x [ plot::idx#0 ]
|
||||
Uplifting [plot] best 3894 combination reg byte y [ plot::x#2 plot::x#1 ] reg byte a [ plot::$0 ] reg byte x [ plot::idx#0 ]
|
||||
Uplifting [line] best 3894 combination zp ZP_BYTE:3 [ line::x#2 line::x#1 ]
|
||||
Uplifting [main] best 3744 combination reg byte x [ main::i#2 main::i#1 ]
|
||||
Uplifting [] best 3744 combination
|
||||
@ -1944,19 +1904,18 @@ line: {
|
||||
}
|
||||
//SEG47 plot
|
||||
plot: {
|
||||
//SEG48 [24] (byte) plot::idx#0 ← (const byte[]) plots#0 *idx (byte) plot::x#2 [ plot::idx#0 ] ( main:2::line:11::plot:17 [ line::x#2 plot::idx#0 ] main:2::line:11::plot:22 [ plot::idx#0 ] ) -- vbuxx=pbuc1_derefidx_vbuyy
|
||||
//SEG48 [24] (byte) plot::idx#0 ← *((const byte[]) plots#0 + (byte) plot::x#2) [ plot::idx#0 ] ( main:2::line:11::plot:17 [ line::x#2 plot::idx#0 ] main:2::line:11::plot:22 [ plot::idx#0 ] ) -- vbuxx=pbuc1_derefidx_vbuyy
|
||||
ldx plots,y
|
||||
//SEG49 [25] (byte~) plot::$1 ← (const byte*) SCREEN#0 *idx (byte) plot::idx#0 [ plot::idx#0 plot::$1 ] ( main:2::line:11::plot:17 [ line::x#2 plot::idx#0 plot::$1 ] main:2::line:11::plot:22 [ plot::idx#0 plot::$1 ] ) -- vbuaa=pbuc1_derefidx_vbuxx
|
||||
//SEG49 [25] (byte~) plot::$0 ← *((const byte*) SCREEN#0 + (byte) plot::idx#0) + (byte/signed byte/word/signed word) 1 [ plot::idx#0 plot::$0 ] ( main:2::line:11::plot:17 [ line::x#2 plot::idx#0 plot::$0 ] main:2::line:11::plot:22 [ plot::idx#0 plot::$0 ] ) -- vbuaa=pbuc1_derefidx_vbuxx_plus_1
|
||||
lda SCREEN,x
|
||||
//SEG50 [26] (byte~) plot::$2 ← (byte~) plot::$1 + (byte/signed byte/word/signed word) 1 [ plot::idx#0 plot::$2 ] ( main:2::line:11::plot:17 [ line::x#2 plot::idx#0 plot::$2 ] main:2::line:11::plot:22 [ plot::idx#0 plot::$2 ] ) -- vbuaa=vbuaa_plus_1
|
||||
clc
|
||||
adc #1
|
||||
//SEG51 [27] *((const byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte~) plot::$2 [ ] ( main:2::line:11::plot:17 [ line::x#2 ] main:2::line:11::plot:22 [ ] ) -- pbuc1_derefidx_vbuxx=vbuaa
|
||||
//SEG50 [26] *((const byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte~) plot::$0 [ ] ( main:2::line:11::plot:17 [ line::x#2 ] main:2::line:11::plot:22 [ ] ) -- pbuc1_derefidx_vbuxx=vbuaa
|
||||
sta SCREEN,x
|
||||
jmp breturn
|
||||
//SEG52 plot::@return
|
||||
//SEG51 plot::@return
|
||||
breturn:
|
||||
//SEG53 [28] return [ ] ( main:2::line:11::plot:17 [ line::x#2 ] main:2::line:11::plot:22 [ ] )
|
||||
//SEG52 [27] return [ ] ( main:2::line:11::plot:17 [ line::x#2 ] main:2::line:11::plot:22 [ ] )
|
||||
rts
|
||||
}
|
||||
|
||||
@ -2034,11 +1993,10 @@ FINAL SYMBOL TABLE
|
||||
(byte) main::i#1 reg byte x 16.5
|
||||
(byte) main::i#2 reg byte x 18.333333333333332
|
||||
(void()) plot((byte) plot::x)
|
||||
(byte~) plot::$1 reg byte a 4.0
|
||||
(byte~) plot::$2 reg byte a 4.0
|
||||
(byte~) plot::$0 reg byte a 4.0
|
||||
(label) plot::@return
|
||||
(byte) plot::idx
|
||||
(byte) plot::idx#0 reg byte x 2.0
|
||||
(byte) plot::idx#0 reg byte x 3.0
|
||||
(byte) plot::x
|
||||
(byte) plot::x#1 reg byte y 202.0
|
||||
(byte) plot::x#2 reg byte y 103.0
|
||||
@ -2049,8 +2007,7 @@ reg byte x [ main::i#2 main::i#1 ]
|
||||
zp ZP_BYTE:2 [ line::x#2 line::x#1 ]
|
||||
reg byte y [ plot::x#2 plot::x#1 ]
|
||||
reg byte x [ plot::idx#0 ]
|
||||
reg byte a [ plot::$1 ]
|
||||
reg byte a [ plot::$2 ]
|
||||
reg byte a [ plot::$0 ]
|
||||
|
||||
FINAL CODE
|
||||
//SEG0 Basic Upstart
|
||||
@ -2145,17 +2102,16 @@ line: {
|
||||
}
|
||||
//SEG47 plot
|
||||
plot: {
|
||||
//SEG48 [24] (byte) plot::idx#0 ← (const byte[]) plots#0 *idx (byte) plot::x#2 [ plot::idx#0 ] ( main:2::line:11::plot:17 [ line::x#2 plot::idx#0 ] main:2::line:11::plot:22 [ plot::idx#0 ] ) -- vbuxx=pbuc1_derefidx_vbuyy
|
||||
//SEG48 [24] (byte) plot::idx#0 ← *((const byte[]) plots#0 + (byte) plot::x#2) [ plot::idx#0 ] ( main:2::line:11::plot:17 [ line::x#2 plot::idx#0 ] main:2::line:11::plot:22 [ plot::idx#0 ] ) -- vbuxx=pbuc1_derefidx_vbuyy
|
||||
ldx plots,y
|
||||
//SEG49 [25] (byte~) plot::$1 ← (const byte*) SCREEN#0 *idx (byte) plot::idx#0 [ plot::idx#0 plot::$1 ] ( main:2::line:11::plot:17 [ line::x#2 plot::idx#0 plot::$1 ] main:2::line:11::plot:22 [ plot::idx#0 plot::$1 ] ) -- vbuaa=pbuc1_derefidx_vbuxx
|
||||
//SEG49 [25] (byte~) plot::$0 ← *((const byte*) SCREEN#0 + (byte) plot::idx#0) + (byte/signed byte/word/signed word) 1 [ plot::idx#0 plot::$0 ] ( main:2::line:11::plot:17 [ line::x#2 plot::idx#0 plot::$0 ] main:2::line:11::plot:22 [ plot::idx#0 plot::$0 ] ) -- vbuaa=pbuc1_derefidx_vbuxx_plus_1
|
||||
lda SCREEN,x
|
||||
//SEG50 [26] (byte~) plot::$2 ← (byte~) plot::$1 + (byte/signed byte/word/signed word) 1 [ plot::idx#0 plot::$2 ] ( main:2::line:11::plot:17 [ line::x#2 plot::idx#0 plot::$2 ] main:2::line:11::plot:22 [ plot::idx#0 plot::$2 ] ) -- vbuaa=vbuaa_plus_1
|
||||
clc
|
||||
adc #1
|
||||
//SEG51 [27] *((const byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte~) plot::$2 [ ] ( main:2::line:11::plot:17 [ line::x#2 ] main:2::line:11::plot:22 [ ] ) -- pbuc1_derefidx_vbuxx=vbuaa
|
||||
//SEG50 [26] *((const byte*) SCREEN#0 + (byte) plot::idx#0) ← (byte~) plot::$0 [ ] ( main:2::line:11::plot:17 [ line::x#2 ] main:2::line:11::plot:22 [ ] ) -- pbuc1_derefidx_vbuxx=vbuaa
|
||||
sta SCREEN,x
|
||||
//SEG52 plot::@return
|
||||
//SEG53 [28] return [ ] ( main:2::line:11::plot:17 [ line::x#2 ] main:2::line:11::plot:22 [ ] )
|
||||
//SEG51 plot::@return
|
||||
//SEG52 [27] return [ ] ( main:2::line:11::plot:17 [ line::x#2 ] main:2::line:11::plot:22 [ ] )
|
||||
rts
|
||||
}
|
||||
|
||||
|
@ -24,11 +24,10 @@
|
||||
(byte) main::i#1 reg byte x 16.5
|
||||
(byte) main::i#2 reg byte x 18.333333333333332
|
||||
(void()) plot((byte) plot::x)
|
||||
(byte~) plot::$1 reg byte a 4.0
|
||||
(byte~) plot::$2 reg byte a 4.0
|
||||
(byte~) plot::$0 reg byte a 4.0
|
||||
(label) plot::@return
|
||||
(byte) plot::idx
|
||||
(byte) plot::idx#0 reg byte x 2.0
|
||||
(byte) plot::idx#0 reg byte x 3.0
|
||||
(byte) plot::x
|
||||
(byte) plot::x#1 reg byte y 202.0
|
||||
(byte) plot::x#2 reg byte y 103.0
|
||||
@ -39,5 +38,4 @@ reg byte x [ main::i#2 main::i#1 ]
|
||||
zp ZP_BYTE:2 [ line::x#2 line::x#1 ]
|
||||
reg byte y [ plot::x#2 plot::x#1 ]
|
||||
reg byte x [ plot::idx#0 ]
|
||||
reg byte a [ plot::$1 ]
|
||||
reg byte a [ plot::$2 ]
|
||||
reg byte a [ plot::$0 ]
|
||||
|
259
src/main/java/dk/camelot64/kickc/test/ref/constants.asm
Normal file
259
src/main/java/dk/camelot64/kickc/test/ref/constants.asm
Normal file
@ -0,0 +1,259 @@
|
||||
.pc = $801 "Basic"
|
||||
:BasicUpstart(main)
|
||||
.pc = $80d "Program"
|
||||
.const BGCOL = $d021
|
||||
.const GREEN = 5
|
||||
.const RED = 2
|
||||
.label char_cursor = 2
|
||||
.label line_cursor = 7
|
||||
jsr main
|
||||
main: {
|
||||
jsr print_cls
|
||||
lda #GREEN
|
||||
sta BGCOL
|
||||
jsr test_bytes
|
||||
jsr test_sbytes
|
||||
rts
|
||||
}
|
||||
test_sbytes: {
|
||||
.const bb = 0
|
||||
.const bc = bb+2
|
||||
.const bf = -$7f-$7f
|
||||
.const bd = bc-4
|
||||
.const be = -bd
|
||||
lda #0
|
||||
sta assert_sbyte.c
|
||||
lda #bb
|
||||
tax
|
||||
lda #<msg
|
||||
sta assert_sbyte.msg
|
||||
lda #>msg
|
||||
sta assert_sbyte.msg+1
|
||||
jsr assert_sbyte
|
||||
lda #2
|
||||
sta assert_sbyte.c
|
||||
lda #bc
|
||||
tax
|
||||
lda #<msg1
|
||||
sta assert_sbyte.msg
|
||||
lda #>msg1
|
||||
sta assert_sbyte.msg+1
|
||||
jsr assert_sbyte
|
||||
lda #-2
|
||||
sta assert_sbyte.c
|
||||
lda #bd
|
||||
tax
|
||||
lda #<msg2
|
||||
sta assert_sbyte.msg
|
||||
lda #>msg2
|
||||
sta assert_sbyte.msg+1
|
||||
jsr assert_sbyte
|
||||
lda #2
|
||||
sta assert_sbyte.c
|
||||
lda #be
|
||||
tax
|
||||
lda #<msg3
|
||||
sta assert_sbyte.msg
|
||||
lda #>msg3
|
||||
sta assert_sbyte.msg+1
|
||||
jsr assert_sbyte
|
||||
lda #2
|
||||
sta assert_sbyte.c
|
||||
lda #bf
|
||||
tax
|
||||
lda #<msg4
|
||||
sta assert_sbyte.msg
|
||||
lda #>msg4
|
||||
sta assert_sbyte.msg+1
|
||||
jsr assert_sbyte
|
||||
rts
|
||||
msg: .text "0=0@"
|
||||
msg1: .text "0+2=2@"
|
||||
msg2: .text "0+2-4=-2@"
|
||||
msg3: .text "-(0+2-4)=2@"
|
||||
msg4: .text "-127-127=2@"
|
||||
}
|
||||
assert_sbyte: {
|
||||
.label msg = 2
|
||||
.label c = 4
|
||||
lda msg
|
||||
sta print_str.str
|
||||
lda msg+1
|
||||
sta print_str.str+1
|
||||
lda line_cursor
|
||||
sta char_cursor
|
||||
lda line_cursor+1
|
||||
sta char_cursor+1
|
||||
jsr print_str
|
||||
lda #<str
|
||||
sta print_str.str
|
||||
lda #>str
|
||||
sta print_str.str+1
|
||||
jsr print_str
|
||||
cpx c
|
||||
beq b1
|
||||
lda #RED
|
||||
sta BGCOL
|
||||
lda #<str2
|
||||
sta print_str.str
|
||||
lda #>str2
|
||||
sta print_str.str+1
|
||||
jsr print_str
|
||||
b2:
|
||||
jsr print_ln
|
||||
rts
|
||||
b1:
|
||||
lda #<str1
|
||||
sta print_str.str
|
||||
lda #>str1
|
||||
sta print_str.str+1
|
||||
jsr print_str
|
||||
jmp b2
|
||||
str: .text " @"
|
||||
str1: .text "ok@"
|
||||
str2: .text "fail!@"
|
||||
}
|
||||
print_str: {
|
||||
.label str = 5
|
||||
b1:
|
||||
ldy #0
|
||||
lda (str),y
|
||||
cmp #'@'
|
||||
bne b2
|
||||
rts
|
||||
b2:
|
||||
ldy #0
|
||||
lda (str),y
|
||||
sta (char_cursor),y
|
||||
inc char_cursor
|
||||
bne !+
|
||||
inc char_cursor+1
|
||||
!:
|
||||
inc str
|
||||
bne !+
|
||||
inc str+1
|
||||
!:
|
||||
jmp b1
|
||||
}
|
||||
print_ln: {
|
||||
b1:
|
||||
lda line_cursor
|
||||
clc
|
||||
adc #$28
|
||||
sta line_cursor
|
||||
bcc !+
|
||||
inc line_cursor+1
|
||||
!:
|
||||
lda line_cursor+1
|
||||
cmp char_cursor+1
|
||||
bcc b1
|
||||
bne !+
|
||||
lda line_cursor
|
||||
cmp char_cursor
|
||||
bcc b1
|
||||
!:
|
||||
rts
|
||||
}
|
||||
test_bytes: {
|
||||
.const bb = 0
|
||||
.const bc = bb+2
|
||||
.const bd = bc-4
|
||||
lda #<$400
|
||||
sta line_cursor
|
||||
lda #>$400
|
||||
sta line_cursor+1
|
||||
lda #0
|
||||
sta assert_byte.c
|
||||
ldx #bb
|
||||
lda #<$400
|
||||
sta char_cursor
|
||||
lda #>$400
|
||||
sta char_cursor+1
|
||||
lda #<msg
|
||||
sta assert_byte.msg
|
||||
lda #>msg
|
||||
sta assert_byte.msg+1
|
||||
jsr assert_byte
|
||||
lda line_cursor
|
||||
sta char_cursor
|
||||
lda line_cursor+1
|
||||
sta char_cursor+1
|
||||
lda #2
|
||||
sta assert_byte.c
|
||||
ldx #bc
|
||||
lda #<msg1
|
||||
sta assert_byte.msg
|
||||
lda #>msg1
|
||||
sta assert_byte.msg+1
|
||||
jsr assert_byte
|
||||
lda line_cursor
|
||||
sta char_cursor
|
||||
lda line_cursor+1
|
||||
sta char_cursor+1
|
||||
lda #$fe
|
||||
sta assert_byte.c
|
||||
ldx #bd
|
||||
lda #<msg2
|
||||
sta assert_byte.msg
|
||||
lda #>msg2
|
||||
sta assert_byte.msg+1
|
||||
jsr assert_byte
|
||||
rts
|
||||
msg: .text "0=0@"
|
||||
msg1: .text "0+2=2@"
|
||||
msg2: .text "0+2-4=254@"
|
||||
}
|
||||
assert_byte: {
|
||||
.label msg = 5
|
||||
.label c = 4
|
||||
jsr print_str
|
||||
lda #<str
|
||||
sta print_str.str
|
||||
lda #>str
|
||||
sta print_str.str+1
|
||||
jsr print_str
|
||||
cpx c
|
||||
beq b1
|
||||
lda #RED
|
||||
sta BGCOL
|
||||
lda #<str2
|
||||
sta print_str.str
|
||||
lda #>str2
|
||||
sta print_str.str+1
|
||||
jsr print_str
|
||||
b2:
|
||||
jsr print_ln
|
||||
rts
|
||||
b1:
|
||||
lda #<str1
|
||||
sta print_str.str
|
||||
lda #>str1
|
||||
sta print_str.str+1
|
||||
jsr print_str
|
||||
jmp b2
|
||||
str: .text " @"
|
||||
str1: .text "ok@"
|
||||
str2: .text "fail!@"
|
||||
}
|
||||
print_cls: {
|
||||
.label sc = 2
|
||||
lda #<$400
|
||||
sta sc
|
||||
lda #>$400
|
||||
sta sc+1
|
||||
b1:
|
||||
ldy #0
|
||||
lda #' '
|
||||
sta (sc),y
|
||||
inc sc
|
||||
bne !+
|
||||
inc sc+1
|
||||
!:
|
||||
lda sc+1
|
||||
cmp #>$400+$3e8
|
||||
bne b1
|
||||
lda sc
|
||||
cmp #<$400+$3e8
|
||||
bne b1
|
||||
rts
|
||||
}
|
163
src/main/java/dk/camelot64/kickc/test/ref/constants.cfg
Normal file
163
src/main/java/dk/camelot64/kickc/test/ref/constants.cfg
Normal file
@ -0,0 +1,163 @@
|
||||
@begin: scope:[] from
|
||||
[0] phi() [ ] ( )
|
||||
to:@11
|
||||
@11: scope:[] from @begin
|
||||
[1] phi() [ ] ( )
|
||||
[2] call main param-assignment [ ] ( )
|
||||
to:@end
|
||||
@end: scope:[] from @11
|
||||
[3] phi() [ ] ( )
|
||||
main: scope:[main] from @11
|
||||
[4] phi() [ ] ( main:2 [ ] )
|
||||
[5] call print_cls param-assignment [ ] ( main:2 [ ] )
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main
|
||||
[6] *((const byte*) BGCOL#0) ← (const byte) GREEN#0 [ ] ( main:2 [ ] )
|
||||
[7] call test_bytes param-assignment [ line_cursor#1 ] ( main:2 [ line_cursor#1 ] )
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1
|
||||
[8] phi() [ line_cursor#1 ] ( main:2 [ line_cursor#1 ] )
|
||||
[9] call test_sbytes param-assignment [ ] ( main:2 [ ] )
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@2
|
||||
[10] return [ ] ( main:2 [ ] )
|
||||
to:@return
|
||||
test_sbytes: scope:[test_sbytes] from main::@2
|
||||
[11] phi() [ line_cursor#1 ] ( main:2::test_sbytes:9 [ line_cursor#1 ] )
|
||||
[12] call assert_sbyte param-assignment [ line_cursor#1 ] ( main:2::test_sbytes:9 [ line_cursor#1 ] )
|
||||
to:test_sbytes::@1
|
||||
test_sbytes::@1: scope:[test_sbytes] from test_sbytes
|
||||
[13] phi() [ line_cursor#1 ] ( main:2::test_sbytes:9 [ line_cursor#1 ] )
|
||||
[14] call assert_sbyte param-assignment [ line_cursor#1 ] ( main:2::test_sbytes:9 [ line_cursor#1 ] )
|
||||
to:test_sbytes::@2
|
||||
test_sbytes::@2: scope:[test_sbytes] from test_sbytes::@1
|
||||
[15] phi() [ line_cursor#1 ] ( main:2::test_sbytes:9 [ line_cursor#1 ] )
|
||||
[16] call assert_sbyte param-assignment [ line_cursor#1 ] ( main:2::test_sbytes:9 [ line_cursor#1 ] )
|
||||
to:test_sbytes::@3
|
||||
test_sbytes::@3: scope:[test_sbytes] from test_sbytes::@2
|
||||
[17] phi() [ line_cursor#1 ] ( main:2::test_sbytes:9 [ line_cursor#1 ] )
|
||||
[18] call assert_sbyte param-assignment [ line_cursor#1 ] ( main:2::test_sbytes:9 [ line_cursor#1 ] )
|
||||
to:test_sbytes::@4
|
||||
test_sbytes::@4: scope:[test_sbytes] from test_sbytes::@3
|
||||
[19] phi() [ line_cursor#1 ] ( main:2::test_sbytes:9 [ line_cursor#1 ] )
|
||||
[20] call assert_sbyte param-assignment [ ] ( main:2::test_sbytes:9 [ ] )
|
||||
to:test_sbytes::@return
|
||||
test_sbytes::@return: scope:[test_sbytes] from test_sbytes::@4
|
||||
[21] return [ ] ( main:2::test_sbytes:9 [ ] )
|
||||
to:@return
|
||||
assert_sbyte: scope:[assert_sbyte] from test_sbytes test_sbytes::@1 test_sbytes::@2 test_sbytes::@3 test_sbytes::@4
|
||||
[22] (signed byte) assert_sbyte::c#5 ← phi( test_sbytes/(byte/signed byte/word/signed word) 0 test_sbytes::@1/(byte/signed byte/word/signed word) 2 test_sbytes::@2/-(byte/signed byte/word/signed word) 2 test_sbytes::@3/(byte/signed byte/word/signed word) 2 test_sbytes::@4/(byte/signed byte/word/signed word) 2 ) [ assert_sbyte::msg#5 assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 ] ( main:2::test_sbytes:9::assert_sbyte:12 [ assert_sbyte::msg#5 assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:14 [ assert_sbyte::msg#5 assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:16 [ assert_sbyte::msg#5 assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:18 [ assert_sbyte::msg#5 assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:20 [ assert_sbyte::msg#5 assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 ] )
|
||||
[22] (signed byte) assert_sbyte::b#5 ← phi( test_sbytes/(const signed byte) test_sbytes::bb#0 test_sbytes::@1/(const signed byte) test_sbytes::bc#0 test_sbytes::@2/(const signed byte) test_sbytes::bd#0 test_sbytes::@3/(const signed byte) test_sbytes::be#0 test_sbytes::@4/(const signed byte) test_sbytes::bf#0 ) [ assert_sbyte::msg#5 assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 ] ( main:2::test_sbytes:9::assert_sbyte:12 [ assert_sbyte::msg#5 assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:14 [ assert_sbyte::msg#5 assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:16 [ assert_sbyte::msg#5 assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:18 [ assert_sbyte::msg#5 assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:20 [ assert_sbyte::msg#5 assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 ] )
|
||||
[22] (byte*) assert_sbyte::msg#5 ← phi( test_sbytes/(const byte[]) test_sbytes::msg test_sbytes::@1/(const byte[]) test_sbytes::msg1 test_sbytes::@2/(const byte[]) test_sbytes::msg2 test_sbytes::@3/(const byte[]) test_sbytes::msg3 test_sbytes::@4/(const byte[]) test_sbytes::msg4 ) [ assert_sbyte::msg#5 assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 ] ( main:2::test_sbytes:9::assert_sbyte:12 [ assert_sbyte::msg#5 assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:14 [ assert_sbyte::msg#5 assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:16 [ assert_sbyte::msg#5 assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:18 [ assert_sbyte::msg#5 assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:20 [ assert_sbyte::msg#5 assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 ] )
|
||||
[23] (byte*) print_str::str#5 ← (byte*) assert_sbyte::msg#5 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 line_cursor#1 ] ( main:2::test_sbytes:9::assert_sbyte:12 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:14 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:16 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:18 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:20 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 line_cursor#1 ] )
|
||||
[24] (byte*~) char_cursor#82 ← (byte*) line_cursor#1 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 char_cursor#82 line_cursor#1 ] ( main:2::test_sbytes:9::assert_sbyte:12 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 char_cursor#82 line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:14 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 char_cursor#82 line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:16 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 char_cursor#82 line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:18 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 char_cursor#82 line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:20 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 char_cursor#82 line_cursor#1 ] )
|
||||
[25] call print_str param-assignment [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 ] ( main:2::test_sbytes:9::assert_sbyte:12 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:14 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:16 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:18 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:20 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 ] )
|
||||
to:assert_sbyte::@5
|
||||
assert_sbyte::@5: scope:[assert_sbyte] from assert_sbyte
|
||||
[26] phi() [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 ] ( main:2::test_sbytes:9::assert_sbyte:12 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:14 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:16 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:18 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:20 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 ] )
|
||||
[27] call print_str param-assignment [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 ] ( main:2::test_sbytes:9::assert_sbyte:12 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:14 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:16 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:18 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:20 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 ] )
|
||||
to:assert_sbyte::@6
|
||||
assert_sbyte::@6: scope:[assert_sbyte] from assert_sbyte::@5
|
||||
[28] if((signed byte) assert_sbyte::b#5==(signed byte) assert_sbyte::c#5) goto assert_sbyte::@1 [ line_cursor#1 char_cursor#2 ] ( main:2::test_sbytes:9::assert_sbyte:12 [ line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:14 [ line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:16 [ line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:18 [ line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:20 [ line_cursor#1 char_cursor#2 ] )
|
||||
to:assert_sbyte::@3
|
||||
assert_sbyte::@3: scope:[assert_sbyte] from assert_sbyte::@6
|
||||
[29] *((const byte*) BGCOL#0) ← (const byte) RED#0 [ line_cursor#1 char_cursor#2 ] ( main:2::test_sbytes:9::assert_sbyte:12 [ line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:14 [ line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:16 [ line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:18 [ line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:20 [ line_cursor#1 char_cursor#2 ] )
|
||||
[30] call print_str param-assignment [ line_cursor#1 char_cursor#2 ] ( main:2::test_sbytes:9::assert_sbyte:12 [ line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:14 [ line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:16 [ line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:18 [ line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:20 [ line_cursor#1 char_cursor#2 ] )
|
||||
to:assert_sbyte::@2
|
||||
assert_sbyte::@2: scope:[assert_sbyte] from assert_sbyte::@1 assert_sbyte::@3
|
||||
[31] phi() [ line_cursor#1 char_cursor#2 ] ( main:2::test_sbytes:9::assert_sbyte:12 [ line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:14 [ line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:16 [ line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:18 [ line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:20 [ line_cursor#1 char_cursor#2 ] )
|
||||
[32] call print_ln param-assignment [ line_cursor#1 ] ( main:2::test_sbytes:9::assert_sbyte:12 [ line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:14 [ line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:16 [ line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:18 [ line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:20 [ line_cursor#1 ] )
|
||||
to:assert_sbyte::@return
|
||||
assert_sbyte::@return: scope:[assert_sbyte] from assert_sbyte::@2
|
||||
[33] return [ line_cursor#1 ] ( main:2::test_sbytes:9::assert_sbyte:12 [ line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:14 [ line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:16 [ line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:18 [ line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:20 [ line_cursor#1 ] )
|
||||
to:@return
|
||||
assert_sbyte::@1: scope:[assert_sbyte] from assert_sbyte::@6
|
||||
[34] phi() [ line_cursor#1 char_cursor#2 ] ( main:2::test_sbytes:9::assert_sbyte:12 [ line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:14 [ line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:16 [ line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:18 [ line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:20 [ line_cursor#1 char_cursor#2 ] )
|
||||
[35] call print_str param-assignment [ line_cursor#1 char_cursor#2 ] ( main:2::test_sbytes:9::assert_sbyte:12 [ line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:14 [ line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:16 [ line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:18 [ line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:20 [ line_cursor#1 char_cursor#2 ] )
|
||||
to:assert_sbyte::@2
|
||||
print_str: scope:[print_str] from assert_byte assert_byte::@1 assert_byte::@3 assert_byte::@5 assert_sbyte assert_sbyte::@1 assert_sbyte::@3 assert_sbyte::@5
|
||||
[36] (byte*) char_cursor#75 ← phi( assert_byte/(byte*) char_cursor#65 assert_byte::@1/(byte*) char_cursor#2 assert_byte::@3/(byte*) char_cursor#2 assert_byte::@5/(byte*) char_cursor#2 assert_sbyte/(byte*~) char_cursor#82 assert_sbyte::@1/(byte*) char_cursor#2 assert_sbyte::@3/(byte*) char_cursor#2 assert_sbyte::@5/(byte*) char_cursor#2 ) [ print_str::str#11 char_cursor#75 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 print_str::str#11 char_cursor#75 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 print_str::str#11 char_cursor#75 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 print_str::str#11 char_cursor#75 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 print_str::str#11 char_cursor#75 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 print_str::str#11 char_cursor#75 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 print_str::str#11 char_cursor#75 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 print_str::str#11 char_cursor#75 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 print_str::str#11 char_cursor#75 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 print_str::str#11 char_cursor#75 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 print_str::str#11 char_cursor#75 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:30 [ line_cursor#1 print_str::str#11 char_cursor#75 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:30 [ line_cursor#1 print_str::str#11 char_cursor#75 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:30 [ line_cursor#1 print_str::str#11 char_cursor#75 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:30 [ line_cursor#1 print_str::str#11 char_cursor#75 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:30 [ line_cursor#1 print_str::str#11 char_cursor#75 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:35 [ line_cursor#1 print_str::str#11 char_cursor#75 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:35 [ line_cursor#1 print_str::str#11 char_cursor#75 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:35 [ line_cursor#1 print_str::str#11 char_cursor#75 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:35 [ line_cursor#1 print_str::str#11 char_cursor#75 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:35 [ line_cursor#1 print_str::str#11 char_cursor#75 ] main:2::test_bytes:7::assert_byte:49::print_str:57 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 print_str::str#11 char_cursor#75 ] main:2::test_bytes:7::assert_byte:51::print_str:57 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 print_str::str#11 char_cursor#75 ] main:2::test_bytes:7::assert_byte:53::print_str:57 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 print_str::str#11 char_cursor#75 ] main:2::test_bytes:7::assert_byte:49::print_str:59 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 print_str::str#11 char_cursor#75 ] main:2::test_bytes:7::assert_byte:51::print_str:59 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 print_str::str#11 char_cursor#75 ] main:2::test_bytes:7::assert_byte:53::print_str:59 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 print_str::str#11 char_cursor#75 ] main:2::test_bytes:7::assert_byte:49::print_str:62 [ line_cursor#45 print_str::str#11 char_cursor#75 ] main:2::test_bytes:7::assert_byte:51::print_str:62 [ line_cursor#45 print_str::str#11 char_cursor#75 ] main:2::test_bytes:7::assert_byte:53::print_str:62 [ line_cursor#45 print_str::str#11 char_cursor#75 ] main:2::test_bytes:7::assert_byte:49::print_str:67 [ line_cursor#45 print_str::str#11 char_cursor#75 ] main:2::test_bytes:7::assert_byte:51::print_str:67 [ line_cursor#45 print_str::str#11 char_cursor#75 ] main:2::test_bytes:7::assert_byte:53::print_str:67 [ line_cursor#45 print_str::str#11 char_cursor#75 ] )
|
||||
[36] (byte*) print_str::str#11 ← phi( assert_byte/(byte*) print_str::str#1 assert_byte::@1/(const byte[]) assert_byte::str1 assert_byte::@3/(const byte[]) assert_byte::str2 assert_byte::@5/(const byte[]) assert_byte::str assert_sbyte/(byte*) print_str::str#5 assert_sbyte::@1/(const byte[]) assert_sbyte::str1 assert_sbyte::@3/(const byte[]) assert_sbyte::str2 assert_sbyte::@5/(const byte[]) assert_sbyte::str ) [ print_str::str#11 char_cursor#75 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 print_str::str#11 char_cursor#75 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 print_str::str#11 char_cursor#75 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 print_str::str#11 char_cursor#75 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 print_str::str#11 char_cursor#75 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 print_str::str#11 char_cursor#75 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 print_str::str#11 char_cursor#75 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 print_str::str#11 char_cursor#75 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 print_str::str#11 char_cursor#75 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 print_str::str#11 char_cursor#75 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 print_str::str#11 char_cursor#75 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:30 [ line_cursor#1 print_str::str#11 char_cursor#75 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:30 [ line_cursor#1 print_str::str#11 char_cursor#75 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:30 [ line_cursor#1 print_str::str#11 char_cursor#75 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:30 [ line_cursor#1 print_str::str#11 char_cursor#75 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:30 [ line_cursor#1 print_str::str#11 char_cursor#75 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:35 [ line_cursor#1 print_str::str#11 char_cursor#75 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:35 [ line_cursor#1 print_str::str#11 char_cursor#75 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:35 [ line_cursor#1 print_str::str#11 char_cursor#75 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:35 [ line_cursor#1 print_str::str#11 char_cursor#75 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:35 [ line_cursor#1 print_str::str#11 char_cursor#75 ] main:2::test_bytes:7::assert_byte:49::print_str:57 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 print_str::str#11 char_cursor#75 ] main:2::test_bytes:7::assert_byte:51::print_str:57 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 print_str::str#11 char_cursor#75 ] main:2::test_bytes:7::assert_byte:53::print_str:57 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 print_str::str#11 char_cursor#75 ] main:2::test_bytes:7::assert_byte:49::print_str:59 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 print_str::str#11 char_cursor#75 ] main:2::test_bytes:7::assert_byte:51::print_str:59 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 print_str::str#11 char_cursor#75 ] main:2::test_bytes:7::assert_byte:53::print_str:59 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 print_str::str#11 char_cursor#75 ] main:2::test_bytes:7::assert_byte:49::print_str:62 [ line_cursor#45 print_str::str#11 char_cursor#75 ] main:2::test_bytes:7::assert_byte:51::print_str:62 [ line_cursor#45 print_str::str#11 char_cursor#75 ] main:2::test_bytes:7::assert_byte:53::print_str:62 [ line_cursor#45 print_str::str#11 char_cursor#75 ] main:2::test_bytes:7::assert_byte:49::print_str:67 [ line_cursor#45 print_str::str#11 char_cursor#75 ] main:2::test_bytes:7::assert_byte:51::print_str:67 [ line_cursor#45 print_str::str#11 char_cursor#75 ] main:2::test_bytes:7::assert_byte:53::print_str:67 [ line_cursor#45 print_str::str#11 char_cursor#75 ] )
|
||||
to:print_str::@1
|
||||
print_str::@1: scope:[print_str] from print_str print_str::@2
|
||||
[37] (byte*) char_cursor#2 ← phi( print_str/(byte*) char_cursor#75 print_str::@2/(byte*) char_cursor#1 ) [ char_cursor#2 print_str::str#10 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:30 [ line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:30 [ line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:30 [ line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:30 [ line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:30 [ line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:35 [ line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:35 [ line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:35 [ line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:35 [ line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:35 [ line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:57 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:57 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:57 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:59 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:59 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:59 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:62 [ line_cursor#45 char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:62 [ line_cursor#45 char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:62 [ line_cursor#45 char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:67 [ line_cursor#45 char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:67 [ line_cursor#45 char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:67 [ line_cursor#45 char_cursor#2 print_str::str#10 ] )
|
||||
[37] (byte*) print_str::str#10 ← phi( print_str/(byte*) print_str::str#11 print_str::@2/(byte*) print_str::str#0 ) [ char_cursor#2 print_str::str#10 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:30 [ line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:30 [ line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:30 [ line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:30 [ line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:30 [ line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:35 [ line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:35 [ line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:35 [ line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:35 [ line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:35 [ line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:57 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:57 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:57 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:59 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:59 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:59 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:62 [ line_cursor#45 char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:62 [ line_cursor#45 char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:62 [ line_cursor#45 char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:67 [ line_cursor#45 char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:67 [ line_cursor#45 char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:67 [ line_cursor#45 char_cursor#2 print_str::str#10 ] )
|
||||
[38] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 [ char_cursor#2 print_str::str#10 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:30 [ line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:30 [ line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:30 [ line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:30 [ line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:30 [ line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:35 [ line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:35 [ line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:35 [ line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:35 [ line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:35 [ line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:57 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:57 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:57 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:59 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:59 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:59 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:62 [ line_cursor#45 char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:62 [ line_cursor#45 char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:62 [ line_cursor#45 char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:67 [ line_cursor#45 char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:67 [ line_cursor#45 char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:67 [ line_cursor#45 char_cursor#2 print_str::str#10 ] )
|
||||
to:print_str::@return
|
||||
print_str::@return: scope:[print_str] from print_str::@1
|
||||
[39] return [ char_cursor#2 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:30 [ line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:30 [ line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:30 [ line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:30 [ line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:30 [ line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:35 [ line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:35 [ line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:35 [ line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:35 [ line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:35 [ line_cursor#1 char_cursor#2 ] main:2::test_bytes:7::assert_byte:49::print_str:57 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 char_cursor#2 ] main:2::test_bytes:7::assert_byte:51::print_str:57 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 char_cursor#2 ] main:2::test_bytes:7::assert_byte:53::print_str:57 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 char_cursor#2 ] main:2::test_bytes:7::assert_byte:49::print_str:59 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 char_cursor#2 ] main:2::test_bytes:7::assert_byte:51::print_str:59 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 char_cursor#2 ] main:2::test_bytes:7::assert_byte:53::print_str:59 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 char_cursor#2 ] main:2::test_bytes:7::assert_byte:49::print_str:62 [ line_cursor#45 char_cursor#2 ] main:2::test_bytes:7::assert_byte:51::print_str:62 [ line_cursor#45 char_cursor#2 ] main:2::test_bytes:7::assert_byte:53::print_str:62 [ line_cursor#45 char_cursor#2 ] main:2::test_bytes:7::assert_byte:49::print_str:67 [ line_cursor#45 char_cursor#2 ] main:2::test_bytes:7::assert_byte:51::print_str:67 [ line_cursor#45 char_cursor#2 ] main:2::test_bytes:7::assert_byte:53::print_str:67 [ line_cursor#45 char_cursor#2 ] )
|
||||
to:@return
|
||||
print_str::@2: scope:[print_str] from print_str::@1
|
||||
[40] *((byte*) char_cursor#2) ← *((byte*) print_str::str#10) [ char_cursor#2 print_str::str#10 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:30 [ line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:30 [ line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:30 [ line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:30 [ line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:30 [ line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:35 [ line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:35 [ line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:35 [ line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:35 [ line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:35 [ line_cursor#1 char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:57 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:57 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:57 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:59 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:59 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:59 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:62 [ line_cursor#45 char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:62 [ line_cursor#45 char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:62 [ line_cursor#45 char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:67 [ line_cursor#45 char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:67 [ line_cursor#45 char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:67 [ line_cursor#45 char_cursor#2 print_str::str#10 ] )
|
||||
[41] (byte*) char_cursor#1 ← ++ (byte*) char_cursor#2 [ print_str::str#10 char_cursor#1 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 print_str::str#10 char_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 print_str::str#10 char_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 print_str::str#10 char_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 print_str::str#10 char_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 print_str::str#10 char_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 print_str::str#10 char_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 print_str::str#10 char_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 print_str::str#10 char_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 print_str::str#10 char_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 print_str::str#10 char_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:30 [ line_cursor#1 print_str::str#10 char_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:30 [ line_cursor#1 print_str::str#10 char_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:30 [ line_cursor#1 print_str::str#10 char_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:30 [ line_cursor#1 print_str::str#10 char_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:30 [ line_cursor#1 print_str::str#10 char_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:35 [ line_cursor#1 print_str::str#10 char_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:35 [ line_cursor#1 print_str::str#10 char_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:35 [ line_cursor#1 print_str::str#10 char_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:35 [ line_cursor#1 print_str::str#10 char_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:35 [ line_cursor#1 print_str::str#10 char_cursor#1 ] main:2::test_bytes:7::assert_byte:49::print_str:57 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 print_str::str#10 char_cursor#1 ] main:2::test_bytes:7::assert_byte:51::print_str:57 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 print_str::str#10 char_cursor#1 ] main:2::test_bytes:7::assert_byte:53::print_str:57 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 print_str::str#10 char_cursor#1 ] main:2::test_bytes:7::assert_byte:49::print_str:59 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 print_str::str#10 char_cursor#1 ] main:2::test_bytes:7::assert_byte:51::print_str:59 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 print_str::str#10 char_cursor#1 ] main:2::test_bytes:7::assert_byte:53::print_str:59 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 print_str::str#10 char_cursor#1 ] main:2::test_bytes:7::assert_byte:49::print_str:62 [ line_cursor#45 print_str::str#10 char_cursor#1 ] main:2::test_bytes:7::assert_byte:51::print_str:62 [ line_cursor#45 print_str::str#10 char_cursor#1 ] main:2::test_bytes:7::assert_byte:53::print_str:62 [ line_cursor#45 print_str::str#10 char_cursor#1 ] main:2::test_bytes:7::assert_byte:49::print_str:67 [ line_cursor#45 print_str::str#10 char_cursor#1 ] main:2::test_bytes:7::assert_byte:51::print_str:67 [ line_cursor#45 print_str::str#10 char_cursor#1 ] main:2::test_bytes:7::assert_byte:53::print_str:67 [ line_cursor#45 print_str::str#10 char_cursor#1 ] )
|
||||
[42] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#10 [ print_str::str#0 char_cursor#1 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 print_str::str#0 char_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 print_str::str#0 char_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 print_str::str#0 char_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 print_str::str#0 char_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 print_str::str#0 char_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 print_str::str#0 char_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 print_str::str#0 char_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 print_str::str#0 char_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 print_str::str#0 char_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 line_cursor#1 print_str::str#0 char_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:30 [ line_cursor#1 print_str::str#0 char_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:30 [ line_cursor#1 print_str::str#0 char_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:30 [ line_cursor#1 print_str::str#0 char_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:30 [ line_cursor#1 print_str::str#0 char_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:30 [ line_cursor#1 print_str::str#0 char_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:35 [ line_cursor#1 print_str::str#0 char_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:35 [ line_cursor#1 print_str::str#0 char_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:35 [ line_cursor#1 print_str::str#0 char_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:35 [ line_cursor#1 print_str::str#0 char_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:35 [ line_cursor#1 print_str::str#0 char_cursor#1 ] main:2::test_bytes:7::assert_byte:49::print_str:57 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 print_str::str#0 char_cursor#1 ] main:2::test_bytes:7::assert_byte:51::print_str:57 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 print_str::str#0 char_cursor#1 ] main:2::test_bytes:7::assert_byte:53::print_str:57 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 print_str::str#0 char_cursor#1 ] main:2::test_bytes:7::assert_byte:49::print_str:59 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 print_str::str#0 char_cursor#1 ] main:2::test_bytes:7::assert_byte:51::print_str:59 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 print_str::str#0 char_cursor#1 ] main:2::test_bytes:7::assert_byte:53::print_str:59 [ line_cursor#45 assert_byte::b#3 assert_byte::c#3 print_str::str#0 char_cursor#1 ] main:2::test_bytes:7::assert_byte:49::print_str:62 [ line_cursor#45 print_str::str#0 char_cursor#1 ] main:2::test_bytes:7::assert_byte:51::print_str:62 [ line_cursor#45 print_str::str#0 char_cursor#1 ] main:2::test_bytes:7::assert_byte:53::print_str:62 [ line_cursor#45 print_str::str#0 char_cursor#1 ] main:2::test_bytes:7::assert_byte:49::print_str:67 [ line_cursor#45 print_str::str#0 char_cursor#1 ] main:2::test_bytes:7::assert_byte:51::print_str:67 [ line_cursor#45 print_str::str#0 char_cursor#1 ] main:2::test_bytes:7::assert_byte:53::print_str:67 [ line_cursor#45 print_str::str#0 char_cursor#1 ] )
|
||||
to:print_str::@1
|
||||
print_ln: scope:[print_ln] from assert_byte::@2 assert_sbyte::@2
|
||||
[43] (byte*) line_cursor#42 ← phi( assert_byte::@2/(byte*) line_cursor#45 assert_sbyte::@2/(byte*) line_cursor#1 ) [ char_cursor#2 line_cursor#42 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_ln:32 [ char_cursor#2 line_cursor#42 ] main:2::test_sbytes:9::assert_sbyte:14::print_ln:32 [ char_cursor#2 line_cursor#42 ] main:2::test_sbytes:9::assert_sbyte:16::print_ln:32 [ char_cursor#2 line_cursor#42 ] main:2::test_sbytes:9::assert_sbyte:18::print_ln:32 [ char_cursor#2 line_cursor#42 ] main:2::test_sbytes:9::assert_sbyte:20::print_ln:32 [ char_cursor#2 line_cursor#42 ] main:2::test_bytes:7::assert_byte:49::print_ln:64 [ char_cursor#2 line_cursor#42 ] main:2::test_bytes:7::assert_byte:51::print_ln:64 [ char_cursor#2 line_cursor#42 ] main:2::test_bytes:7::assert_byte:53::print_ln:64 [ char_cursor#2 line_cursor#42 ] )
|
||||
to:print_ln::@1
|
||||
print_ln::@1: scope:[print_ln] from print_ln print_ln::@1
|
||||
[44] (byte*) line_cursor#21 ← phi( print_ln/(byte*) line_cursor#42 print_ln::@1/(byte*) line_cursor#1 ) [ char_cursor#2 line_cursor#21 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_ln:32 [ char_cursor#2 line_cursor#21 ] main:2::test_sbytes:9::assert_sbyte:14::print_ln:32 [ char_cursor#2 line_cursor#21 ] main:2::test_sbytes:9::assert_sbyte:16::print_ln:32 [ char_cursor#2 line_cursor#21 ] main:2::test_sbytes:9::assert_sbyte:18::print_ln:32 [ char_cursor#2 line_cursor#21 ] main:2::test_sbytes:9::assert_sbyte:20::print_ln:32 [ char_cursor#2 line_cursor#21 ] main:2::test_bytes:7::assert_byte:49::print_ln:64 [ char_cursor#2 line_cursor#21 ] main:2::test_bytes:7::assert_byte:51::print_ln:64 [ char_cursor#2 line_cursor#21 ] main:2::test_bytes:7::assert_byte:53::print_ln:64 [ char_cursor#2 line_cursor#21 ] )
|
||||
[45] (byte*) line_cursor#1 ← (byte*) line_cursor#21 + (byte/signed byte/word/signed word) 40 [ line_cursor#1 char_cursor#2 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_ln:32 [ line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:14::print_ln:32 [ line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:16::print_ln:32 [ line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:18::print_ln:32 [ line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:20::print_ln:32 [ line_cursor#1 char_cursor#2 ] main:2::test_bytes:7::assert_byte:49::print_ln:64 [ line_cursor#1 char_cursor#2 ] main:2::test_bytes:7::assert_byte:51::print_ln:64 [ line_cursor#1 char_cursor#2 ] main:2::test_bytes:7::assert_byte:53::print_ln:64 [ line_cursor#1 char_cursor#2 ] )
|
||||
[46] if((byte*) line_cursor#1<(byte*) char_cursor#2) goto print_ln::@1 [ line_cursor#1 char_cursor#2 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_ln:32 [ line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:14::print_ln:32 [ line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:16::print_ln:32 [ line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:18::print_ln:32 [ line_cursor#1 char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:20::print_ln:32 [ line_cursor#1 char_cursor#2 ] main:2::test_bytes:7::assert_byte:49::print_ln:64 [ line_cursor#1 char_cursor#2 ] main:2::test_bytes:7::assert_byte:51::print_ln:64 [ line_cursor#1 char_cursor#2 ] main:2::test_bytes:7::assert_byte:53::print_ln:64 [ line_cursor#1 char_cursor#2 ] )
|
||||
to:print_ln::@return
|
||||
print_ln::@return: scope:[print_ln] from print_ln::@1
|
||||
[47] return [ line_cursor#1 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_ln:32 [ line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:14::print_ln:32 [ line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:16::print_ln:32 [ line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:18::print_ln:32 [ line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:20::print_ln:32 [ line_cursor#1 ] main:2::test_bytes:7::assert_byte:49::print_ln:64 [ line_cursor#1 ] main:2::test_bytes:7::assert_byte:51::print_ln:64 [ line_cursor#1 ] main:2::test_bytes:7::assert_byte:53::print_ln:64 [ line_cursor#1 ] )
|
||||
to:@return
|
||||
test_bytes: scope:[test_bytes] from main::@1
|
||||
[48] phi() [ ] ( main:2::test_bytes:7 [ ] )
|
||||
[49] call assert_byte param-assignment [ line_cursor#1 ] ( main:2::test_bytes:7 [ line_cursor#1 ] )
|
||||
to:test_bytes::@1
|
||||
test_bytes::@1: scope:[test_bytes] from test_bytes
|
||||
[50] (byte*~) char_cursor#88 ← (byte*) line_cursor#1 [ line_cursor#1 char_cursor#88 ] ( main:2::test_bytes:7 [ line_cursor#1 char_cursor#88 ] )
|
||||
[51] call assert_byte param-assignment [ line_cursor#1 ] ( main:2::test_bytes:7 [ line_cursor#1 ] )
|
||||
to:test_bytes::@2
|
||||
test_bytes::@2: scope:[test_bytes] from test_bytes::@1
|
||||
[52] (byte*~) char_cursor#89 ← (byte*) line_cursor#1 [ line_cursor#1 char_cursor#89 ] ( main:2::test_bytes:7 [ line_cursor#1 char_cursor#89 ] )
|
||||
[53] call assert_byte param-assignment [ line_cursor#1 ] ( main:2::test_bytes:7 [ line_cursor#1 ] )
|
||||
to:test_bytes::@return
|
||||
test_bytes::@return: scope:[test_bytes] from test_bytes::@2
|
||||
[54] return [ line_cursor#1 ] ( main:2::test_bytes:7 [ line_cursor#1 ] )
|
||||
to:@return
|
||||
assert_byte: scope:[assert_byte] from test_bytes test_bytes::@1 test_bytes::@2
|
||||
[55] (byte*) line_cursor#45 ← phi( test_bytes/((byte*))(word/signed word) 1024 test_bytes::@1/(byte*) line_cursor#1 test_bytes::@2/(byte*) line_cursor#1 ) [ char_cursor#65 line_cursor#45 assert_byte::msg#3 assert_byte::b#3 assert_byte::c#3 ] ( main:2::test_bytes:7::assert_byte:49 [ char_cursor#65 line_cursor#45 assert_byte::msg#3 assert_byte::b#3 assert_byte::c#3 ] main:2::test_bytes:7::assert_byte:51 [ char_cursor#65 line_cursor#45 assert_byte::msg#3 assert_byte::b#3 assert_byte::c#3 ] main:2::test_bytes:7::assert_byte:53 [ char_cursor#65 line_cursor#45 assert_byte::msg#3 assert_byte::b#3 assert_byte::c#3 ] )
|
||||
[55] (byte) assert_byte::c#3 ← phi( test_bytes/(byte/signed byte/word/signed word) 0 test_bytes::@1/(byte/signed byte/word/signed word) 2 test_bytes::@2/(byte/word/signed word) 254 ) [ char_cursor#65 line_cursor#45 assert_byte::msg#3 assert_byte::b#3 assert_byte::c#3 ] ( main:2::test_bytes:7::assert_byte:49 [ char_cursor#65 line_cursor#45 assert_byte::msg#3 assert_byte::b#3 assert_byte::c#3 ] main:2::test_bytes:7::assert_byte:51 [ char_cursor#65 line_cursor#45 assert_byte::msg#3 assert_byte::b#3 assert_byte::c#3 ] main:2::test_bytes:7::assert_byte:53 [ char_cursor#65 line_cursor#45 assert_byte::msg#3 assert_byte::b#3 assert_byte::c#3 ] )
|
||||
[55] (byte) assert_byte::b#3 ← phi( test_bytes/(const byte) test_bytes::bb#0 test_bytes::@1/(const byte) test_bytes::bc#0 test_bytes::@2/(const byte) test_bytes::bd#0 ) [ char_cursor#65 line_cursor#45 assert_byte::msg#3 assert_byte::b#3 assert_byte::c#3 ] ( main:2::test_bytes:7::assert_byte:49 [ char_cursor#65 line_cursor#45 assert_byte::msg#3 assert_byte::b#3 assert_byte::c#3 ] main:2::test_bytes:7::assert_byte:51 [ char_cursor#65 line_cursor#45 assert_byte::msg#3 assert_byte::b#3 assert_byte::c#3 ] main:2::test_bytes:7::assert_byte:53 [ char_cursor#65 line_cursor#45 assert_byte::msg#3 assert_byte::b#3 assert_byte::c#3 ] )
|
||||
[55] (byte*) char_cursor#65 ← phi( test_bytes/((byte*))(word/signed word) 1024 test_bytes::@1/(byte*~) char_cursor#88 test_bytes::@2/(byte*~) char_cursor#89 ) [ char_cursor#65 line_cursor#45 assert_byte::msg#3 assert_byte::b#3 assert_byte::c#3 ] ( main:2::test_bytes:7::assert_byte:49 [ char_cursor#65 line_cursor#45 assert_byte::msg#3 assert_byte::b#3 assert_byte::c#3 ] main:2::test_bytes:7::assert_byte:51 [ char_cursor#65 line_cursor#45 assert_byte::msg#3 assert_byte::b#3 assert_byte::c#3 ] main:2::test_bytes:7::assert_byte:53 [ char_cursor#65 line_cursor#45 assert_byte::msg#3 assert_byte::b#3 assert_byte::c#3 ] )
|
||||
[55] (byte*) assert_byte::msg#3 ← phi( test_bytes/(const byte[]) test_bytes::msg test_bytes::@1/(const byte[]) test_bytes::msg1 test_bytes::@2/(const byte[]) test_bytes::msg2 ) [ char_cursor#65 line_cursor#45 assert_byte::msg#3 assert_byte::b#3 assert_byte::c#3 ] ( main:2::test_bytes:7::assert_byte:49 [ char_cursor#65 line_cursor#45 assert_byte::msg#3 assert_byte::b#3 assert_byte::c#3 ] main:2::test_bytes:7::assert_byte:51 [ char_cursor#65 line_cursor#45 assert_byte::msg#3 assert_byte::b#3 assert_byte::c#3 ] main:2::test_bytes:7::assert_byte:53 [ char_cursor#65 line_cursor#45 assert_byte::msg#3 assert_byte::b#3 assert_byte::c#3 ] )
|
||||
[56] (byte*) print_str::str#1 ← (byte*) assert_byte::msg#3 [ print_str::str#1 char_cursor#65 line_cursor#45 assert_byte::b#3 assert_byte::c#3 ] ( main:2::test_bytes:7::assert_byte:49 [ print_str::str#1 char_cursor#65 line_cursor#45 assert_byte::b#3 assert_byte::c#3 ] main:2::test_bytes:7::assert_byte:51 [ print_str::str#1 char_cursor#65 line_cursor#45 assert_byte::b#3 assert_byte::c#3 ] main:2::test_bytes:7::assert_byte:53 [ print_str::str#1 char_cursor#65 line_cursor#45 assert_byte::b#3 assert_byte::c#3 ] )
|
||||
[57] call print_str param-assignment [ char_cursor#2 line_cursor#45 assert_byte::b#3 assert_byte::c#3 ] ( main:2::test_bytes:7::assert_byte:49 [ char_cursor#2 line_cursor#45 assert_byte::b#3 assert_byte::c#3 ] main:2::test_bytes:7::assert_byte:51 [ char_cursor#2 line_cursor#45 assert_byte::b#3 assert_byte::c#3 ] main:2::test_bytes:7::assert_byte:53 [ char_cursor#2 line_cursor#45 assert_byte::b#3 assert_byte::c#3 ] )
|
||||
to:assert_byte::@5
|
||||
assert_byte::@5: scope:[assert_byte] from assert_byte
|
||||
[58] phi() [ char_cursor#2 line_cursor#45 assert_byte::b#3 assert_byte::c#3 ] ( main:2::test_bytes:7::assert_byte:49 [ char_cursor#2 line_cursor#45 assert_byte::b#3 assert_byte::c#3 ] main:2::test_bytes:7::assert_byte:51 [ char_cursor#2 line_cursor#45 assert_byte::b#3 assert_byte::c#3 ] main:2::test_bytes:7::assert_byte:53 [ char_cursor#2 line_cursor#45 assert_byte::b#3 assert_byte::c#3 ] )
|
||||
[59] call print_str param-assignment [ char_cursor#2 line_cursor#45 assert_byte::b#3 assert_byte::c#3 ] ( main:2::test_bytes:7::assert_byte:49 [ char_cursor#2 line_cursor#45 assert_byte::b#3 assert_byte::c#3 ] main:2::test_bytes:7::assert_byte:51 [ char_cursor#2 line_cursor#45 assert_byte::b#3 assert_byte::c#3 ] main:2::test_bytes:7::assert_byte:53 [ char_cursor#2 line_cursor#45 assert_byte::b#3 assert_byte::c#3 ] )
|
||||
to:assert_byte::@6
|
||||
assert_byte::@6: scope:[assert_byte] from assert_byte::@5
|
||||
[60] if((byte) assert_byte::b#3==(byte) assert_byte::c#3) goto assert_byte::@1 [ char_cursor#2 line_cursor#45 ] ( main:2::test_bytes:7::assert_byte:49 [ char_cursor#2 line_cursor#45 ] main:2::test_bytes:7::assert_byte:51 [ char_cursor#2 line_cursor#45 ] main:2::test_bytes:7::assert_byte:53 [ char_cursor#2 line_cursor#45 ] )
|
||||
to:assert_byte::@3
|
||||
assert_byte::@3: scope:[assert_byte] from assert_byte::@6
|
||||
[61] *((const byte*) BGCOL#0) ← (const byte) RED#0 [ char_cursor#2 line_cursor#45 ] ( main:2::test_bytes:7::assert_byte:49 [ char_cursor#2 line_cursor#45 ] main:2::test_bytes:7::assert_byte:51 [ char_cursor#2 line_cursor#45 ] main:2::test_bytes:7::assert_byte:53 [ char_cursor#2 line_cursor#45 ] )
|
||||
[62] call print_str param-assignment [ char_cursor#2 line_cursor#45 ] ( main:2::test_bytes:7::assert_byte:49 [ char_cursor#2 line_cursor#45 ] main:2::test_bytes:7::assert_byte:51 [ char_cursor#2 line_cursor#45 ] main:2::test_bytes:7::assert_byte:53 [ char_cursor#2 line_cursor#45 ] )
|
||||
to:assert_byte::@2
|
||||
assert_byte::@2: scope:[assert_byte] from assert_byte::@1 assert_byte::@3
|
||||
[63] phi() [ char_cursor#2 line_cursor#45 ] ( main:2::test_bytes:7::assert_byte:49 [ char_cursor#2 line_cursor#45 ] main:2::test_bytes:7::assert_byte:51 [ char_cursor#2 line_cursor#45 ] main:2::test_bytes:7::assert_byte:53 [ char_cursor#2 line_cursor#45 ] )
|
||||
[64] call print_ln param-assignment [ line_cursor#1 ] ( main:2::test_bytes:7::assert_byte:49 [ line_cursor#1 ] main:2::test_bytes:7::assert_byte:51 [ line_cursor#1 ] main:2::test_bytes:7::assert_byte:53 [ line_cursor#1 ] )
|
||||
to:assert_byte::@return
|
||||
assert_byte::@return: scope:[assert_byte] from assert_byte::@2
|
||||
[65] return [ line_cursor#1 ] ( main:2::test_bytes:7::assert_byte:49 [ line_cursor#1 ] main:2::test_bytes:7::assert_byte:51 [ line_cursor#1 ] main:2::test_bytes:7::assert_byte:53 [ line_cursor#1 ] )
|
||||
to:@return
|
||||
assert_byte::@1: scope:[assert_byte] from assert_byte::@6
|
||||
[66] phi() [ char_cursor#2 line_cursor#45 ] ( main:2::test_bytes:7::assert_byte:49 [ char_cursor#2 line_cursor#45 ] main:2::test_bytes:7::assert_byte:51 [ char_cursor#2 line_cursor#45 ] main:2::test_bytes:7::assert_byte:53 [ char_cursor#2 line_cursor#45 ] )
|
||||
[67] call print_str param-assignment [ char_cursor#2 line_cursor#45 ] ( main:2::test_bytes:7::assert_byte:49 [ char_cursor#2 line_cursor#45 ] main:2::test_bytes:7::assert_byte:51 [ char_cursor#2 line_cursor#45 ] main:2::test_bytes:7::assert_byte:53 [ char_cursor#2 line_cursor#45 ] )
|
||||
to:assert_byte::@2
|
||||
print_cls: scope:[print_cls] from main
|
||||
[68] phi() [ ] ( main:2::print_cls:5 [ ] )
|
||||
to:print_cls::@1
|
||||
print_cls::@1: scope:[print_cls] from print_cls print_cls::@1
|
||||
[69] (byte*) print_cls::sc#2 ← phi( print_cls/((byte*))(word/signed word) 1024 print_cls::@1/(byte*) print_cls::sc#1 ) [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] )
|
||||
[70] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] )
|
||||
[71] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] )
|
||||
[72] if((byte*) print_cls::sc#1!=(word/signed word) 1024+(word/signed word) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] )
|
||||
to:print_cls::@return
|
||||
print_cls::@return: scope:[print_cls] from print_cls::@1
|
||||
[73] return [ ] ( main:2::print_cls:5 [ ] )
|
||||
to:@return
|
8706
src/main/java/dk/camelot64/kickc/test/ref/constants.log
Normal file
8706
src/main/java/dk/camelot64/kickc/test/ref/constants.log
Normal file
File diff suppressed because it is too large
Load Diff
118
src/main/java/dk/camelot64/kickc/test/ref/constants.sym
Normal file
118
src/main/java/dk/camelot64/kickc/test/ref/constants.sym
Normal file
@ -0,0 +1,118 @@
|
||||
(label) @11
|
||||
(label) @begin
|
||||
(label) @end
|
||||
(byte*) BGCOL
|
||||
(const byte*) BGCOL#0 BGCOL = ((byte*))(word) 53281
|
||||
(byte) GREEN
|
||||
(const byte) GREEN#0 GREEN = (byte/signed byte/word/signed word) 5
|
||||
(byte) RED
|
||||
(const byte) RED#0 RED = (byte/signed byte/word/signed word) 2
|
||||
(void()) assert_byte((byte*) assert_byte::msg , (byte) assert_byte::b , (byte) assert_byte::c)
|
||||
(label) assert_byte::@1
|
||||
(label) assert_byte::@2
|
||||
(label) assert_byte::@3
|
||||
(label) assert_byte::@5
|
||||
(label) assert_byte::@6
|
||||
(label) assert_byte::@return
|
||||
(byte) assert_byte::b
|
||||
(byte) assert_byte::b#3 reg byte x 0.4
|
||||
(byte) assert_byte::c
|
||||
(byte) assert_byte::c#3 c zp ZP_BYTE:4 0.4
|
||||
(byte*) assert_byte::msg
|
||||
(byte*) assert_byte::msg#3 msg zp ZP_WORD:5 2.0
|
||||
(const byte[]) assert_byte::str str = (string) " @"
|
||||
(const byte[]) assert_byte::str1 str1 = (string) "ok@"
|
||||
(const byte[]) assert_byte::str2 str2 = (string) "fail!@"
|
||||
(void()) assert_sbyte((byte*) assert_sbyte::msg , (signed byte) assert_sbyte::b , (signed byte) assert_sbyte::c)
|
||||
(label) assert_sbyte::@1
|
||||
(label) assert_sbyte::@2
|
||||
(label) assert_sbyte::@3
|
||||
(label) assert_sbyte::@5
|
||||
(label) assert_sbyte::@6
|
||||
(label) assert_sbyte::@return
|
||||
(signed byte) assert_sbyte::b
|
||||
(signed byte) assert_sbyte::b#5 reg byte x 0.3333333333333333
|
||||
(signed byte) assert_sbyte::c
|
||||
(signed byte) assert_sbyte::c#5 c zp ZP_BYTE:4 0.3333333333333333
|
||||
(byte*) assert_sbyte::msg
|
||||
(byte*) assert_sbyte::msg#5 msg zp ZP_WORD:2 2.0
|
||||
(const byte[]) assert_sbyte::str str = (string) " @"
|
||||
(const byte[]) assert_sbyte::str1 str1 = (string) "ok@"
|
||||
(const byte[]) assert_sbyte::str2 str2 = (string) "fail!@"
|
||||
(byte*) char_cursor
|
||||
(byte*) char_cursor#1 char_cursor zp ZP_WORD:2 11.0
|
||||
(byte*) char_cursor#2 char_cursor zp ZP_WORD:2 2.230769230769231
|
||||
(byte*) char_cursor#65 char_cursor zp ZP_WORD:2 3.0
|
||||
(byte*) char_cursor#75 char_cursor zp ZP_WORD:2 18.0
|
||||
(byte*~) char_cursor#82 char_cursor zp ZP_WORD:2 4.0
|
||||
(byte*~) char_cursor#88 char_cursor zp ZP_WORD:2 4.0
|
||||
(byte*~) char_cursor#89 char_cursor zp ZP_WORD:2 4.0
|
||||
(byte*) line_cursor
|
||||
(byte*) line_cursor#1 line_cursor zp ZP_WORD:7 1.2500000000000002
|
||||
(byte*) line_cursor#21 line_cursor zp ZP_WORD:7 24.0
|
||||
(byte*) line_cursor#42 line_cursor zp ZP_WORD:7 6.0
|
||||
(byte*) line_cursor#45 line_cursor zp ZP_WORD:7 0.5454545454545454
|
||||
(void()) main()
|
||||
(label) main::@1
|
||||
(label) main::@2
|
||||
(label) main::@return
|
||||
(void()) print_cls()
|
||||
(label) print_cls::@1
|
||||
(label) print_cls::@return
|
||||
(byte*) print_cls::sc
|
||||
(byte*) print_cls::sc#1 sc zp ZP_WORD:2 16.5
|
||||
(byte*) print_cls::sc#2 sc zp ZP_WORD:2 16.5
|
||||
(void()) print_ln()
|
||||
(label) print_ln::@1
|
||||
(label) print_ln::@return
|
||||
(void()) print_str((byte*) print_str::str)
|
||||
(label) print_str::@1
|
||||
(label) print_str::@2
|
||||
(label) print_str::@return
|
||||
(byte*) print_str::str
|
||||
(byte*) print_str::str#0 str zp ZP_WORD:5 22.0
|
||||
(byte*) print_str::str#1 str zp ZP_WORD:5 4.0
|
||||
(byte*) print_str::str#10 str zp ZP_WORD:5 11.5
|
||||
(byte*) print_str::str#11 str zp ZP_WORD:5 6.0
|
||||
(byte*) print_str::str#5 str zp ZP_WORD:5 2.0
|
||||
(void()) test_bytes()
|
||||
(label) test_bytes::@1
|
||||
(label) test_bytes::@2
|
||||
(label) test_bytes::@return
|
||||
(byte) test_bytes::bb
|
||||
(const byte) test_bytes::bb#0 bb = (byte/signed byte/word/signed word) 0
|
||||
(byte) test_bytes::bc
|
||||
(const byte) test_bytes::bc#0 bc = (const byte) test_bytes::bb#0+(byte/signed byte/word/signed word) 2
|
||||
(byte) test_bytes::bd
|
||||
(const byte) test_bytes::bd#0 bd = (const byte) test_bytes::bc#0-(byte/signed byte/word/signed word) 4
|
||||
(const byte[]) test_bytes::msg msg = (string) "0=0@"
|
||||
(const byte[]) test_bytes::msg1 msg1 = (string) "0+2=2@"
|
||||
(const byte[]) test_bytes::msg2 msg2 = (string) "0+2-4=254@"
|
||||
(void()) test_sbytes()
|
||||
(label) test_sbytes::@1
|
||||
(label) test_sbytes::@2
|
||||
(label) test_sbytes::@3
|
||||
(label) test_sbytes::@4
|
||||
(label) test_sbytes::@return
|
||||
(signed byte) test_sbytes::bb
|
||||
(const signed byte) test_sbytes::bb#0 bb = (byte/signed byte/word/signed word) 0
|
||||
(signed byte) test_sbytes::bc
|
||||
(const signed byte) test_sbytes::bc#0 bc = (const signed byte) test_sbytes::bb#0+(byte/signed byte/word/signed word) 2
|
||||
(signed byte) test_sbytes::bd
|
||||
(const signed byte) test_sbytes::bd#0 bd = (const signed byte) test_sbytes::bc#0-(byte/signed byte/word/signed word) 4
|
||||
(signed byte) test_sbytes::be
|
||||
(const signed byte) test_sbytes::be#0 be = -(const signed byte) test_sbytes::bd#0
|
||||
(signed byte) test_sbytes::bf
|
||||
(const signed byte) test_sbytes::bf#0 bf = -(byte/signed byte/word/signed word) 127-(byte/signed byte/word/signed word) 127
|
||||
(const byte[]) test_sbytes::msg msg = (string) "0=0@"
|
||||
(const byte[]) test_sbytes::msg1 msg1 = (string) "0+2=2@"
|
||||
(const byte[]) test_sbytes::msg2 msg2 = (string) "0+2-4=-2@"
|
||||
(const byte[]) test_sbytes::msg3 msg3 = (string) "-(0+2-4)=2@"
|
||||
(const byte[]) test_sbytes::msg4 msg4 = (string) "-127-127=2@"
|
||||
|
||||
zp ZP_WORD:2 [ assert_sbyte::msg#5 char_cursor#75 char_cursor#65 char_cursor#2 char_cursor#82 char_cursor#1 char_cursor#88 char_cursor#89 print_cls::sc#2 print_cls::sc#1 ]
|
||||
reg byte x [ assert_sbyte::b#5 ]
|
||||
zp ZP_BYTE:4 [ assert_sbyte::c#5 assert_byte::c#3 ]
|
||||
zp ZP_WORD:5 [ print_str::str#10 print_str::str#11 print_str::str#1 print_str::str#5 print_str::str#0 assert_byte::msg#3 ]
|
||||
zp ZP_WORD:7 [ line_cursor#21 line_cursor#42 line_cursor#45 line_cursor#1 ]
|
||||
reg byte x [ assert_byte::b#3 ]
|
@ -13,13 +13,11 @@ main: scope:[main] from @1
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
[6] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word) 0 main::@1/(byte) main::i#1 ) [ main::i#2 ] ( main:2 [ main::i#2 ] )
|
||||
[7] (byte~) main::$1 ← (const byte[15]) fibs#0 *idx (byte) main::i#2 [ main::i#2 main::$1 ] ( main:2 [ main::i#2 main::$1 ] )
|
||||
[8] (byte~) main::$3 ← (const byte[15]) fibs#0+(byte/signed byte/word/signed word) 1 *idx (byte) main::i#2 [ main::i#2 main::$1 main::$3 ] ( main:2 [ main::i#2 main::$1 main::$3 ] )
|
||||
[9] (byte~) main::$4 ← (byte~) main::$1 + (byte~) main::$3 [ main::i#2 main::$4 ] ( main:2 [ main::i#2 main::$4 ] )
|
||||
[10] *((const byte[15]) fibs#0+(byte/signed byte/word/signed word) 2 + (byte) main::i#2) ← (byte~) main::$4 [ main::i#2 ] ( main:2 [ main::i#2 ] )
|
||||
[11] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] )
|
||||
[12] if((byte) main::i#1<(byte/signed byte/word/signed word) 15) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] )
|
||||
[7] (byte~) main::$2 ← *((const byte[15]) fibs#0 + (byte) main::i#2) + *((const byte[15]) fibs#0+(byte/signed byte/word/signed word) 1 + (byte) main::i#2) [ main::i#2 main::$2 ] ( main:2 [ main::i#2 main::$2 ] )
|
||||
[8] *((const byte[15]) fibs#0+(byte/signed byte/word/signed word) 2 + (byte) main::i#2) ← (byte~) main::$2 [ main::i#2 ] ( main:2 [ main::i#2 ] )
|
||||
[9] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] )
|
||||
[10] if((byte) main::i#1<(byte/signed byte/word/signed word) 15) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] )
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
[13] return [ ] ( main:2 [ ] )
|
||||
[11] return [ ] ( main:2 [ ] )
|
||||
to:@return
|
||||
|
@ -17,14 +17,12 @@ proc (void()) main()
|
||||
(byte) main::i ← (byte/signed byte/word/signed word) 0
|
||||
main::@1:
|
||||
(byte~) main::$0 ← (byte) main::i + (byte/signed byte/word/signed word) 2
|
||||
(byte~) main::$1 ← (byte[15]) fibs *idx (byte) main::i
|
||||
(byte~) main::$2 ← (byte) main::i + (byte/signed byte/word/signed word) 1
|
||||
(byte~) main::$3 ← (byte[15]) fibs *idx (byte~) main::$2
|
||||
(byte~) main::$4 ← (byte~) main::$1 + (byte~) main::$3
|
||||
*((byte[15]) fibs + (byte~) main::$0) ← (byte~) main::$4
|
||||
(byte~) main::$1 ← (byte) main::i + (byte/signed byte/word/signed word) 1
|
||||
(byte~) main::$2 ← *((byte[15]) fibs + (byte) main::i) + *((byte[15]) fibs + (byte~) main::$1)
|
||||
*((byte[15]) fibs + (byte~) main::$0) ← (byte~) main::$2
|
||||
(byte) main::i ← ++ (byte) main::i
|
||||
(boolean~) main::$5 ← (byte) main::i < (byte/signed byte/word/signed word) 15
|
||||
if((boolean~) main::$5) goto main::@1
|
||||
(boolean~) main::$3 ← (byte) main::i < (byte/signed byte/word/signed word) 15
|
||||
if((boolean~) main::$3) goto main::@1
|
||||
main::@return:
|
||||
return
|
||||
endproc // main()
|
||||
@ -36,9 +34,7 @@ SYMBOLS
|
||||
(byte~) main::$0
|
||||
(byte~) main::$1
|
||||
(byte~) main::$2
|
||||
(byte~) main::$3
|
||||
(byte~) main::$4
|
||||
(boolean~) main::$5
|
||||
(boolean~) main::$3
|
||||
(label) main::@1
|
||||
(label) main::@return
|
||||
(byte) main::i
|
||||
@ -55,14 +51,12 @@ main: scope:[main] from
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(byte~) main::$0 ← (byte) main::i + (byte/signed byte/word/signed word) 2
|
||||
(byte~) main::$1 ← (byte[15]) fibs *idx (byte) main::i
|
||||
(byte~) main::$2 ← (byte) main::i + (byte/signed byte/word/signed word) 1
|
||||
(byte~) main::$3 ← (byte[15]) fibs *idx (byte~) main::$2
|
||||
(byte~) main::$4 ← (byte~) main::$1 + (byte~) main::$3
|
||||
*((byte[15]) fibs + (byte~) main::$0) ← (byte~) main::$4
|
||||
(byte~) main::$1 ← (byte) main::i + (byte/signed byte/word/signed word) 1
|
||||
(byte~) main::$2 ← *((byte[15]) fibs + (byte) main::i) + *((byte[15]) fibs + (byte~) main::$1)
|
||||
*((byte[15]) fibs + (byte~) main::$0) ← (byte~) main::$2
|
||||
(byte) main::i ← ++ (byte) main::i
|
||||
(boolean~) main::$5 ← (byte) main::i < (byte/signed byte/word/signed word) 15
|
||||
if((boolean~) main::$5) goto main::@1
|
||||
(boolean~) main::$3 ← (byte) main::i < (byte/signed byte/word/signed word) 15
|
||||
if((boolean~) main::$3) goto main::@1
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1
|
||||
to:main::@return
|
||||
@ -86,14 +80,12 @@ main: scope:[main] from
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(byte~) main::$0 ← (byte) main::i + (byte/signed byte/word/signed word) 2
|
||||
(byte~) main::$1 ← (byte[15]) fibs *idx (byte) main::i
|
||||
(byte~) main::$2 ← (byte) main::i + (byte/signed byte/word/signed word) 1
|
||||
(byte~) main::$3 ← (byte[15]) fibs *idx (byte~) main::$2
|
||||
(byte~) main::$4 ← (byte~) main::$1 + (byte~) main::$3
|
||||
*((byte[15]) fibs + (byte~) main::$0) ← (byte~) main::$4
|
||||
(byte~) main::$1 ← (byte) main::i + (byte/signed byte/word/signed word) 1
|
||||
(byte~) main::$2 ← *((byte[15]) fibs + (byte) main::i) + *((byte[15]) fibs + (byte~) main::$1)
|
||||
*((byte[15]) fibs + (byte~) main::$0) ← (byte~) main::$2
|
||||
(byte) main::i ← ++ (byte) main::i
|
||||
(boolean~) main::$5 ← (byte) main::i < (byte/signed byte/word/signed word) 15
|
||||
if((boolean~) main::$5) goto main::@1
|
||||
(boolean~) main::$3 ← (byte) main::i < (byte/signed byte/word/signed word) 15
|
||||
if((boolean~) main::$3) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
@ -116,14 +108,12 @@ main: scope:[main] from @1
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(byte~) main::$0 ← (byte) main::i + (byte/signed byte/word/signed word) 2
|
||||
(byte~) main::$1 ← (byte[15]) fibs *idx (byte) main::i
|
||||
(byte~) main::$2 ← (byte) main::i + (byte/signed byte/word/signed word) 1
|
||||
(byte~) main::$3 ← (byte[15]) fibs *idx (byte~) main::$2
|
||||
(byte~) main::$4 ← (byte~) main::$1 + (byte~) main::$3
|
||||
*((byte[15]) fibs + (byte~) main::$0) ← (byte~) main::$4
|
||||
(byte~) main::$1 ← (byte) main::i + (byte/signed byte/word/signed word) 1
|
||||
(byte~) main::$2 ← *((byte[15]) fibs + (byte) main::i) + *((byte[15]) fibs + (byte~) main::$1)
|
||||
*((byte[15]) fibs + (byte~) main::$0) ← (byte~) main::$2
|
||||
(byte) main::i ← ++ (byte) main::i
|
||||
(boolean~) main::$5 ← (byte) main::i < (byte/signed byte/word/signed word) 15
|
||||
if((boolean~) main::$5) goto main::@1
|
||||
(boolean~) main::$3 ← (byte) main::i < (byte/signed byte/word/signed word) 15
|
||||
if((boolean~) main::$3) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
@ -151,14 +141,12 @@ main::@1: scope:[main] from main main::@1
|
||||
(byte[15]) fibs#2 ← phi( main/(byte[15]) fibs#1 main::@1/(byte[15]) fibs#2 )
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 )
|
||||
(byte~) main::$0 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 2
|
||||
(byte~) main::$1 ← (byte[15]) fibs#2 *idx (byte) main::i#2
|
||||
(byte~) main::$2 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 1
|
||||
(byte~) main::$3 ← (byte[15]) fibs#2 *idx (byte~) main::$2
|
||||
(byte~) main::$4 ← (byte~) main::$1 + (byte~) main::$3
|
||||
*((byte[15]) fibs#2 + (byte~) main::$0) ← (byte~) main::$4
|
||||
(byte~) main::$1 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 1
|
||||
(byte~) main::$2 ← *((byte[15]) fibs#2 + (byte) main::i#2) + *((byte[15]) fibs#2 + (byte~) main::$1)
|
||||
*((byte[15]) fibs#2 + (byte~) main::$0) ← (byte~) main::$2
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
(boolean~) main::$5 ← (byte) main::i#1 < (byte/signed byte/word/signed word) 15
|
||||
if((boolean~) main::$5) goto main::@1
|
||||
(boolean~) main::$3 ← (byte) main::i#1 < (byte/signed byte/word/signed word) 15
|
||||
if((boolean~) main::$3) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
@ -185,14 +173,12 @@ main::@1: scope:[main] from main main::@1
|
||||
(byte[15]) fibs#2 ← phi( main/(byte[15]) fibs#1 main::@1/(byte[15]) fibs#2 )
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 )
|
||||
(byte~) main::$0 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 2
|
||||
(byte~) main::$1 ← (byte[15]) fibs#2 *idx (byte) main::i#2
|
||||
(byte~) main::$2 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 1
|
||||
(byte~) main::$3 ← (byte[15]) fibs#2 *idx (byte~) main::$2
|
||||
(byte~) main::$4 ← (byte~) main::$1 + (byte~) main::$3
|
||||
*((byte[15]) fibs#2 + (byte~) main::$0) ← (byte~) main::$4
|
||||
(byte~) main::$1 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 1
|
||||
(byte~) main::$2 ← *((byte[15]) fibs#2 + (byte) main::i#2) + *((byte[15]) fibs#2 + (byte~) main::$1)
|
||||
*((byte[15]) fibs#2 + (byte~) main::$0) ← (byte~) main::$2
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
(boolean~) main::$5 ← (byte) main::i#1 < (byte/signed byte/word/signed word) 15
|
||||
if((boolean~) main::$5) goto main::@1
|
||||
(boolean~) main::$3 ← (byte) main::i#1 < (byte/signed byte/word/signed word) 15
|
||||
if((boolean~) main::$3) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
@ -219,9 +205,7 @@ INITIAL SSA SYMBOL TABLE
|
||||
(byte~) main::$0
|
||||
(byte~) main::$1
|
||||
(byte~) main::$2
|
||||
(byte~) main::$3
|
||||
(byte~) main::$4
|
||||
(boolean~) main::$5
|
||||
(boolean~) main::$3
|
||||
(label) main::@1
|
||||
(label) main::@return
|
||||
(byte) main::i
|
||||
@ -245,14 +229,12 @@ main::@1: scope:[main] from main main::@1
|
||||
(byte[15]) fibs#2 ← phi( main/(byte[15]) fibs#1 main::@1/(byte[15]) fibs#2 )
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 )
|
||||
(byte~) main::$0 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 2
|
||||
(byte~) main::$1 ← (byte[15]) fibs#2 *idx (byte) main::i#2
|
||||
(byte~) main::$2 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 1
|
||||
(byte~) main::$3 ← (byte[15]) fibs#2 *idx (byte~) main::$2
|
||||
(byte~) main::$4 ← (byte~) main::$1 + (byte~) main::$3
|
||||
*((byte[15]) fibs#2 + (byte~) main::$0) ← (byte~) main::$4
|
||||
(byte~) main::$1 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 1
|
||||
(byte~) main::$2 ← *((byte[15]) fibs#2 + (byte) main::i#2) + *((byte[15]) fibs#2 + (byte~) main::$1)
|
||||
*((byte[15]) fibs#2 + (byte~) main::$0) ← (byte~) main::$2
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
(boolean~) main::$5 ← (byte) main::i#1 < (byte/signed byte/word/signed word) 15
|
||||
if((boolean~) main::$5) goto main::@1
|
||||
(boolean~) main::$3 ← (byte) main::i#1 < (byte/signed byte/word/signed word) 15
|
||||
if((boolean~) main::$3) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
@ -280,14 +262,12 @@ main::@1: scope:[main] from main main::@1
|
||||
(byte[15]) fibs#2 ← phi( main/(byte[15]) fibs#1 main::@1/(byte[15]) fibs#2 )
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 )
|
||||
(byte~) main::$0 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 2
|
||||
(byte~) main::$1 ← (byte[15]) fibs#2 *idx (byte) main::i#2
|
||||
(byte~) main::$2 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 1
|
||||
(byte~) main::$3 ← (byte[15]) fibs#2 *idx (byte~) main::$2
|
||||
(byte~) main::$4 ← (byte~) main::$1 + (byte~) main::$3
|
||||
*((byte[15]) fibs#2 + (byte~) main::$0) ← (byte~) main::$4
|
||||
(byte~) main::$1 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 1
|
||||
(byte~) main::$2 ← *((byte[15]) fibs#2 + (byte) main::i#2) + *((byte[15]) fibs#2 + (byte~) main::$1)
|
||||
*((byte[15]) fibs#2 + (byte~) main::$0) ← (byte~) main::$2
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
(boolean~) main::$5 ← (byte) main::i#1 < (byte/signed byte/word/signed word) 15
|
||||
if((boolean~) main::$5) goto main::@1
|
||||
(boolean~) main::$3 ← (byte) main::i#1 < (byte/signed byte/word/signed word) 15
|
||||
if((boolean~) main::$3) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
@ -314,14 +294,12 @@ main::@1: scope:[main] from main main::@1
|
||||
(byte[15]) fibs#2 ← phi( main/(byte[15]) fibs#1 )
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 )
|
||||
(byte~) main::$0 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 2
|
||||
(byte~) main::$1 ← (byte[15]) fibs#2 *idx (byte) main::i#2
|
||||
(byte~) main::$2 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 1
|
||||
(byte~) main::$3 ← (byte[15]) fibs#2 *idx (byte~) main::$2
|
||||
(byte~) main::$4 ← (byte~) main::$1 + (byte~) main::$3
|
||||
*((byte[15]) fibs#2 + (byte~) main::$0) ← (byte~) main::$4
|
||||
(byte~) main::$1 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 1
|
||||
(byte~) main::$2 ← *((byte[15]) fibs#2 + (byte) main::i#2) + *((byte[15]) fibs#2 + (byte~) main::$1)
|
||||
*((byte[15]) fibs#2 + (byte~) main::$0) ← (byte~) main::$2
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
(boolean~) main::$5 ← (byte) main::i#1 < (byte/signed byte/word/signed word) 15
|
||||
if((boolean~) main::$5) goto main::@1
|
||||
(boolean~) main::$3 ← (byte) main::i#1 < (byte/signed byte/word/signed word) 15
|
||||
if((boolean~) main::$3) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
@ -346,14 +324,12 @@ main: scope:[main] from @1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 )
|
||||
(byte~) main::$0 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 2
|
||||
(byte~) main::$1 ← (byte[15]) fibs#0 *idx (byte) main::i#2
|
||||
(byte~) main::$2 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 1
|
||||
(byte~) main::$3 ← (byte[15]) fibs#0 *idx (byte~) main::$2
|
||||
(byte~) main::$4 ← (byte~) main::$1 + (byte~) main::$3
|
||||
*((byte[15]) fibs#0 + (byte~) main::$0) ← (byte~) main::$4
|
||||
(byte~) main::$1 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 1
|
||||
(byte~) main::$2 ← *((byte[15]) fibs#0 + (byte) main::i#2) + *((byte[15]) fibs#0 + (byte~) main::$1)
|
||||
*((byte[15]) fibs#0 + (byte~) main::$0) ← (byte~) main::$2
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
(boolean~) main::$5 ← (byte) main::i#1 < (byte/signed byte/word/signed word) 15
|
||||
if((boolean~) main::$5) goto main::@1
|
||||
(boolean~) main::$3 ← (byte) main::i#1 < (byte/signed byte/word/signed word) 15
|
||||
if((boolean~) main::$3) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
@ -363,7 +339,7 @@ main::@return: scope:[main] from main::@1
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
|
||||
Simple Condition (boolean~) main::$5 if((byte) main::i#1<(byte/signed byte/word/signed word) 15) goto main::@1
|
||||
Simple Condition (boolean~) main::$3 if((byte) main::i#1<(byte/signed byte/word/signed word) 15) goto main::@1
|
||||
Succesful SSA optimization Pass2ConditionalJumpSimplification
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
@ -377,11 +353,9 @@ main: scope:[main] from @1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 )
|
||||
(byte~) main::$0 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 2
|
||||
(byte~) main::$1 ← (byte[15]) fibs#0 *idx (byte) main::i#2
|
||||
(byte~) main::$2 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 1
|
||||
(byte~) main::$3 ← (byte[15]) fibs#0 *idx (byte~) main::$2
|
||||
(byte~) main::$4 ← (byte~) main::$1 + (byte~) main::$3
|
||||
*((byte[15]) fibs#0 + (byte~) main::$0) ← (byte~) main::$4
|
||||
(byte~) main::$1 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 1
|
||||
(byte~) main::$2 ← *((byte[15]) fibs#0 + (byte) main::i#2) + *((byte[15]) fibs#0 + (byte~) main::$1)
|
||||
*((byte[15]) fibs#0 + (byte~) main::$0) ← (byte~) main::$2
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
if((byte) main::i#1<(byte/signed byte/word/signed word) 15) goto main::@1
|
||||
to:main::@return
|
||||
@ -406,11 +380,9 @@ main: scope:[main] from @1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(byte) main::i#2 ← phi( main/(const byte) main::i#0 main::@1/(byte) main::i#1 )
|
||||
(byte~) main::$0 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 2
|
||||
(byte~) main::$1 ← (const byte[15]) fibs#0 *idx (byte) main::i#2
|
||||
(byte~) main::$2 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 1
|
||||
(byte~) main::$3 ← (const byte[15]) fibs#0 *idx (byte~) main::$2
|
||||
(byte~) main::$4 ← (byte~) main::$1 + (byte~) main::$3
|
||||
*((const byte[15]) fibs#0 + (byte~) main::$0) ← (byte~) main::$4
|
||||
(byte~) main::$1 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 1
|
||||
(byte~) main::$2 ← *((const byte[15]) fibs#0 + (byte) main::i#2) + *((const byte[15]) fibs#0 + (byte~) main::$1)
|
||||
*((const byte[15]) fibs#0 + (byte~) main::$0) ← (byte~) main::$2
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
if((byte) main::i#1<(byte/signed byte/word/signed word) 15) goto main::@1
|
||||
to:main::@return
|
||||
@ -422,13 +394,13 @@ main::@return: scope:[main] from main::@1
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
|
||||
Consolidated assigned array index constant in assignment *(fibs#0+0)
|
||||
Consolidated assigned array index constant in assignment *(fibs#0+1)
|
||||
Consolidated array index constant in *(fibs#0+0)
|
||||
Consolidated array index constant in *(fibs#0+1)
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
||||
Consolidated referenced array index constant in assignment main::$3
|
||||
Consolidated assigned array index constant in assignment *(fibs#0+2 + main::$0)
|
||||
Consolidated array index constant in assignment *(fibs#0+1 + main::$1)
|
||||
Consolidated array index constant in assignment *(fibs#0+2 + main::$0)
|
||||
Succesful SSA optimization Pass2ConstantAdditionElimination
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
@ -440,11 +412,9 @@ main: scope:[main] from @1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(byte) main::i#2 ← phi( main/(const byte) main::i#0 main::@1/(byte) main::i#1 )
|
||||
(byte~) main::$0 ← (byte) main::i#2
|
||||
(byte~) main::$1 ← (const byte[15]) fibs#0 *idx (byte) main::i#2
|
||||
(byte~) main::$2 ← (byte) main::i#2
|
||||
(byte~) main::$3 ← (const byte[15]) fibs#0+(byte/signed byte/word/signed word) 1 *idx (byte~) main::$2
|
||||
(byte~) main::$4 ← (byte~) main::$1 + (byte~) main::$3
|
||||
*((const byte[15]) fibs#0+(byte/signed byte/word/signed word) 2 + (byte~) main::$0) ← (byte~) main::$4
|
||||
(byte~) main::$1 ← (byte) main::i#2
|
||||
(byte~) main::$2 ← *((const byte[15]) fibs#0 + (byte) main::i#2) + *((const byte[15]) fibs#0+(byte/signed byte/word/signed word) 1 + (byte~) main::$1)
|
||||
*((const byte[15]) fibs#0+(byte/signed byte/word/signed word) 2 + (byte~) main::$0) ← (byte~) main::$2
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
if((byte) main::i#1<(byte/signed byte/word/signed word) 15) goto main::@1
|
||||
to:main::@return
|
||||
@ -457,7 +427,7 @@ main::@return: scope:[main] from main::@1
|
||||
@end: scope:[] from @1
|
||||
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
||||
Alias (byte) main::i#2 = (byte~) main::$0 (byte~) main::$2
|
||||
Alias (byte) main::i#2 = (byte~) main::$0 (byte~) main::$1
|
||||
Succesful SSA optimization Pass2AliasElimination
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
@ -468,10 +438,8 @@ main: scope:[main] from @1
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(byte) main::i#2 ← phi( main/(const byte) main::i#0 main::@1/(byte) main::i#1 )
|
||||
(byte~) main::$1 ← (const byte[15]) fibs#0 *idx (byte) main::i#2
|
||||
(byte~) main::$3 ← (const byte[15]) fibs#0+(byte/signed byte/word/signed word) 1 *idx (byte) main::i#2
|
||||
(byte~) main::$4 ← (byte~) main::$1 + (byte~) main::$3
|
||||
*((const byte[15]) fibs#0+(byte/signed byte/word/signed word) 2 + (byte) main::i#2) ← (byte~) main::$4
|
||||
(byte~) main::$2 ← *((const byte[15]) fibs#0 + (byte) main::i#2) + *((const byte[15]) fibs#0+(byte/signed byte/word/signed word) 1 + (byte) main::i#2)
|
||||
*((const byte[15]) fibs#0+(byte/signed byte/word/signed word) 2 + (byte) main::i#2) ← (byte~) main::$2
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
if((byte) main::i#1<(byte/signed byte/word/signed word) 15) goto main::@1
|
||||
to:main::@return
|
||||
@ -483,12 +451,6 @@ main::@return: scope:[main] from main::@1
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
||||
Inlining constant with var siblings (const byte) main::i#0
|
||||
Inlining constant with var siblings (const byte) main::i#0
|
||||
Constant inlined main::i#0 = (byte/signed byte/word/signed word) 0
|
||||
@ -502,10 +464,8 @@ main: scope:[main] from @1
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word) 0 main::@1/(byte) main::i#1 )
|
||||
(byte~) main::$1 ← (const byte[15]) fibs#0 *idx (byte) main::i#2
|
||||
(byte~) main::$3 ← (const byte[15]) fibs#0+(byte/signed byte/word/signed word) 1 *idx (byte) main::i#2
|
||||
(byte~) main::$4 ← (byte~) main::$1 + (byte~) main::$3
|
||||
*((const byte[15]) fibs#0+(byte/signed byte/word/signed word) 2 + (byte) main::i#2) ← (byte~) main::$4
|
||||
(byte~) main::$2 ← *((const byte[15]) fibs#0 + (byte) main::i#2) + *((const byte[15]) fibs#0+(byte/signed byte/word/signed word) 1 + (byte) main::i#2)
|
||||
*((const byte[15]) fibs#0+(byte/signed byte/word/signed word) 2 + (byte) main::i#2) ← (byte~) main::$2
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
if((byte) main::i#1<(byte/signed byte/word/signed word) 15) goto main::@1
|
||||
to:main::@return
|
||||
@ -524,9 +484,7 @@ FINAL SYMBOL TABLE
|
||||
(byte[15]) fibs
|
||||
(const byte[15]) fibs#0 = ((byte*))(word/signed word) 4352
|
||||
(void()) main()
|
||||
(byte~) main::$1
|
||||
(byte~) main::$3
|
||||
(byte~) main::$4
|
||||
(byte~) main::$2
|
||||
(label) main::@1
|
||||
(label) main::@return
|
||||
(byte) main::i
|
||||
@ -549,10 +507,8 @@ main: scope:[main] from @1
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@3
|
||||
(byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word) 0 main::@3/(byte~) main::i#3 )
|
||||
(byte~) main::$1 ← (const byte[15]) fibs#0 *idx (byte) main::i#2
|
||||
(byte~) main::$3 ← (const byte[15]) fibs#0+(byte/signed byte/word/signed word) 1 *idx (byte) main::i#2
|
||||
(byte~) main::$4 ← (byte~) main::$1 + (byte~) main::$3
|
||||
*((const byte[15]) fibs#0+(byte/signed byte/word/signed word) 2 + (byte) main::i#2) ← (byte~) main::$4
|
||||
(byte~) main::$2 ← *((const byte[15]) fibs#0 + (byte) main::i#2) + *((const byte[15]) fibs#0+(byte/signed byte/word/signed word) 1 + (byte) main::i#2)
|
||||
*((const byte[15]) fibs#0+(byte/signed byte/word/signed word) 2 + (byte) main::i#2) ← (byte~) main::$2
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
if((byte) main::i#1<(byte/signed byte/word/signed word) 15) goto main::@3
|
||||
to:main::@return
|
||||
@ -569,7 +525,6 @@ Adding NOP phi() at start of @end
|
||||
CALL GRAPH
|
||||
Calls in [] to main:2
|
||||
|
||||
Propagating live ranges...
|
||||
Propagating live ranges...
|
||||
Propagating live ranges...
|
||||
CONTROL FLOW GRAPH - LIVE RANGES FOUND
|
||||
@ -588,22 +543,20 @@ main: scope:[main] from @1
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@3
|
||||
[6] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word) 0 main::@3/(byte~) main::i#3 ) [ main::i#2 ]
|
||||
[7] (byte~) main::$1 ← (const byte[15]) fibs#0 *idx (byte) main::i#2 [ main::i#2 main::$1 ]
|
||||
[8] (byte~) main::$3 ← (const byte[15]) fibs#0+(byte/signed byte/word/signed word) 1 *idx (byte) main::i#2 [ main::i#2 main::$1 main::$3 ]
|
||||
[9] (byte~) main::$4 ← (byte~) main::$1 + (byte~) main::$3 [ main::i#2 main::$4 ]
|
||||
[10] *((const byte[15]) fibs#0+(byte/signed byte/word/signed word) 2 + (byte) main::i#2) ← (byte~) main::$4 [ main::i#2 ]
|
||||
[11] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ]
|
||||
[12] if((byte) main::i#1<(byte/signed byte/word/signed word) 15) goto main::@3 [ main::i#1 ]
|
||||
[7] (byte~) main::$2 ← *((const byte[15]) fibs#0 + (byte) main::i#2) + *((const byte[15]) fibs#0+(byte/signed byte/word/signed word) 1 + (byte) main::i#2) [ main::i#2 main::$2 ]
|
||||
[8] *((const byte[15]) fibs#0+(byte/signed byte/word/signed word) 2 + (byte) main::i#2) ← (byte~) main::$2 [ main::i#2 ]
|
||||
[9] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ]
|
||||
[10] if((byte) main::i#1<(byte/signed byte/word/signed word) 15) goto main::@3 [ main::i#1 ]
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
[13] return [ ]
|
||||
[11] return [ ]
|
||||
to:@return
|
||||
main::@3: scope:[main] from main::@1
|
||||
[14] (byte~) main::i#3 ← (byte) main::i#1 [ main::i#3 ]
|
||||
[12] (byte~) main::i#3 ← (byte) main::i#1 [ main::i#3 ]
|
||||
to:main::@1
|
||||
|
||||
Created 1 initial phi equivalence classes
|
||||
Coalesced [14] main::i#3 ← main::i#1
|
||||
Coalesced [12] main::i#3 ← main::i#1
|
||||
Coalesced down to 1 phi equivalence classes
|
||||
Culled Empty Block (label) main::@3
|
||||
Block Sequence Planned @begin @1 @end main main::@1 main::@return
|
||||
@ -612,7 +565,6 @@ Adding NOP phi() at start of @1
|
||||
Adding NOP phi() at start of @end
|
||||
Propagating live ranges...
|
||||
Propagating live ranges...
|
||||
Propagating live ranges...
|
||||
CONTROL FLOW GRAPH - BEFORE EFFECTIVE LIVE RANGES
|
||||
@begin: scope:[] from
|
||||
[0] phi() [ ]
|
||||
@ -629,15 +581,13 @@ main: scope:[main] from @1
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
[6] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word) 0 main::@1/(byte) main::i#1 ) [ main::i#2 ]
|
||||
[7] (byte~) main::$1 ← (const byte[15]) fibs#0 *idx (byte) main::i#2 [ main::i#2 main::$1 ]
|
||||
[8] (byte~) main::$3 ← (const byte[15]) fibs#0+(byte/signed byte/word/signed word) 1 *idx (byte) main::i#2 [ main::i#2 main::$1 main::$3 ]
|
||||
[9] (byte~) main::$4 ← (byte~) main::$1 + (byte~) main::$3 [ main::i#2 main::$4 ]
|
||||
[10] *((const byte[15]) fibs#0+(byte/signed byte/word/signed word) 2 + (byte) main::i#2) ← (byte~) main::$4 [ main::i#2 ]
|
||||
[11] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ]
|
||||
[12] if((byte) main::i#1<(byte/signed byte/word/signed word) 15) goto main::@1 [ main::i#1 ]
|
||||
[7] (byte~) main::$2 ← *((const byte[15]) fibs#0 + (byte) main::i#2) + *((const byte[15]) fibs#0+(byte/signed byte/word/signed word) 1 + (byte) main::i#2) [ main::i#2 main::$2 ]
|
||||
[8] *((const byte[15]) fibs#0+(byte/signed byte/word/signed word) 2 + (byte) main::i#2) ← (byte~) main::$2 [ main::i#2 ]
|
||||
[9] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ]
|
||||
[10] if((byte) main::i#1<(byte/signed byte/word/signed word) 15) goto main::@1 [ main::i#1 ]
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
[13] return [ ]
|
||||
[11] return [ ]
|
||||
to:@return
|
||||
|
||||
CONTROL FLOW GRAPH - PHI MEM COALESCED
|
||||
@ -656,15 +606,13 @@ main: scope:[main] from @1
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
[6] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word) 0 main::@1/(byte) main::i#1 ) [ main::i#2 ] ( main:2 [ main::i#2 ] )
|
||||
[7] (byte~) main::$1 ← (const byte[15]) fibs#0 *idx (byte) main::i#2 [ main::i#2 main::$1 ] ( main:2 [ main::i#2 main::$1 ] )
|
||||
[8] (byte~) main::$3 ← (const byte[15]) fibs#0+(byte/signed byte/word/signed word) 1 *idx (byte) main::i#2 [ main::i#2 main::$1 main::$3 ] ( main:2 [ main::i#2 main::$1 main::$3 ] )
|
||||
[9] (byte~) main::$4 ← (byte~) main::$1 + (byte~) main::$3 [ main::i#2 main::$4 ] ( main:2 [ main::i#2 main::$4 ] )
|
||||
[10] *((const byte[15]) fibs#0+(byte/signed byte/word/signed word) 2 + (byte) main::i#2) ← (byte~) main::$4 [ main::i#2 ] ( main:2 [ main::i#2 ] )
|
||||
[11] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] )
|
||||
[12] if((byte) main::i#1<(byte/signed byte/word/signed word) 15) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] )
|
||||
[7] (byte~) main::$2 ← *((const byte[15]) fibs#0 + (byte) main::i#2) + *((const byte[15]) fibs#0+(byte/signed byte/word/signed word) 1 + (byte) main::i#2) [ main::i#2 main::$2 ] ( main:2 [ main::i#2 main::$2 ] )
|
||||
[8] *((const byte[15]) fibs#0+(byte/signed byte/word/signed word) 2 + (byte) main::i#2) ← (byte~) main::$2 [ main::i#2 ] ( main:2 [ main::i#2 ] )
|
||||
[9] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] )
|
||||
[10] if((byte) main::i#1<(byte/signed byte/word/signed word) 15) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] )
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
[13] return [ ] ( main:2 [ ] )
|
||||
[11] return [ ] ( main:2 [ ] )
|
||||
to:@return
|
||||
|
||||
DOMINATORS
|
||||
@ -690,27 +638,19 @@ Loop head: main::@1 tails: main::@1 blocks: main::@1 depth: 1
|
||||
VARIABLE REGISTER WEIGHTS
|
||||
(byte[15]) fibs
|
||||
(void()) main()
|
||||
(byte~) main::$1 11.0
|
||||
(byte~) main::$3 22.0
|
||||
(byte~) main::$4 22.0
|
||||
(byte~) main::$2 22.0
|
||||
(byte) main::i
|
||||
(byte) main::i#1 16.5
|
||||
(byte) main::i#2 11.0
|
||||
(byte) main::i#2 18.333333333333332
|
||||
|
||||
Initial phi equivalence classes
|
||||
[ main::i#2 main::i#1 ]
|
||||
Added variable main::$1 to zero page equivalence class [ main::$1 ]
|
||||
Added variable main::$3 to zero page equivalence class [ main::$3 ]
|
||||
Added variable main::$4 to zero page equivalence class [ main::$4 ]
|
||||
Added variable main::$2 to zero page equivalence class [ main::$2 ]
|
||||
Complete equivalence classes
|
||||
[ main::i#2 main::i#1 ]
|
||||
[ main::$1 ]
|
||||
[ main::$3 ]
|
||||
[ main::$4 ]
|
||||
[ main::$2 ]
|
||||
Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
|
||||
Allocated zp ZP_BYTE:3 [ main::$1 ]
|
||||
Allocated zp ZP_BYTE:4 [ main::$3 ]
|
||||
Allocated zp ZP_BYTE:5 [ main::$4 ]
|
||||
Allocated zp ZP_BYTE:3 [ main::$2 ]
|
||||
INITIAL ASM
|
||||
//SEG0 Basic Upstart
|
||||
.pc = $801 "Basic"
|
||||
@ -734,9 +674,7 @@ bend_from_b1:
|
||||
bend:
|
||||
//SEG8 main
|
||||
main: {
|
||||
.label _1 = 3
|
||||
.label _3 = 4
|
||||
.label _4 = 5
|
||||
.label _2 = 3
|
||||
.label i = 2
|
||||
//SEG9 [4] *((const byte[15]) fibs#0+(byte/signed byte/word/signed word) 0) ← (byte/signed byte/word/signed word) 0 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2
|
||||
lda #0
|
||||
@ -756,50 +694,45 @@ main: {
|
||||
jmp b1
|
||||
//SEG15 main::@1
|
||||
b1:
|
||||
//SEG16 [7] (byte~) main::$1 ← (const byte[15]) fibs#0 *idx (byte) main::i#2 [ main::i#2 main::$1 ] ( main:2 [ main::i#2 main::$1 ] ) -- vbuz1=pbuc1_derefidx_vbuz2
|
||||
ldx i
|
||||
//SEG16 [7] (byte~) main::$2 ← *((const byte[15]) fibs#0 + (byte) main::i#2) + *((const byte[15]) fibs#0+(byte/signed byte/word/signed word) 1 + (byte) main::i#2) [ main::i#2 main::$2 ] ( main:2 [ main::i#2 main::$2 ] ) -- vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc2_derefidx_vbuz2
|
||||
lda fibs,x
|
||||
sta _1
|
||||
//SEG17 [8] (byte~) main::$3 ← (const byte[15]) fibs#0+(byte/signed byte/word/signed word) 1 *idx (byte) main::i#2 [ main::i#2 main::$1 main::$3 ] ( main:2 [ main::i#2 main::$1 main::$3 ] ) -- vbuz1=pbuc1_derefidx_vbuz2
|
||||
ldx i
|
||||
lda fibs+1,x
|
||||
sta _3
|
||||
//SEG18 [9] (byte~) main::$4 ← (byte~) main::$1 + (byte~) main::$3 [ main::i#2 main::$4 ] ( main:2 [ main::i#2 main::$4 ] ) -- vbuz1=vbuz2_plus_vbuz3
|
||||
lda _1
|
||||
clc
|
||||
adc _3
|
||||
sta _4
|
||||
//SEG19 [10] *((const byte[15]) fibs#0+(byte/signed byte/word/signed word) 2 + (byte) main::i#2) ← (byte~) main::$4 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuz1=vbuz2
|
||||
lda _4
|
||||
adc fibs+1,x
|
||||
ldx i
|
||||
sta _2
|
||||
//SEG17 [8] *((const byte[15]) fibs#0+(byte/signed byte/word/signed word) 2 + (byte) main::i#2) ← (byte~) main::$2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuz1=vbuz2
|
||||
lda _2
|
||||
ldx i
|
||||
sta fibs+2,x
|
||||
//SEG20 [11] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1=_inc_vbuz1
|
||||
//SEG18 [9] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1=_inc_vbuz1
|
||||
inc i
|
||||
//SEG21 [12] if((byte) main::i#1<(byte/signed byte/word/signed word) 15) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1_lt_vbuc1_then_la1
|
||||
//SEG19 [10] if((byte) main::i#1<(byte/signed byte/word/signed word) 15) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1_lt_vbuc1_then_la1
|
||||
lda i
|
||||
cmp #$f
|
||||
bcc b1_from_b1
|
||||
jmp breturn
|
||||
//SEG22 main::@return
|
||||
//SEG20 main::@return
|
||||
breturn:
|
||||
//SEG23 [13] return [ ] ( main:2 [ ] )
|
||||
//SEG21 [11] return [ ] ( main:2 [ ] )
|
||||
rts
|
||||
}
|
||||
|
||||
REGISTER UPLIFT POTENTIAL REGISTERS
|
||||
Equivalence Class zp ZP_BYTE:4 [ main::$3 ] has ALU potential.
|
||||
Statement [4] *((const byte[15]) fibs#0+(byte/signed byte/word/signed word) 0) ← (byte/signed byte/word/signed word) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
Statement [5] *((const byte[15]) fibs#0+(byte/signed byte/word/signed word) 1) ← (byte/signed byte/word/signed word) 1 [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:3 [ main::$1 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:4 [ main::$3 ] : zp ZP_BYTE:4 , reg byte a , reg byte x , reg byte y , reg byte alu ,
|
||||
Potential registers zp ZP_BYTE:5 [ main::$4 ] : zp ZP_BYTE:5 , reg byte a , reg byte x , reg byte y ,
|
||||
Statement [7] (byte~) main::$2 ← *((const byte[15]) fibs#0 + (byte) main::i#2) + *((const byte[15]) fibs#0+(byte/signed byte/word/signed word) 1 + (byte) main::i#2) [ main::i#2 main::$2 ] ( main:2 [ main::i#2 main::$2 ] ) always clobbers reg byte a
|
||||
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
|
||||
Statement [4] *((const byte[15]) fibs#0+(byte/signed byte/word/signed word) 0) ← (byte/signed byte/word/signed word) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
Statement [5] *((const byte[15]) fibs#0+(byte/signed byte/word/signed word) 1) ← (byte/signed byte/word/signed word) 1 [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
Statement [7] (byte~) main::$2 ← *((const byte[15]) fibs#0 + (byte) main::i#2) + *((const byte[15]) fibs#0+(byte/signed byte/word/signed word) 1 + (byte) main::i#2) [ main::i#2 main::$2 ] ( main:2 [ main::i#2 main::$2 ] ) always clobbers reg byte a
|
||||
Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:3 [ main::$2 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y ,
|
||||
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [main] 27.5: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] 22: zp ZP_BYTE:4 [ main::$3 ] 22: zp ZP_BYTE:5 [ main::$4 ] 11: zp ZP_BYTE:3 [ main::$1 ]
|
||||
Uplift Scope [main] 34.83: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] 22: zp ZP_BYTE:3 [ main::$2 ]
|
||||
Uplift Scope []
|
||||
|
||||
Uplifting [main] best 365 combination reg byte x [ main::i#2 main::i#1 ] reg byte alu [ main::$3 ] reg byte a [ main::$4 ] reg byte a [ main::$1 ]
|
||||
Uplifting [main] best 365 combination reg byte x [ main::i#2 main::i#1 ] reg byte a [ main::$2 ]
|
||||
Uplifting [] best 365 combination
|
||||
|
||||
ASSEMBLER BEFORE OPTIMIZATION
|
||||
@ -842,24 +775,21 @@ main: {
|
||||
jmp b1
|
||||
//SEG15 main::@1
|
||||
b1:
|
||||
//SEG16 [7] (byte~) main::$1 ← (const byte[15]) fibs#0 *idx (byte) main::i#2 [ main::i#2 main::$1 ] ( main:2 [ main::i#2 main::$1 ] ) -- vbuaa=pbuc1_derefidx_vbuxx
|
||||
//SEG16 [7] (byte~) main::$2 ← *((const byte[15]) fibs#0 + (byte) main::i#2) + *((const byte[15]) fibs#0+(byte/signed byte/word/signed word) 1 + (byte) main::i#2) [ main::i#2 main::$2 ] ( main:2 [ main::i#2 main::$2 ] ) -- vbuaa=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuxx
|
||||
lda fibs,x
|
||||
//SEG17 [8] (byte~) main::$3 ← (const byte[15]) fibs#0+(byte/signed byte/word/signed word) 1 *idx (byte) main::i#2 [ main::i#2 main::$1 main::$3 ] ( main:2 [ main::i#2 main::$1 main::$3 ] )
|
||||
// [8] main::$3 ← fibs#0+1 *idx main::i#2 // ALU
|
||||
//SEG18 [9] (byte~) main::$4 ← (byte~) main::$1 + (byte~) main::$3 [ main::i#2 main::$4 ] ( main:2 [ main::i#2 main::$4 ] ) -- vbuaa=vbuaa_plus_pbuc1_derefidx_vbuxx
|
||||
clc
|
||||
adc fibs+1,x
|
||||
//SEG19 [10] *((const byte[15]) fibs#0+(byte/signed byte/word/signed word) 2 + (byte) main::i#2) ← (byte~) main::$4 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa
|
||||
//SEG17 [8] *((const byte[15]) fibs#0+(byte/signed byte/word/signed word) 2 + (byte) main::i#2) ← (byte~) main::$2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa
|
||||
sta fibs+2,x
|
||||
//SEG20 [11] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx=_inc_vbuxx
|
||||
//SEG18 [9] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx=_inc_vbuxx
|
||||
inx
|
||||
//SEG21 [12] if((byte) main::i#1<(byte/signed byte/word/signed word) 15) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx_lt_vbuc1_then_la1
|
||||
//SEG19 [10] if((byte) main::i#1<(byte/signed byte/word/signed word) 15) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx_lt_vbuc1_then_la1
|
||||
cpx #$f
|
||||
bcc b1_from_b1
|
||||
jmp breturn
|
||||
//SEG22 main::@return
|
||||
//SEG20 main::@return
|
||||
breturn:
|
||||
//SEG23 [13] return [ ] ( main:2 [ ] )
|
||||
//SEG21 [11] return [ ] ( main:2 [ ] )
|
||||
rts
|
||||
}
|
||||
|
||||
@ -890,19 +820,15 @@ FINAL SYMBOL TABLE
|
||||
(byte[15]) fibs
|
||||
(const byte[15]) fibs#0 fibs = ((byte*))(word/signed word) 4352
|
||||
(void()) main()
|
||||
(byte~) main::$1 reg byte a 11.0
|
||||
(byte~) main::$3 reg byte alu 22.0
|
||||
(byte~) main::$4 reg byte a 22.0
|
||||
(byte~) main::$2 reg byte a 22.0
|
||||
(label) main::@1
|
||||
(label) main::@return
|
||||
(byte) main::i
|
||||
(byte) main::i#1 reg byte x 16.5
|
||||
(byte) main::i#2 reg byte x 11.0
|
||||
(byte) main::i#2 reg byte x 18.333333333333332
|
||||
|
||||
reg byte x [ main::i#2 main::i#1 ]
|
||||
reg byte a [ main::$1 ]
|
||||
reg byte alu [ main::$3 ]
|
||||
reg byte a [ main::$4 ]
|
||||
reg byte a [ main::$2 ]
|
||||
|
||||
FINAL CODE
|
||||
//SEG0 Basic Upstart
|
||||
@ -933,22 +859,19 @@ main: {
|
||||
//SEG14 [6] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@1->main::@1#0] -- register_copy
|
||||
//SEG15 main::@1
|
||||
b1:
|
||||
//SEG16 [7] (byte~) main::$1 ← (const byte[15]) fibs#0 *idx (byte) main::i#2 [ main::i#2 main::$1 ] ( main:2 [ main::i#2 main::$1 ] ) -- vbuaa=pbuc1_derefidx_vbuxx
|
||||
//SEG16 [7] (byte~) main::$2 ← *((const byte[15]) fibs#0 + (byte) main::i#2) + *((const byte[15]) fibs#0+(byte/signed byte/word/signed word) 1 + (byte) main::i#2) [ main::i#2 main::$2 ] ( main:2 [ main::i#2 main::$2 ] ) -- vbuaa=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuxx
|
||||
lda fibs,x
|
||||
//SEG17 [8] (byte~) main::$3 ← (const byte[15]) fibs#0+(byte/signed byte/word/signed word) 1 *idx (byte) main::i#2 [ main::i#2 main::$1 main::$3 ] ( main:2 [ main::i#2 main::$1 main::$3 ] )
|
||||
// [8] main::$3 ← fibs#0+1 *idx main::i#2 // ALU
|
||||
//SEG18 [9] (byte~) main::$4 ← (byte~) main::$1 + (byte~) main::$3 [ main::i#2 main::$4 ] ( main:2 [ main::i#2 main::$4 ] ) -- vbuaa=vbuaa_plus_pbuc1_derefidx_vbuxx
|
||||
clc
|
||||
adc fibs+1,x
|
||||
//SEG19 [10] *((const byte[15]) fibs#0+(byte/signed byte/word/signed word) 2 + (byte) main::i#2) ← (byte~) main::$4 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa
|
||||
//SEG17 [8] *((const byte[15]) fibs#0+(byte/signed byte/word/signed word) 2 + (byte) main::i#2) ← (byte~) main::$2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa
|
||||
sta fibs+2,x
|
||||
//SEG20 [11] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx=_inc_vbuxx
|
||||
//SEG18 [9] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx=_inc_vbuxx
|
||||
inx
|
||||
//SEG21 [12] if((byte) main::i#1<(byte/signed byte/word/signed word) 15) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx_lt_vbuc1_then_la1
|
||||
//SEG19 [10] if((byte) main::i#1<(byte/signed byte/word/signed word) 15) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx_lt_vbuc1_then_la1
|
||||
cpx #$f
|
||||
bcc b1
|
||||
//SEG22 main::@return
|
||||
//SEG23 [13] return [ ] ( main:2 [ ] )
|
||||
//SEG20 main::@return
|
||||
//SEG21 [11] return [ ] ( main:2 [ ] )
|
||||
rts
|
||||
}
|
||||
|
||||
|
@ -4,16 +4,12 @@
|
||||
(byte[15]) fibs
|
||||
(const byte[15]) fibs#0 fibs = ((byte*))(word/signed word) 4352
|
||||
(void()) main()
|
||||
(byte~) main::$1 reg byte a 11.0
|
||||
(byte~) main::$3 reg byte alu 22.0
|
||||
(byte~) main::$4 reg byte a 22.0
|
||||
(byte~) main::$2 reg byte a 22.0
|
||||
(label) main::@1
|
||||
(label) main::@return
|
||||
(byte) main::i
|
||||
(byte) main::i#1 reg byte x 16.5
|
||||
(byte) main::i#2 reg byte x 11.0
|
||||
(byte) main::i#2 reg byte x 18.333333333333332
|
||||
|
||||
reg byte x [ main::i#2 main::i#1 ]
|
||||
reg byte a [ main::$1 ]
|
||||
reg byte alu [ main::$3 ]
|
||||
reg byte a [ main::$4 ]
|
||||
reg byte a [ main::$2 ]
|
||||
|
@ -61,23 +61,23 @@ flip: {
|
||||
.label r = 4
|
||||
lda #$10
|
||||
sta r
|
||||
ldy #$f
|
||||
ldx #0
|
||||
ldx #$f
|
||||
ldy #0
|
||||
b1:
|
||||
lda #$10
|
||||
sta c
|
||||
b2:
|
||||
lda buffer1,x
|
||||
sta buffer2,y
|
||||
inx
|
||||
tya
|
||||
lda buffer1,y
|
||||
sta buffer2,x
|
||||
iny
|
||||
txa
|
||||
clc
|
||||
adc #$10
|
||||
tay
|
||||
tax
|
||||
dec c
|
||||
lda c
|
||||
bne b2
|
||||
dey
|
||||
dex
|
||||
dec r
|
||||
lda r
|
||||
bne b1
|
||||
|
@ -47,63 +47,60 @@ plot::@1: scope:[plot] from plot plot::@3
|
||||
plot::@2: scope:[plot] from plot::@1 plot::@2
|
||||
[19] (byte) plot::x#2 ← phi( plot::@1/(byte/signed byte/word/signed word) 0 plot::@2/(byte) plot::x#1 ) [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] )
|
||||
[19] (byte) plot::i#2 ← phi( plot::@1/(byte) plot::i#3 plot::@2/(byte) plot::i#1 ) [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] )
|
||||
[20] (byte~) plot::$3 ← (const byte[256]) buffer1#0 *idx (byte) plot::i#2 [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 plot::$3 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 plot::$3 ] )
|
||||
[21] *((byte*) plot::line#4 + (byte) plot::x#2) ← (byte~) plot::$3 [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] )
|
||||
[22] (byte) plot::i#1 ← ++ (byte) plot::i#2 [ plot::line#4 plot::y#4 plot::i#1 plot::x#2 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#1 plot::x#2 ] )
|
||||
[23] (byte) plot::x#1 ← ++ (byte) plot::x#2 [ plot::line#4 plot::y#4 plot::i#1 plot::x#1 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#1 plot::x#1 ] )
|
||||
[24] if((byte) plot::x#1<(byte/signed byte/word/signed word) 16) goto plot::@2 [ plot::line#4 plot::y#4 plot::i#1 plot::x#1 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#1 plot::x#1 ] )
|
||||
[20] *((byte*) plot::line#4 + (byte) plot::x#2) ← *((const byte[256]) buffer1#0 + (byte) plot::i#2) [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] )
|
||||
[21] (byte) plot::i#1 ← ++ (byte) plot::i#2 [ plot::line#4 plot::y#4 plot::i#1 plot::x#2 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#1 plot::x#2 ] )
|
||||
[22] (byte) plot::x#1 ← ++ (byte) plot::x#2 [ plot::line#4 plot::y#4 plot::i#1 plot::x#1 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#1 plot::x#1 ] )
|
||||
[23] if((byte) plot::x#1<(byte/signed byte/word/signed word) 16) goto plot::@2 [ plot::line#4 plot::y#4 plot::i#1 plot::x#1 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#1 plot::x#1 ] )
|
||||
to:plot::@3
|
||||
plot::@3: scope:[plot] from plot::@2
|
||||
[25] (byte*) plot::line#1 ← (byte*) plot::line#4 + (byte/signed byte/word/signed word) 40 [ plot::y#4 plot::i#1 plot::line#1 ] ( main:2::plot:14 [ plot::y#4 plot::i#1 plot::line#1 ] )
|
||||
[26] (byte) plot::y#1 ← -- (byte) plot::y#4 [ plot::i#1 plot::line#1 plot::y#1 ] ( main:2::plot:14 [ plot::i#1 plot::line#1 plot::y#1 ] )
|
||||
[27] if((byte) plot::y#1!=(byte/signed byte/word/signed word) 0) goto plot::@1 [ plot::i#1 plot::line#1 plot::y#1 ] ( main:2::plot:14 [ plot::i#1 plot::line#1 plot::y#1 ] )
|
||||
[24] (byte*) plot::line#1 ← (byte*) plot::line#4 + (byte/signed byte/word/signed word) 40 [ plot::y#4 plot::i#1 plot::line#1 ] ( main:2::plot:14 [ plot::y#4 plot::i#1 plot::line#1 ] )
|
||||
[25] (byte) plot::y#1 ← -- (byte) plot::y#4 [ plot::i#1 plot::line#1 plot::y#1 ] ( main:2::plot:14 [ plot::i#1 plot::line#1 plot::y#1 ] )
|
||||
[26] if((byte) plot::y#1!=(byte/signed byte/word/signed word) 0) goto plot::@1 [ plot::i#1 plot::line#1 plot::y#1 ] ( main:2::plot:14 [ plot::i#1 plot::line#1 plot::y#1 ] )
|
||||
to:plot::@return
|
||||
plot::@return: scope:[plot] from plot::@3
|
||||
[28] return [ ] ( main:2::plot:14 [ ] )
|
||||
[27] return [ ] ( main:2::plot:14 [ ] )
|
||||
to:@return
|
||||
flip: scope:[flip] from main::@7
|
||||
[29] phi() [ ] ( main:2::flip:12 [ ] )
|
||||
[28] phi() [ ] ( main:2::flip:12 [ ] )
|
||||
to:flip::@1
|
||||
flip::@1: scope:[flip] from flip flip::@4
|
||||
[30] (byte) flip::r#4 ← phi( flip/(byte/signed byte/word/signed word) 16 flip::@4/(byte) flip::r#1 ) [ flip::srcIdx#3 flip::dstIdx#5 flip::r#4 ] ( main:2::flip:12 [ flip::srcIdx#3 flip::dstIdx#5 flip::r#4 ] )
|
||||
[30] (byte) flip::dstIdx#5 ← phi( flip/(byte/signed byte/word/signed word) 15 flip::@4/(byte) flip::dstIdx#2 ) [ flip::srcIdx#3 flip::dstIdx#5 flip::r#4 ] ( main:2::flip:12 [ flip::srcIdx#3 flip::dstIdx#5 flip::r#4 ] )
|
||||
[30] (byte) flip::srcIdx#3 ← phi( flip/(byte/signed byte/word/signed word) 0 flip::@4/(byte) flip::srcIdx#1 ) [ flip::srcIdx#3 flip::dstIdx#5 flip::r#4 ] ( main:2::flip:12 [ flip::srcIdx#3 flip::dstIdx#5 flip::r#4 ] )
|
||||
[29] (byte) flip::r#4 ← phi( flip/(byte/signed byte/word/signed word) 16 flip::@4/(byte) flip::r#1 ) [ flip::srcIdx#3 flip::dstIdx#5 flip::r#4 ] ( main:2::flip:12 [ flip::srcIdx#3 flip::dstIdx#5 flip::r#4 ] )
|
||||
[29] (byte) flip::dstIdx#5 ← phi( flip/(byte/signed byte/word/signed word) 15 flip::@4/(byte) flip::dstIdx#2 ) [ flip::srcIdx#3 flip::dstIdx#5 flip::r#4 ] ( main:2::flip:12 [ flip::srcIdx#3 flip::dstIdx#5 flip::r#4 ] )
|
||||
[29] (byte) flip::srcIdx#3 ← phi( flip/(byte/signed byte/word/signed word) 0 flip::@4/(byte) flip::srcIdx#1 ) [ flip::srcIdx#3 flip::dstIdx#5 flip::r#4 ] ( main:2::flip:12 [ flip::srcIdx#3 flip::dstIdx#5 flip::r#4 ] )
|
||||
to:flip::@2
|
||||
flip::@2: scope:[flip] from flip::@1 flip::@2
|
||||
[31] (byte) flip::c#2 ← phi( flip::@1/(byte/signed byte/word/signed word) 16 flip::@2/(byte) flip::c#1 ) [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] )
|
||||
[31] (byte) flip::dstIdx#3 ← phi( flip::@1/(byte) flip::dstIdx#5 flip::@2/(byte) flip::dstIdx#1 ) [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] )
|
||||
[31] (byte) flip::srcIdx#2 ← phi( flip::@1/(byte) flip::srcIdx#3 flip::@2/(byte) flip::srcIdx#1 ) [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] )
|
||||
[32] (byte~) flip::$0 ← (const byte[256]) buffer1#0 *idx (byte) flip::srcIdx#2 [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 flip::$0 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 flip::$0 ] )
|
||||
[33] *((const byte[256]) buffer2#0 + (byte) flip::dstIdx#3) ← (byte~) flip::$0 [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] )
|
||||
[34] (byte) flip::srcIdx#1 ← ++ (byte) flip::srcIdx#2 [ flip::r#4 flip::srcIdx#1 flip::dstIdx#3 flip::c#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#1 flip::dstIdx#3 flip::c#2 ] )
|
||||
[35] (byte) flip::dstIdx#1 ← (byte) flip::dstIdx#3 + (byte/signed byte/word/signed word) 16 [ flip::r#4 flip::srcIdx#1 flip::c#2 flip::dstIdx#1 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#1 flip::c#2 flip::dstIdx#1 ] )
|
||||
[36] (byte) flip::c#1 ← -- (byte) flip::c#2 [ flip::r#4 flip::srcIdx#1 flip::dstIdx#1 flip::c#1 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#1 flip::dstIdx#1 flip::c#1 ] )
|
||||
[37] if((byte) flip::c#1!=(byte/signed byte/word/signed word) 0) goto flip::@2 [ flip::r#4 flip::srcIdx#1 flip::dstIdx#1 flip::c#1 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#1 flip::dstIdx#1 flip::c#1 ] )
|
||||
[30] (byte) flip::c#2 ← phi( flip::@1/(byte/signed byte/word/signed word) 16 flip::@2/(byte) flip::c#1 ) [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] )
|
||||
[30] (byte) flip::dstIdx#3 ← phi( flip::@1/(byte) flip::dstIdx#5 flip::@2/(byte) flip::dstIdx#1 ) [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] )
|
||||
[30] (byte) flip::srcIdx#2 ← phi( flip::@1/(byte) flip::srcIdx#3 flip::@2/(byte) flip::srcIdx#1 ) [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] )
|
||||
[31] *((const byte[256]) buffer2#0 + (byte) flip::dstIdx#3) ← *((const byte[256]) buffer1#0 + (byte) flip::srcIdx#2) [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] )
|
||||
[32] (byte) flip::srcIdx#1 ← ++ (byte) flip::srcIdx#2 [ flip::r#4 flip::srcIdx#1 flip::dstIdx#3 flip::c#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#1 flip::dstIdx#3 flip::c#2 ] )
|
||||
[33] (byte) flip::dstIdx#1 ← (byte) flip::dstIdx#3 + (byte/signed byte/word/signed word) 16 [ flip::r#4 flip::srcIdx#1 flip::c#2 flip::dstIdx#1 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#1 flip::c#2 flip::dstIdx#1 ] )
|
||||
[34] (byte) flip::c#1 ← -- (byte) flip::c#2 [ flip::r#4 flip::srcIdx#1 flip::dstIdx#1 flip::c#1 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#1 flip::dstIdx#1 flip::c#1 ] )
|
||||
[35] if((byte) flip::c#1!=(byte/signed byte/word/signed word) 0) goto flip::@2 [ flip::r#4 flip::srcIdx#1 flip::dstIdx#1 flip::c#1 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#1 flip::dstIdx#1 flip::c#1 ] )
|
||||
to:flip::@4
|
||||
flip::@4: scope:[flip] from flip::@2
|
||||
[38] (byte) flip::dstIdx#2 ← -- (byte) flip::dstIdx#1 [ flip::r#4 flip::srcIdx#1 flip::dstIdx#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#1 flip::dstIdx#2 ] )
|
||||
[39] (byte) flip::r#1 ← -- (byte) flip::r#4 [ flip::srcIdx#1 flip::dstIdx#2 flip::r#1 ] ( main:2::flip:12 [ flip::srcIdx#1 flip::dstIdx#2 flip::r#1 ] )
|
||||
[40] if((byte) flip::r#1!=(byte/signed byte/word/signed word) 0) goto flip::@1 [ flip::srcIdx#1 flip::dstIdx#2 flip::r#1 ] ( main:2::flip:12 [ flip::srcIdx#1 flip::dstIdx#2 flip::r#1 ] )
|
||||
[36] (byte) flip::dstIdx#2 ← -- (byte) flip::dstIdx#1 [ flip::r#4 flip::srcIdx#1 flip::dstIdx#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#1 flip::dstIdx#2 ] )
|
||||
[37] (byte) flip::r#1 ← -- (byte) flip::r#4 [ flip::srcIdx#1 flip::dstIdx#2 flip::r#1 ] ( main:2::flip:12 [ flip::srcIdx#1 flip::dstIdx#2 flip::r#1 ] )
|
||||
[38] if((byte) flip::r#1!=(byte/signed byte/word/signed word) 0) goto flip::@1 [ flip::srcIdx#1 flip::dstIdx#2 flip::r#1 ] ( main:2::flip:12 [ flip::srcIdx#1 flip::dstIdx#2 flip::r#1 ] )
|
||||
to:flip::@3
|
||||
flip::@3: scope:[flip] from flip::@3 flip::@4
|
||||
[41] (byte) flip::i#2 ← phi( flip::@3/(byte) flip::i#1 flip::@4/(byte/signed byte/word/signed word) 0 ) [ flip::i#2 ] ( main:2::flip:12 [ flip::i#2 ] )
|
||||
[42] (byte~) flip::$4 ← (const byte[256]) buffer2#0 *idx (byte) flip::i#2 [ flip::i#2 flip::$4 ] ( main:2::flip:12 [ flip::i#2 flip::$4 ] )
|
||||
[43] *((const byte[256]) buffer1#0 + (byte) flip::i#2) ← (byte~) flip::$4 [ flip::i#2 ] ( main:2::flip:12 [ flip::i#2 ] )
|
||||
[44] (byte) flip::i#1 ← ++ (byte) flip::i#2 [ flip::i#1 ] ( main:2::flip:12 [ flip::i#1 ] )
|
||||
[45] if((byte) flip::i#1!=(byte/signed byte/word/signed word) 0) goto flip::@3 [ flip::i#1 ] ( main:2::flip:12 [ flip::i#1 ] )
|
||||
[39] (byte) flip::i#2 ← phi( flip::@3/(byte) flip::i#1 flip::@4/(byte/signed byte/word/signed word) 0 ) [ flip::i#2 ] ( main:2::flip:12 [ flip::i#2 ] )
|
||||
[40] *((const byte[256]) buffer1#0 + (byte) flip::i#2) ← *((const byte[256]) buffer2#0 + (byte) flip::i#2) [ flip::i#2 ] ( main:2::flip:12 [ flip::i#2 ] )
|
||||
[41] (byte) flip::i#1 ← ++ (byte) flip::i#2 [ flip::i#1 ] ( main:2::flip:12 [ flip::i#1 ] )
|
||||
[42] if((byte) flip::i#1!=(byte/signed byte/word/signed word) 0) goto flip::@3 [ flip::i#1 ] ( main:2::flip:12 [ flip::i#1 ] )
|
||||
to:flip::@return
|
||||
flip::@return: scope:[flip] from flip::@3
|
||||
[46] return [ ] ( main:2::flip:12 [ ] )
|
||||
[43] return [ ] ( main:2::flip:12 [ ] )
|
||||
to:@return
|
||||
prepare: scope:[prepare] from main
|
||||
[47] phi() [ ] ( main:2::prepare:5 [ ] )
|
||||
[44] phi() [ ] ( main:2::prepare:5 [ ] )
|
||||
to:prepare::@1
|
||||
prepare::@1: scope:[prepare] from prepare prepare::@1
|
||||
[48] (byte) prepare::i#2 ← phi( prepare/(byte/signed byte/word/signed word) 0 prepare::@1/(byte) prepare::i#1 ) [ prepare::i#2 ] ( main:2::prepare:5 [ prepare::i#2 ] )
|
||||
[49] *((const byte[256]) buffer1#0 + (byte) prepare::i#2) ← (byte) prepare::i#2 [ prepare::i#2 ] ( main:2::prepare:5 [ prepare::i#2 ] )
|
||||
[50] (byte) prepare::i#1 ← ++ (byte) prepare::i#2 [ prepare::i#1 ] ( main:2::prepare:5 [ prepare::i#1 ] )
|
||||
[51] if((byte) prepare::i#1!=(byte/signed byte/word/signed word) 0) goto prepare::@1 [ prepare::i#1 ] ( main:2::prepare:5 [ prepare::i#1 ] )
|
||||
[45] (byte) prepare::i#2 ← phi( prepare/(byte/signed byte/word/signed word) 0 prepare::@1/(byte) prepare::i#1 ) [ prepare::i#2 ] ( main:2::prepare:5 [ prepare::i#2 ] )
|
||||
[46] *((const byte[256]) buffer1#0 + (byte) prepare::i#2) ← (byte) prepare::i#2 [ prepare::i#2 ] ( main:2::prepare:5 [ prepare::i#2 ] )
|
||||
[47] (byte) prepare::i#1 ← ++ (byte) prepare::i#2 [ prepare::i#1 ] ( main:2::prepare:5 [ prepare::i#1 ] )
|
||||
[48] if((byte) prepare::i#1!=(byte/signed byte/word/signed word) 0) goto prepare::@1 [ prepare::i#1 ] ( main:2::prepare:5 [ prepare::i#1 ] )
|
||||
to:prepare::@return
|
||||
prepare::@return: scope:[prepare] from prepare::@1
|
||||
[52] return [ ] ( main:2::prepare:5 [ ] )
|
||||
[49] return [ ] ( main:2::prepare:5 [ ] )
|
||||
to:@return
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -10,8 +10,6 @@
|
||||
(byte[256]) buffer2
|
||||
(const byte[256]) buffer2#0 buffer2 = ((byte*))(word/signed word) 4352
|
||||
(void()) flip()
|
||||
(byte~) flip::$0 reg byte a 2002.0
|
||||
(byte~) flip::$4 reg byte a 202.0
|
||||
(label) flip::@1
|
||||
(label) flip::@2
|
||||
(label) flip::@3
|
||||
@ -19,22 +17,22 @@
|
||||
(label) flip::@return
|
||||
(byte) flip::c
|
||||
(byte) flip::c#1 c zp ZP_BYTE:5 1501.5
|
||||
(byte) flip::c#2 c zp ZP_BYTE:5 400.4
|
||||
(byte) flip::c#2 c zp ZP_BYTE:5 500.5
|
||||
(byte) flip::dstIdx
|
||||
(byte) flip::dstIdx#1 reg byte y 701.0
|
||||
(byte) flip::dstIdx#2 reg byte y 67.33333333333333
|
||||
(byte) flip::dstIdx#3 reg byte y 776.0
|
||||
(byte) flip::dstIdx#5 reg byte y 202.0
|
||||
(byte) flip::dstIdx#1 reg byte x 701.0
|
||||
(byte) flip::dstIdx#2 reg byte x 67.33333333333333
|
||||
(byte) flip::dstIdx#3 reg byte x 1034.6666666666667
|
||||
(byte) flip::dstIdx#5 reg byte x 202.0
|
||||
(byte) flip::i
|
||||
(byte) flip::i#1 reg byte x 151.5
|
||||
(byte) flip::i#2 reg byte x 134.66666666666666
|
||||
(byte) flip::i#2 reg byte x 202.0
|
||||
(byte) flip::r
|
||||
(byte) flip::r#1 r zp ZP_BYTE:4 151.5
|
||||
(byte) flip::r#4 r zp ZP_BYTE:4 22.444444444444443
|
||||
(byte) flip::r#4 r zp ZP_BYTE:4 25.25
|
||||
(byte) flip::srcIdx
|
||||
(byte) flip::srcIdx#1 reg byte x 300.42857142857144
|
||||
(byte) flip::srcIdx#2 reg byte x 1034.6666666666667
|
||||
(byte) flip::srcIdx#3 reg byte x 202.0
|
||||
(byte) flip::srcIdx#1 reg byte y 300.42857142857144
|
||||
(byte) flip::srcIdx#2 reg byte y 1552.0
|
||||
(byte) flip::srcIdx#3 reg byte y 202.0
|
||||
(void()) main()
|
||||
(label) main::@10
|
||||
(label) main::@11
|
||||
@ -47,24 +45,23 @@
|
||||
(byte) main::c#1 reg byte x 151.5
|
||||
(byte) main::c#4 reg byte x 67.33333333333333
|
||||
(void()) plot()
|
||||
(byte~) plot::$3 reg byte a 2002.0
|
||||
(label) plot::@1
|
||||
(label) plot::@2
|
||||
(label) plot::@3
|
||||
(label) plot::@return
|
||||
(byte) plot::i
|
||||
(byte) plot::i#1 reg byte x 350.5
|
||||
(byte) plot::i#2 reg byte x 1034.6666666666667
|
||||
(byte) plot::i#2 reg byte x 1552.0
|
||||
(byte) plot::i#3 reg byte x 202.0
|
||||
(byte*) plot::line
|
||||
(byte*) plot::line#1 line zp ZP_WORD:2 67.33333333333333
|
||||
(byte*) plot::line#4 line zp ZP_WORD:2 171.85714285714283
|
||||
(byte*) plot::line#4 line zp ZP_WORD:2 200.50000000000003
|
||||
(byte) plot::x
|
||||
(byte) plot::x#1 reg byte y 1501.5
|
||||
(byte) plot::x#2 reg byte y 750.75
|
||||
(byte) plot::x#2 reg byte y 1001.0
|
||||
(byte) plot::y
|
||||
(byte) plot::y#1 y zp ZP_BYTE:4 151.5
|
||||
(byte) plot::y#4 y zp ZP_BYTE:4 25.25
|
||||
(byte) plot::y#4 y zp ZP_BYTE:4 28.857142857142858
|
||||
(void()) prepare()
|
||||
(label) prepare::@1
|
||||
(label) prepare::@return
|
||||
@ -77,11 +74,8 @@ zp ZP_WORD:2 [ plot::line#4 plot::line#1 ]
|
||||
zp ZP_BYTE:4 [ plot::y#4 plot::y#1 flip::r#4 flip::r#1 ]
|
||||
reg byte x [ plot::i#2 plot::i#3 plot::i#1 ]
|
||||
reg byte y [ plot::x#2 plot::x#1 ]
|
||||
reg byte x [ flip::srcIdx#2 flip::srcIdx#3 flip::srcIdx#1 ]
|
||||
reg byte y [ flip::dstIdx#3 flip::dstIdx#5 flip::dstIdx#2 flip::dstIdx#1 ]
|
||||
reg byte y [ flip::srcIdx#2 flip::srcIdx#3 flip::srcIdx#1 ]
|
||||
reg byte x [ flip::dstIdx#3 flip::dstIdx#5 flip::dstIdx#2 flip::dstIdx#1 ]
|
||||
zp ZP_BYTE:5 [ flip::c#2 flip::c#1 ]
|
||||
reg byte x [ flip::i#2 flip::i#1 ]
|
||||
reg byte x [ prepare::i#2 prepare::i#1 ]
|
||||
reg byte a [ plot::$3 ]
|
||||
reg byte a [ flip::$0 ]
|
||||
reg byte a [ flip::$4 ]
|
||||
|
@ -0,0 +1,16 @@
|
||||
.pc = $801 "Basic"
|
||||
:BasicUpstart(main)
|
||||
.pc = $80d "Program"
|
||||
.const SCREEN = $400
|
||||
jsr main
|
||||
main: {
|
||||
lda #0
|
||||
b1:
|
||||
tax
|
||||
sta SCREEN,x
|
||||
clc
|
||||
adc #2
|
||||
cmp #$28
|
||||
bcc b1
|
||||
rts
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
@begin: scope:[] from
|
||||
[0] phi() [ ] ( )
|
||||
to:@1
|
||||
@1: scope:[] from @begin
|
||||
[1] phi() [ ] ( )
|
||||
[2] call main param-assignment [ ] ( )
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
[3] phi() [ ] ( )
|
||||
main: scope:[main] from @1
|
||||
[4] phi() [ ] ( main:2 [ ] )
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
[5] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word) 0 main::@1/(byte) main::i#1 ) [ main::i#2 ] ( main:2 [ main::i#2 ] )
|
||||
[6] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 [ main::i#2 ] ( main:2 [ main::i#2 ] )
|
||||
[7] (byte) main::i#1 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 2 [ main::i#1 ] ( main:2 [ main::i#1 ] )
|
||||
[8] if((byte) main::i#1<(byte/signed byte/word/signed word) 40) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] )
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
[9] return [ ] ( main:2 [ ] )
|
||||
to:@return
|
723
src/main/java/dk/camelot64/kickc/test/ref/forincrementassign.log
Normal file
723
src/main/java/dk/camelot64/kickc/test/ref/forincrementassign.log
Normal file
@ -0,0 +1,723 @@
|
||||
// Classic for() does not allow assignment as increment, eg. for(byte i=0;i<40;i=i+2) {}
|
||||
// The following should give a program rendering a char on every second char of the first line - but results in a syntax error
|
||||
|
||||
byte* SCREEN = $0400;
|
||||
void main() {
|
||||
for(byte i=0;i<40;i=i+2) {
|
||||
SCREEN[i] = i;
|
||||
}
|
||||
}
|
||||
PROGRAM
|
||||
(byte*) SCREEN ← (word/signed word) 1024
|
||||
proc (void()) main()
|
||||
(byte) main::i ← (byte/signed byte/word/signed word) 0
|
||||
main::@1:
|
||||
*((byte*) SCREEN + (byte) main::i) ← (byte) main::i
|
||||
(byte~) main::$0 ← (byte) main::i + (byte/signed byte/word/signed word) 2
|
||||
(byte) main::i ← (byte~) main::$0
|
||||
(boolean~) main::$1 ← (byte) main::i < (byte/signed byte/word/signed word) 40
|
||||
if((boolean~) main::$1) goto main::@1
|
||||
main::@return:
|
||||
return
|
||||
endproc // main()
|
||||
call main
|
||||
|
||||
SYMBOLS
|
||||
(byte*) SCREEN
|
||||
(void()) main()
|
||||
(byte~) main::$0
|
||||
(boolean~) main::$1
|
||||
(label) main::@1
|
||||
(label) main::@return
|
||||
(byte) main::i
|
||||
|
||||
Promoting word/signed word to byte* in SCREEN ← ((byte*)) 1024
|
||||
INITIAL CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) SCREEN ← ((byte*)) (word/signed word) 1024
|
||||
to:@1
|
||||
main: scope:[main] from
|
||||
(byte) main::i ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
*((byte*) SCREEN + (byte) main::i) ← (byte) main::i
|
||||
(byte~) main::$0 ← (byte) main::i + (byte/signed byte/word/signed word) 2
|
||||
(byte) main::i ← (byte~) main::$0
|
||||
(boolean~) main::$1 ← (byte) main::i < (byte/signed byte/word/signed word) 40
|
||||
if((boolean~) main::$1) goto main::@1
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@2
|
||||
return
|
||||
to:@return
|
||||
@1: scope:[] from @begin
|
||||
call main
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
|
||||
Removing empty block main::@2
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) SCREEN ← ((byte*)) (word/signed word) 1024
|
||||
to:@1
|
||||
main: scope:[main] from
|
||||
(byte) main::i ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
*((byte*) SCREEN + (byte) main::i) ← (byte) main::i
|
||||
(byte~) main::$0 ← (byte) main::i + (byte/signed byte/word/signed word) 2
|
||||
(byte) main::i ← (byte~) main::$0
|
||||
(boolean~) main::$1 ← (byte) main::i < (byte/signed byte/word/signed word) 40
|
||||
if((boolean~) main::$1) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
to:@return
|
||||
@1: scope:[] from @begin
|
||||
call main
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
|
||||
PROCEDURE MODIFY VARIABLE ANALYSIS
|
||||
|
||||
CONTROL FLOW GRAPH WITH ASSIGNMENT CALL
|
||||
@begin: scope:[] from
|
||||
(byte*) SCREEN ← ((byte*)) (word/signed word) 1024
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
(byte) main::i ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
*((byte*) SCREEN + (byte) main::i) ← (byte) main::i
|
||||
(byte~) main::$0 ← (byte) main::i + (byte/signed byte/word/signed word) 2
|
||||
(byte) main::i ← (byte~) main::$0
|
||||
(boolean~) main::$1 ← (byte) main::i < (byte/signed byte/word/signed word) 40
|
||||
if((boolean~) main::$1) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
to:@return
|
||||
@1: scope:[] from @begin
|
||||
call main param-assignment
|
||||
to:@2
|
||||
@2: scope:[] from @1
|
||||
to:@end
|
||||
@end: scope:[] from @2
|
||||
|
||||
Completing Phi functions...
|
||||
Completing Phi functions...
|
||||
Completing Phi functions...
|
||||
CONTROL FLOW GRAPH SSA
|
||||
@begin: scope:[] from
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
(byte*) SCREEN#2 ← phi( @1/(byte*) SCREEN#3 )
|
||||
(byte) main::i#0 ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(byte*) SCREEN#1 ← phi( main/(byte*) SCREEN#2 main::@1/(byte*) SCREEN#1 )
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 )
|
||||
*((byte*) SCREEN#1 + (byte) main::i#2) ← (byte) main::i#2
|
||||
(byte~) main::$0 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 2
|
||||
(byte) main::i#1 ← (byte~) main::$0
|
||||
(boolean~) main::$1 ← (byte) main::i#1 < (byte/signed byte/word/signed word) 40
|
||||
if((boolean~) main::$1) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
to:@return
|
||||
@1: scope:[] from @begin
|
||||
(byte*) SCREEN#3 ← phi( @begin/(byte*) SCREEN#0 )
|
||||
call main param-assignment
|
||||
to:@2
|
||||
@2: scope:[] from @1
|
||||
to:@end
|
||||
@end: scope:[] from @2
|
||||
|
||||
CONTROL FLOW GRAPH WITH ASSIGNMENT CALL & RETURN
|
||||
@begin: scope:[] from
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
(byte*) SCREEN#2 ← phi( @1/(byte*) SCREEN#3 )
|
||||
(byte) main::i#0 ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(byte*) SCREEN#1 ← phi( main/(byte*) SCREEN#2 main::@1/(byte*) SCREEN#1 )
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 )
|
||||
*((byte*) SCREEN#1 + (byte) main::i#2) ← (byte) main::i#2
|
||||
(byte~) main::$0 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 2
|
||||
(byte) main::i#1 ← (byte~) main::$0
|
||||
(boolean~) main::$1 ← (byte) main::i#1 < (byte/signed byte/word/signed word) 40
|
||||
if((boolean~) main::$1) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
to:@return
|
||||
@1: scope:[] from @begin
|
||||
(byte*) SCREEN#3 ← phi( @begin/(byte*) SCREEN#0 )
|
||||
call main param-assignment
|
||||
to:@2
|
||||
@2: scope:[] from @1
|
||||
to:@end
|
||||
@end: scope:[] from @2
|
||||
|
||||
INITIAL SSA SYMBOL TABLE
|
||||
(label) @1
|
||||
(label) @2
|
||||
(label) @begin
|
||||
(label) @end
|
||||
(byte*) SCREEN
|
||||
(byte*) SCREEN#0
|
||||
(byte*) SCREEN#1
|
||||
(byte*) SCREEN#2
|
||||
(byte*) SCREEN#3
|
||||
(void()) main()
|
||||
(byte~) main::$0
|
||||
(boolean~) main::$1
|
||||
(label) main::@1
|
||||
(label) main::@return
|
||||
(byte) main::i
|
||||
(byte) main::i#0
|
||||
(byte) main::i#1
|
||||
(byte) main::i#2
|
||||
|
||||
Culled Empty Block (label) @2
|
||||
Succesful SSA optimization Pass2CullEmptyBlocks
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
(byte*) SCREEN#2 ← phi( @1/(byte*) SCREEN#3 )
|
||||
(byte) main::i#0 ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(byte*) SCREEN#1 ← phi( main/(byte*) SCREEN#2 main::@1/(byte*) SCREEN#1 )
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 )
|
||||
*((byte*) SCREEN#1 + (byte) main::i#2) ← (byte) main::i#2
|
||||
(byte~) main::$0 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 2
|
||||
(byte) main::i#1 ← (byte~) main::$0
|
||||
(boolean~) main::$1 ← (byte) main::i#1 < (byte/signed byte/word/signed word) 40
|
||||
if((boolean~) main::$1) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
to:@return
|
||||
@1: scope:[] from @begin
|
||||
(byte*) SCREEN#3 ← phi( @begin/(byte*) SCREEN#0 )
|
||||
call main param-assignment
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
|
||||
Not aliassing across scopes: SCREEN#2 SCREEN#3
|
||||
Alias (byte) main::i#1 = (byte~) main::$0
|
||||
Alias (byte*) SCREEN#0 = (byte*) SCREEN#3
|
||||
Succesful SSA optimization Pass2AliasElimination
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
(byte*) SCREEN#2 ← phi( @1/(byte*) SCREEN#0 )
|
||||
(byte) main::i#0 ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(byte*) SCREEN#1 ← phi( main/(byte*) SCREEN#2 main::@1/(byte*) SCREEN#1 )
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 )
|
||||
*((byte*) SCREEN#1 + (byte) main::i#2) ← (byte) main::i#2
|
||||
(byte) main::i#1 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 2
|
||||
(boolean~) main::$1 ← (byte) main::i#1 < (byte/signed byte/word/signed word) 40
|
||||
if((boolean~) main::$1) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
to:@return
|
||||
@1: scope:[] from @begin
|
||||
call main param-assignment
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
|
||||
Not aliassing across scopes: SCREEN#2 SCREEN#0
|
||||
Self Phi Eliminated (byte*) SCREEN#1
|
||||
Succesful SSA optimization Pass2SelfPhiElimination
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
(byte*) SCREEN#2 ← phi( @1/(byte*) SCREEN#0 )
|
||||
(byte) main::i#0 ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(byte*) SCREEN#1 ← phi( main/(byte*) SCREEN#2 )
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 )
|
||||
*((byte*) SCREEN#1 + (byte) main::i#2) ← (byte) main::i#2
|
||||
(byte) main::i#1 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 2
|
||||
(boolean~) main::$1 ← (byte) main::i#1 < (byte/signed byte/word/signed word) 40
|
||||
if((boolean~) main::$1) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
to:@return
|
||||
@1: scope:[] from @begin
|
||||
call main param-assignment
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
|
||||
Redundant Phi (byte*) SCREEN#2 (byte*) SCREEN#0
|
||||
Redundant Phi (byte*) SCREEN#1 (byte*) SCREEN#2
|
||||
Succesful SSA optimization Pass2RedundantPhiElimination
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
(byte) main::i#0 ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 )
|
||||
*((byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2
|
||||
(byte) main::i#1 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 2
|
||||
(boolean~) main::$1 ← (byte) main::i#1 < (byte/signed byte/word/signed word) 40
|
||||
if((boolean~) main::$1) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
to:@return
|
||||
@1: scope:[] from @begin
|
||||
call main param-assignment
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
|
||||
Simple Condition (boolean~) main::$1 if((byte) main::i#1<(byte/signed byte/word/signed word) 40) goto main::@1
|
||||
Succesful SSA optimization Pass2ConditionalJumpSimplification
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
(byte) main::i#0 ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 )
|
||||
*((byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2
|
||||
(byte) main::i#1 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 2
|
||||
if((byte) main::i#1<(byte/signed byte/word/signed word) 40) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
to:@return
|
||||
@1: scope:[] from @begin
|
||||
call main param-assignment
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
|
||||
Constant (const byte*) SCREEN#0 = ((byte*))1024
|
||||
Constant (const byte) main::i#0 = 0
|
||||
Succesful SSA optimization Pass2ConstantIdentification
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(byte) main::i#2 ← phi( main/(const byte) main::i#0 main::@1/(byte) main::i#1 )
|
||||
*((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2
|
||||
(byte) main::i#1 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 2
|
||||
if((byte) main::i#1<(byte/signed byte/word/signed word) 40) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
to:@return
|
||||
@1: scope:[] from @begin
|
||||
call main param-assignment
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
||||
Inlining constant with var siblings (const byte) main::i#0
|
||||
Inlining constant with var siblings (const byte) main::i#0
|
||||
Constant inlined main::i#0 = (byte/signed byte/word/signed word) 0
|
||||
Succesful SSA optimization Pass2ConstantInlining
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word) 0 main::@1/(byte) main::i#1 )
|
||||
*((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2
|
||||
(byte) main::i#1 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 2
|
||||
if((byte) main::i#1<(byte/signed byte/word/signed word) 40) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
to:@return
|
||||
@1: scope:[] from @begin
|
||||
call main param-assignment
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
|
||||
FINAL SYMBOL TABLE
|
||||
(label) @1
|
||||
(label) @begin
|
||||
(label) @end
|
||||
(byte*) SCREEN
|
||||
(const byte*) SCREEN#0 = ((byte*))(word/signed word) 1024
|
||||
(void()) main()
|
||||
(label) main::@1
|
||||
(label) main::@return
|
||||
(byte) main::i
|
||||
(byte) main::i#1
|
||||
(byte) main::i#2
|
||||
|
||||
Block Sequence Planned @begin @1 @end main main::@1 main::@return
|
||||
Added new block during phi lifting main::@3(between main::@1 and main::@1)
|
||||
Block Sequence Planned @begin @1 @end main main::@1 main::@return main::@3
|
||||
CONTROL FLOW GRAPH - PHI LIFTED
|
||||
@begin: scope:[] from
|
||||
to:@1
|
||||
@1: scope:[] from @begin
|
||||
call main param-assignment
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
main: scope:[main] from @1
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@3
|
||||
(byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word) 0 main::@3/(byte~) main::i#3 )
|
||||
*((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2
|
||||
(byte) main::i#1 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 2
|
||||
if((byte) main::i#1<(byte/signed byte/word/signed word) 40) goto main::@3
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
to:@return
|
||||
main::@3: scope:[main] from main::@1
|
||||
(byte~) main::i#3 ← (byte) main::i#1
|
||||
to:main::@1
|
||||
|
||||
Adding NOP phi() at start of @begin
|
||||
Adding NOP phi() at start of @1
|
||||
Adding NOP phi() at start of @end
|
||||
Adding NOP phi() at start of main
|
||||
CALL GRAPH
|
||||
Calls in [] to main:2
|
||||
|
||||
Propagating live ranges...
|
||||
Propagating live ranges...
|
||||
CONTROL FLOW GRAPH - LIVE RANGES FOUND
|
||||
@begin: scope:[] from
|
||||
[0] phi() [ ]
|
||||
to:@1
|
||||
@1: scope:[] from @begin
|
||||
[1] phi() [ ]
|
||||
[2] call main param-assignment [ ]
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
[3] phi() [ ]
|
||||
main: scope:[main] from @1
|
||||
[4] phi() [ ]
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@3
|
||||
[5] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word) 0 main::@3/(byte~) main::i#3 ) [ main::i#2 ]
|
||||
[6] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 [ main::i#2 ]
|
||||
[7] (byte) main::i#1 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 2 [ main::i#1 ]
|
||||
[8] if((byte) main::i#1<(byte/signed byte/word/signed word) 40) goto main::@3 [ main::i#1 ]
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
[9] return [ ]
|
||||
to:@return
|
||||
main::@3: scope:[main] from main::@1
|
||||
[10] (byte~) main::i#3 ← (byte) main::i#1 [ main::i#3 ]
|
||||
to:main::@1
|
||||
|
||||
Created 1 initial phi equivalence classes
|
||||
Coalesced [10] main::i#3 ← main::i#1
|
||||
Coalesced down to 1 phi equivalence classes
|
||||
Culled Empty Block (label) main::@3
|
||||
Block Sequence Planned @begin @1 @end main main::@1 main::@return
|
||||
Adding NOP phi() at start of @begin
|
||||
Adding NOP phi() at start of @1
|
||||
Adding NOP phi() at start of @end
|
||||
Adding NOP phi() at start of main
|
||||
Propagating live ranges...
|
||||
Propagating live ranges...
|
||||
CONTROL FLOW GRAPH - BEFORE EFFECTIVE LIVE RANGES
|
||||
@begin: scope:[] from
|
||||
[0] phi() [ ]
|
||||
to:@1
|
||||
@1: scope:[] from @begin
|
||||
[1] phi() [ ]
|
||||
[2] call main param-assignment [ ]
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
[3] phi() [ ]
|
||||
main: scope:[main] from @1
|
||||
[4] phi() [ ]
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
[5] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word) 0 main::@1/(byte) main::i#1 ) [ main::i#2 ]
|
||||
[6] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 [ main::i#2 ]
|
||||
[7] (byte) main::i#1 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 2 [ main::i#1 ]
|
||||
[8] if((byte) main::i#1<(byte/signed byte/word/signed word) 40) goto main::@1 [ main::i#1 ]
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
[9] return [ ]
|
||||
to:@return
|
||||
|
||||
CONTROL FLOW GRAPH - PHI MEM COALESCED
|
||||
@begin: scope:[] from
|
||||
[0] phi() [ ] ( )
|
||||
to:@1
|
||||
@1: scope:[] from @begin
|
||||
[1] phi() [ ] ( )
|
||||
[2] call main param-assignment [ ] ( )
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
[3] phi() [ ] ( )
|
||||
main: scope:[main] from @1
|
||||
[4] phi() [ ] ( main:2 [ ] )
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
[5] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word) 0 main::@1/(byte) main::i#1 ) [ main::i#2 ] ( main:2 [ main::i#2 ] )
|
||||
[6] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 [ main::i#2 ] ( main:2 [ main::i#2 ] )
|
||||
[7] (byte) main::i#1 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 2 [ main::i#1 ] ( main:2 [ main::i#1 ] )
|
||||
[8] if((byte) main::i#1<(byte/signed byte/word/signed word) 40) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] )
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
[9] return [ ] ( main:2 [ ] )
|
||||
to:@return
|
||||
|
||||
DOMINATORS
|
||||
@begin dominated by @begin
|
||||
@1 dominated by @1 @begin
|
||||
@end dominated by @1 @begin @end
|
||||
main dominated by @1 @begin main
|
||||
main::@1 dominated by @1 @begin main::@1 main
|
||||
main::@return dominated by main::@return @1 @begin main::@1 main
|
||||
|
||||
Found back edge: Loop head: main::@1 tails: main::@1 blocks: null
|
||||
Populated: Loop head: main::@1 tails: main::@1 blocks: main::@1
|
||||
NATURAL LOOPS
|
||||
Loop head: main::@1 tails: main::@1 blocks: main::@1
|
||||
|
||||
Found 0 loops in scope []
|
||||
Found 1 loops in scope [main]
|
||||
Loop head: main::@1 tails: main::@1 blocks: main::@1
|
||||
NATURAL LOOPS WITH DEPTH
|
||||
Loop head: main::@1 tails: main::@1 blocks: main::@1 depth: 1
|
||||
|
||||
|
||||
VARIABLE REGISTER WEIGHTS
|
||||
(byte*) SCREEN
|
||||
(void()) main()
|
||||
(byte) main::i
|
||||
(byte) main::i#1 16.5
|
||||
(byte) main::i#2 22.0
|
||||
|
||||
Initial phi equivalence classes
|
||||
[ main::i#2 main::i#1 ]
|
||||
Complete equivalence classes
|
||||
[ main::i#2 main::i#1 ]
|
||||
Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
|
||||
INITIAL ASM
|
||||
//SEG0 Basic Upstart
|
||||
.pc = $801 "Basic"
|
||||
:BasicUpstart(main)
|
||||
.pc = $80d "Program"
|
||||
//SEG1 Global Constants & labels
|
||||
.const SCREEN = $400
|
||||
//SEG2 @begin
|
||||
bbegin:
|
||||
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
|
||||
b1_from_bbegin:
|
||||
jmp b1
|
||||
//SEG4 @1
|
||||
b1:
|
||||
//SEG5 [2] call main param-assignment [ ] ( )
|
||||
//SEG6 [4] phi from @1 to main [phi:@1->main]
|
||||
main_from_b1:
|
||||
jsr main
|
||||
//SEG7 [3] phi from @1 to @end [phi:@1->@end]
|
||||
bend_from_b1:
|
||||
jmp bend
|
||||
//SEG8 @end
|
||||
bend:
|
||||
//SEG9 main
|
||||
main: {
|
||||
.label i = 2
|
||||
//SEG10 [5] phi from main to main::@1 [phi:main->main::@1]
|
||||
b1_from_main:
|
||||
//SEG11 [5] phi (byte) main::i#2 = (byte/signed byte/word/signed word) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1
|
||||
lda #0
|
||||
sta i
|
||||
jmp b1
|
||||
//SEG12 [5] phi from main::@1 to main::@1 [phi:main::@1->main::@1]
|
||||
b1_from_b1:
|
||||
//SEG13 [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@1->main::@1#0] -- register_copy
|
||||
jmp b1
|
||||
//SEG14 main::@1
|
||||
b1:
|
||||
//SEG15 [6] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuz1=vbuz1
|
||||
ldx i
|
||||
txa
|
||||
sta SCREEN,x
|
||||
//SEG16 [7] (byte) main::i#1 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1=vbuz1_plus_vbuc1
|
||||
lda i
|
||||
clc
|
||||
adc #2
|
||||
sta i
|
||||
//SEG17 [8] if((byte) main::i#1<(byte/signed byte/word/signed word) 40) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1_lt_vbuc1_then_la1
|
||||
lda i
|
||||
cmp #$28
|
||||
bcc b1_from_b1
|
||||
jmp breturn
|
||||
//SEG18 main::@return
|
||||
breturn:
|
||||
//SEG19 [9] return [ ] ( main:2 [ ] )
|
||||
rts
|
||||
}
|
||||
|
||||
REGISTER UPLIFT POTENTIAL REGISTERS
|
||||
Statement [7] (byte) main::i#1 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) always clobbers reg byte a
|
||||
Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y ,
|
||||
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [main] 38.5: zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
|
||||
Uplift Scope []
|
||||
|
||||
Uplifting [main] best 283 combination reg byte a [ main::i#2 main::i#1 ]
|
||||
Uplifting [] best 283 combination
|
||||
|
||||
ASSEMBLER BEFORE OPTIMIZATION
|
||||
//SEG0 Basic Upstart
|
||||
.pc = $801 "Basic"
|
||||
:BasicUpstart(main)
|
||||
.pc = $80d "Program"
|
||||
//SEG1 Global Constants & labels
|
||||
.const SCREEN = $400
|
||||
//SEG2 @begin
|
||||
bbegin:
|
||||
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
|
||||
b1_from_bbegin:
|
||||
jmp b1
|
||||
//SEG4 @1
|
||||
b1:
|
||||
//SEG5 [2] call main param-assignment [ ] ( )
|
||||
//SEG6 [4] phi from @1 to main [phi:@1->main]
|
||||
main_from_b1:
|
||||
jsr main
|
||||
//SEG7 [3] phi from @1 to @end [phi:@1->@end]
|
||||
bend_from_b1:
|
||||
jmp bend
|
||||
//SEG8 @end
|
||||
bend:
|
||||
//SEG9 main
|
||||
main: {
|
||||
//SEG10 [5] phi from main to main::@1 [phi:main->main::@1]
|
||||
b1_from_main:
|
||||
//SEG11 [5] phi (byte) main::i#2 = (byte/signed byte/word/signed word) 0 [phi:main->main::@1#0] -- vbuaa=vbuc1
|
||||
lda #0
|
||||
jmp b1
|
||||
//SEG12 [5] phi from main::@1 to main::@1 [phi:main::@1->main::@1]
|
||||
b1_from_b1:
|
||||
//SEG13 [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@1->main::@1#0] -- register_copy
|
||||
jmp b1
|
||||
//SEG14 main::@1
|
||||
b1:
|
||||
//SEG15 [6] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuaa=vbuaa
|
||||
tax
|
||||
sta SCREEN,x
|
||||
//SEG16 [7] (byte) main::i#1 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuaa=vbuaa_plus_vbuc1
|
||||
clc
|
||||
adc #2
|
||||
//SEG17 [8] if((byte) main::i#1<(byte/signed byte/word/signed word) 40) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuaa_lt_vbuc1_then_la1
|
||||
cmp #$28
|
||||
bcc b1_from_b1
|
||||
jmp breturn
|
||||
//SEG18 main::@return
|
||||
breturn:
|
||||
//SEG19 [9] return [ ] ( main:2 [ ] )
|
||||
rts
|
||||
}
|
||||
|
||||
ASSEMBLER OPTIMIZATIONS
|
||||
Removing instruction jmp b1
|
||||
Removing instruction jmp bend
|
||||
Removing instruction jmp b1
|
||||
Removing instruction jmp breturn
|
||||
Succesful ASM optimization Pass5NextJumpElimination
|
||||
Replacing label b1_from_b1 with b1
|
||||
Removing instruction bbegin:
|
||||
Removing instruction b1_from_bbegin:
|
||||
Removing instruction main_from_b1:
|
||||
Removing instruction bend_from_b1:
|
||||
Removing instruction b1_from_b1:
|
||||
Succesful ASM optimization Pass5RedundantLabelElimination
|
||||
Removing instruction b1:
|
||||
Removing instruction bend:
|
||||
Removing instruction b1_from_main:
|
||||
Removing instruction breturn:
|
||||
Succesful ASM optimization Pass5UnusedLabelElimination
|
||||
Removing instruction jmp b1
|
||||
Succesful ASM optimization Pass5NextJumpElimination
|
||||
|
||||
FINAL SYMBOL TABLE
|
||||
(label) @1
|
||||
(label) @begin
|
||||
(label) @end
|
||||
(byte*) SCREEN
|
||||
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word) 1024
|
||||
(void()) main()
|
||||
(label) main::@1
|
||||
(label) main::@return
|
||||
(byte) main::i
|
||||
(byte) main::i#1 reg byte a 16.5
|
||||
(byte) main::i#2 reg byte a 22.0
|
||||
|
||||
reg byte a [ main::i#2 main::i#1 ]
|
||||
|
||||
FINAL CODE
|
||||
//SEG0 Basic Upstart
|
||||
.pc = $801 "Basic"
|
||||
:BasicUpstart(main)
|
||||
.pc = $80d "Program"
|
||||
//SEG1 Global Constants & labels
|
||||
.const SCREEN = $400
|
||||
//SEG2 @begin
|
||||
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
|
||||
//SEG4 @1
|
||||
//SEG5 [2] call main param-assignment [ ] ( )
|
||||
//SEG6 [4] phi from @1 to main [phi:@1->main]
|
||||
jsr main
|
||||
//SEG7 [3] phi from @1 to @end [phi:@1->@end]
|
||||
//SEG8 @end
|
||||
//SEG9 main
|
||||
main: {
|
||||
//SEG10 [5] phi from main to main::@1 [phi:main->main::@1]
|
||||
//SEG11 [5] phi (byte) main::i#2 = (byte/signed byte/word/signed word) 0 [phi:main->main::@1#0] -- vbuaa=vbuc1
|
||||
lda #0
|
||||
//SEG12 [5] phi from main::@1 to main::@1 [phi:main::@1->main::@1]
|
||||
//SEG13 [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@1->main::@1#0] -- register_copy
|
||||
//SEG14 main::@1
|
||||
b1:
|
||||
//SEG15 [6] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuaa=vbuaa
|
||||
tax
|
||||
sta SCREEN,x
|
||||
//SEG16 [7] (byte) main::i#1 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuaa=vbuaa_plus_vbuc1
|
||||
clc
|
||||
adc #2
|
||||
//SEG17 [8] if((byte) main::i#1<(byte/signed byte/word/signed word) 40) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuaa_lt_vbuc1_then_la1
|
||||
cmp #$28
|
||||
bcc b1
|
||||
//SEG18 main::@return
|
||||
//SEG19 [9] return [ ] ( main:2 [ ] )
|
||||
rts
|
||||
}
|
||||
|
@ -0,0 +1,13 @@
|
||||
(label) @1
|
||||
(label) @begin
|
||||
(label) @end
|
||||
(byte*) SCREEN
|
||||
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word) 1024
|
||||
(void()) main()
|
||||
(label) main::@1
|
||||
(label) main::@return
|
||||
(byte) main::i
|
||||
(byte) main::i#1 reg byte a 16.5
|
||||
(byte) main::i#2 reg byte a 22.0
|
||||
|
||||
reg byte a [ main::i#2 main::i#1 ]
|
@ -10,9 +10,9 @@
|
||||
jsr main
|
||||
main: {
|
||||
.label _1 = 6
|
||||
.label _12 = 9
|
||||
.label _23 = 9
|
||||
.label _33 = 9
|
||||
.label _11 = 9
|
||||
.label _21 = 9
|
||||
.label _30 = 9
|
||||
.label chargen1 = 7
|
||||
.label bits_gen = 6
|
||||
.label charset4 = 4
|
||||
@ -62,12 +62,12 @@ main: {
|
||||
ldy #0
|
||||
lda (chargen),y
|
||||
and #$18
|
||||
sta _12
|
||||
sta _11
|
||||
lda (chargen1),y
|
||||
and #$18
|
||||
lsr
|
||||
lsr
|
||||
ora _12
|
||||
ora _11
|
||||
lsr
|
||||
tax
|
||||
lda bits_count,x
|
||||
@ -80,11 +80,11 @@ main: {
|
||||
lda (chargen),y
|
||||
and #6
|
||||
asl
|
||||
sta _23
|
||||
sta _21
|
||||
lda (chargen1),y
|
||||
and #6
|
||||
lsr
|
||||
ora _23
|
||||
ora _21
|
||||
tax
|
||||
lda bits_count,x
|
||||
cmp #2
|
||||
@ -97,10 +97,10 @@ main: {
|
||||
and #1
|
||||
asl
|
||||
asl
|
||||
sta _33
|
||||
sta _30
|
||||
lda (chargen1),y
|
||||
and #1
|
||||
ora _33
|
||||
ora _30
|
||||
tax
|
||||
lda bits_count,x
|
||||
cmp #2
|
||||
|
@ -21,7 +21,7 @@ main::@1: scope:[main] from main main::@5
|
||||
[11] (byte~) main::$4 ← (byte~) main::$1 | (byte~) main::$3 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$4 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$4 ] )
|
||||
[12] (byte~) main::$5 ← (byte~) main::$4 >> (byte/signed byte/word/signed word) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$5 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$5 ] )
|
||||
[13] (byte~) main::$6 ← (byte~) main::$5 >> (byte/signed byte/word/signed word) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$6 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$6 ] )
|
||||
[14] (byte) main::bits#0 ← (const byte[]) bits_count#0 *idx (byte~) main::$6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits#0 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits#0 ] )
|
||||
[14] (byte) main::bits#0 ← *((const byte[]) bits_count#0 + (byte~) main::$6) [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits#0 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits#0 ] )
|
||||
[15] if((byte) main::bits#0<(byte/signed byte/word/signed word) 2) goto main::@2 [ main::chargen#10 main::charset4#10 main::chargen1#0 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 ] )
|
||||
to:main::@7
|
||||
main::@7: scope:[main] from main::@1
|
||||
@ -30,12 +30,12 @@ main::@7: scope:[main] from main::@1
|
||||
main::@2: scope:[main] from main::@1 main::@7
|
||||
[17] (byte) main::bits_gen#9 ← phi( main::@1/(byte/signed byte/word/signed word) 0 main::@7/(byte/signed byte/word/signed word) 0+(byte/signed byte/word/signed word) 1 ) [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#9 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#9 ] )
|
||||
[18] (byte) main::bits_gen#1 ← (byte) main::bits_gen#9 << (byte/signed byte/word/signed word) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ] )
|
||||
[19] (byte~) main::$12 ← *((byte*) main::chargen#10) & (byte/signed byte/word/signed word) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$12 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$12 ] )
|
||||
[20] (byte~) main::$13 ← *((byte*) main::chargen1#0) & (byte/signed byte/word/signed word) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$12 main::$13 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$12 main::$13 ] )
|
||||
[21] (byte~) main::$14 ← (byte~) main::$13 >> (byte/signed byte/word/signed word) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$12 main::$14 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$12 main::$14 ] )
|
||||
[22] (byte~) main::$15 ← (byte~) main::$12 | (byte~) main::$14 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 ] )
|
||||
[23] (byte~) main::$16 ← (byte~) main::$15 >> (byte/signed byte/word/signed word) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$16 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$16 ] )
|
||||
[24] (byte) main::bits#1 ← (const byte[]) bits_count#0 *idx (byte~) main::$16 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::bits#1 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::bits#1 ] )
|
||||
[19] (byte~) main::$11 ← *((byte*) main::chargen#10) & (byte/signed byte/word/signed word) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$11 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$11 ] )
|
||||
[20] (byte~) main::$12 ← *((byte*) main::chargen1#0) & (byte/signed byte/word/signed word) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$11 main::$12 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$11 main::$12 ] )
|
||||
[21] (byte~) main::$13 ← (byte~) main::$12 >> (byte/signed byte/word/signed word) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$11 main::$13 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$11 main::$13 ] )
|
||||
[22] (byte~) main::$14 ← (byte~) main::$11 | (byte~) main::$13 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$14 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$14 ] )
|
||||
[23] (byte~) main::$15 ← (byte~) main::$14 >> (byte/signed byte/word/signed word) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 ] )
|
||||
[24] (byte) main::bits#1 ← *((const byte[]) bits_count#0 + (byte~) main::$15) [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::bits#1 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::bits#1 ] )
|
||||
[25] if((byte) main::bits#1<(byte/signed byte/word/signed word) 2) goto main::@3 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ] )
|
||||
to:main::@8
|
||||
main::@8: scope:[main] from main::@2
|
||||
@ -44,12 +44,12 @@ main::@8: scope:[main] from main::@2
|
||||
main::@3: scope:[main] from main::@2 main::@8
|
||||
[27] (byte) main::bits_gen#11 ← phi( main::@2/(byte) main::bits_gen#1 main::@8/(byte) main::bits_gen#4 ) [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#11 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#11 ] )
|
||||
[28] (byte) main::bits_gen#14 ← (byte) main::bits_gen#11 << (byte/signed byte/word/signed word) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ] )
|
||||
[29] (byte~) main::$22 ← *((byte*) main::chargen#10) & (byte/signed byte/word/signed word) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$22 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$22 ] )
|
||||
[30] (byte~) main::$23 ← (byte~) main::$22 << (byte/signed byte/word/signed word) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$23 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$23 ] )
|
||||
[31] (byte~) main::$24 ← *((byte*) main::chargen1#0) & (byte/signed byte/word/signed word) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$23 main::$24 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$23 main::$24 ] )
|
||||
[32] (byte~) main::$25 ← (byte~) main::$24 >> (byte/signed byte/word/signed word) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$23 main::$25 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$23 main::$25 ] )
|
||||
[33] (byte~) main::$26 ← (byte~) main::$23 | (byte~) main::$25 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$26 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$26 ] )
|
||||
[34] (byte) main::bits#2 ← (const byte[]) bits_count#0 *idx (byte~) main::$26 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::bits#2 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::bits#2 ] )
|
||||
[29] (byte~) main::$20 ← *((byte*) main::chargen#10) & (byte/signed byte/word/signed word) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$20 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$20 ] )
|
||||
[30] (byte~) main::$21 ← (byte~) main::$20 << (byte/signed byte/word/signed word) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$21 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$21 ] )
|
||||
[31] (byte~) main::$22 ← *((byte*) main::chargen1#0) & (byte/signed byte/word/signed word) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$21 main::$22 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$21 main::$22 ] )
|
||||
[32] (byte~) main::$23 ← (byte~) main::$22 >> (byte/signed byte/word/signed word) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$21 main::$23 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$21 main::$23 ] )
|
||||
[33] (byte~) main::$24 ← (byte~) main::$21 | (byte~) main::$23 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$24 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$24 ] )
|
||||
[34] (byte) main::bits#2 ← *((const byte[]) bits_count#0 + (byte~) main::$24) [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::bits#2 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::bits#2 ] )
|
||||
[35] if((byte) main::bits#2<(byte/signed byte/word/signed word) 2) goto main::@4 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ] )
|
||||
to:main::@9
|
||||
main::@9: scope:[main] from main::@3
|
||||
@ -58,11 +58,11 @@ main::@9: scope:[main] from main::@3
|
||||
main::@4: scope:[main] from main::@3 main::@9
|
||||
[37] (byte) main::bits_gen#13 ← phi( main::@3/(byte) main::bits_gen#14 main::@9/(byte) main::bits_gen#6 ) [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#13 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#13 ] )
|
||||
[38] (byte) main::bits_gen#16 ← (byte) main::bits_gen#13 << (byte/signed byte/word/signed word) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 ] )
|
||||
[39] (byte~) main::$32 ← *((byte*) main::chargen#10) & (byte/signed byte/word/signed word) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$32 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$32 ] )
|
||||
[40] (byte~) main::$33 ← (byte~) main::$32 << (byte/signed byte/word/signed word) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$33 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$33 ] )
|
||||
[41] (byte~) main::$34 ← *((byte*) main::chargen1#0) & (byte/signed byte/word/signed word) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$33 main::$34 ] ( main:2 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$33 main::$34 ] )
|
||||
[42] (byte~) main::$35 ← (byte~) main::$33 | (byte~) main::$34 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$35 ] ( main:2 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$35 ] )
|
||||
[43] (byte) main::bits#3 ← (const byte[]) bits_count#0 *idx (byte~) main::$35 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::bits#3 ] ( main:2 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::bits#3 ] )
|
||||
[39] (byte~) main::$29 ← *((byte*) main::chargen#10) & (byte/signed byte/word/signed word) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$29 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$29 ] )
|
||||
[40] (byte~) main::$30 ← (byte~) main::$29 << (byte/signed byte/word/signed word) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$30 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$30 ] )
|
||||
[41] (byte~) main::$31 ← *((byte*) main::chargen1#0) & (byte/signed byte/word/signed word) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$30 main::$31 ] ( main:2 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$30 main::$31 ] )
|
||||
[42] (byte~) main::$32 ← (byte~) main::$30 | (byte~) main::$31 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$32 ] ( main:2 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$32 ] )
|
||||
[43] (byte) main::bits#3 ← *((const byte[]) bits_count#0 + (byte~) main::$32) [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::bits#3 ] ( main:2 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::bits#3 ] )
|
||||
[44] if((byte) main::bits#3<(byte/signed byte/word/signed word) 2) goto main::@5 [ main::chargen#10 main::charset4#10 main::bits_gen#16 ] ( main:2 [ main::chargen#10 main::charset4#10 main::bits_gen#16 ] )
|
||||
to:main::@10
|
||||
main::@10: scope:[main] from main::@4
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -15,22 +15,22 @@
|
||||
(const byte[]) bits_count#0 bits_count = { (byte/signed byte/word/signed word) 0, (byte/signed byte/word/signed word) 1, (byte/signed byte/word/signed word) 1, (byte/signed byte/word/signed word) 2, (byte/signed byte/word/signed word) 1, (byte/signed byte/word/signed word) 2, (byte/signed byte/word/signed word) 2, (byte/signed byte/word/signed word) 3, (byte/signed byte/word/signed word) 1, (byte/signed byte/word/signed word) 2, (byte/signed byte/word/signed word) 2, (byte/signed byte/word/signed word) 3, (byte/signed byte/word/signed word) 2, (byte/signed byte/word/signed word) 3, (byte/signed byte/word/signed word) 3, (byte/signed byte/word/signed word) 4 }
|
||||
(void()) main()
|
||||
(byte~) main::$1 $1 zp ZP_BYTE:6 7.333333333333333
|
||||
(byte~) main::$12 $12 zp ZP_BYTE:9 7.333333333333333
|
||||
(byte~) main::$11 $11 zp ZP_BYTE:9 7.333333333333333
|
||||
(byte~) main::$12 reg byte a 22.0
|
||||
(byte~) main::$13 reg byte a 22.0
|
||||
(byte~) main::$14 reg byte a 22.0
|
||||
(byte~) main::$15 reg byte a 22.0
|
||||
(byte~) main::$16 reg byte a 22.0
|
||||
(byte~) main::$2 reg byte a 22.0
|
||||
(byte~) main::$20 reg byte a 22.0
|
||||
(byte~) main::$21 $21 zp ZP_BYTE:9 7.333333333333333
|
||||
(byte~) main::$22 reg byte a 22.0
|
||||
(byte~) main::$23 $23 zp ZP_BYTE:9 7.333333333333333
|
||||
(byte~) main::$23 reg byte a 22.0
|
||||
(byte~) main::$24 reg byte a 22.0
|
||||
(byte~) main::$25 reg byte a 22.0
|
||||
(byte~) main::$26 reg byte a 22.0
|
||||
(byte~) main::$29 reg byte a 22.0
|
||||
(byte~) main::$3 reg byte a 22.0
|
||||
(byte~) main::$30 $30 zp ZP_BYTE:9 11.0
|
||||
(byte~) main::$31 reg byte a 22.0
|
||||
(byte~) main::$32 reg byte a 22.0
|
||||
(byte~) main::$33 $33 zp ZP_BYTE:9 11.0
|
||||
(byte~) main::$34 reg byte a 22.0
|
||||
(byte~) main::$35 reg byte a 22.0
|
||||
(byte~) main::$4 reg byte a 22.0
|
||||
(byte~) main::$5 reg byte a 22.0
|
||||
(byte~) main::$6 reg byte a 22.0
|
||||
@ -88,19 +88,19 @@ reg byte a [ main::$4 ]
|
||||
reg byte a [ main::$5 ]
|
||||
reg byte a [ main::$6 ]
|
||||
reg byte a [ main::bits#0 ]
|
||||
zp ZP_BYTE:9 [ main::$12 main::$23 main::$33 ]
|
||||
zp ZP_BYTE:9 [ main::$11 main::$21 main::$30 ]
|
||||
reg byte a [ main::$12 ]
|
||||
reg byte a [ main::$13 ]
|
||||
reg byte a [ main::$14 ]
|
||||
reg byte a [ main::$15 ]
|
||||
reg byte a [ main::$16 ]
|
||||
reg byte a [ main::bits#1 ]
|
||||
reg byte a [ main::$20 ]
|
||||
reg byte a [ main::$22 ]
|
||||
reg byte a [ main::$23 ]
|
||||
reg byte a [ main::$24 ]
|
||||
reg byte a [ main::$25 ]
|
||||
reg byte a [ main::$26 ]
|
||||
reg byte a [ main::bits#2 ]
|
||||
reg byte a [ main::$29 ]
|
||||
reg byte a [ main::$31 ]
|
||||
reg byte a [ main::$32 ]
|
||||
reg byte a [ main::$34 ]
|
||||
reg byte a [ main::$35 ]
|
||||
reg byte a [ main::bits#3 ]
|
||||
reg byte a [ main::bits_gen#7 ]
|
||||
|
@ -0,0 +1,17 @@
|
||||
.pc = $801 "Basic"
|
||||
:BasicUpstart(main)
|
||||
.pc = $80d "Program"
|
||||
.const SCREEN = $400
|
||||
jsr main
|
||||
main: {
|
||||
ldx #0
|
||||
b1:
|
||||
txa
|
||||
sta SCREEN,x
|
||||
txa
|
||||
sta SCREEN+$50,x
|
||||
inx
|
||||
cpx #$28
|
||||
bne b1
|
||||
rts
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
@begin: scope:[] from
|
||||
[0] phi() [ ] ( )
|
||||
to:@1
|
||||
@1: scope:[] from @begin
|
||||
[1] phi() [ ] ( )
|
||||
[2] call main param-assignment [ ] ( )
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
[3] phi() [ ] ( )
|
||||
main: scope:[main] from @1
|
||||
[4] phi() [ ] ( main:2 [ ] )
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
[5] (byte) main::a#0 ← phi( main/(byte/signed byte/word/signed word) 0 main::@1/(byte) main::i#1 ) [ main::a#0 ] ( main:2 [ main::a#0 ] )
|
||||
[6] *((const byte*) SCREEN#0 + (byte) main::a#0) ← (byte) main::a#0 [ main::a#0 ] ( main:2 [ main::a#0 ] )
|
||||
[7] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 80 + (byte) main::a#0) ← (byte) main::a#0 [ main::a#0 ] ( main:2 [ main::a#0 ] )
|
||||
[8] (byte) main::i#1 ← ++ (byte) main::a#0 [ main::i#1 ] ( main:2 [ main::i#1 ] )
|
||||
[9] if((byte) main::i#1!=(byte/signed byte/word/signed word) 40) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] )
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
[10] return [ ] ( main:2 [ ] )
|
||||
to:@return
|
711
src/main/java/dk/camelot64/kickc/test/ref/inline-assignment.log
Normal file
711
src/main/java/dk/camelot64/kickc/test/ref/inline-assignment.log
Normal file
@ -0,0 +1,711 @@
|
||||
const byte* SCREEN = $400;
|
||||
|
||||
void main() {
|
||||
byte a;
|
||||
for( byte i : 0..39) {
|
||||
SCREEN[i] = a = i;
|
||||
(SCREEN+80)[i] = a;
|
||||
}
|
||||
}
|
||||
PROGRAM
|
||||
(byte*) SCREEN ← (word/signed word) 1024
|
||||
proc (void()) main()
|
||||
(byte) main::i ← (byte/signed byte/word/signed word) 0
|
||||
main::@1:
|
||||
(byte) main::a ← (byte) main::i
|
||||
*((byte*) SCREEN + (byte) main::i) ← (byte) main::a
|
||||
(byte*~) main::$0 ← (byte*) SCREEN + (byte/signed byte/word/signed word) 80
|
||||
*((byte*~) main::$0 + (byte) main::i) ← (byte) main::a
|
||||
(byte) main::i ← ++ (byte) main::i
|
||||
(boolean~) main::$1 ← (byte) main::i != (byte/signed byte/word/signed word) 40
|
||||
if((boolean~) main::$1) goto main::@1
|
||||
main::@return:
|
||||
return
|
||||
endproc // main()
|
||||
call main
|
||||
|
||||
SYMBOLS
|
||||
(byte*) SCREEN
|
||||
(void()) main()
|
||||
(byte*~) main::$0
|
||||
(boolean~) main::$1
|
||||
(label) main::@1
|
||||
(label) main::@return
|
||||
(byte) main::a
|
||||
(byte) main::i
|
||||
|
||||
Promoting word/signed word to byte* in SCREEN ← ((byte*)) 1024
|
||||
INITIAL CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) SCREEN ← ((byte*)) (word/signed word) 1024
|
||||
to:@1
|
||||
main: scope:[main] from
|
||||
(byte) main::i ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(byte) main::a ← (byte) main::i
|
||||
*((byte*) SCREEN + (byte) main::i) ← (byte) main::a
|
||||
(byte*~) main::$0 ← (byte*) SCREEN + (byte/signed byte/word/signed word) 80
|
||||
*((byte*~) main::$0 + (byte) main::i) ← (byte) main::a
|
||||
(byte) main::i ← ++ (byte) main::i
|
||||
(boolean~) main::$1 ← (byte) main::i != (byte/signed byte/word/signed word) 40
|
||||
if((boolean~) main::$1) goto main::@1
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@2
|
||||
return
|
||||
to:@return
|
||||
@1: scope:[] from @begin
|
||||
call main
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
|
||||
Removing empty block main::@2
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) SCREEN ← ((byte*)) (word/signed word) 1024
|
||||
to:@1
|
||||
main: scope:[main] from
|
||||
(byte) main::i ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(byte) main::a ← (byte) main::i
|
||||
*((byte*) SCREEN + (byte) main::i) ← (byte) main::a
|
||||
(byte*~) main::$0 ← (byte*) SCREEN + (byte/signed byte/word/signed word) 80
|
||||
*((byte*~) main::$0 + (byte) main::i) ← (byte) main::a
|
||||
(byte) main::i ← ++ (byte) main::i
|
||||
(boolean~) main::$1 ← (byte) main::i != (byte/signed byte/word/signed word) 40
|
||||
if((boolean~) main::$1) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
to:@return
|
||||
@1: scope:[] from @begin
|
||||
call main
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
|
||||
PROCEDURE MODIFY VARIABLE ANALYSIS
|
||||
|
||||
CONTROL FLOW GRAPH WITH ASSIGNMENT CALL
|
||||
@begin: scope:[] from
|
||||
(byte*) SCREEN ← ((byte*)) (word/signed word) 1024
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
(byte) main::i ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(byte) main::a ← (byte) main::i
|
||||
*((byte*) SCREEN + (byte) main::i) ← (byte) main::a
|
||||
(byte*~) main::$0 ← (byte*) SCREEN + (byte/signed byte/word/signed word) 80
|
||||
*((byte*~) main::$0 + (byte) main::i) ← (byte) main::a
|
||||
(byte) main::i ← ++ (byte) main::i
|
||||
(boolean~) main::$1 ← (byte) main::i != (byte/signed byte/word/signed word) 40
|
||||
if((boolean~) main::$1) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
to:@return
|
||||
@1: scope:[] from @begin
|
||||
call main param-assignment
|
||||
to:@2
|
||||
@2: scope:[] from @1
|
||||
to:@end
|
||||
@end: scope:[] from @2
|
||||
|
||||
Completing Phi functions...
|
||||
CONTROL FLOW GRAPH SSA
|
||||
@begin: scope:[] from
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
(byte) main::i#0 ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 )
|
||||
(byte) main::a#0 ← (byte) main::i#2
|
||||
*((byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::a#0
|
||||
(byte*~) main::$0 ← (byte*) SCREEN#0 + (byte/signed byte/word/signed word) 80
|
||||
*((byte*~) main::$0 + (byte) main::i#2) ← (byte) main::a#0
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
(boolean~) main::$1 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 40
|
||||
if((boolean~) main::$1) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
to:@return
|
||||
@1: scope:[] from @begin
|
||||
call main param-assignment
|
||||
to:@2
|
||||
@2: scope:[] from @1
|
||||
to:@end
|
||||
@end: scope:[] from @2
|
||||
|
||||
CONTROL FLOW GRAPH WITH ASSIGNMENT CALL & RETURN
|
||||
@begin: scope:[] from
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
(byte) main::i#0 ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 )
|
||||
(byte) main::a#0 ← (byte) main::i#2
|
||||
*((byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::a#0
|
||||
(byte*~) main::$0 ← (byte*) SCREEN#0 + (byte/signed byte/word/signed word) 80
|
||||
*((byte*~) main::$0 + (byte) main::i#2) ← (byte) main::a#0
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
(boolean~) main::$1 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 40
|
||||
if((boolean~) main::$1) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
to:@return
|
||||
@1: scope:[] from @begin
|
||||
call main param-assignment
|
||||
to:@2
|
||||
@2: scope:[] from @1
|
||||
to:@end
|
||||
@end: scope:[] from @2
|
||||
|
||||
INITIAL SSA SYMBOL TABLE
|
||||
(label) @1
|
||||
(label) @2
|
||||
(label) @begin
|
||||
(label) @end
|
||||
(byte*) SCREEN
|
||||
(byte*) SCREEN#0
|
||||
(void()) main()
|
||||
(byte*~) main::$0
|
||||
(boolean~) main::$1
|
||||
(label) main::@1
|
||||
(label) main::@return
|
||||
(byte) main::a
|
||||
(byte) main::a#0
|
||||
(byte) main::i
|
||||
(byte) main::i#0
|
||||
(byte) main::i#1
|
||||
(byte) main::i#2
|
||||
|
||||
Culled Empty Block (label) @2
|
||||
Succesful SSA optimization Pass2CullEmptyBlocks
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
(byte) main::i#0 ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 )
|
||||
(byte) main::a#0 ← (byte) main::i#2
|
||||
*((byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::a#0
|
||||
(byte*~) main::$0 ← (byte*) SCREEN#0 + (byte/signed byte/word/signed word) 80
|
||||
*((byte*~) main::$0 + (byte) main::i#2) ← (byte) main::a#0
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
(boolean~) main::$1 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 40
|
||||
if((boolean~) main::$1) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
to:@return
|
||||
@1: scope:[] from @begin
|
||||
call main param-assignment
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
|
||||
Alias (byte) main::a#0 = (byte) main::i#2
|
||||
Succesful SSA optimization Pass2AliasElimination
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
(byte) main::i#0 ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(byte) main::a#0 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 )
|
||||
*((byte*) SCREEN#0 + (byte) main::a#0) ← (byte) main::a#0
|
||||
(byte*~) main::$0 ← (byte*) SCREEN#0 + (byte/signed byte/word/signed word) 80
|
||||
*((byte*~) main::$0 + (byte) main::a#0) ← (byte) main::a#0
|
||||
(byte) main::i#1 ← ++ (byte) main::a#0
|
||||
(boolean~) main::$1 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 40
|
||||
if((boolean~) main::$1) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
to:@return
|
||||
@1: scope:[] from @begin
|
||||
call main param-assignment
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
|
||||
Simple Condition (boolean~) main::$1 if((byte) main::i#1!=(byte/signed byte/word/signed word) 40) goto main::@1
|
||||
Succesful SSA optimization Pass2ConditionalJumpSimplification
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
(byte) main::i#0 ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(byte) main::a#0 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 )
|
||||
*((byte*) SCREEN#0 + (byte) main::a#0) ← (byte) main::a#0
|
||||
(byte*~) main::$0 ← (byte*) SCREEN#0 + (byte/signed byte/word/signed word) 80
|
||||
*((byte*~) main::$0 + (byte) main::a#0) ← (byte) main::a#0
|
||||
(byte) main::i#1 ← ++ (byte) main::a#0
|
||||
if((byte) main::i#1!=(byte/signed byte/word/signed word) 40) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
to:@return
|
||||
@1: scope:[] from @begin
|
||||
call main param-assignment
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
|
||||
Constant (const byte*) SCREEN#0 = ((byte*))1024
|
||||
Constant (const byte) main::i#0 = 0
|
||||
Succesful SSA optimization Pass2ConstantIdentification
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(byte) main::a#0 ← phi( main/(const byte) main::i#0 main::@1/(byte) main::i#1 )
|
||||
*((const byte*) SCREEN#0 + (byte) main::a#0) ← (byte) main::a#0
|
||||
(byte*~) main::$0 ← (const byte*) SCREEN#0 + (byte/signed byte/word/signed word) 80
|
||||
*((byte*~) main::$0 + (byte) main::a#0) ← (byte) main::a#0
|
||||
(byte) main::i#1 ← ++ (byte) main::a#0
|
||||
if((byte) main::i#1!=(byte/signed byte/word/signed word) 40) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
to:@return
|
||||
@1: scope:[] from @begin
|
||||
call main param-assignment
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
|
||||
Constant (const byte*) main::$0 = SCREEN#0+80
|
||||
Succesful SSA optimization Pass2ConstantIdentification
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(byte) main::a#0 ← phi( main/(const byte) main::i#0 main::@1/(byte) main::i#1 )
|
||||
*((const byte*) SCREEN#0 + (byte) main::a#0) ← (byte) main::a#0
|
||||
*((const byte*) main::$0 + (byte) main::a#0) ← (byte) main::a#0
|
||||
(byte) main::i#1 ← ++ (byte) main::a#0
|
||||
if((byte) main::i#1!=(byte/signed byte/word/signed word) 40) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
to:@return
|
||||
@1: scope:[] from @begin
|
||||
call main param-assignment
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::a#0
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::a#0
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::a#0
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::a#0
|
||||
Inlining constant with var siblings (const byte) main::i#0
|
||||
Constant inlined main::i#0 = (byte/signed byte/word/signed word) 0
|
||||
Constant inlined main::$0 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word) 80
|
||||
Succesful SSA optimization Pass2ConstantInlining
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(byte) main::a#0 ← phi( main/(byte/signed byte/word/signed word) 0 main::@1/(byte) main::i#1 )
|
||||
*((const byte*) SCREEN#0 + (byte) main::a#0) ← (byte) main::a#0
|
||||
*((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 80 + (byte) main::a#0) ← (byte) main::a#0
|
||||
(byte) main::i#1 ← ++ (byte) main::a#0
|
||||
if((byte) main::i#1!=(byte/signed byte/word/signed word) 40) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
to:@return
|
||||
@1: scope:[] from @begin
|
||||
call main param-assignment
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
|
||||
FINAL SYMBOL TABLE
|
||||
(label) @1
|
||||
(label) @begin
|
||||
(label) @end
|
||||
(byte*) SCREEN
|
||||
(const byte*) SCREEN#0 = ((byte*))(word/signed word) 1024
|
||||
(void()) main()
|
||||
(label) main::@1
|
||||
(label) main::@return
|
||||
(byte) main::a
|
||||
(byte) main::a#0
|
||||
(byte) main::i
|
||||
(byte) main::i#1
|
||||
|
||||
Block Sequence Planned @begin @1 @end main main::@1 main::@return
|
||||
Added new block during phi lifting main::@3(between main::@1 and main::@1)
|
||||
Block Sequence Planned @begin @1 @end main main::@1 main::@return main::@3
|
||||
CONTROL FLOW GRAPH - PHI LIFTED
|
||||
@begin: scope:[] from
|
||||
to:@1
|
||||
@1: scope:[] from @begin
|
||||
call main param-assignment
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
main: scope:[main] from @1
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@3
|
||||
(byte) main::a#0 ← phi( main/(byte/signed byte/word/signed word) 0 main::@3/(byte~) main::a#1 )
|
||||
*((const byte*) SCREEN#0 + (byte) main::a#0) ← (byte) main::a#0
|
||||
*((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 80 + (byte) main::a#0) ← (byte) main::a#0
|
||||
(byte) main::i#1 ← ++ (byte) main::a#0
|
||||
if((byte) main::i#1!=(byte/signed byte/word/signed word) 40) goto main::@3
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
to:@return
|
||||
main::@3: scope:[main] from main::@1
|
||||
(byte~) main::a#1 ← (byte) main::i#1
|
||||
to:main::@1
|
||||
|
||||
Adding NOP phi() at start of @begin
|
||||
Adding NOP phi() at start of @1
|
||||
Adding NOP phi() at start of @end
|
||||
Adding NOP phi() at start of main
|
||||
CALL GRAPH
|
||||
Calls in [] to main:2
|
||||
|
||||
Propagating live ranges...
|
||||
Propagating live ranges...
|
||||
CONTROL FLOW GRAPH - LIVE RANGES FOUND
|
||||
@begin: scope:[] from
|
||||
[0] phi() [ ]
|
||||
to:@1
|
||||
@1: scope:[] from @begin
|
||||
[1] phi() [ ]
|
||||
[2] call main param-assignment [ ]
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
[3] phi() [ ]
|
||||
main: scope:[main] from @1
|
||||
[4] phi() [ ]
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@3
|
||||
[5] (byte) main::a#0 ← phi( main/(byte/signed byte/word/signed word) 0 main::@3/(byte~) main::a#1 ) [ main::a#0 ]
|
||||
[6] *((const byte*) SCREEN#0 + (byte) main::a#0) ← (byte) main::a#0 [ main::a#0 ]
|
||||
[7] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 80 + (byte) main::a#0) ← (byte) main::a#0 [ main::a#0 ]
|
||||
[8] (byte) main::i#1 ← ++ (byte) main::a#0 [ main::i#1 ]
|
||||
[9] if((byte) main::i#1!=(byte/signed byte/word/signed word) 40) goto main::@3 [ main::i#1 ]
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
[10] return [ ]
|
||||
to:@return
|
||||
main::@3: scope:[main] from main::@1
|
||||
[11] (byte~) main::a#1 ← (byte) main::i#1 [ main::a#1 ]
|
||||
to:main::@1
|
||||
|
||||
Created 1 initial phi equivalence classes
|
||||
Coalesced [11] main::a#1 ← main::i#1
|
||||
Coalesced down to 1 phi equivalence classes
|
||||
Culled Empty Block (label) main::@3
|
||||
Block Sequence Planned @begin @1 @end main main::@1 main::@return
|
||||
Adding NOP phi() at start of @begin
|
||||
Adding NOP phi() at start of @1
|
||||
Adding NOP phi() at start of @end
|
||||
Adding NOP phi() at start of main
|
||||
Propagating live ranges...
|
||||
Propagating live ranges...
|
||||
CONTROL FLOW GRAPH - BEFORE EFFECTIVE LIVE RANGES
|
||||
@begin: scope:[] from
|
||||
[0] phi() [ ]
|
||||
to:@1
|
||||
@1: scope:[] from @begin
|
||||
[1] phi() [ ]
|
||||
[2] call main param-assignment [ ]
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
[3] phi() [ ]
|
||||
main: scope:[main] from @1
|
||||
[4] phi() [ ]
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
[5] (byte) main::a#0 ← phi( main/(byte/signed byte/word/signed word) 0 main::@1/(byte) main::i#1 ) [ main::a#0 ]
|
||||
[6] *((const byte*) SCREEN#0 + (byte) main::a#0) ← (byte) main::a#0 [ main::a#0 ]
|
||||
[7] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 80 + (byte) main::a#0) ← (byte) main::a#0 [ main::a#0 ]
|
||||
[8] (byte) main::i#1 ← ++ (byte) main::a#0 [ main::i#1 ]
|
||||
[9] if((byte) main::i#1!=(byte/signed byte/word/signed word) 40) goto main::@1 [ main::i#1 ]
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
[10] return [ ]
|
||||
to:@return
|
||||
|
||||
CONTROL FLOW GRAPH - PHI MEM COALESCED
|
||||
@begin: scope:[] from
|
||||
[0] phi() [ ] ( )
|
||||
to:@1
|
||||
@1: scope:[] from @begin
|
||||
[1] phi() [ ] ( )
|
||||
[2] call main param-assignment [ ] ( )
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
[3] phi() [ ] ( )
|
||||
main: scope:[main] from @1
|
||||
[4] phi() [ ] ( main:2 [ ] )
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
[5] (byte) main::a#0 ← phi( main/(byte/signed byte/word/signed word) 0 main::@1/(byte) main::i#1 ) [ main::a#0 ] ( main:2 [ main::a#0 ] )
|
||||
[6] *((const byte*) SCREEN#0 + (byte) main::a#0) ← (byte) main::a#0 [ main::a#0 ] ( main:2 [ main::a#0 ] )
|
||||
[7] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 80 + (byte) main::a#0) ← (byte) main::a#0 [ main::a#0 ] ( main:2 [ main::a#0 ] )
|
||||
[8] (byte) main::i#1 ← ++ (byte) main::a#0 [ main::i#1 ] ( main:2 [ main::i#1 ] )
|
||||
[9] if((byte) main::i#1!=(byte/signed byte/word/signed word) 40) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] )
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
[10] return [ ] ( main:2 [ ] )
|
||||
to:@return
|
||||
|
||||
DOMINATORS
|
||||
@begin dominated by @begin
|
||||
@1 dominated by @1 @begin
|
||||
@end dominated by @1 @begin @end
|
||||
main dominated by @1 @begin main
|
||||
main::@1 dominated by @1 @begin main::@1 main
|
||||
main::@return dominated by main::@return @1 @begin main::@1 main
|
||||
|
||||
Found back edge: Loop head: main::@1 tails: main::@1 blocks: null
|
||||
Populated: Loop head: main::@1 tails: main::@1 blocks: main::@1
|
||||
NATURAL LOOPS
|
||||
Loop head: main::@1 tails: main::@1 blocks: main::@1
|
||||
|
||||
Found 0 loops in scope []
|
||||
Found 1 loops in scope [main]
|
||||
Loop head: main::@1 tails: main::@1 blocks: main::@1
|
||||
NATURAL LOOPS WITH DEPTH
|
||||
Loop head: main::@1 tails: main::@1 blocks: main::@1 depth: 1
|
||||
|
||||
|
||||
VARIABLE REGISTER WEIGHTS
|
||||
(byte*) SCREEN
|
||||
(void()) main()
|
||||
(byte) main::a
|
||||
(byte) main::a#0 22.0
|
||||
(byte) main::i
|
||||
(byte) main::i#1 16.5
|
||||
|
||||
Initial phi equivalence classes
|
||||
[ main::a#0 main::i#1 ]
|
||||
Complete equivalence classes
|
||||
[ main::a#0 main::i#1 ]
|
||||
Allocated zp ZP_BYTE:2 [ main::a#0 main::i#1 ]
|
||||
INITIAL ASM
|
||||
//SEG0 Basic Upstart
|
||||
.pc = $801 "Basic"
|
||||
:BasicUpstart(main)
|
||||
.pc = $80d "Program"
|
||||
//SEG1 Global Constants & labels
|
||||
.const SCREEN = $400
|
||||
//SEG2 @begin
|
||||
bbegin:
|
||||
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
|
||||
b1_from_bbegin:
|
||||
jmp b1
|
||||
//SEG4 @1
|
||||
b1:
|
||||
//SEG5 [2] call main param-assignment [ ] ( )
|
||||
//SEG6 [4] phi from @1 to main [phi:@1->main]
|
||||
main_from_b1:
|
||||
jsr main
|
||||
//SEG7 [3] phi from @1 to @end [phi:@1->@end]
|
||||
bend_from_b1:
|
||||
jmp bend
|
||||
//SEG8 @end
|
||||
bend:
|
||||
//SEG9 main
|
||||
main: {
|
||||
.label a = 2
|
||||
.label i = 2
|
||||
//SEG10 [5] phi from main to main::@1 [phi:main->main::@1]
|
||||
b1_from_main:
|
||||
//SEG11 [5] phi (byte) main::a#0 = (byte/signed byte/word/signed word) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1
|
||||
lda #0
|
||||
sta a
|
||||
jmp b1
|
||||
//SEG12 [5] phi from main::@1 to main::@1 [phi:main::@1->main::@1]
|
||||
b1_from_b1:
|
||||
//SEG13 [5] phi (byte) main::a#0 = (byte) main::i#1 [phi:main::@1->main::@1#0] -- register_copy
|
||||
jmp b1
|
||||
//SEG14 main::@1
|
||||
b1:
|
||||
//SEG15 [6] *((const byte*) SCREEN#0 + (byte) main::a#0) ← (byte) main::a#0 [ main::a#0 ] ( main:2 [ main::a#0 ] ) -- pbuc1_derefidx_vbuz1=vbuz1
|
||||
ldx a
|
||||
txa
|
||||
sta SCREEN,x
|
||||
//SEG16 [7] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 80 + (byte) main::a#0) ← (byte) main::a#0 [ main::a#0 ] ( main:2 [ main::a#0 ] ) -- pbuc1_derefidx_vbuz1=vbuz1
|
||||
ldx a
|
||||
txa
|
||||
sta SCREEN+$50,x
|
||||
//SEG17 [8] (byte) main::i#1 ← ++ (byte) main::a#0 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1=_inc_vbuz1
|
||||
inc i
|
||||
//SEG18 [9] if((byte) main::i#1!=(byte/signed byte/word/signed word) 40) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1_neq_vbuc1_then_la1
|
||||
lda i
|
||||
cmp #$28
|
||||
bne b1_from_b1
|
||||
jmp breturn
|
||||
//SEG19 main::@return
|
||||
breturn:
|
||||
//SEG20 [10] return [ ] ( main:2 [ ] )
|
||||
rts
|
||||
}
|
||||
|
||||
REGISTER UPLIFT POTENTIAL REGISTERS
|
||||
Potential registers zp ZP_BYTE:2 [ main::a#0 main::i#1 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y ,
|
||||
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [main] 38.5: zp ZP_BYTE:2 [ main::a#0 main::i#1 ]
|
||||
Uplift Scope []
|
||||
|
||||
Uplifting [main] best 333 combination reg byte x [ main::a#0 main::i#1 ]
|
||||
Uplifting [] best 333 combination
|
||||
|
||||
ASSEMBLER BEFORE OPTIMIZATION
|
||||
//SEG0 Basic Upstart
|
||||
.pc = $801 "Basic"
|
||||
:BasicUpstart(main)
|
||||
.pc = $80d "Program"
|
||||
//SEG1 Global Constants & labels
|
||||
.const SCREEN = $400
|
||||
//SEG2 @begin
|
||||
bbegin:
|
||||
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
|
||||
b1_from_bbegin:
|
||||
jmp b1
|
||||
//SEG4 @1
|
||||
b1:
|
||||
//SEG5 [2] call main param-assignment [ ] ( )
|
||||
//SEG6 [4] phi from @1 to main [phi:@1->main]
|
||||
main_from_b1:
|
||||
jsr main
|
||||
//SEG7 [3] phi from @1 to @end [phi:@1->@end]
|
||||
bend_from_b1:
|
||||
jmp bend
|
||||
//SEG8 @end
|
||||
bend:
|
||||
//SEG9 main
|
||||
main: {
|
||||
//SEG10 [5] phi from main to main::@1 [phi:main->main::@1]
|
||||
b1_from_main:
|
||||
//SEG11 [5] phi (byte) main::a#0 = (byte/signed byte/word/signed word) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1
|
||||
ldx #0
|
||||
jmp b1
|
||||
//SEG12 [5] phi from main::@1 to main::@1 [phi:main::@1->main::@1]
|
||||
b1_from_b1:
|
||||
//SEG13 [5] phi (byte) main::a#0 = (byte) main::i#1 [phi:main::@1->main::@1#0] -- register_copy
|
||||
jmp b1
|
||||
//SEG14 main::@1
|
||||
b1:
|
||||
//SEG15 [6] *((const byte*) SCREEN#0 + (byte) main::a#0) ← (byte) main::a#0 [ main::a#0 ] ( main:2 [ main::a#0 ] ) -- pbuc1_derefidx_vbuxx=vbuxx
|
||||
txa
|
||||
sta SCREEN,x
|
||||
//SEG16 [7] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 80 + (byte) main::a#0) ← (byte) main::a#0 [ main::a#0 ] ( main:2 [ main::a#0 ] ) -- pbuc1_derefidx_vbuxx=vbuxx
|
||||
txa
|
||||
sta SCREEN+$50,x
|
||||
//SEG17 [8] (byte) main::i#1 ← ++ (byte) main::a#0 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx=_inc_vbuxx
|
||||
inx
|
||||
//SEG18 [9] if((byte) main::i#1!=(byte/signed byte/word/signed word) 40) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1
|
||||
cpx #$28
|
||||
bne b1_from_b1
|
||||
jmp breturn
|
||||
//SEG19 main::@return
|
||||
breturn:
|
||||
//SEG20 [10] return [ ] ( main:2 [ ] )
|
||||
rts
|
||||
}
|
||||
|
||||
ASSEMBLER OPTIMIZATIONS
|
||||
Removing instruction jmp b1
|
||||
Removing instruction jmp bend
|
||||
Removing instruction jmp b1
|
||||
Removing instruction jmp breturn
|
||||
Succesful ASM optimization Pass5NextJumpElimination
|
||||
Replacing label b1_from_b1 with b1
|
||||
Removing instruction bbegin:
|
||||
Removing instruction b1_from_bbegin:
|
||||
Removing instruction main_from_b1:
|
||||
Removing instruction bend_from_b1:
|
||||
Removing instruction b1_from_b1:
|
||||
Succesful ASM optimization Pass5RedundantLabelElimination
|
||||
Removing instruction b1:
|
||||
Removing instruction bend:
|
||||
Removing instruction b1_from_main:
|
||||
Removing instruction breturn:
|
||||
Succesful ASM optimization Pass5UnusedLabelElimination
|
||||
Removing instruction jmp b1
|
||||
Succesful ASM optimization Pass5NextJumpElimination
|
||||
|
||||
FINAL SYMBOL TABLE
|
||||
(label) @1
|
||||
(label) @begin
|
||||
(label) @end
|
||||
(byte*) SCREEN
|
||||
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word) 1024
|
||||
(void()) main()
|
||||
(label) main::@1
|
||||
(label) main::@return
|
||||
(byte) main::a
|
||||
(byte) main::a#0 reg byte x 22.0
|
||||
(byte) main::i
|
||||
(byte) main::i#1 reg byte x 16.5
|
||||
|
||||
reg byte x [ main::a#0 main::i#1 ]
|
||||
|
||||
FINAL CODE
|
||||
//SEG0 Basic Upstart
|
||||
.pc = $801 "Basic"
|
||||
:BasicUpstart(main)
|
||||
.pc = $80d "Program"
|
||||
//SEG1 Global Constants & labels
|
||||
.const SCREEN = $400
|
||||
//SEG2 @begin
|
||||
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
|
||||
//SEG4 @1
|
||||
//SEG5 [2] call main param-assignment [ ] ( )
|
||||
//SEG6 [4] phi from @1 to main [phi:@1->main]
|
||||
jsr main
|
||||
//SEG7 [3] phi from @1 to @end [phi:@1->@end]
|
||||
//SEG8 @end
|
||||
//SEG9 main
|
||||
main: {
|
||||
//SEG10 [5] phi from main to main::@1 [phi:main->main::@1]
|
||||
//SEG11 [5] phi (byte) main::a#0 = (byte/signed byte/word/signed word) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1
|
||||
ldx #0
|
||||
//SEG12 [5] phi from main::@1 to main::@1 [phi:main::@1->main::@1]
|
||||
//SEG13 [5] phi (byte) main::a#0 = (byte) main::i#1 [phi:main::@1->main::@1#0] -- register_copy
|
||||
//SEG14 main::@1
|
||||
b1:
|
||||
//SEG15 [6] *((const byte*) SCREEN#0 + (byte) main::a#0) ← (byte) main::a#0 [ main::a#0 ] ( main:2 [ main::a#0 ] ) -- pbuc1_derefidx_vbuxx=vbuxx
|
||||
txa
|
||||
sta SCREEN,x
|
||||
//SEG16 [7] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 80 + (byte) main::a#0) ← (byte) main::a#0 [ main::a#0 ] ( main:2 [ main::a#0 ] ) -- pbuc1_derefidx_vbuxx=vbuxx
|
||||
txa
|
||||
sta SCREEN+$50,x
|
||||
//SEG17 [8] (byte) main::i#1 ← ++ (byte) main::a#0 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx=_inc_vbuxx
|
||||
inx
|
||||
//SEG18 [9] if((byte) main::i#1!=(byte/signed byte/word/signed word) 40) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1
|
||||
cpx #$28
|
||||
bne b1
|
||||
//SEG19 main::@return
|
||||
//SEG20 [10] return [ ] ( main:2 [ ] )
|
||||
rts
|
||||
}
|
||||
|
@ -0,0 +1,14 @@
|
||||
(label) @1
|
||||
(label) @begin
|
||||
(label) @end
|
||||
(byte*) SCREEN
|
||||
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word) 1024
|
||||
(void()) main()
|
||||
(label) main::@1
|
||||
(label) main::@return
|
||||
(byte) main::a
|
||||
(byte) main::a#0 reg byte x 22.0
|
||||
(byte) main::i
|
||||
(byte) main::i#1 reg byte x 16.5
|
||||
|
||||
reg byte x [ main::a#0 main::i#1 ]
|
@ -6,26 +6,26 @@
|
||||
main: {
|
||||
.label w = 3
|
||||
.label sc = 3
|
||||
.label l = 2
|
||||
ldx #0
|
||||
.label h = 2
|
||||
lda #0
|
||||
sta h
|
||||
b1:
|
||||
lda #4
|
||||
sta l
|
||||
ldx #4
|
||||
b2:
|
||||
lda his,x
|
||||
ldy h
|
||||
lda his,y
|
||||
sta w+1
|
||||
lda l
|
||||
sta w
|
||||
stx w
|
||||
ldy #0
|
||||
lda #'*'
|
||||
sta (sc),y
|
||||
inc l
|
||||
lda l
|
||||
cmp #8
|
||||
bne b2
|
||||
inx
|
||||
cpx #2
|
||||
cpx #8
|
||||
bne b2
|
||||
inc h
|
||||
lda h
|
||||
cmp #3
|
||||
bne b1
|
||||
rts
|
||||
his: .byte >SCREEN, >SCREEN+$100
|
||||
his: .byte >SCREEN, >SCREEN+$100, >SCREEN+$200
|
||||
}
|
||||
|
@ -15,17 +15,16 @@ main::@1: scope:[main] from main main::@3
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1 main::@2
|
||||
[6] (byte) main::l#2 ← phi( main::@1/(byte/signed byte/word/signed word) 4 main::@2/(byte) main::l#1 ) [ main::h#4 main::l#2 ] ( main:2 [ main::h#4 main::l#2 ] )
|
||||
[7] (byte~) main::$3 ← (const byte[]) main::his#0 *idx (byte) main::h#4 [ main::h#4 main::l#2 main::$3 ] ( main:2 [ main::h#4 main::l#2 main::$3 ] )
|
||||
[8] (word) main::w#0 ← (byte~) main::$3 w= (byte) main::l#2 [ main::h#4 main::l#2 main::w#0 ] ( main:2 [ main::h#4 main::l#2 main::w#0 ] )
|
||||
[9] (byte*) main::sc#0 ← ((byte*)) (word) main::w#0 [ main::h#4 main::l#2 main::sc#0 ] ( main:2 [ main::h#4 main::l#2 main::sc#0 ] )
|
||||
[10] *((byte*) main::sc#0) ← (byte) '*' [ main::h#4 main::l#2 ] ( main:2 [ main::h#4 main::l#2 ] )
|
||||
[11] (byte) main::l#1 ← ++ (byte) main::l#2 [ main::h#4 main::l#1 ] ( main:2 [ main::h#4 main::l#1 ] )
|
||||
[12] if((byte) main::l#1!=(byte/signed byte/word/signed word) 8) goto main::@2 [ main::h#4 main::l#1 ] ( main:2 [ main::h#4 main::l#1 ] )
|
||||
[7] (word) main::w#0 ← *((const byte[]) main::his#0 + (byte) main::h#4) w= (byte) main::l#2 [ main::h#4 main::l#2 main::w#0 ] ( main:2 [ main::h#4 main::l#2 main::w#0 ] )
|
||||
[8] (byte*) main::sc#0 ← ((byte*)) (word) main::w#0 [ main::h#4 main::l#2 main::sc#0 ] ( main:2 [ main::h#4 main::l#2 main::sc#0 ] )
|
||||
[9] *((byte*) main::sc#0) ← (byte) '*' [ main::h#4 main::l#2 ] ( main:2 [ main::h#4 main::l#2 ] )
|
||||
[10] (byte) main::l#1 ← ++ (byte) main::l#2 [ main::h#4 main::l#1 ] ( main:2 [ main::h#4 main::l#1 ] )
|
||||
[11] if((byte) main::l#1!=(byte/signed byte/word/signed word) 8) goto main::@2 [ main::h#4 main::l#1 ] ( main:2 [ main::h#4 main::l#1 ] )
|
||||
to:main::@3
|
||||
main::@3: scope:[main] from main::@2
|
||||
[13] (byte) main::h#1 ← ++ (byte) main::h#4 [ main::h#1 ] ( main:2 [ main::h#1 ] )
|
||||
[14] if((byte) main::h#1!=(byte/signed byte/word/signed word) 2) goto main::@1 [ main::h#1 ] ( main:2 [ main::h#1 ] )
|
||||
[12] (byte) main::h#1 ← ++ (byte) main::h#4 [ main::h#1 ] ( main:2 [ main::h#1 ] )
|
||||
[13] if((byte) main::h#1!=(byte/signed byte/word/signed word) 3) goto main::@1 [ main::h#1 ] ( main:2 [ main::h#1 ] )
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@3
|
||||
[15] return [ ] ( main:2 [ ] )
|
||||
[14] return [ ] ( main:2 [ ] )
|
||||
to:@return
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -4,25 +4,23 @@
|
||||
(byte*) SCREEN
|
||||
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word) 1024
|
||||
(void()) main()
|
||||
(byte~) main::$3 reg byte a 202.0
|
||||
(label) main::@1
|
||||
(label) main::@2
|
||||
(label) main::@3
|
||||
(label) main::@return
|
||||
(byte) main::h
|
||||
(byte) main::h#1 reg byte x 16.5
|
||||
(byte) main::h#4 reg byte x 15.375
|
||||
(byte) main::h#1 h zp ZP_BYTE:2 16.5
|
||||
(byte) main::h#4 h zp ZP_BYTE:2 17.571428571428573
|
||||
(byte[]) main::his
|
||||
(const byte[]) main::his#0 his = { >(const byte*) SCREEN#0, >(const byte*) SCREEN#0+(word/signed word) 256 }
|
||||
(const byte[]) main::his#0 his = { >(const byte*) SCREEN#0, >(const byte*) SCREEN#0+(word/signed word) 256, >(const byte*) SCREEN#0+(word/signed word) 512 }
|
||||
(byte) main::l
|
||||
(byte) main::l#1 l zp ZP_BYTE:2 151.5
|
||||
(byte) main::l#2 l zp ZP_BYTE:2 60.599999999999994
|
||||
(byte) main::l#1 reg byte x 151.5
|
||||
(byte) main::l#2 reg byte x 75.75
|
||||
(byte*) main::sc
|
||||
(byte*) main::sc#0 sc zp ZP_WORD:3 202.0
|
||||
(word) main::w
|
||||
(word) main::w#0 w zp ZP_WORD:3 202.0
|
||||
|
||||
reg byte x [ main::h#4 main::h#1 ]
|
||||
zp ZP_BYTE:2 [ main::l#2 main::l#1 ]
|
||||
reg byte a [ main::$3 ]
|
||||
zp ZP_BYTE:2 [ main::h#4 main::h#1 ]
|
||||
reg byte x [ main::l#2 main::l#1 ]
|
||||
zp ZP_WORD:3 [ main::w#0 main::sc#0 ]
|
||||
|
@ -12,13 +12,11 @@ main: scope:[main] from @1
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
[5] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word) 0 main::@1/(byte) main::i#1 ) [ main::i#2 ] ( main:2 [ main::i#2 ] )
|
||||
[6] (byte~) main::$0 ← (const byte[]) main::txt#0 *idx (byte) main::i#2 [ main::i#2 main::$0 ] ( main:2 [ main::i#2 main::$0 ] )
|
||||
[7] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte~) main::$0 [ main::i#2 ] ( main:2 [ main::i#2 ] )
|
||||
[8] (byte~) main::$1 ← (const byte[]) main::data#0 *idx (byte) main::i#2 [ main::i#2 main::$1 ] ( main:2 [ main::i#2 main::$1 ] )
|
||||
[9] *((const byte*) SCREEN2#0 + (byte) main::i#2) ← (byte~) main::$1 [ main::i#2 ] ( main:2 [ main::i#2 ] )
|
||||
[10] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] )
|
||||
[11] if((byte) main::i#1!=(byte/signed byte/word/signed word) 4) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] )
|
||||
[6] *((const byte*) SCREEN#0 + (byte) main::i#2) ← *((const byte[]) main::txt#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] )
|
||||
[7] *((const byte*) SCREEN2#0 + (byte) main::i#2) ← *((const byte[]) main::data#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] )
|
||||
[8] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] )
|
||||
[9] if((byte) main::i#1!=(byte/signed byte/word/signed word) 4) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] )
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
[12] return [ ] ( main:2 [ ] )
|
||||
[10] return [ ] ( main:2 [ ] )
|
||||
to:@return
|
||||
|
@ -20,13 +20,11 @@ proc (void()) main()
|
||||
(byte[]) main::data ← { (byte/signed byte/word/signed word) 1, (byte/signed byte/word/signed word) 2, (byte/signed byte/word/signed word) 3 }
|
||||
(byte) main::i ← (byte/signed byte/word/signed word) 0
|
||||
main::@1:
|
||||
(byte~) main::$0 ← (byte[]) main::txt *idx (byte) main::i
|
||||
*((byte*) SCREEN + (byte) main::i) ← (byte~) main::$0
|
||||
(byte~) main::$1 ← (byte[]) main::data *idx (byte) main::i
|
||||
*((byte*) SCREEN2 + (byte) main::i) ← (byte~) main::$1
|
||||
*((byte*) SCREEN + (byte) main::i) ← *((byte[]) main::txt + (byte) main::i)
|
||||
*((byte*) SCREEN2 + (byte) main::i) ← *((byte[]) main::data + (byte) main::i)
|
||||
(byte) main::i ← ++ (byte) main::i
|
||||
(boolean~) main::$2 ← (byte) main::i != (byte/signed byte/word/signed word) 4
|
||||
if((boolean~) main::$2) goto main::@1
|
||||
(boolean~) main::$0 ← (byte) main::i != (byte/signed byte/word/signed word) 4
|
||||
if((boolean~) main::$0) goto main::@1
|
||||
main::@return:
|
||||
return
|
||||
endproc // main()
|
||||
@ -37,9 +35,7 @@ SYMBOLS
|
||||
(byte*) SCREEN
|
||||
(byte*) SCREEN2
|
||||
(void()) main()
|
||||
(byte~) main::$0
|
||||
(byte~) main::$1
|
||||
(boolean~) main::$2
|
||||
(boolean~) main::$0
|
||||
(label) main::@1
|
||||
(label) main::@return
|
||||
(byte[]) main::data
|
||||
@ -60,13 +56,11 @@ main: scope:[main] from
|
||||
(byte) main::i ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(byte~) main::$0 ← (byte[]) main::txt *idx (byte) main::i
|
||||
*((byte*) SCREEN + (byte) main::i) ← (byte~) main::$0
|
||||
(byte~) main::$1 ← (byte[]) main::data *idx (byte) main::i
|
||||
*((byte*) SCREEN2 + (byte) main::i) ← (byte~) main::$1
|
||||
*((byte*) SCREEN + (byte) main::i) ← *((byte[]) main::txt + (byte) main::i)
|
||||
*((byte*) SCREEN2 + (byte) main::i) ← *((byte[]) main::data + (byte) main::i)
|
||||
(byte) main::i ← ++ (byte) main::i
|
||||
(boolean~) main::$2 ← (byte) main::i != (byte/signed byte/word/signed word) 4
|
||||
if((boolean~) main::$2) goto main::@1
|
||||
(boolean~) main::$0 ← (byte) main::i != (byte/signed byte/word/signed word) 4
|
||||
if((boolean~) main::$0) goto main::@1
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1
|
||||
to:main::@return
|
||||
@ -91,13 +85,11 @@ main: scope:[main] from
|
||||
(byte) main::i ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(byte~) main::$0 ← (byte[]) main::txt *idx (byte) main::i
|
||||
*((byte*) SCREEN + (byte) main::i) ← (byte~) main::$0
|
||||
(byte~) main::$1 ← (byte[]) main::data *idx (byte) main::i
|
||||
*((byte*) SCREEN2 + (byte) main::i) ← (byte~) main::$1
|
||||
*((byte*) SCREEN + (byte) main::i) ← *((byte[]) main::txt + (byte) main::i)
|
||||
*((byte*) SCREEN2 + (byte) main::i) ← *((byte[]) main::data + (byte) main::i)
|
||||
(byte) main::i ← ++ (byte) main::i
|
||||
(boolean~) main::$2 ← (byte) main::i != (byte/signed byte/word/signed word) 4
|
||||
if((boolean~) main::$2) goto main::@1
|
||||
(boolean~) main::$0 ← (byte) main::i != (byte/signed byte/word/signed word) 4
|
||||
if((boolean~) main::$0) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
@ -121,13 +113,11 @@ main: scope:[main] from @1
|
||||
(byte) main::i ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(byte~) main::$0 ← (byte[]) main::txt *idx (byte) main::i
|
||||
*((byte*) SCREEN + (byte) main::i) ← (byte~) main::$0
|
||||
(byte~) main::$1 ← (byte[]) main::data *idx (byte) main::i
|
||||
*((byte*) SCREEN2 + (byte) main::i) ← (byte~) main::$1
|
||||
*((byte*) SCREEN + (byte) main::i) ← *((byte[]) main::txt + (byte) main::i)
|
||||
*((byte*) SCREEN2 + (byte) main::i) ← *((byte[]) main::data + (byte) main::i)
|
||||
(byte) main::i ← ++ (byte) main::i
|
||||
(boolean~) main::$2 ← (byte) main::i != (byte/signed byte/word/signed word) 4
|
||||
if((boolean~) main::$2) goto main::@1
|
||||
(boolean~) main::$0 ← (byte) main::i != (byte/signed byte/word/signed word) 4
|
||||
if((boolean~) main::$0) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
@ -161,13 +151,11 @@ main::@1: scope:[main] from main main::@1
|
||||
(byte*) SCREEN#1 ← phi( main/(byte*) SCREEN#2 main::@1/(byte*) SCREEN#1 )
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 )
|
||||
(byte[]) main::txt#1 ← phi( main/(byte[]) main::txt#0 main::@1/(byte[]) main::txt#1 )
|
||||
(byte~) main::$0 ← (byte[]) main::txt#1 *idx (byte) main::i#2
|
||||
*((byte*) SCREEN#1 + (byte) main::i#2) ← (byte~) main::$0
|
||||
(byte~) main::$1 ← (byte[]) main::data#1 *idx (byte) main::i#2
|
||||
*((byte*) SCREEN2#1 + (byte) main::i#2) ← (byte~) main::$1
|
||||
*((byte*) SCREEN#1 + (byte) main::i#2) ← *((byte[]) main::txt#1 + (byte) main::i#2)
|
||||
*((byte*) SCREEN2#1 + (byte) main::i#2) ← *((byte[]) main::data#1 + (byte) main::i#2)
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
(boolean~) main::$2 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 4
|
||||
if((boolean~) main::$2) goto main::@1
|
||||
(boolean~) main::$0 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 4
|
||||
if((boolean~) main::$0) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
@ -200,13 +188,11 @@ main::@1: scope:[main] from main main::@1
|
||||
(byte*) SCREEN#1 ← phi( main/(byte*) SCREEN#2 main::@1/(byte*) SCREEN#1 )
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 )
|
||||
(byte[]) main::txt#1 ← phi( main/(byte[]) main::txt#0 main::@1/(byte[]) main::txt#1 )
|
||||
(byte~) main::$0 ← (byte[]) main::txt#1 *idx (byte) main::i#2
|
||||
*((byte*) SCREEN#1 + (byte) main::i#2) ← (byte~) main::$0
|
||||
(byte~) main::$1 ← (byte[]) main::data#1 *idx (byte) main::i#2
|
||||
*((byte*) SCREEN2#1 + (byte) main::i#2) ← (byte~) main::$1
|
||||
*((byte*) SCREEN#1 + (byte) main::i#2) ← *((byte[]) main::txt#1 + (byte) main::i#2)
|
||||
*((byte*) SCREEN2#1 + (byte) main::i#2) ← *((byte[]) main::data#1 + (byte) main::i#2)
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
(boolean~) main::$2 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 4
|
||||
if((boolean~) main::$2) goto main::@1
|
||||
(boolean~) main::$0 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 4
|
||||
if((boolean~) main::$0) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
@ -237,9 +223,7 @@ INITIAL SSA SYMBOL TABLE
|
||||
(byte*) SCREEN2#2
|
||||
(byte*) SCREEN2#3
|
||||
(void()) main()
|
||||
(byte~) main::$0
|
||||
(byte~) main::$1
|
||||
(boolean~) main::$2
|
||||
(boolean~) main::$0
|
||||
(label) main::@1
|
||||
(label) main::@return
|
||||
(byte[]) main::data
|
||||
@ -274,13 +258,11 @@ main::@1: scope:[main] from main main::@1
|
||||
(byte*) SCREEN#1 ← phi( main/(byte*) SCREEN#2 main::@1/(byte*) SCREEN#1 )
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 )
|
||||
(byte[]) main::txt#1 ← phi( main/(byte[]) main::txt#0 main::@1/(byte[]) main::txt#1 )
|
||||
(byte~) main::$0 ← (byte[]) main::txt#1 *idx (byte) main::i#2
|
||||
*((byte*) SCREEN#1 + (byte) main::i#2) ← (byte~) main::$0
|
||||
(byte~) main::$1 ← (byte[]) main::data#1 *idx (byte) main::i#2
|
||||
*((byte*) SCREEN2#1 + (byte) main::i#2) ← (byte~) main::$1
|
||||
*((byte*) SCREEN#1 + (byte) main::i#2) ← *((byte[]) main::txt#1 + (byte) main::i#2)
|
||||
*((byte*) SCREEN2#1 + (byte) main::i#2) ← *((byte[]) main::data#1 + (byte) main::i#2)
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
(boolean~) main::$2 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 4
|
||||
if((boolean~) main::$2) goto main::@1
|
||||
(boolean~) main::$0 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 4
|
||||
if((boolean~) main::$0) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
@ -316,13 +298,11 @@ main::@1: scope:[main] from main main::@1
|
||||
(byte*) SCREEN#1 ← phi( main/(byte*) SCREEN#2 main::@1/(byte*) SCREEN#1 )
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 )
|
||||
(byte[]) main::txt#1 ← phi( main/(byte[]) main::txt#0 main::@1/(byte[]) main::txt#1 )
|
||||
(byte~) main::$0 ← (byte[]) main::txt#1 *idx (byte) main::i#2
|
||||
*((byte*) SCREEN#1 + (byte) main::i#2) ← (byte~) main::$0
|
||||
(byte~) main::$1 ← (byte[]) main::data#1 *idx (byte) main::i#2
|
||||
*((byte*) SCREEN2#1 + (byte) main::i#2) ← (byte~) main::$1
|
||||
*((byte*) SCREEN#1 + (byte) main::i#2) ← *((byte[]) main::txt#1 + (byte) main::i#2)
|
||||
*((byte*) SCREEN2#1 + (byte) main::i#2) ← *((byte[]) main::data#1 + (byte) main::i#2)
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
(boolean~) main::$2 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 4
|
||||
if((boolean~) main::$2) goto main::@1
|
||||
(boolean~) main::$0 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 4
|
||||
if((boolean~) main::$0) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
@ -358,13 +338,11 @@ main::@1: scope:[main] from main main::@1
|
||||
(byte*) SCREEN#1 ← phi( main/(byte*) SCREEN#2 )
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 )
|
||||
(byte[]) main::txt#1 ← phi( main/(byte[]) main::txt#0 )
|
||||
(byte~) main::$0 ← (byte[]) main::txt#1 *idx (byte) main::i#2
|
||||
*((byte*) SCREEN#1 + (byte) main::i#2) ← (byte~) main::$0
|
||||
(byte~) main::$1 ← (byte[]) main::data#1 *idx (byte) main::i#2
|
||||
*((byte*) SCREEN2#1 + (byte) main::i#2) ← (byte~) main::$1
|
||||
*((byte*) SCREEN#1 + (byte) main::i#2) ← *((byte[]) main::txt#1 + (byte) main::i#2)
|
||||
*((byte*) SCREEN2#1 + (byte) main::i#2) ← *((byte[]) main::data#1 + (byte) main::i#2)
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
(boolean~) main::$2 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 4
|
||||
if((boolean~) main::$2) goto main::@1
|
||||
(boolean~) main::$0 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 4
|
||||
if((boolean~) main::$0) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
@ -394,13 +372,11 @@ main: scope:[main] from @1
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 )
|
||||
(byte~) main::$0 ← (byte[]) main::txt#0 *idx (byte) main::i#2
|
||||
*((byte*) SCREEN#0 + (byte) main::i#2) ← (byte~) main::$0
|
||||
(byte~) main::$1 ← (byte[]) main::data#0 *idx (byte) main::i#2
|
||||
*((byte*) SCREEN2#0 + (byte) main::i#2) ← (byte~) main::$1
|
||||
*((byte*) SCREEN#0 + (byte) main::i#2) ← *((byte[]) main::txt#0 + (byte) main::i#2)
|
||||
*((byte*) SCREEN2#0 + (byte) main::i#2) ← *((byte[]) main::data#0 + (byte) main::i#2)
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
(boolean~) main::$2 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 4
|
||||
if((boolean~) main::$2) goto main::@1
|
||||
(boolean~) main::$0 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 4
|
||||
if((boolean~) main::$0) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
@ -410,7 +386,7 @@ main::@return: scope:[main] from main::@1
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
|
||||
Simple Condition (boolean~) main::$2 if((byte) main::i#1!=(byte/signed byte/word/signed word) 4) goto main::@1
|
||||
Simple Condition (boolean~) main::$0 if((byte) main::i#1!=(byte/signed byte/word/signed word) 4) goto main::@1
|
||||
Succesful SSA optimization Pass2ConditionalJumpSimplification
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
@ -425,10 +401,8 @@ main: scope:[main] from @1
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 )
|
||||
(byte~) main::$0 ← (byte[]) main::txt#0 *idx (byte) main::i#2
|
||||
*((byte*) SCREEN#0 + (byte) main::i#2) ← (byte~) main::$0
|
||||
(byte~) main::$1 ← (byte[]) main::data#0 *idx (byte) main::i#2
|
||||
*((byte*) SCREEN2#0 + (byte) main::i#2) ← (byte~) main::$1
|
||||
*((byte*) SCREEN#0 + (byte) main::i#2) ← *((byte[]) main::txt#0 + (byte) main::i#2)
|
||||
*((byte*) SCREEN2#0 + (byte) main::i#2) ← *((byte[]) main::data#0 + (byte) main::i#2)
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
if((byte) main::i#1!=(byte/signed byte/word/signed word) 4) goto main::@1
|
||||
to:main::@return
|
||||
@ -454,10 +428,8 @@ main: scope:[main] from @1
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(byte) main::i#2 ← phi( main/(const byte) main::i#0 main::@1/(byte) main::i#1 )
|
||||
(byte~) main::$0 ← (const byte[]) main::txt#0 *idx (byte) main::i#2
|
||||
*((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte~) main::$0
|
||||
(byte~) main::$1 ← (const byte[]) main::data#0 *idx (byte) main::i#2
|
||||
*((byte*) SCREEN2#0 + (byte) main::i#2) ← (byte~) main::$1
|
||||
*((const byte*) SCREEN#0 + (byte) main::i#2) ← *((const byte[]) main::txt#0 + (byte) main::i#2)
|
||||
*((byte*) SCREEN2#0 + (byte) main::i#2) ← *((const byte[]) main::data#0 + (byte) main::i#2)
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
if((byte) main::i#1!=(byte/signed byte/word/signed word) 4) goto main::@1
|
||||
to:main::@return
|
||||
@ -478,10 +450,8 @@ main: scope:[main] from @1
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(byte) main::i#2 ← phi( main/(const byte) main::i#0 main::@1/(byte) main::i#1 )
|
||||
(byte~) main::$0 ← (const byte[]) main::txt#0 *idx (byte) main::i#2
|
||||
*((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte~) main::$0
|
||||
(byte~) main::$1 ← (const byte[]) main::data#0 *idx (byte) main::i#2
|
||||
*((const byte*) SCREEN2#0 + (byte) main::i#2) ← (byte~) main::$1
|
||||
*((const byte*) SCREEN#0 + (byte) main::i#2) ← *((const byte[]) main::txt#0 + (byte) main::i#2)
|
||||
*((const byte*) SCREEN2#0 + (byte) main::i#2) ← *((const byte[]) main::data#0 + (byte) main::i#2)
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
if((byte) main::i#1!=(byte/signed byte/word/signed word) 4) goto main::@1
|
||||
to:main::@return
|
||||
@ -493,14 +463,6 @@ main::@return: scope:[main] from main::@1
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
||||
Inlining constant with var siblings (const byte) main::i#0
|
||||
Inlining constant with var siblings (const byte) main::i#0
|
||||
Constant inlined $0 = (word/signed word) 1024+(byte/signed byte/word/signed word) 40
|
||||
@ -513,10 +475,8 @@ main: scope:[main] from @1
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word) 0 main::@1/(byte) main::i#1 )
|
||||
(byte~) main::$0 ← (const byte[]) main::txt#0 *idx (byte) main::i#2
|
||||
*((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte~) main::$0
|
||||
(byte~) main::$1 ← (const byte[]) main::data#0 *idx (byte) main::i#2
|
||||
*((const byte*) SCREEN2#0 + (byte) main::i#2) ← (byte~) main::$1
|
||||
*((const byte*) SCREEN#0 + (byte) main::i#2) ← *((const byte[]) main::txt#0 + (byte) main::i#2)
|
||||
*((const byte*) SCREEN2#0 + (byte) main::i#2) ← *((const byte[]) main::data#0 + (byte) main::i#2)
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
if((byte) main::i#1!=(byte/signed byte/word/signed word) 4) goto main::@1
|
||||
to:main::@return
|
||||
@ -537,8 +497,6 @@ FINAL SYMBOL TABLE
|
||||
(byte*) SCREEN2
|
||||
(const byte*) SCREEN2#0 = ((byte*))(word/signed word) 1024+(byte/signed byte/word/signed word) 40
|
||||
(void()) main()
|
||||
(byte~) main::$0
|
||||
(byte~) main::$1
|
||||
(label) main::@1
|
||||
(label) main::@return
|
||||
(byte[]) main::data
|
||||
@ -563,10 +521,8 @@ main: scope:[main] from @1
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@3
|
||||
(byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word) 0 main::@3/(byte~) main::i#3 )
|
||||
(byte~) main::$0 ← (const byte[]) main::txt#0 *idx (byte) main::i#2
|
||||
*((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte~) main::$0
|
||||
(byte~) main::$1 ← (const byte[]) main::data#0 *idx (byte) main::i#2
|
||||
*((const byte*) SCREEN2#0 + (byte) main::i#2) ← (byte~) main::$1
|
||||
*((const byte*) SCREEN#0 + (byte) main::i#2) ← *((const byte[]) main::txt#0 + (byte) main::i#2)
|
||||
*((const byte*) SCREEN2#0 + (byte) main::i#2) ← *((const byte[]) main::data#0 + (byte) main::i#2)
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
if((byte) main::i#1!=(byte/signed byte/word/signed word) 4) goto main::@3
|
||||
to:main::@return
|
||||
@ -601,22 +557,20 @@ main: scope:[main] from @1
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@3
|
||||
[5] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word) 0 main::@3/(byte~) main::i#3 ) [ main::i#2 ]
|
||||
[6] (byte~) main::$0 ← (const byte[]) main::txt#0 *idx (byte) main::i#2 [ main::i#2 main::$0 ]
|
||||
[7] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte~) main::$0 [ main::i#2 ]
|
||||
[8] (byte~) main::$1 ← (const byte[]) main::data#0 *idx (byte) main::i#2 [ main::i#2 main::$1 ]
|
||||
[9] *((const byte*) SCREEN2#0 + (byte) main::i#2) ← (byte~) main::$1 [ main::i#2 ]
|
||||
[10] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ]
|
||||
[11] if((byte) main::i#1!=(byte/signed byte/word/signed word) 4) goto main::@3 [ main::i#1 ]
|
||||
[6] *((const byte*) SCREEN#0 + (byte) main::i#2) ← *((const byte[]) main::txt#0 + (byte) main::i#2) [ main::i#2 ]
|
||||
[7] *((const byte*) SCREEN2#0 + (byte) main::i#2) ← *((const byte[]) main::data#0 + (byte) main::i#2) [ main::i#2 ]
|
||||
[8] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ]
|
||||
[9] if((byte) main::i#1!=(byte/signed byte/word/signed word) 4) goto main::@3 [ main::i#1 ]
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
[12] return [ ]
|
||||
[10] return [ ]
|
||||
to:@return
|
||||
main::@3: scope:[main] from main::@1
|
||||
[13] (byte~) main::i#3 ← (byte) main::i#1 [ main::i#3 ]
|
||||
[11] (byte~) main::i#3 ← (byte) main::i#1 [ main::i#3 ]
|
||||
to:main::@1
|
||||
|
||||
Created 1 initial phi equivalence classes
|
||||
Coalesced [13] main::i#3 ← main::i#1
|
||||
Coalesced [11] main::i#3 ← main::i#1
|
||||
Coalesced down to 1 phi equivalence classes
|
||||
Culled Empty Block (label) main::@3
|
||||
Block Sequence Planned @begin @1 @end main main::@1 main::@return
|
||||
@ -641,15 +595,13 @@ main: scope:[main] from @1
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
[5] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word) 0 main::@1/(byte) main::i#1 ) [ main::i#2 ]
|
||||
[6] (byte~) main::$0 ← (const byte[]) main::txt#0 *idx (byte) main::i#2 [ main::i#2 main::$0 ]
|
||||
[7] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte~) main::$0 [ main::i#2 ]
|
||||
[8] (byte~) main::$1 ← (const byte[]) main::data#0 *idx (byte) main::i#2 [ main::i#2 main::$1 ]
|
||||
[9] *((const byte*) SCREEN2#0 + (byte) main::i#2) ← (byte~) main::$1 [ main::i#2 ]
|
||||
[10] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ]
|
||||
[11] if((byte) main::i#1!=(byte/signed byte/word/signed word) 4) goto main::@1 [ main::i#1 ]
|
||||
[6] *((const byte*) SCREEN#0 + (byte) main::i#2) ← *((const byte[]) main::txt#0 + (byte) main::i#2) [ main::i#2 ]
|
||||
[7] *((const byte*) SCREEN2#0 + (byte) main::i#2) ← *((const byte[]) main::data#0 + (byte) main::i#2) [ main::i#2 ]
|
||||
[8] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ]
|
||||
[9] if((byte) main::i#1!=(byte/signed byte/word/signed word) 4) goto main::@1 [ main::i#1 ]
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
[12] return [ ]
|
||||
[10] return [ ]
|
||||
to:@return
|
||||
|
||||
CONTROL FLOW GRAPH - PHI MEM COALESCED
|
||||
@ -667,15 +619,13 @@ main: scope:[main] from @1
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
[5] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word) 0 main::@1/(byte) main::i#1 ) [ main::i#2 ] ( main:2 [ main::i#2 ] )
|
||||
[6] (byte~) main::$0 ← (const byte[]) main::txt#0 *idx (byte) main::i#2 [ main::i#2 main::$0 ] ( main:2 [ main::i#2 main::$0 ] )
|
||||
[7] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte~) main::$0 [ main::i#2 ] ( main:2 [ main::i#2 ] )
|
||||
[8] (byte~) main::$1 ← (const byte[]) main::data#0 *idx (byte) main::i#2 [ main::i#2 main::$1 ] ( main:2 [ main::i#2 main::$1 ] )
|
||||
[9] *((const byte*) SCREEN2#0 + (byte) main::i#2) ← (byte~) main::$1 [ main::i#2 ] ( main:2 [ main::i#2 ] )
|
||||
[10] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] )
|
||||
[11] if((byte) main::i#1!=(byte/signed byte/word/signed word) 4) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] )
|
||||
[6] *((const byte*) SCREEN#0 + (byte) main::i#2) ← *((const byte[]) main::txt#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] )
|
||||
[7] *((const byte*) SCREEN2#0 + (byte) main::i#2) ← *((const byte[]) main::data#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] )
|
||||
[8] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] )
|
||||
[9] if((byte) main::i#1!=(byte/signed byte/word/signed word) 4) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] )
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
[12] return [ ] ( main:2 [ ] )
|
||||
[10] return [ ] ( main:2 [ ] )
|
||||
to:@return
|
||||
|
||||
DOMINATORS
|
||||
@ -702,25 +652,17 @@ VARIABLE REGISTER WEIGHTS
|
||||
(byte*) SCREEN
|
||||
(byte*) SCREEN2
|
||||
(void()) main()
|
||||
(byte~) main::$0 22.0
|
||||
(byte~) main::$1 22.0
|
||||
(byte[]) main::data
|
||||
(byte) main::i
|
||||
(byte) main::i#1 16.5
|
||||
(byte) main::i#2 13.2
|
||||
(byte) main::i#2 22.0
|
||||
(byte[]) main::txt
|
||||
|
||||
Initial phi equivalence classes
|
||||
[ main::i#2 main::i#1 ]
|
||||
Added variable main::$0 to zero page equivalence class [ main::$0 ]
|
||||
Added variable main::$1 to zero page equivalence class [ main::$1 ]
|
||||
Complete equivalence classes
|
||||
[ main::i#2 main::i#1 ]
|
||||
[ main::$0 ]
|
||||
[ main::$1 ]
|
||||
Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
|
||||
Allocated zp ZP_BYTE:3 [ main::$0 ]
|
||||
Allocated zp ZP_BYTE:4 [ main::$1 ]
|
||||
INITIAL ASM
|
||||
//SEG0 Basic Upstart
|
||||
.pc = $801 "Basic"
|
||||
@ -747,8 +689,6 @@ bend_from_b1:
|
||||
bend:
|
||||
//SEG9 main
|
||||
main: {
|
||||
.label _0 = 3
|
||||
.label _1 = 4
|
||||
.label i = 2
|
||||
//SEG10 [5] phi from main to main::@1 [phi:main->main::@1]
|
||||
b1_from_main:
|
||||
@ -762,47 +702,42 @@ main: {
|
||||
jmp b1
|
||||
//SEG14 main::@1
|
||||
b1:
|
||||
//SEG15 [6] (byte~) main::$0 ← (const byte[]) main::txt#0 *idx (byte) main::i#2 [ main::i#2 main::$0 ] ( main:2 [ main::i#2 main::$0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2
|
||||
ldx i
|
||||
//SEG15 [6] *((const byte*) SCREEN#0 + (byte) main::i#2) ← *((const byte[]) main::txt#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1
|
||||
lda txt,x
|
||||
sta _0
|
||||
//SEG16 [7] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte~) main::$0 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuz1=vbuz2
|
||||
lda _0
|
||||
ldx i
|
||||
sta SCREEN,x
|
||||
//SEG17 [8] (byte~) main::$1 ← (const byte[]) main::data#0 *idx (byte) main::i#2 [ main::i#2 main::$1 ] ( main:2 [ main::i#2 main::$1 ] ) -- vbuz1=pbuc1_derefidx_vbuz2
|
||||
ldx i
|
||||
//SEG16 [7] *((const byte*) SCREEN2#0 + (byte) main::i#2) ← *((const byte[]) main::data#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1
|
||||
lda data,x
|
||||
sta _1
|
||||
//SEG18 [9] *((const byte*) SCREEN2#0 + (byte) main::i#2) ← (byte~) main::$1 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuz1=vbuz2
|
||||
lda _1
|
||||
ldx i
|
||||
sta SCREEN2,x
|
||||
//SEG19 [10] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1=_inc_vbuz1
|
||||
ldx i
|
||||
//SEG17 [8] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1=_inc_vbuz1
|
||||
inc i
|
||||
//SEG20 [11] if((byte) main::i#1!=(byte/signed byte/word/signed word) 4) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1_neq_vbuc1_then_la1
|
||||
//SEG18 [9] if((byte) main::i#1!=(byte/signed byte/word/signed word) 4) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1_neq_vbuc1_then_la1
|
||||
lda i
|
||||
cmp #4
|
||||
bne b1_from_b1
|
||||
jmp breturn
|
||||
//SEG21 main::@return
|
||||
//SEG19 main::@return
|
||||
breturn:
|
||||
//SEG22 [12] return [ ] ( main:2 [ ] )
|
||||
//SEG20 [10] return [ ] ( main:2 [ ] )
|
||||
rts
|
||||
txt: .text "qwe"
|
||||
data: .byte 1, 2, 3
|
||||
}
|
||||
|
||||
REGISTER UPLIFT POTENTIAL REGISTERS
|
||||
Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:3 [ main::$0 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:4 [ main::$1 ] : zp ZP_BYTE:4 , reg byte a , reg byte x , reg byte y ,
|
||||
Statement [6] *((const byte*) SCREEN#0 + (byte) main::i#2) ← *((const byte[]) main::txt#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a
|
||||
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
|
||||
Statement [7] *((const byte*) SCREEN2#0 + (byte) main::i#2) ← *((const byte[]) main::data#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a
|
||||
Statement [6] *((const byte*) SCREEN#0 + (byte) main::i#2) ← *((const byte[]) main::txt#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a
|
||||
Statement [7] *((const byte*) SCREEN2#0 + (byte) main::i#2) ← *((const byte[]) main::data#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a
|
||||
Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y ,
|
||||
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [main] 29.7: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] 22: zp ZP_BYTE:3 [ main::$0 ] 22: zp ZP_BYTE:4 [ main::$1 ]
|
||||
Uplift Scope [main] 38.5: zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
|
||||
Uplift Scope []
|
||||
|
||||
Uplifting [main] best 383 combination reg byte x [ main::i#2 main::i#1 ] reg byte a [ main::$0 ] reg byte a [ main::$1 ]
|
||||
Uplifting [main] best 383 combination reg byte x [ main::i#2 main::i#1 ]
|
||||
Uplifting [] best 383 combination
|
||||
|
||||
ASSEMBLER BEFORE OPTIMIZATION
|
||||
@ -842,23 +777,21 @@ main: {
|
||||
jmp b1
|
||||
//SEG14 main::@1
|
||||
b1:
|
||||
//SEG15 [6] (byte~) main::$0 ← (const byte[]) main::txt#0 *idx (byte) main::i#2 [ main::i#2 main::$0 ] ( main:2 [ main::i#2 main::$0 ] ) -- vbuaa=pbuc1_derefidx_vbuxx
|
||||
//SEG15 [6] *((const byte*) SCREEN#0 + (byte) main::i#2) ← *((const byte[]) main::txt#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx
|
||||
lda txt,x
|
||||
//SEG16 [7] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte~) main::$0 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa
|
||||
sta SCREEN,x
|
||||
//SEG17 [8] (byte~) main::$1 ← (const byte[]) main::data#0 *idx (byte) main::i#2 [ main::i#2 main::$1 ] ( main:2 [ main::i#2 main::$1 ] ) -- vbuaa=pbuc1_derefidx_vbuxx
|
||||
//SEG16 [7] *((const byte*) SCREEN2#0 + (byte) main::i#2) ← *((const byte[]) main::data#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx
|
||||
lda data,x
|
||||
//SEG18 [9] *((const byte*) SCREEN2#0 + (byte) main::i#2) ← (byte~) main::$1 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa
|
||||
sta SCREEN2,x
|
||||
//SEG19 [10] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx=_inc_vbuxx
|
||||
//SEG17 [8] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx=_inc_vbuxx
|
||||
inx
|
||||
//SEG20 [11] if((byte) main::i#1!=(byte/signed byte/word/signed word) 4) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1
|
||||
//SEG18 [9] if((byte) main::i#1!=(byte/signed byte/word/signed word) 4) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1
|
||||
cpx #4
|
||||
bne b1_from_b1
|
||||
jmp breturn
|
||||
//SEG21 main::@return
|
||||
//SEG19 main::@return
|
||||
breturn:
|
||||
//SEG22 [12] return [ ] ( main:2 [ ] )
|
||||
//SEG20 [10] return [ ] ( main:2 [ ] )
|
||||
rts
|
||||
txt: .text "qwe"
|
||||
data: .byte 1, 2, 3
|
||||
@ -894,21 +827,17 @@ FINAL SYMBOL TABLE
|
||||
(byte*) SCREEN2
|
||||
(const byte*) SCREEN2#0 SCREEN2 = ((byte*))(word/signed word) 1024+(byte/signed byte/word/signed word) 40
|
||||
(void()) main()
|
||||
(byte~) main::$0 reg byte a 22.0
|
||||
(byte~) main::$1 reg byte a 22.0
|
||||
(label) main::@1
|
||||
(label) main::@return
|
||||
(byte[]) main::data
|
||||
(const byte[]) main::data#0 data = { (byte/signed byte/word/signed word) 1, (byte/signed byte/word/signed word) 2, (byte/signed byte/word/signed word) 3 }
|
||||
(byte) main::i
|
||||
(byte) main::i#1 reg byte x 16.5
|
||||
(byte) main::i#2 reg byte x 13.2
|
||||
(byte) main::i#2 reg byte x 22.0
|
||||
(byte[]) main::txt
|
||||
(const byte[]) main::txt#0 txt = (string) "qwe"
|
||||
|
||||
reg byte x [ main::i#2 main::i#1 ]
|
||||
reg byte a [ main::$0 ]
|
||||
reg byte a [ main::$1 ]
|
||||
|
||||
FINAL CODE
|
||||
//SEG0 Basic Upstart
|
||||
@ -935,21 +864,19 @@ main: {
|
||||
//SEG13 [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@1->main::@1#0] -- register_copy
|
||||
//SEG14 main::@1
|
||||
b1:
|
||||
//SEG15 [6] (byte~) main::$0 ← (const byte[]) main::txt#0 *idx (byte) main::i#2 [ main::i#2 main::$0 ] ( main:2 [ main::i#2 main::$0 ] ) -- vbuaa=pbuc1_derefidx_vbuxx
|
||||
//SEG15 [6] *((const byte*) SCREEN#0 + (byte) main::i#2) ← *((const byte[]) main::txt#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx
|
||||
lda txt,x
|
||||
//SEG16 [7] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte~) main::$0 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa
|
||||
sta SCREEN,x
|
||||
//SEG17 [8] (byte~) main::$1 ← (const byte[]) main::data#0 *idx (byte) main::i#2 [ main::i#2 main::$1 ] ( main:2 [ main::i#2 main::$1 ] ) -- vbuaa=pbuc1_derefidx_vbuxx
|
||||
//SEG16 [7] *((const byte*) SCREEN2#0 + (byte) main::i#2) ← *((const byte[]) main::data#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx
|
||||
lda data,x
|
||||
//SEG18 [9] *((const byte*) SCREEN2#0 + (byte) main::i#2) ← (byte~) main::$1 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa
|
||||
sta SCREEN2,x
|
||||
//SEG19 [10] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx=_inc_vbuxx
|
||||
//SEG17 [8] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx=_inc_vbuxx
|
||||
inx
|
||||
//SEG20 [11] if((byte) main::i#1!=(byte/signed byte/word/signed word) 4) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1
|
||||
//SEG18 [9] if((byte) main::i#1!=(byte/signed byte/word/signed word) 4) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1
|
||||
cpx #4
|
||||
bne b1
|
||||
//SEG21 main::@return
|
||||
//SEG22 [12] return [ ] ( main:2 [ ] )
|
||||
//SEG19 main::@return
|
||||
//SEG20 [10] return [ ] ( main:2 [ ] )
|
||||
rts
|
||||
txt: .text "qwe"
|
||||
data: .byte 1, 2, 3
|
||||
|
@ -6,18 +6,14 @@
|
||||
(byte*) SCREEN2
|
||||
(const byte*) SCREEN2#0 SCREEN2 = ((byte*))(word/signed word) 1024+(byte/signed byte/word/signed word) 40
|
||||
(void()) main()
|
||||
(byte~) main::$0 reg byte a 22.0
|
||||
(byte~) main::$1 reg byte a 22.0
|
||||
(label) main::@1
|
||||
(label) main::@return
|
||||
(byte[]) main::data
|
||||
(const byte[]) main::data#0 data = { (byte/signed byte/word/signed word) 1, (byte/signed byte/word/signed word) 2, (byte/signed byte/word/signed word) 3 }
|
||||
(byte) main::i
|
||||
(byte) main::i#1 reg byte x 16.5
|
||||
(byte) main::i#2 reg byte x 13.2
|
||||
(byte) main::i#2 reg byte x 22.0
|
||||
(byte[]) main::txt
|
||||
(const byte[]) main::txt#0 txt = (string) "qwe"
|
||||
|
||||
reg byte x [ main::i#2 main::i#1 ]
|
||||
reg byte a [ main::$0 ]
|
||||
reg byte a [ main::$1 ]
|
||||
|
@ -14,19 +14,18 @@ main::@1: scope:[main] from main main::@2
|
||||
[5] (byte) main::j#3 ← phi( main/(byte/signed byte/word/signed word) 0 main::@2/(byte) main::j#4 ) [ main::i#2 main::j#3 ] ( main:2 [ main::i#2 main::j#3 ] )
|
||||
[5] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word) 0 main::@2/(byte) main::i#1 ) [ main::i#2 main::j#3 ] ( main:2 [ main::i#2 main::j#3 ] )
|
||||
[6] *((const byte*) main::screen#0 + (byte) main::i#2) ← (byte) '*' [ main::i#2 main::j#3 ] ( main:2 [ main::i#2 main::j#3 ] )
|
||||
[7] (byte~) main::$0 ← (const byte[]) main::colseq#0 *idx (byte) main::j#3 [ main::i#2 main::j#3 main::$0 ] ( main:2 [ main::i#2 main::j#3 main::$0 ] )
|
||||
[8] *((const byte*) main::cols#0 + (byte) main::i#2) ← (byte~) main::$0 [ main::i#2 main::j#3 ] ( main:2 [ main::i#2 main::j#3 ] )
|
||||
[9] (byte) main::j#1 ← ++ (byte) main::j#3 [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] )
|
||||
[10] if((byte) main::j#1!=(byte/signed byte/word/signed word) 3) goto main::@6 [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] )
|
||||
[7] *((const byte*) main::cols#0 + (byte) main::i#2) ← *((const byte[]) main::colseq#0 + (byte) main::j#3) [ main::i#2 main::j#3 ] ( main:2 [ main::i#2 main::j#3 ] )
|
||||
[8] (byte) main::j#1 ← ++ (byte) main::j#3 [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] )
|
||||
[9] if((byte) main::j#1!=(byte/signed byte/word/signed word) 3) goto main::@6 [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] )
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1 main::@6
|
||||
[11] (byte) main::j#4 ← phi( main::@6/(byte) main::j#1 main::@1/(byte/signed byte/word/signed word) 0 ) [ main::i#2 main::j#4 ] ( main:2 [ main::i#2 main::j#4 ] )
|
||||
[12] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 main::j#4 ] ( main:2 [ main::i#1 main::j#4 ] )
|
||||
[13] if((byte) main::i#1!=(byte/signed byte/word/signed word) 40) goto main::@1 [ main::i#1 main::j#4 ] ( main:2 [ main::i#1 main::j#4 ] )
|
||||
[10] (byte) main::j#4 ← phi( main::@6/(byte) main::j#1 main::@1/(byte/signed byte/word/signed word) 0 ) [ main::i#2 main::j#4 ] ( main:2 [ main::i#2 main::j#4 ] )
|
||||
[11] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 main::j#4 ] ( main:2 [ main::i#1 main::j#4 ] )
|
||||
[12] if((byte) main::i#1!=(byte/signed byte/word/signed word) 40) goto main::@1 [ main::i#1 main::j#4 ] ( main:2 [ main::i#1 main::j#4 ] )
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@2
|
||||
[14] return [ ] ( main:2 [ ] )
|
||||
[13] return [ ] ( main:2 [ ] )
|
||||
to:@return
|
||||
main::@6: scope:[main] from main::@1
|
||||
[15] phi() [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] )
|
||||
[14] phi() [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] )
|
||||
to:main::@2
|
||||
|
@ -29,17 +29,16 @@ proc (void()) main()
|
||||
(byte) main::i ← (byte/signed byte/word/signed word) 0
|
||||
main::@1:
|
||||
*((byte*) main::screen + (byte) main::i) ← (byte) '*'
|
||||
(byte~) main::$0 ← (byte[]) main::colseq *idx (byte) main::j
|
||||
*((byte*) main::cols + (byte) main::i) ← (byte~) main::$0
|
||||
*((byte*) main::cols + (byte) main::i) ← *((byte[]) main::colseq + (byte) main::j)
|
||||
(byte) main::j ← ++ (byte) main::j
|
||||
(boolean~) main::$1 ← (byte) main::j == (byte/signed byte/word/signed word) 3
|
||||
(boolean~) main::$2 ← ! (boolean~) main::$1
|
||||
if((boolean~) main::$2) goto main::@2
|
||||
(boolean~) main::$0 ← (byte) main::j == (byte/signed byte/word/signed word) 3
|
||||
(boolean~) main::$1 ← ! (boolean~) main::$0
|
||||
if((boolean~) main::$1) goto main::@2
|
||||
(byte) main::j ← (byte/signed byte/word/signed word) 0
|
||||
main::@2:
|
||||
(byte) main::i ← ++ (byte) main::i
|
||||
(boolean~) main::$3 ← (byte) main::i != (byte/signed byte/word/signed word) 40
|
||||
if((boolean~) main::$3) goto main::@1
|
||||
(boolean~) main::$2 ← (byte) main::i != (byte/signed byte/word/signed word) 40
|
||||
if((boolean~) main::$2) goto main::@1
|
||||
main::@return:
|
||||
return
|
||||
endproc // main()
|
||||
@ -50,10 +49,9 @@ SYMBOLS
|
||||
(byte) RED
|
||||
(byte) WHITE
|
||||
(void()) main()
|
||||
(byte~) main::$0
|
||||
(boolean~) main::$0
|
||||
(boolean~) main::$1
|
||||
(boolean~) main::$2
|
||||
(boolean~) main::$3
|
||||
(label) main::@1
|
||||
(label) main::@2
|
||||
(label) main::@return
|
||||
@ -80,17 +78,16 @@ main: scope:[main] from
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
*((byte*) main::screen + (byte) main::i) ← (byte) '*'
|
||||
(byte~) main::$0 ← (byte[]) main::colseq *idx (byte) main::j
|
||||
*((byte*) main::cols + (byte) main::i) ← (byte~) main::$0
|
||||
*((byte*) main::cols + (byte) main::i) ← *((byte[]) main::colseq + (byte) main::j)
|
||||
(byte) main::j ← ++ (byte) main::j
|
||||
(boolean~) main::$1 ← (byte) main::j == (byte/signed byte/word/signed word) 3
|
||||
(boolean~) main::$2 ← ! (boolean~) main::$1
|
||||
if((boolean~) main::$2) goto main::@2
|
||||
(boolean~) main::$0 ← (byte) main::j == (byte/signed byte/word/signed word) 3
|
||||
(boolean~) main::$1 ← ! (boolean~) main::$0
|
||||
if((boolean~) main::$1) goto main::@2
|
||||
to:main::@3
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte) main::i ← ++ (byte) main::i
|
||||
(boolean~) main::$3 ← (byte) main::i != (byte/signed byte/word/signed word) 40
|
||||
if((boolean~) main::$3) goto main::@1
|
||||
(boolean~) main::$2 ← (byte) main::i != (byte/signed byte/word/signed word) 40
|
||||
if((boolean~) main::$2) goto main::@1
|
||||
to:main::@4
|
||||
main::@3: scope:[main] from main::@1
|
||||
(byte) main::j ← (byte/signed byte/word/signed word) 0
|
||||
@ -121,17 +118,16 @@ main: scope:[main] from
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
*((byte*) main::screen + (byte) main::i) ← (byte) '*'
|
||||
(byte~) main::$0 ← (byte[]) main::colseq *idx (byte) main::j
|
||||
*((byte*) main::cols + (byte) main::i) ← (byte~) main::$0
|
||||
*((byte*) main::cols + (byte) main::i) ← *((byte[]) main::colseq + (byte) main::j)
|
||||
(byte) main::j ← ++ (byte) main::j
|
||||
(boolean~) main::$1 ← (byte) main::j == (byte/signed byte/word/signed word) 3
|
||||
(boolean~) main::$2 ← ! (boolean~) main::$1
|
||||
if((boolean~) main::$2) goto main::@2
|
||||
(boolean~) main::$0 ← (byte) main::j == (byte/signed byte/word/signed word) 3
|
||||
(boolean~) main::$1 ← ! (boolean~) main::$0
|
||||
if((boolean~) main::$1) goto main::@2
|
||||
to:main::@3
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte) main::i ← ++ (byte) main::i
|
||||
(boolean~) main::$3 ← (byte) main::i != (byte/signed byte/word/signed word) 40
|
||||
if((boolean~) main::$3) goto main::@1
|
||||
(boolean~) main::$2 ← (byte) main::i != (byte/signed byte/word/signed word) 40
|
||||
if((boolean~) main::$2) goto main::@1
|
||||
to:main::@return
|
||||
main::@3: scope:[main] from main::@1
|
||||
(byte) main::j ← (byte/signed byte/word/signed word) 0
|
||||
@ -161,17 +157,16 @@ main: scope:[main] from @1
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
*((byte*) main::screen + (byte) main::i) ← (byte) '*'
|
||||
(byte~) main::$0 ← (byte[]) main::colseq *idx (byte) main::j
|
||||
*((byte*) main::cols + (byte) main::i) ← (byte~) main::$0
|
||||
*((byte*) main::cols + (byte) main::i) ← *((byte[]) main::colseq + (byte) main::j)
|
||||
(byte) main::j ← ++ (byte) main::j
|
||||
(boolean~) main::$1 ← (byte) main::j == (byte/signed byte/word/signed word) 3
|
||||
(boolean~) main::$2 ← ! (boolean~) main::$1
|
||||
if((boolean~) main::$2) goto main::@2
|
||||
(boolean~) main::$0 ← (byte) main::j == (byte/signed byte/word/signed word) 3
|
||||
(boolean~) main::$1 ← ! (boolean~) main::$0
|
||||
if((boolean~) main::$1) goto main::@2
|
||||
to:main::@3
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte) main::i ← ++ (byte) main::i
|
||||
(boolean~) main::$3 ← (byte) main::i != (byte/signed byte/word/signed word) 40
|
||||
if((boolean~) main::$3) goto main::@1
|
||||
(boolean~) main::$2 ← (byte) main::i != (byte/signed byte/word/signed word) 40
|
||||
if((boolean~) main::$2) goto main::@1
|
||||
to:main::@return
|
||||
main::@3: scope:[main] from main::@1
|
||||
(byte) main::j ← (byte/signed byte/word/signed word) 0
|
||||
@ -212,12 +207,11 @@ main::@1: scope:[main] from main main::@2
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 )
|
||||
(byte*) main::screen#1 ← phi( main/(byte*) main::screen#0 main::@2/(byte*) main::screen#2 )
|
||||
*((byte*) main::screen#1 + (byte) main::i#2) ← (byte) '*'
|
||||
(byte~) main::$0 ← (byte[]) main::colseq#1 *idx (byte) main::j#3
|
||||
*((byte*) main::cols#1 + (byte) main::i#2) ← (byte~) main::$0
|
||||
*((byte*) main::cols#1 + (byte) main::i#2) ← *((byte[]) main::colseq#1 + (byte) main::j#3)
|
||||
(byte) main::j#1 ← ++ (byte) main::j#3
|
||||
(boolean~) main::$1 ← (byte) main::j#1 == (byte/signed byte/word/signed word) 3
|
||||
(boolean~) main::$2 ← ! (boolean~) main::$1
|
||||
if((boolean~) main::$2) goto main::@2
|
||||
(boolean~) main::$0 ← (byte) main::j#1 == (byte/signed byte/word/signed word) 3
|
||||
(boolean~) main::$1 ← ! (boolean~) main::$0
|
||||
if((boolean~) main::$1) goto main::@2
|
||||
to:main::@3
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte*) main::cols#2 ← phi( main::@1/(byte*) main::cols#1 main::@3/(byte*) main::cols#3 )
|
||||
@ -226,8 +220,8 @@ main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte*) main::screen#2 ← phi( main::@1/(byte*) main::screen#1 main::@3/(byte*) main::screen#3 )
|
||||
(byte) main::i#3 ← phi( main::@1/(byte) main::i#2 main::@3/(byte) main::i#4 )
|
||||
(byte) main::i#1 ← ++ (byte) main::i#3
|
||||
(boolean~) main::$3 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 40
|
||||
if((boolean~) main::$3) goto main::@1
|
||||
(boolean~) main::$2 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 40
|
||||
if((boolean~) main::$2) goto main::@1
|
||||
to:main::@return
|
||||
main::@3: scope:[main] from main::@1
|
||||
(byte*) main::cols#3 ← phi( main::@1/(byte*) main::cols#1 )
|
||||
@ -272,12 +266,11 @@ main::@1: scope:[main] from main main::@2
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 )
|
||||
(byte*) main::screen#1 ← phi( main/(byte*) main::screen#0 main::@2/(byte*) main::screen#2 )
|
||||
*((byte*) main::screen#1 + (byte) main::i#2) ← (byte) '*'
|
||||
(byte~) main::$0 ← (byte[]) main::colseq#1 *idx (byte) main::j#3
|
||||
*((byte*) main::cols#1 + (byte) main::i#2) ← (byte~) main::$0
|
||||
*((byte*) main::cols#1 + (byte) main::i#2) ← *((byte[]) main::colseq#1 + (byte) main::j#3)
|
||||
(byte) main::j#1 ← ++ (byte) main::j#3
|
||||
(boolean~) main::$1 ← (byte) main::j#1 == (byte/signed byte/word/signed word) 3
|
||||
(boolean~) main::$2 ← ! (boolean~) main::$1
|
||||
if((boolean~) main::$2) goto main::@2
|
||||
(boolean~) main::$0 ← (byte) main::j#1 == (byte/signed byte/word/signed word) 3
|
||||
(boolean~) main::$1 ← ! (boolean~) main::$0
|
||||
if((boolean~) main::$1) goto main::@2
|
||||
to:main::@3
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte*) main::cols#2 ← phi( main::@1/(byte*) main::cols#1 main::@3/(byte*) main::cols#3 )
|
||||
@ -286,8 +279,8 @@ main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte*) main::screen#2 ← phi( main::@1/(byte*) main::screen#1 main::@3/(byte*) main::screen#3 )
|
||||
(byte) main::i#3 ← phi( main::@1/(byte) main::i#2 main::@3/(byte) main::i#4 )
|
||||
(byte) main::i#1 ← ++ (byte) main::i#3
|
||||
(boolean~) main::$3 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 40
|
||||
if((boolean~) main::$3) goto main::@1
|
||||
(boolean~) main::$2 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 40
|
||||
if((boolean~) main::$2) goto main::@1
|
||||
to:main::@return
|
||||
main::@3: scope:[main] from main::@1
|
||||
(byte*) main::cols#3 ← phi( main::@1/(byte*) main::cols#1 )
|
||||
@ -327,10 +320,9 @@ INITIAL SSA SYMBOL TABLE
|
||||
(byte) WHITE#1
|
||||
(byte) WHITE#2
|
||||
(void()) main()
|
||||
(byte~) main::$0
|
||||
(boolean~) main::$0
|
||||
(boolean~) main::$1
|
||||
(boolean~) main::$2
|
||||
(boolean~) main::$3
|
||||
(label) main::@1
|
||||
(label) main::@2
|
||||
(label) main::@3
|
||||
@ -388,12 +380,11 @@ main::@1: scope:[main] from main main::@2
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 )
|
||||
(byte*) main::screen#1 ← phi( main/(byte*) main::screen#0 main::@2/(byte*) main::screen#2 )
|
||||
*((byte*) main::screen#1 + (byte) main::i#2) ← (byte) '*'
|
||||
(byte~) main::$0 ← (byte[]) main::colseq#1 *idx (byte) main::j#3
|
||||
*((byte*) main::cols#1 + (byte) main::i#2) ← (byte~) main::$0
|
||||
*((byte*) main::cols#1 + (byte) main::i#2) ← *((byte[]) main::colseq#1 + (byte) main::j#3)
|
||||
(byte) main::j#1 ← ++ (byte) main::j#3
|
||||
(boolean~) main::$1 ← (byte) main::j#1 == (byte/signed byte/word/signed word) 3
|
||||
(boolean~) main::$2 ← ! (boolean~) main::$1
|
||||
if((boolean~) main::$2) goto main::@2
|
||||
(boolean~) main::$0 ← (byte) main::j#1 == (byte/signed byte/word/signed word) 3
|
||||
(boolean~) main::$1 ← ! (boolean~) main::$0
|
||||
if((boolean~) main::$1) goto main::@2
|
||||
to:main::@3
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte*) main::cols#2 ← phi( main::@1/(byte*) main::cols#1 main::@3/(byte*) main::cols#3 )
|
||||
@ -402,8 +393,8 @@ main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte*) main::screen#2 ← phi( main::@1/(byte*) main::screen#1 main::@3/(byte*) main::screen#3 )
|
||||
(byte) main::i#3 ← phi( main::@1/(byte) main::i#2 main::@3/(byte) main::i#4 )
|
||||
(byte) main::i#1 ← ++ (byte) main::i#3
|
||||
(boolean~) main::$3 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 40
|
||||
if((boolean~) main::$3) goto main::@1
|
||||
(boolean~) main::$2 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 40
|
||||
if((boolean~) main::$2) goto main::@1
|
||||
to:main::@return
|
||||
main::@3: scope:[main] from main::@1
|
||||
(byte*) main::cols#3 ← phi( main::@1/(byte*) main::cols#1 )
|
||||
@ -423,7 +414,7 @@ main::@return: scope:[main] from main::@2
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
|
||||
Inversing boolean not (boolean~) main::$2 ← (byte) main::j#1 != (byte/signed byte/word/signed word) 3 from (boolean~) main::$1 ← (byte) main::j#1 == (byte/signed byte/word/signed word) 3
|
||||
Inversing boolean not (boolean~) main::$1 ← (byte) main::j#1 != (byte/signed byte/word/signed word) 3 from (boolean~) main::$0 ← (byte) main::j#1 == (byte/signed byte/word/signed word) 3
|
||||
Succesful SSA optimization Pass2UnaryNotSimplification
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
@ -448,11 +439,10 @@ main::@1: scope:[main] from main main::@2
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 )
|
||||
(byte*) main::screen#1 ← phi( main/(byte*) main::screen#0 main::@2/(byte*) main::screen#2 )
|
||||
*((byte*) main::screen#1 + (byte) main::i#2) ← (byte) '*'
|
||||
(byte~) main::$0 ← (byte[]) main::colseq#1 *idx (byte) main::j#3
|
||||
*((byte*) main::cols#1 + (byte) main::i#2) ← (byte~) main::$0
|
||||
*((byte*) main::cols#1 + (byte) main::i#2) ← *((byte[]) main::colseq#1 + (byte) main::j#3)
|
||||
(byte) main::j#1 ← ++ (byte) main::j#3
|
||||
(boolean~) main::$2 ← (byte) main::j#1 != (byte/signed byte/word/signed word) 3
|
||||
if((boolean~) main::$2) goto main::@2
|
||||
(boolean~) main::$1 ← (byte) main::j#1 != (byte/signed byte/word/signed word) 3
|
||||
if((boolean~) main::$1) goto main::@2
|
||||
to:main::@3
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte*) main::cols#2 ← phi( main::@1/(byte*) main::cols#1 main::@3/(byte*) main::cols#3 )
|
||||
@ -461,8 +451,8 @@ main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte*) main::screen#2 ← phi( main::@1/(byte*) main::screen#1 main::@3/(byte*) main::screen#3 )
|
||||
(byte) main::i#3 ← phi( main::@1/(byte) main::i#2 main::@3/(byte) main::i#4 )
|
||||
(byte) main::i#1 ← ++ (byte) main::i#3
|
||||
(boolean~) main::$3 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 40
|
||||
if((boolean~) main::$3) goto main::@1
|
||||
(boolean~) main::$2 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 40
|
||||
if((boolean~) main::$2) goto main::@1
|
||||
to:main::@return
|
||||
main::@3: scope:[main] from main::@1
|
||||
(byte*) main::cols#3 ← phi( main::@1/(byte*) main::cols#1 )
|
||||
@ -516,11 +506,10 @@ main::@1: scope:[main] from main main::@2
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 )
|
||||
(byte*) main::screen#1 ← phi( main/(byte*) main::screen#0 main::@2/(byte*) main::screen#2 )
|
||||
*((byte*) main::screen#1 + (byte) main::i#2) ← (byte) '*'
|
||||
(byte~) main::$0 ← (byte[]) main::colseq#1 *idx (byte) main::j#3
|
||||
*((byte*) main::cols#1 + (byte) main::i#2) ← (byte~) main::$0
|
||||
*((byte*) main::cols#1 + (byte) main::i#2) ← *((byte[]) main::colseq#1 + (byte) main::j#3)
|
||||
(byte) main::j#1 ← ++ (byte) main::j#3
|
||||
(boolean~) main::$2 ← (byte) main::j#1 != (byte/signed byte/word/signed word) 3
|
||||
if((boolean~) main::$2) goto main::@2
|
||||
(boolean~) main::$1 ← (byte) main::j#1 != (byte/signed byte/word/signed word) 3
|
||||
if((boolean~) main::$1) goto main::@2
|
||||
to:main::@3
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte*) main::cols#2 ← phi( main::@1/(byte*) main::cols#1 main::@3/(byte*) main::cols#1 )
|
||||
@ -529,8 +518,8 @@ main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte*) main::screen#2 ← phi( main::@1/(byte*) main::screen#1 main::@3/(byte*) main::screen#1 )
|
||||
(byte) main::i#3 ← phi( main::@1/(byte) main::i#2 main::@3/(byte) main::i#2 )
|
||||
(byte) main::i#1 ← ++ (byte) main::i#3
|
||||
(boolean~) main::$3 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 40
|
||||
if((boolean~) main::$3) goto main::@1
|
||||
(boolean~) main::$2 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 40
|
||||
if((boolean~) main::$2) goto main::@1
|
||||
to:main::@return
|
||||
main::@3: scope:[main] from main::@1
|
||||
(byte) main::j#2 ← (byte/signed byte/word/signed word) 0
|
||||
@ -574,17 +563,16 @@ main::@1: scope:[main] from main main::@2
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 )
|
||||
(byte*) main::screen#1 ← phi( main/(byte*) main::screen#0 main::@2/(byte*) main::screen#1 )
|
||||
*((byte*) main::screen#1 + (byte) main::i#2) ← (byte) '*'
|
||||
(byte~) main::$0 ← (byte[]) main::colseq#1 *idx (byte) main::j#3
|
||||
*((byte*) main::cols#1 + (byte) main::i#2) ← (byte~) main::$0
|
||||
*((byte*) main::cols#1 + (byte) main::i#2) ← *((byte[]) main::colseq#1 + (byte) main::j#3)
|
||||
(byte) main::j#1 ← ++ (byte) main::j#3
|
||||
(boolean~) main::$2 ← (byte) main::j#1 != (byte/signed byte/word/signed word) 3
|
||||
if((boolean~) main::$2) goto main::@2
|
||||
(boolean~) main::$1 ← (byte) main::j#1 != (byte/signed byte/word/signed word) 3
|
||||
if((boolean~) main::$1) goto main::@2
|
||||
to:main::@3
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte) main::j#4 ← phi( main::@1/(byte) main::j#1 main::@3/(byte) main::j#2 )
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
(boolean~) main::$3 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 40
|
||||
if((boolean~) main::$3) goto main::@1
|
||||
(boolean~) main::$2 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 40
|
||||
if((boolean~) main::$2) goto main::@1
|
||||
to:main::@return
|
||||
main::@3: scope:[main] from main::@1
|
||||
(byte) main::j#2 ← (byte/signed byte/word/signed word) 0
|
||||
@ -627,17 +615,16 @@ main::@1: scope:[main] from main main::@2
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 )
|
||||
(byte*) main::screen#1 ← phi( main/(byte*) main::screen#0 )
|
||||
*((byte*) main::screen#1 + (byte) main::i#2) ← (byte) '*'
|
||||
(byte~) main::$0 ← (byte[]) main::colseq#1 *idx (byte) main::j#3
|
||||
*((byte*) main::cols#1 + (byte) main::i#2) ← (byte~) main::$0
|
||||
*((byte*) main::cols#1 + (byte) main::i#2) ← *((byte[]) main::colseq#1 + (byte) main::j#3)
|
||||
(byte) main::j#1 ← ++ (byte) main::j#3
|
||||
(boolean~) main::$2 ← (byte) main::j#1 != (byte/signed byte/word/signed word) 3
|
||||
if((boolean~) main::$2) goto main::@2
|
||||
(boolean~) main::$1 ← (byte) main::j#1 != (byte/signed byte/word/signed word) 3
|
||||
if((boolean~) main::$1) goto main::@2
|
||||
to:main::@3
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte) main::j#4 ← phi( main::@1/(byte) main::j#1 main::@3/(byte) main::j#2 )
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
(boolean~) main::$3 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 40
|
||||
if((boolean~) main::$3) goto main::@1
|
||||
(boolean~) main::$2 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 40
|
||||
if((boolean~) main::$2) goto main::@1
|
||||
to:main::@return
|
||||
main::@3: scope:[main] from main::@1
|
||||
(byte) main::j#2 ← (byte/signed byte/word/signed word) 0
|
||||
@ -674,17 +661,16 @@ main::@1: scope:[main] from main main::@2
|
||||
(byte) main::j#3 ← phi( main/(byte) main::j#0 main::@2/(byte) main::j#4 )
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 )
|
||||
*((byte*) main::screen#0 + (byte) main::i#2) ← (byte) '*'
|
||||
(byte~) main::$0 ← (byte[]) main::colseq#0 *idx (byte) main::j#3
|
||||
*((byte*) main::cols#0 + (byte) main::i#2) ← (byte~) main::$0
|
||||
*((byte*) main::cols#0 + (byte) main::i#2) ← *((byte[]) main::colseq#0 + (byte) main::j#3)
|
||||
(byte) main::j#1 ← ++ (byte) main::j#3
|
||||
(boolean~) main::$2 ← (byte) main::j#1 != (byte/signed byte/word/signed word) 3
|
||||
if((boolean~) main::$2) goto main::@2
|
||||
(boolean~) main::$1 ← (byte) main::j#1 != (byte/signed byte/word/signed word) 3
|
||||
if((boolean~) main::$1) goto main::@2
|
||||
to:main::@3
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte) main::j#4 ← phi( main::@1/(byte) main::j#1 main::@3/(byte) main::j#2 )
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
(boolean~) main::$3 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 40
|
||||
if((boolean~) main::$3) goto main::@1
|
||||
(boolean~) main::$2 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 40
|
||||
if((boolean~) main::$2) goto main::@1
|
||||
to:main::@return
|
||||
main::@3: scope:[main] from main::@1
|
||||
(byte) main::j#2 ← (byte/signed byte/word/signed word) 0
|
||||
@ -697,8 +683,8 @@ main::@return: scope:[main] from main::@2
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
|
||||
Simple Condition (boolean~) main::$2 if((byte) main::j#1!=(byte/signed byte/word/signed word) 3) goto main::@2
|
||||
Simple Condition (boolean~) main::$3 if((byte) main::i#1!=(byte/signed byte/word/signed word) 40) goto main::@1
|
||||
Simple Condition (boolean~) main::$1 if((byte) main::j#1!=(byte/signed byte/word/signed word) 3) goto main::@2
|
||||
Simple Condition (boolean~) main::$2 if((byte) main::i#1!=(byte/signed byte/word/signed word) 40) goto main::@1
|
||||
Succesful SSA optimization Pass2ConditionalJumpSimplification
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
@ -717,8 +703,7 @@ main::@1: scope:[main] from main main::@2
|
||||
(byte) main::j#3 ← phi( main/(byte) main::j#0 main::@2/(byte) main::j#4 )
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 )
|
||||
*((byte*) main::screen#0 + (byte) main::i#2) ← (byte) '*'
|
||||
(byte~) main::$0 ← (byte[]) main::colseq#0 *idx (byte) main::j#3
|
||||
*((byte*) main::cols#0 + (byte) main::i#2) ← (byte~) main::$0
|
||||
*((byte*) main::cols#0 + (byte) main::i#2) ← *((byte[]) main::colseq#0 + (byte) main::j#3)
|
||||
(byte) main::j#1 ← ++ (byte) main::j#3
|
||||
if((byte) main::j#1!=(byte/signed byte/word/signed word) 3) goto main::@2
|
||||
to:main::@3
|
||||
@ -757,8 +742,7 @@ main::@1: scope:[main] from main main::@2
|
||||
(byte) main::j#3 ← phi( main/(const byte) main::j#0 main::@2/(byte) main::j#4 )
|
||||
(byte) main::i#2 ← phi( main/(const byte) main::i#0 main::@2/(byte) main::i#1 )
|
||||
*((const byte*) main::screen#0 + (byte) main::i#2) ← (byte) '*'
|
||||
(byte~) main::$0 ← (byte[]) main::colseq#0 *idx (byte) main::j#3
|
||||
*((const byte*) main::cols#0 + (byte) main::i#2) ← (byte~) main::$0
|
||||
*((const byte*) main::cols#0 + (byte) main::i#2) ← *((byte[]) main::colseq#0 + (byte) main::j#3)
|
||||
(byte) main::j#1 ← ++ (byte) main::j#3
|
||||
if((byte) main::j#1!=(byte/signed byte/word/signed word) 3) goto main::@2
|
||||
to:main::@3
|
||||
@ -788,8 +772,7 @@ main::@1: scope:[main] from main main::@2
|
||||
(byte) main::j#3 ← phi( main/(const byte) main::j#0 main::@2/(byte) main::j#4 )
|
||||
(byte) main::i#2 ← phi( main/(const byte) main::i#0 main::@2/(byte) main::i#1 )
|
||||
*((const byte*) main::screen#0 + (byte) main::i#2) ← (byte) '*'
|
||||
(byte~) main::$0 ← (const byte[]) main::colseq#0 *idx (byte) main::j#3
|
||||
*((const byte*) main::cols#0 + (byte) main::i#2) ← (byte~) main::$0
|
||||
*((const byte*) main::cols#0 + (byte) main::i#2) ← *((const byte[]) main::colseq#0 + (byte) main::j#3)
|
||||
(byte) main::j#1 ← ++ (byte) main::j#3
|
||||
if((byte) main::j#1!=(byte/signed byte/word/signed word) 3) goto main::@2
|
||||
to:main::@3
|
||||
@ -808,9 +791,7 @@ main::@return: scope:[main] from main::@2
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::j#3
|
||||
Not culling empty block because it shares successor with its predecessor. (label) main::@3
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::j#3
|
||||
Inlining constant with var siblings (const byte) main::j#0
|
||||
Inlining constant with var siblings (const byte) main::j#0
|
||||
Inlining constant with var siblings (const byte) main::j#0
|
||||
@ -832,8 +813,7 @@ main::@1: scope:[main] from main main::@2
|
||||
(byte) main::j#3 ← phi( main/(byte/signed byte/word/signed word) 0 main::@2/(byte) main::j#4 )
|
||||
(byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word) 0 main::@2/(byte) main::i#1 )
|
||||
*((const byte*) main::screen#0 + (byte) main::i#2) ← (byte) '*'
|
||||
(byte~) main::$0 ← (const byte[]) main::colseq#0 *idx (byte) main::j#3
|
||||
*((const byte*) main::cols#0 + (byte) main::i#2) ← (byte~) main::$0
|
||||
*((const byte*) main::cols#0 + (byte) main::i#2) ← *((const byte[]) main::colseq#0 + (byte) main::j#3)
|
||||
(byte) main::j#1 ← ++ (byte) main::j#3
|
||||
if((byte) main::j#1!=(byte/signed byte/word/signed word) 3) goto main::@2
|
||||
to:main::@3
|
||||
@ -863,7 +843,6 @@ FINAL SYMBOL TABLE
|
||||
(byte) WHITE
|
||||
(const byte) WHITE#0 = (byte/signed byte/word/signed word) 1
|
||||
(void()) main()
|
||||
(byte~) main::$0
|
||||
(label) main::@1
|
||||
(label) main::@2
|
||||
(label) main::@3
|
||||
@ -899,8 +878,7 @@ main::@1: scope:[main] from main main::@5
|
||||
(byte) main::j#3 ← phi( main/(byte/signed byte/word/signed word) 0 main::@5/(byte~) main::j#5 )
|
||||
(byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word) 0 main::@5/(byte~) main::i#5 )
|
||||
*((const byte*) main::screen#0 + (byte) main::i#2) ← (byte) '*'
|
||||
(byte~) main::$0 ← (const byte[]) main::colseq#0 *idx (byte) main::j#3
|
||||
*((const byte*) main::cols#0 + (byte) main::i#2) ← (byte~) main::$0
|
||||
*((const byte*) main::cols#0 + (byte) main::i#2) ← *((const byte[]) main::colseq#0 + (byte) main::j#3)
|
||||
(byte) main::j#1 ← ++ (byte) main::j#3
|
||||
if((byte) main::j#1!=(byte/signed byte/word/signed word) 3) goto main::@6
|
||||
to:main::@3
|
||||
@ -952,34 +930,33 @@ main::@1: scope:[main] from main main::@5
|
||||
[5] (byte) main::j#3 ← phi( main/(byte/signed byte/word/signed word) 0 main::@5/(byte~) main::j#5 ) [ main::i#2 main::j#3 ]
|
||||
[5] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word) 0 main::@5/(byte~) main::i#5 ) [ main::i#2 main::j#3 ]
|
||||
[6] *((const byte*) main::screen#0 + (byte) main::i#2) ← (byte) '*' [ main::i#2 main::j#3 ]
|
||||
[7] (byte~) main::$0 ← (const byte[]) main::colseq#0 *idx (byte) main::j#3 [ main::i#2 main::j#3 main::$0 ]
|
||||
[8] *((const byte*) main::cols#0 + (byte) main::i#2) ← (byte~) main::$0 [ main::i#2 main::j#3 ]
|
||||
[9] (byte) main::j#1 ← ++ (byte) main::j#3 [ main::i#2 main::j#1 ]
|
||||
[10] if((byte) main::j#1!=(byte/signed byte/word/signed word) 3) goto main::@6 [ main::i#2 main::j#1 ]
|
||||
[7] *((const byte*) main::cols#0 + (byte) main::i#2) ← *((const byte[]) main::colseq#0 + (byte) main::j#3) [ main::i#2 main::j#3 ]
|
||||
[8] (byte) main::j#1 ← ++ (byte) main::j#3 [ main::i#2 main::j#1 ]
|
||||
[9] if((byte) main::j#1!=(byte/signed byte/word/signed word) 3) goto main::@6 [ main::i#2 main::j#1 ]
|
||||
to:main::@3
|
||||
main::@3: scope:[main] from main::@1
|
||||
[11] phi() [ main::i#2 ]
|
||||
[10] phi() [ main::i#2 ]
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@3 main::@6
|
||||
[12] (byte) main::j#4 ← phi( main::@6/(byte~) main::j#6 main::@3/(byte/signed byte/word/signed word) 0 ) [ main::i#2 main::j#4 ]
|
||||
[13] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::j#4 main::i#1 ]
|
||||
[14] if((byte) main::i#1!=(byte/signed byte/word/signed word) 40) goto main::@5 [ main::j#4 main::i#1 ]
|
||||
[11] (byte) main::j#4 ← phi( main::@6/(byte~) main::j#6 main::@3/(byte/signed byte/word/signed word) 0 ) [ main::i#2 main::j#4 ]
|
||||
[12] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::j#4 main::i#1 ]
|
||||
[13] if((byte) main::i#1!=(byte/signed byte/word/signed word) 40) goto main::@5 [ main::j#4 main::i#1 ]
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@2
|
||||
[15] return [ ]
|
||||
[14] return [ ]
|
||||
to:@return
|
||||
main::@5: scope:[main] from main::@2
|
||||
[16] (byte~) main::i#5 ← (byte) main::i#1 [ main::i#5 main::j#4 ]
|
||||
[17] (byte~) main::j#5 ← (byte) main::j#4 [ main::i#5 main::j#5 ]
|
||||
[15] (byte~) main::i#5 ← (byte) main::i#1 [ main::i#5 main::j#4 ]
|
||||
[16] (byte~) main::j#5 ← (byte) main::j#4 [ main::i#5 main::j#5 ]
|
||||
to:main::@1
|
||||
main::@6: scope:[main] from main::@1
|
||||
[18] (byte~) main::j#6 ← (byte) main::j#1 [ main::i#2 main::j#6 ]
|
||||
[17] (byte~) main::j#6 ← (byte) main::j#1 [ main::i#2 main::j#6 ]
|
||||
to:main::@2
|
||||
|
||||
Created 3 initial phi equivalence classes
|
||||
Coalesced [16] main::i#5 ← main::i#1
|
||||
Coalesced [17] main::j#5 ← main::j#4
|
||||
Coalesced [18] main::j#6 ← main::j#1
|
||||
Coalesced [15] main::i#5 ← main::i#1
|
||||
Coalesced [16] main::j#5 ← main::j#4
|
||||
Coalesced [17] main::j#6 ← main::j#1
|
||||
Coalesced down to 2 phi equivalence classes
|
||||
Culled Empty Block (label) main::@3
|
||||
Culled Empty Block (label) main::@5
|
||||
@ -1012,21 +989,20 @@ main::@1: scope:[main] from main main::@2
|
||||
[5] (byte) main::j#3 ← phi( main/(byte/signed byte/word/signed word) 0 main::@2/(byte) main::j#4 ) [ main::i#2 main::j#3 ]
|
||||
[5] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word) 0 main::@2/(byte) main::i#1 ) [ main::i#2 main::j#3 ]
|
||||
[6] *((const byte*) main::screen#0 + (byte) main::i#2) ← (byte) '*' [ main::i#2 main::j#3 ]
|
||||
[7] (byte~) main::$0 ← (const byte[]) main::colseq#0 *idx (byte) main::j#3 [ main::i#2 main::j#3 main::$0 ]
|
||||
[8] *((const byte*) main::cols#0 + (byte) main::i#2) ← (byte~) main::$0 [ main::i#2 main::j#3 ]
|
||||
[9] (byte) main::j#1 ← ++ (byte) main::j#3 [ main::i#2 main::j#1 ]
|
||||
[10] if((byte) main::j#1!=(byte/signed byte/word/signed word) 3) goto main::@6 [ main::i#2 main::j#1 ]
|
||||
[7] *((const byte*) main::cols#0 + (byte) main::i#2) ← *((const byte[]) main::colseq#0 + (byte) main::j#3) [ main::i#2 main::j#3 ]
|
||||
[8] (byte) main::j#1 ← ++ (byte) main::j#3 [ main::i#2 main::j#1 ]
|
||||
[9] if((byte) main::j#1!=(byte/signed byte/word/signed word) 3) goto main::@6 [ main::i#2 main::j#1 ]
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1 main::@6
|
||||
[11] (byte) main::j#4 ← phi( main::@6/(byte) main::j#1 main::@1/(byte/signed byte/word/signed word) 0 ) [ main::i#2 main::j#4 ]
|
||||
[12] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 main::j#4 ]
|
||||
[13] if((byte) main::i#1!=(byte/signed byte/word/signed word) 40) goto main::@1 [ main::i#1 main::j#4 ]
|
||||
[10] (byte) main::j#4 ← phi( main::@6/(byte) main::j#1 main::@1/(byte/signed byte/word/signed word) 0 ) [ main::i#2 main::j#4 ]
|
||||
[11] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 main::j#4 ]
|
||||
[12] if((byte) main::i#1!=(byte/signed byte/word/signed word) 40) goto main::@1 [ main::i#1 main::j#4 ]
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@2
|
||||
[14] return [ ]
|
||||
[13] return [ ]
|
||||
to:@return
|
||||
main::@6: scope:[main] from main::@1
|
||||
[15] phi() [ main::i#2 main::j#1 ]
|
||||
[14] phi() [ main::i#2 main::j#1 ]
|
||||
to:main::@2
|
||||
|
||||
CONTROL FLOW GRAPH - PHI MEM COALESCED
|
||||
@ -1046,21 +1022,20 @@ main::@1: scope:[main] from main main::@2
|
||||
[5] (byte) main::j#3 ← phi( main/(byte/signed byte/word/signed word) 0 main::@2/(byte) main::j#4 ) [ main::i#2 main::j#3 ] ( main:2 [ main::i#2 main::j#3 ] )
|
||||
[5] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word) 0 main::@2/(byte) main::i#1 ) [ main::i#2 main::j#3 ] ( main:2 [ main::i#2 main::j#3 ] )
|
||||
[6] *((const byte*) main::screen#0 + (byte) main::i#2) ← (byte) '*' [ main::i#2 main::j#3 ] ( main:2 [ main::i#2 main::j#3 ] )
|
||||
[7] (byte~) main::$0 ← (const byte[]) main::colseq#0 *idx (byte) main::j#3 [ main::i#2 main::j#3 main::$0 ] ( main:2 [ main::i#2 main::j#3 main::$0 ] )
|
||||
[8] *((const byte*) main::cols#0 + (byte) main::i#2) ← (byte~) main::$0 [ main::i#2 main::j#3 ] ( main:2 [ main::i#2 main::j#3 ] )
|
||||
[9] (byte) main::j#1 ← ++ (byte) main::j#3 [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] )
|
||||
[10] if((byte) main::j#1!=(byte/signed byte/word/signed word) 3) goto main::@6 [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] )
|
||||
[7] *((const byte*) main::cols#0 + (byte) main::i#2) ← *((const byte[]) main::colseq#0 + (byte) main::j#3) [ main::i#2 main::j#3 ] ( main:2 [ main::i#2 main::j#3 ] )
|
||||
[8] (byte) main::j#1 ← ++ (byte) main::j#3 [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] )
|
||||
[9] if((byte) main::j#1!=(byte/signed byte/word/signed word) 3) goto main::@6 [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] )
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1 main::@6
|
||||
[11] (byte) main::j#4 ← phi( main::@6/(byte) main::j#1 main::@1/(byte/signed byte/word/signed word) 0 ) [ main::i#2 main::j#4 ] ( main:2 [ main::i#2 main::j#4 ] )
|
||||
[12] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 main::j#4 ] ( main:2 [ main::i#1 main::j#4 ] )
|
||||
[13] if((byte) main::i#1!=(byte/signed byte/word/signed word) 40) goto main::@1 [ main::i#1 main::j#4 ] ( main:2 [ main::i#1 main::j#4 ] )
|
||||
[10] (byte) main::j#4 ← phi( main::@6/(byte) main::j#1 main::@1/(byte/signed byte/word/signed word) 0 ) [ main::i#2 main::j#4 ] ( main:2 [ main::i#2 main::j#4 ] )
|
||||
[11] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 main::j#4 ] ( main:2 [ main::i#1 main::j#4 ] )
|
||||
[12] if((byte) main::i#1!=(byte/signed byte/word/signed word) 40) goto main::@1 [ main::i#1 main::j#4 ] ( main:2 [ main::i#1 main::j#4 ] )
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@2
|
||||
[14] return [ ] ( main:2 [ ] )
|
||||
[13] return [ ] ( main:2 [ ] )
|
||||
to:@return
|
||||
main::@6: scope:[main] from main::@1
|
||||
[15] phi() [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] )
|
||||
[14] phi() [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] )
|
||||
to:main::@2
|
||||
|
||||
DOMINATORS
|
||||
@ -1090,29 +1065,25 @@ VARIABLE REGISTER WEIGHTS
|
||||
(byte) RED
|
||||
(byte) WHITE
|
||||
(void()) main()
|
||||
(byte~) main::$0 22.0
|
||||
(byte*) main::cols
|
||||
(byte[]) main::colseq
|
||||
(byte) main::i
|
||||
(byte) main::i#1 16.5
|
||||
(byte) main::i#2 5.5
|
||||
(byte) main::i#2 6.285714285714286
|
||||
(byte) main::j
|
||||
(byte) main::j#1 11.0
|
||||
(byte) main::j#3 8.25
|
||||
(byte) main::j#3 11.0
|
||||
(byte) main::j#4 7.333333333333333
|
||||
(byte*) main::screen
|
||||
|
||||
Initial phi equivalence classes
|
||||
[ main::i#2 main::i#1 ]
|
||||
[ main::j#3 main::j#4 main::j#1 ]
|
||||
Added variable main::$0 to zero page equivalence class [ main::$0 ]
|
||||
Complete equivalence classes
|
||||
[ main::i#2 main::i#1 ]
|
||||
[ main::j#3 main::j#4 main::j#1 ]
|
||||
[ main::$0 ]
|
||||
Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
|
||||
Allocated zp ZP_BYTE:3 [ main::j#3 main::j#4 main::j#1 ]
|
||||
Allocated zp ZP_BYTE:4 [ main::$0 ]
|
||||
INITIAL ASM
|
||||
//SEG0 Basic Upstart
|
||||
.pc = $801 "Basic"
|
||||
@ -1142,7 +1113,6 @@ bend:
|
||||
main: {
|
||||
.const screen = $400
|
||||
.const cols = $d800
|
||||
.label _0 = 4
|
||||
.label j = 3
|
||||
.label i = 2
|
||||
//SEG10 [5] phi from main to main::@1 [phi:main->main::@1]
|
||||
@ -1165,47 +1135,44 @@ main: {
|
||||
lda #'*'
|
||||
ldx i
|
||||
sta screen,x
|
||||
//SEG18 [7] (byte~) main::$0 ← (const byte[]) main::colseq#0 *idx (byte) main::j#3 [ main::i#2 main::j#3 main::$0 ] ( main:2 [ main::i#2 main::j#3 main::$0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2
|
||||
//SEG18 [7] *((const byte*) main::cols#0 + (byte) main::i#2) ← *((const byte[]) main::colseq#0 + (byte) main::j#3) [ main::i#2 main::j#3 ] ( main:2 [ main::i#2 main::j#3 ] ) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz2
|
||||
ldx j
|
||||
lda colseq,x
|
||||
sta _0
|
||||
//SEG19 [8] *((const byte*) main::cols#0 + (byte) main::i#2) ← (byte~) main::$0 [ main::i#2 main::j#3 ] ( main:2 [ main::i#2 main::j#3 ] ) -- pbuc1_derefidx_vbuz1=vbuz2
|
||||
lda _0
|
||||
ldx i
|
||||
sta cols,x
|
||||
//SEG20 [9] (byte) main::j#1 ← ++ (byte) main::j#3 [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] ) -- vbuz1=_inc_vbuz1
|
||||
//SEG19 [8] (byte) main::j#1 ← ++ (byte) main::j#3 [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] ) -- vbuz1=_inc_vbuz1
|
||||
inc j
|
||||
//SEG21 [10] if((byte) main::j#1!=(byte/signed byte/word/signed word) 3) goto main::@6 [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] ) -- vbuz1_neq_vbuc1_then_la1
|
||||
//SEG20 [9] if((byte) main::j#1!=(byte/signed byte/word/signed word) 3) goto main::@6 [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] ) -- vbuz1_neq_vbuc1_then_la1
|
||||
lda j
|
||||
cmp #3
|
||||
bne b6_from_b1
|
||||
//SEG22 [11] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
|
||||
//SEG21 [10] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
|
||||
b2_from_b1:
|
||||
//SEG23 [11] phi (byte) main::j#4 = (byte/signed byte/word/signed word) 0 [phi:main::@1->main::@2#0] -- vbuz1=vbuc1
|
||||
//SEG22 [10] phi (byte) main::j#4 = (byte/signed byte/word/signed word) 0 [phi:main::@1->main::@2#0] -- vbuz1=vbuc1
|
||||
lda #0
|
||||
sta j
|
||||
jmp b2
|
||||
//SEG24 main::@2
|
||||
//SEG23 main::@2
|
||||
b2:
|
||||
//SEG25 [12] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 main::j#4 ] ( main:2 [ main::i#1 main::j#4 ] ) -- vbuz1=_inc_vbuz1
|
||||
//SEG24 [11] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 main::j#4 ] ( main:2 [ main::i#1 main::j#4 ] ) -- vbuz1=_inc_vbuz1
|
||||
inc i
|
||||
//SEG26 [13] if((byte) main::i#1!=(byte/signed byte/word/signed word) 40) goto main::@1 [ main::i#1 main::j#4 ] ( main:2 [ main::i#1 main::j#4 ] ) -- vbuz1_neq_vbuc1_then_la1
|
||||
//SEG25 [12] if((byte) main::i#1!=(byte/signed byte/word/signed word) 40) goto main::@1 [ main::i#1 main::j#4 ] ( main:2 [ main::i#1 main::j#4 ] ) -- vbuz1_neq_vbuc1_then_la1
|
||||
lda i
|
||||
cmp #$28
|
||||
bne b1_from_b2
|
||||
jmp breturn
|
||||
//SEG27 main::@return
|
||||
//SEG26 main::@return
|
||||
breturn:
|
||||
//SEG28 [14] return [ ] ( main:2 [ ] )
|
||||
//SEG27 [13] return [ ] ( main:2 [ ] )
|
||||
rts
|
||||
//SEG29 [15] phi from main::@1 to main::@6 [phi:main::@1->main::@6]
|
||||
//SEG28 [14] phi from main::@1 to main::@6 [phi:main::@1->main::@6]
|
||||
b6_from_b1:
|
||||
jmp b6
|
||||
//SEG30 main::@6
|
||||
//SEG29 main::@6
|
||||
b6:
|
||||
//SEG31 [11] phi from main::@6 to main::@2 [phi:main::@6->main::@2]
|
||||
//SEG30 [10] phi from main::@6 to main::@2 [phi:main::@6->main::@2]
|
||||
b2_from_b6:
|
||||
//SEG32 [11] phi (byte) main::j#4 = (byte) main::j#1 [phi:main::@6->main::@2#0] -- register_copy
|
||||
//SEG31 [10] phi (byte) main::j#4 = (byte) main::j#1 [phi:main::@6->main::@2#0] -- register_copy
|
||||
jmp b2
|
||||
colseq: .byte WHITE, RED, GREEN
|
||||
}
|
||||
@ -1214,16 +1181,17 @@ REGISTER UPLIFT POTENTIAL REGISTERS
|
||||
Statement [6] *((const byte*) main::screen#0 + (byte) main::i#2) ← (byte) '*' [ main::i#2 main::j#3 ] ( main:2 [ main::i#2 main::j#3 ] ) always clobbers reg byte a
|
||||
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
|
||||
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ main::j#3 main::j#4 main::j#1 ]
|
||||
Statement [7] *((const byte*) main::cols#0 + (byte) main::i#2) ← *((const byte[]) main::colseq#0 + (byte) main::j#3) [ main::i#2 main::j#3 ] ( main:2 [ main::i#2 main::j#3 ] ) always clobbers reg byte a
|
||||
Statement [6] *((const byte*) main::screen#0 + (byte) main::i#2) ← (byte) '*' [ main::i#2 main::j#3 ] ( main:2 [ main::i#2 main::j#3 ] ) always clobbers reg byte a
|
||||
Statement [7] *((const byte*) main::cols#0 + (byte) main::i#2) ← *((const byte[]) main::colseq#0 + (byte) main::j#3) [ main::i#2 main::j#3 ] ( main:2 [ main::i#2 main::j#3 ] ) always clobbers reg byte a
|
||||
Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:3 [ main::j#3 main::j#4 main::j#1 ] : zp ZP_BYTE:3 , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:4 [ main::$0 ] : zp ZP_BYTE:4 , reg byte a , reg byte x , reg byte y ,
|
||||
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [main] 26.58: zp ZP_BYTE:3 [ main::j#3 main::j#4 main::j#1 ] 22: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] 22: zp ZP_BYTE:4 [ main::$0 ]
|
||||
Uplift Scope [main] 29.33: zp ZP_BYTE:3 [ main::j#3 main::j#4 main::j#1 ] 22.79: zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
|
||||
Uplift Scope []
|
||||
|
||||
Uplifting [main] best 553 combination reg byte y [ main::j#3 main::j#4 main::j#1 ] reg byte x [ main::i#2 main::i#1 ] reg byte a [ main::$0 ]
|
||||
Uplifting [main] best 553 combination reg byte y [ main::j#3 main::j#4 main::j#1 ] reg byte x [ main::i#2 main::i#1 ]
|
||||
Uplifting [] best 553 combination
|
||||
|
||||
ASSEMBLER BEFORE OPTIMIZATION
|
||||
@ -1272,40 +1240,39 @@ main: {
|
||||
//SEG17 [6] *((const byte*) main::screen#0 + (byte) main::i#2) ← (byte) '*' [ main::i#2 main::j#3 ] ( main:2 [ main::i#2 main::j#3 ] ) -- pbuc1_derefidx_vbuxx=vbuc2
|
||||
lda #'*'
|
||||
sta screen,x
|
||||
//SEG18 [7] (byte~) main::$0 ← (const byte[]) main::colseq#0 *idx (byte) main::j#3 [ main::i#2 main::j#3 main::$0 ] ( main:2 [ main::i#2 main::j#3 main::$0 ] ) -- vbuaa=pbuc1_derefidx_vbuyy
|
||||
//SEG18 [7] *((const byte*) main::cols#0 + (byte) main::i#2) ← *((const byte[]) main::colseq#0 + (byte) main::j#3) [ main::i#2 main::j#3 ] ( main:2 [ main::i#2 main::j#3 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuyy
|
||||
lda colseq,y
|
||||
//SEG19 [8] *((const byte*) main::cols#0 + (byte) main::i#2) ← (byte~) main::$0 [ main::i#2 main::j#3 ] ( main:2 [ main::i#2 main::j#3 ] ) -- pbuc1_derefidx_vbuxx=vbuaa
|
||||
sta cols,x
|
||||
//SEG20 [9] (byte) main::j#1 ← ++ (byte) main::j#3 [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] ) -- vbuyy=_inc_vbuyy
|
||||
//SEG19 [8] (byte) main::j#1 ← ++ (byte) main::j#3 [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] ) -- vbuyy=_inc_vbuyy
|
||||
iny
|
||||
//SEG21 [10] if((byte) main::j#1!=(byte/signed byte/word/signed word) 3) goto main::@6 [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] ) -- vbuyy_neq_vbuc1_then_la1
|
||||
//SEG20 [9] if((byte) main::j#1!=(byte/signed byte/word/signed word) 3) goto main::@6 [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] ) -- vbuyy_neq_vbuc1_then_la1
|
||||
cpy #3
|
||||
bne b6_from_b1
|
||||
//SEG22 [11] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
|
||||
//SEG21 [10] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
|
||||
b2_from_b1:
|
||||
//SEG23 [11] phi (byte) main::j#4 = (byte/signed byte/word/signed word) 0 [phi:main::@1->main::@2#0] -- vbuyy=vbuc1
|
||||
//SEG22 [10] phi (byte) main::j#4 = (byte/signed byte/word/signed word) 0 [phi:main::@1->main::@2#0] -- vbuyy=vbuc1
|
||||
ldy #0
|
||||
jmp b2
|
||||
//SEG24 main::@2
|
||||
//SEG23 main::@2
|
||||
b2:
|
||||
//SEG25 [12] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 main::j#4 ] ( main:2 [ main::i#1 main::j#4 ] ) -- vbuxx=_inc_vbuxx
|
||||
//SEG24 [11] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 main::j#4 ] ( main:2 [ main::i#1 main::j#4 ] ) -- vbuxx=_inc_vbuxx
|
||||
inx
|
||||
//SEG26 [13] if((byte) main::i#1!=(byte/signed byte/word/signed word) 40) goto main::@1 [ main::i#1 main::j#4 ] ( main:2 [ main::i#1 main::j#4 ] ) -- vbuxx_neq_vbuc1_then_la1
|
||||
//SEG25 [12] if((byte) main::i#1!=(byte/signed byte/word/signed word) 40) goto main::@1 [ main::i#1 main::j#4 ] ( main:2 [ main::i#1 main::j#4 ] ) -- vbuxx_neq_vbuc1_then_la1
|
||||
cpx #$28
|
||||
bne b1_from_b2
|
||||
jmp breturn
|
||||
//SEG27 main::@return
|
||||
//SEG26 main::@return
|
||||
breturn:
|
||||
//SEG28 [14] return [ ] ( main:2 [ ] )
|
||||
//SEG27 [13] return [ ] ( main:2 [ ] )
|
||||
rts
|
||||
//SEG29 [15] phi from main::@1 to main::@6 [phi:main::@1->main::@6]
|
||||
//SEG28 [14] phi from main::@1 to main::@6 [phi:main::@1->main::@6]
|
||||
b6_from_b1:
|
||||
jmp b6
|
||||
//SEG30 main::@6
|
||||
//SEG29 main::@6
|
||||
b6:
|
||||
//SEG31 [11] phi from main::@6 to main::@2 [phi:main::@6->main::@2]
|
||||
//SEG30 [10] phi from main::@6 to main::@2 [phi:main::@6->main::@2]
|
||||
b2_from_b6:
|
||||
//SEG32 [11] phi (byte) main::j#4 = (byte) main::j#1 [phi:main::@6->main::@2#0] -- register_copy
|
||||
//SEG31 [10] phi (byte) main::j#4 = (byte) main::j#1 [phi:main::@6->main::@2#0] -- register_copy
|
||||
jmp b2
|
||||
colseq: .byte WHITE, RED, GREEN
|
||||
}
|
||||
@ -1354,7 +1321,6 @@ FINAL SYMBOL TABLE
|
||||
(byte) WHITE
|
||||
(const byte) WHITE#0 WHITE = (byte/signed byte/word/signed word) 1
|
||||
(void()) main()
|
||||
(byte~) main::$0 reg byte a 22.0
|
||||
(label) main::@1
|
||||
(label) main::@2
|
||||
(label) main::@6
|
||||
@ -1365,17 +1331,16 @@ FINAL SYMBOL TABLE
|
||||
(const byte[]) main::colseq#0 colseq = { (const byte) WHITE#0, (const byte) RED#0, (const byte) GREEN#0 }
|
||||
(byte) main::i
|
||||
(byte) main::i#1 reg byte x 16.5
|
||||
(byte) main::i#2 reg byte x 5.5
|
||||
(byte) main::i#2 reg byte x 6.285714285714286
|
||||
(byte) main::j
|
||||
(byte) main::j#1 reg byte y 11.0
|
||||
(byte) main::j#3 reg byte y 8.25
|
||||
(byte) main::j#3 reg byte y 11.0
|
||||
(byte) main::j#4 reg byte y 7.333333333333333
|
||||
(byte*) main::screen
|
||||
(const byte*) main::screen#0 screen = ((byte*))(word/signed word) 1024
|
||||
|
||||
reg byte x [ main::i#2 main::i#1 ]
|
||||
reg byte y [ main::j#3 main::j#4 main::j#1 ]
|
||||
reg byte a [ main::$0 ]
|
||||
|
||||
FINAL CODE
|
||||
//SEG0 Basic Upstart
|
||||
@ -1411,32 +1376,31 @@ main: {
|
||||
//SEG17 [6] *((const byte*) main::screen#0 + (byte) main::i#2) ← (byte) '*' [ main::i#2 main::j#3 ] ( main:2 [ main::i#2 main::j#3 ] ) -- pbuc1_derefidx_vbuxx=vbuc2
|
||||
lda #'*'
|
||||
sta screen,x
|
||||
//SEG18 [7] (byte~) main::$0 ← (const byte[]) main::colseq#0 *idx (byte) main::j#3 [ main::i#2 main::j#3 main::$0 ] ( main:2 [ main::i#2 main::j#3 main::$0 ] ) -- vbuaa=pbuc1_derefidx_vbuyy
|
||||
//SEG18 [7] *((const byte*) main::cols#0 + (byte) main::i#2) ← *((const byte[]) main::colseq#0 + (byte) main::j#3) [ main::i#2 main::j#3 ] ( main:2 [ main::i#2 main::j#3 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuyy
|
||||
lda colseq,y
|
||||
//SEG19 [8] *((const byte*) main::cols#0 + (byte) main::i#2) ← (byte~) main::$0 [ main::i#2 main::j#3 ] ( main:2 [ main::i#2 main::j#3 ] ) -- pbuc1_derefidx_vbuxx=vbuaa
|
||||
sta cols,x
|
||||
//SEG20 [9] (byte) main::j#1 ← ++ (byte) main::j#3 [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] ) -- vbuyy=_inc_vbuyy
|
||||
//SEG19 [8] (byte) main::j#1 ← ++ (byte) main::j#3 [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] ) -- vbuyy=_inc_vbuyy
|
||||
iny
|
||||
//SEG21 [10] if((byte) main::j#1!=(byte/signed byte/word/signed word) 3) goto main::@6 [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] ) -- vbuyy_neq_vbuc1_then_la1
|
||||
//SEG20 [9] if((byte) main::j#1!=(byte/signed byte/word/signed word) 3) goto main::@6 [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] ) -- vbuyy_neq_vbuc1_then_la1
|
||||
cpy #3
|
||||
bne b2
|
||||
//SEG22 [11] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
|
||||
//SEG23 [11] phi (byte) main::j#4 = (byte/signed byte/word/signed word) 0 [phi:main::@1->main::@2#0] -- vbuyy=vbuc1
|
||||
//SEG21 [10] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
|
||||
//SEG22 [10] phi (byte) main::j#4 = (byte/signed byte/word/signed word) 0 [phi:main::@1->main::@2#0] -- vbuyy=vbuc1
|
||||
ldy #0
|
||||
//SEG24 main::@2
|
||||
//SEG23 main::@2
|
||||
b2:
|
||||
//SEG25 [12] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 main::j#4 ] ( main:2 [ main::i#1 main::j#4 ] ) -- vbuxx=_inc_vbuxx
|
||||
//SEG24 [11] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 main::j#4 ] ( main:2 [ main::i#1 main::j#4 ] ) -- vbuxx=_inc_vbuxx
|
||||
inx
|
||||
//SEG26 [13] if((byte) main::i#1!=(byte/signed byte/word/signed word) 40) goto main::@1 [ main::i#1 main::j#4 ] ( main:2 [ main::i#1 main::j#4 ] ) -- vbuxx_neq_vbuc1_then_la1
|
||||
//SEG25 [12] if((byte) main::i#1!=(byte/signed byte/word/signed word) 40) goto main::@1 [ main::i#1 main::j#4 ] ( main:2 [ main::i#1 main::j#4 ] ) -- vbuxx_neq_vbuc1_then_la1
|
||||
cpx #$28
|
||||
bne b1
|
||||
//SEG27 main::@return
|
||||
//SEG28 [14] return [ ] ( main:2 [ ] )
|
||||
//SEG26 main::@return
|
||||
//SEG27 [13] return [ ] ( main:2 [ ] )
|
||||
rts
|
||||
//SEG29 [15] phi from main::@1 to main::@6 [phi:main::@1->main::@6]
|
||||
//SEG30 main::@6
|
||||
//SEG31 [11] phi from main::@6 to main::@2 [phi:main::@6->main::@2]
|
||||
//SEG32 [11] phi (byte) main::j#4 = (byte) main::j#1 [phi:main::@6->main::@2#0] -- register_copy
|
||||
//SEG28 [14] phi from main::@1 to main::@6 [phi:main::@1->main::@6]
|
||||
//SEG29 main::@6
|
||||
//SEG30 [10] phi from main::@6 to main::@2 [phi:main::@6->main::@2]
|
||||
//SEG31 [10] phi (byte) main::j#4 = (byte) main::j#1 [phi:main::@6->main::@2#0] -- register_copy
|
||||
colseq: .byte WHITE, RED, GREEN
|
||||
}
|
||||
|
||||
|
@ -8,7 +8,6 @@
|
||||
(byte) WHITE
|
||||
(const byte) WHITE#0 WHITE = (byte/signed byte/word/signed word) 1
|
||||
(void()) main()
|
||||
(byte~) main::$0 reg byte a 22.0
|
||||
(label) main::@1
|
||||
(label) main::@2
|
||||
(label) main::@6
|
||||
@ -19,14 +18,13 @@
|
||||
(const byte[]) main::colseq#0 colseq = { (const byte) WHITE#0, (const byte) RED#0, (const byte) GREEN#0 }
|
||||
(byte) main::i
|
||||
(byte) main::i#1 reg byte x 16.5
|
||||
(byte) main::i#2 reg byte x 5.5
|
||||
(byte) main::i#2 reg byte x 6.285714285714286
|
||||
(byte) main::j
|
||||
(byte) main::j#1 reg byte y 11.0
|
||||
(byte) main::j#3 reg byte y 8.25
|
||||
(byte) main::j#3 reg byte y 11.0
|
||||
(byte) main::j#4 reg byte y 7.333333333333333
|
||||
(byte*) main::screen
|
||||
(const byte*) main::screen#0 screen = ((byte*))(word/signed word) 1024
|
||||
|
||||
reg byte x [ main::i#2 main::i#1 ]
|
||||
reg byte y [ main::j#3 main::j#4 main::j#1 ]
|
||||
reg byte a [ main::$0 ]
|
||||
|
@ -13,19 +13,18 @@ main: scope:[main] from @1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
[5] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word) 0 main::@2/(byte) main::i#1 ) [ main::j#3 main::i#2 ] ( main:2 [ main::j#3 main::i#2 ] )
|
||||
[5] (byte) main::j#3 ← phi( main/(byte/signed byte/word/signed word) 0 main::@2/(byte) main::j#4 ) [ main::j#3 main::i#2 ] ( main:2 [ main::j#3 main::i#2 ] )
|
||||
[6] (byte~) main::$0 ← (const byte[]) TXT#0 *idx (byte) main::j#3 [ main::j#3 main::i#2 main::$0 ] ( main:2 [ main::j#3 main::i#2 main::$0 ] )
|
||||
[7] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte~) main::$0 [ main::j#3 main::i#2 ] ( main:2 [ main::j#3 main::i#2 ] )
|
||||
[8] (byte) main::j#1 ← ++ (byte) main::j#3 [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] )
|
||||
[9] if((byte) main::j#1!=(byte/signed byte/word/signed word) 8) goto main::@6 [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] )
|
||||
[6] *((const byte*) SCREEN#0 + (byte) main::i#2) ← *((const byte[]) TXT#0 + (byte) main::j#3) [ main::j#3 main::i#2 ] ( main:2 [ main::j#3 main::i#2 ] )
|
||||
[7] (byte) main::j#1 ← ++ (byte) main::j#3 [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] )
|
||||
[8] if((byte) main::j#1!=(byte/signed byte/word/signed word) 8) goto main::@6 [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] )
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1 main::@6
|
||||
[10] (byte) main::j#4 ← phi( main::@6/(byte) main::j#1 main::@1/(byte/signed byte/word/signed word) 0 ) [ main::i#2 main::j#4 ] ( main:2 [ main::i#2 main::j#4 ] )
|
||||
[11] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::j#4 main::i#1 ] ( main:2 [ main::j#4 main::i#1 ] )
|
||||
[12] if((byte) main::i#1!=(byte/signed byte/word/signed word) 101) goto main::@1 [ main::j#4 main::i#1 ] ( main:2 [ main::j#4 main::i#1 ] )
|
||||
[9] (byte) main::j#4 ← phi( main::@6/(byte) main::j#1 main::@1/(byte/signed byte/word/signed word) 0 ) [ main::i#2 main::j#4 ] ( main:2 [ main::i#2 main::j#4 ] )
|
||||
[10] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::j#4 main::i#1 ] ( main:2 [ main::j#4 main::i#1 ] )
|
||||
[11] if((byte) main::i#1!=(byte/signed byte/word/signed word) 101) goto main::@1 [ main::j#4 main::i#1 ] ( main:2 [ main::j#4 main::i#1 ] )
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@2
|
||||
[13] return [ ] ( main:2 [ ] )
|
||||
[12] return [ ] ( main:2 [ ] )
|
||||
to:@return
|
||||
main::@6: scope:[main] from main::@1
|
||||
[14] phi() [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] )
|
||||
[13] phi() [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] )
|
||||
to:main::@2
|
||||
|
@ -19,17 +19,16 @@ proc (void()) main()
|
||||
(byte) main::j ← (byte/signed byte/word/signed word) 0
|
||||
(byte) main::i ← (byte/signed byte/word/signed word) 0
|
||||
main::@1:
|
||||
(byte~) main::$0 ← (byte[]) TXT *idx (byte) main::j
|
||||
*((byte*) SCREEN + (byte) main::i) ← (byte~) main::$0
|
||||
*((byte*) SCREEN + (byte) main::i) ← *((byte[]) TXT + (byte) main::j)
|
||||
(byte) main::j ← ++ (byte) main::j
|
||||
(boolean~) main::$1 ← (byte) main::j == (byte/signed byte/word/signed word) 8
|
||||
(boolean~) main::$2 ← ! (boolean~) main::$1
|
||||
if((boolean~) main::$2) goto main::@2
|
||||
(boolean~) main::$0 ← (byte) main::j == (byte/signed byte/word/signed word) 8
|
||||
(boolean~) main::$1 ← ! (boolean~) main::$0
|
||||
if((boolean~) main::$1) goto main::@2
|
||||
(byte) main::j ← (byte/signed byte/word/signed word) 0
|
||||
main::@2:
|
||||
(byte) main::i ← ++ (byte) main::i
|
||||
(boolean~) main::$3 ← (byte) main::i != (byte/signed byte/word/signed word) 101
|
||||
if((boolean~) main::$3) goto main::@1
|
||||
(boolean~) main::$2 ← (byte) main::i != (byte/signed byte/word/signed word) 101
|
||||
if((boolean~) main::$2) goto main::@1
|
||||
main::@return:
|
||||
return
|
||||
endproc // main()
|
||||
@ -39,10 +38,9 @@ SYMBOLS
|
||||
(byte*) SCREEN
|
||||
(byte[]) TXT
|
||||
(void()) main()
|
||||
(byte~) main::$0
|
||||
(boolean~) main::$0
|
||||
(boolean~) main::$1
|
||||
(boolean~) main::$2
|
||||
(boolean~) main::$3
|
||||
(label) main::@1
|
||||
(label) main::@2
|
||||
(label) main::@return
|
||||
@ -60,17 +58,16 @@ main: scope:[main] from
|
||||
(byte) main::i ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
(byte~) main::$0 ← (byte[]) TXT *idx (byte) main::j
|
||||
*((byte*) SCREEN + (byte) main::i) ← (byte~) main::$0
|
||||
*((byte*) SCREEN + (byte) main::i) ← *((byte[]) TXT + (byte) main::j)
|
||||
(byte) main::j ← ++ (byte) main::j
|
||||
(boolean~) main::$1 ← (byte) main::j == (byte/signed byte/word/signed word) 8
|
||||
(boolean~) main::$2 ← ! (boolean~) main::$1
|
||||
if((boolean~) main::$2) goto main::@2
|
||||
(boolean~) main::$0 ← (byte) main::j == (byte/signed byte/word/signed word) 8
|
||||
(boolean~) main::$1 ← ! (boolean~) main::$0
|
||||
if((boolean~) main::$1) goto main::@2
|
||||
to:main::@3
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte) main::i ← ++ (byte) main::i
|
||||
(boolean~) main::$3 ← (byte) main::i != (byte/signed byte/word/signed word) 101
|
||||
if((boolean~) main::$3) goto main::@1
|
||||
(boolean~) main::$2 ← (byte) main::i != (byte/signed byte/word/signed word) 101
|
||||
if((boolean~) main::$2) goto main::@1
|
||||
to:main::@4
|
||||
main::@3: scope:[main] from main::@1
|
||||
(byte) main::j ← (byte/signed byte/word/signed word) 0
|
||||
@ -96,17 +93,16 @@ main: scope:[main] from
|
||||
(byte) main::i ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
(byte~) main::$0 ← (byte[]) TXT *idx (byte) main::j
|
||||
*((byte*) SCREEN + (byte) main::i) ← (byte~) main::$0
|
||||
*((byte*) SCREEN + (byte) main::i) ← *((byte[]) TXT + (byte) main::j)
|
||||
(byte) main::j ← ++ (byte) main::j
|
||||
(boolean~) main::$1 ← (byte) main::j == (byte/signed byte/word/signed word) 8
|
||||
(boolean~) main::$2 ← ! (boolean~) main::$1
|
||||
if((boolean~) main::$2) goto main::@2
|
||||
(boolean~) main::$0 ← (byte) main::j == (byte/signed byte/word/signed word) 8
|
||||
(boolean~) main::$1 ← ! (boolean~) main::$0
|
||||
if((boolean~) main::$1) goto main::@2
|
||||
to:main::@3
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte) main::i ← ++ (byte) main::i
|
||||
(boolean~) main::$3 ← (byte) main::i != (byte/signed byte/word/signed word) 101
|
||||
if((boolean~) main::$3) goto main::@1
|
||||
(boolean~) main::$2 ← (byte) main::i != (byte/signed byte/word/signed word) 101
|
||||
if((boolean~) main::$2) goto main::@1
|
||||
to:main::@return
|
||||
main::@3: scope:[main] from main::@1
|
||||
(byte) main::j ← (byte/signed byte/word/signed word) 0
|
||||
@ -131,17 +127,16 @@ main: scope:[main] from @1
|
||||
(byte) main::i ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
(byte~) main::$0 ← (byte[]) TXT *idx (byte) main::j
|
||||
*((byte*) SCREEN + (byte) main::i) ← (byte~) main::$0
|
||||
*((byte*) SCREEN + (byte) main::i) ← *((byte[]) TXT + (byte) main::j)
|
||||
(byte) main::j ← ++ (byte) main::j
|
||||
(boolean~) main::$1 ← (byte) main::j == (byte/signed byte/word/signed word) 8
|
||||
(boolean~) main::$2 ← ! (boolean~) main::$1
|
||||
if((boolean~) main::$2) goto main::@2
|
||||
(boolean~) main::$0 ← (byte) main::j == (byte/signed byte/word/signed word) 8
|
||||
(boolean~) main::$1 ← ! (boolean~) main::$0
|
||||
if((boolean~) main::$1) goto main::@2
|
||||
to:main::@3
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte) main::i ← ++ (byte) main::i
|
||||
(boolean~) main::$3 ← (byte) main::i != (byte/signed byte/word/signed word) 101
|
||||
if((boolean~) main::$3) goto main::@1
|
||||
(boolean~) main::$2 ← (byte) main::i != (byte/signed byte/word/signed word) 101
|
||||
if((boolean~) main::$2) goto main::@1
|
||||
to:main::@return
|
||||
main::@3: scope:[main] from main::@1
|
||||
(byte) main::j ← (byte/signed byte/word/signed word) 0
|
||||
@ -175,12 +170,11 @@ main::@1: scope:[main] from main main::@2
|
||||
(byte*) SCREEN#1 ← phi( main/(byte*) SCREEN#2 main::@2/(byte*) SCREEN#3 )
|
||||
(byte) main::j#3 ← phi( main/(byte) main::j#0 main::@2/(byte) main::j#4 )
|
||||
(byte[]) TXT#1 ← phi( main/(byte[]) TXT#2 main::@2/(byte[]) TXT#3 )
|
||||
(byte~) main::$0 ← (byte[]) TXT#1 *idx (byte) main::j#3
|
||||
*((byte*) SCREEN#1 + (byte) main::i#2) ← (byte~) main::$0
|
||||
*((byte*) SCREEN#1 + (byte) main::i#2) ← *((byte[]) TXT#1 + (byte) main::j#3)
|
||||
(byte) main::j#1 ← ++ (byte) main::j#3
|
||||
(boolean~) main::$1 ← (byte) main::j#1 == (byte/signed byte/word/signed word) 8
|
||||
(boolean~) main::$2 ← ! (boolean~) main::$1
|
||||
if((boolean~) main::$2) goto main::@2
|
||||
(boolean~) main::$0 ← (byte) main::j#1 == (byte/signed byte/word/signed word) 8
|
||||
(boolean~) main::$1 ← ! (boolean~) main::$0
|
||||
if((boolean~) main::$1) goto main::@2
|
||||
to:main::@3
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte*) SCREEN#3 ← phi( main::@1/(byte*) SCREEN#1 main::@3/(byte*) SCREEN#5 )
|
||||
@ -188,8 +182,8 @@ main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte[]) TXT#3 ← phi( main::@1/(byte[]) TXT#1 main::@3/(byte[]) TXT#5 )
|
||||
(byte) main::i#3 ← phi( main::@1/(byte) main::i#2 main::@3/(byte) main::i#4 )
|
||||
(byte) main::i#1 ← ++ (byte) main::i#3
|
||||
(boolean~) main::$3 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 101
|
||||
if((boolean~) main::$3) goto main::@1
|
||||
(boolean~) main::$2 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 101
|
||||
if((boolean~) main::$2) goto main::@1
|
||||
to:main::@return
|
||||
main::@3: scope:[main] from main::@1
|
||||
(byte*) SCREEN#5 ← phi( main::@1/(byte*) SCREEN#1 )
|
||||
@ -225,12 +219,11 @@ main::@1: scope:[main] from main main::@2
|
||||
(byte*) SCREEN#1 ← phi( main/(byte*) SCREEN#2 main::@2/(byte*) SCREEN#3 )
|
||||
(byte) main::j#3 ← phi( main/(byte) main::j#0 main::@2/(byte) main::j#4 )
|
||||
(byte[]) TXT#1 ← phi( main/(byte[]) TXT#2 main::@2/(byte[]) TXT#3 )
|
||||
(byte~) main::$0 ← (byte[]) TXT#1 *idx (byte) main::j#3
|
||||
*((byte*) SCREEN#1 + (byte) main::i#2) ← (byte~) main::$0
|
||||
*((byte*) SCREEN#1 + (byte) main::i#2) ← *((byte[]) TXT#1 + (byte) main::j#3)
|
||||
(byte) main::j#1 ← ++ (byte) main::j#3
|
||||
(boolean~) main::$1 ← (byte) main::j#1 == (byte/signed byte/word/signed word) 8
|
||||
(boolean~) main::$2 ← ! (boolean~) main::$1
|
||||
if((boolean~) main::$2) goto main::@2
|
||||
(boolean~) main::$0 ← (byte) main::j#1 == (byte/signed byte/word/signed word) 8
|
||||
(boolean~) main::$1 ← ! (boolean~) main::$0
|
||||
if((boolean~) main::$1) goto main::@2
|
||||
to:main::@3
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte*) SCREEN#3 ← phi( main::@1/(byte*) SCREEN#1 main::@3/(byte*) SCREEN#5 )
|
||||
@ -238,8 +231,8 @@ main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte[]) TXT#3 ← phi( main::@1/(byte[]) TXT#1 main::@3/(byte[]) TXT#5 )
|
||||
(byte) main::i#3 ← phi( main::@1/(byte) main::i#2 main::@3/(byte) main::i#4 )
|
||||
(byte) main::i#1 ← ++ (byte) main::i#3
|
||||
(boolean~) main::$3 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 101
|
||||
if((boolean~) main::$3) goto main::@1
|
||||
(boolean~) main::$2 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 101
|
||||
if((boolean~) main::$2) goto main::@1
|
||||
to:main::@return
|
||||
main::@3: scope:[main] from main::@1
|
||||
(byte*) SCREEN#5 ← phi( main::@1/(byte*) SCREEN#1 )
|
||||
@ -279,10 +272,9 @@ INITIAL SSA SYMBOL TABLE
|
||||
(byte[]) TXT#4
|
||||
(byte[]) TXT#5
|
||||
(void()) main()
|
||||
(byte~) main::$0
|
||||
(boolean~) main::$0
|
||||
(boolean~) main::$1
|
||||
(boolean~) main::$2
|
||||
(boolean~) main::$3
|
||||
(label) main::@1
|
||||
(label) main::@2
|
||||
(label) main::@3
|
||||
@ -318,12 +310,11 @@ main::@1: scope:[main] from main main::@2
|
||||
(byte*) SCREEN#1 ← phi( main/(byte*) SCREEN#2 main::@2/(byte*) SCREEN#3 )
|
||||
(byte) main::j#3 ← phi( main/(byte) main::j#0 main::@2/(byte) main::j#4 )
|
||||
(byte[]) TXT#1 ← phi( main/(byte[]) TXT#2 main::@2/(byte[]) TXT#3 )
|
||||
(byte~) main::$0 ← (byte[]) TXT#1 *idx (byte) main::j#3
|
||||
*((byte*) SCREEN#1 + (byte) main::i#2) ← (byte~) main::$0
|
||||
*((byte*) SCREEN#1 + (byte) main::i#2) ← *((byte[]) TXT#1 + (byte) main::j#3)
|
||||
(byte) main::j#1 ← ++ (byte) main::j#3
|
||||
(boolean~) main::$1 ← (byte) main::j#1 == (byte/signed byte/word/signed word) 8
|
||||
(boolean~) main::$2 ← ! (boolean~) main::$1
|
||||
if((boolean~) main::$2) goto main::@2
|
||||
(boolean~) main::$0 ← (byte) main::j#1 == (byte/signed byte/word/signed word) 8
|
||||
(boolean~) main::$1 ← ! (boolean~) main::$0
|
||||
if((boolean~) main::$1) goto main::@2
|
||||
to:main::@3
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte*) SCREEN#3 ← phi( main::@1/(byte*) SCREEN#1 main::@3/(byte*) SCREEN#5 )
|
||||
@ -331,8 +322,8 @@ main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte[]) TXT#3 ← phi( main::@1/(byte[]) TXT#1 main::@3/(byte[]) TXT#5 )
|
||||
(byte) main::i#3 ← phi( main::@1/(byte) main::i#2 main::@3/(byte) main::i#4 )
|
||||
(byte) main::i#1 ← ++ (byte) main::i#3
|
||||
(boolean~) main::$3 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 101
|
||||
if((boolean~) main::$3) goto main::@1
|
||||
(boolean~) main::$2 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 101
|
||||
if((boolean~) main::$2) goto main::@1
|
||||
to:main::@return
|
||||
main::@3: scope:[main] from main::@1
|
||||
(byte*) SCREEN#5 ← phi( main::@1/(byte*) SCREEN#1 )
|
||||
@ -350,7 +341,7 @@ main::@return: scope:[main] from main::@2
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
|
||||
Inversing boolean not (boolean~) main::$2 ← (byte) main::j#1 != (byte/signed byte/word/signed word) 8 from (boolean~) main::$1 ← (byte) main::j#1 == (byte/signed byte/word/signed word) 8
|
||||
Inversing boolean not (boolean~) main::$1 ← (byte) main::j#1 != (byte/signed byte/word/signed word) 8 from (boolean~) main::$0 ← (byte) main::j#1 == (byte/signed byte/word/signed word) 8
|
||||
Succesful SSA optimization Pass2UnaryNotSimplification
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
@ -368,11 +359,10 @@ main::@1: scope:[main] from main main::@2
|
||||
(byte*) SCREEN#1 ← phi( main/(byte*) SCREEN#2 main::@2/(byte*) SCREEN#3 )
|
||||
(byte) main::j#3 ← phi( main/(byte) main::j#0 main::@2/(byte) main::j#4 )
|
||||
(byte[]) TXT#1 ← phi( main/(byte[]) TXT#2 main::@2/(byte[]) TXT#3 )
|
||||
(byte~) main::$0 ← (byte[]) TXT#1 *idx (byte) main::j#3
|
||||
*((byte*) SCREEN#1 + (byte) main::i#2) ← (byte~) main::$0
|
||||
*((byte*) SCREEN#1 + (byte) main::i#2) ← *((byte[]) TXT#1 + (byte) main::j#3)
|
||||
(byte) main::j#1 ← ++ (byte) main::j#3
|
||||
(boolean~) main::$2 ← (byte) main::j#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$2) goto main::@2
|
||||
(boolean~) main::$1 ← (byte) main::j#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$1) goto main::@2
|
||||
to:main::@3
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte*) SCREEN#3 ← phi( main::@1/(byte*) SCREEN#1 main::@3/(byte*) SCREEN#5 )
|
||||
@ -380,8 +370,8 @@ main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte[]) TXT#3 ← phi( main::@1/(byte[]) TXT#1 main::@3/(byte[]) TXT#5 )
|
||||
(byte) main::i#3 ← phi( main::@1/(byte) main::i#2 main::@3/(byte) main::i#4 )
|
||||
(byte) main::i#1 ← ++ (byte) main::i#3
|
||||
(boolean~) main::$3 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 101
|
||||
if((boolean~) main::$3) goto main::@1
|
||||
(boolean~) main::$2 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 101
|
||||
if((boolean~) main::$2) goto main::@1
|
||||
to:main::@return
|
||||
main::@3: scope:[main] from main::@1
|
||||
(byte*) SCREEN#5 ← phi( main::@1/(byte*) SCREEN#1 )
|
||||
@ -423,11 +413,10 @@ main::@1: scope:[main] from main main::@2
|
||||
(byte*) SCREEN#1 ← phi( main/(byte*) SCREEN#2 main::@2/(byte*) SCREEN#3 )
|
||||
(byte) main::j#3 ← phi( main/(byte) main::j#0 main::@2/(byte) main::j#4 )
|
||||
(byte[]) TXT#1 ← phi( main/(byte[]) TXT#2 main::@2/(byte[]) TXT#3 )
|
||||
(byte~) main::$0 ← (byte[]) TXT#1 *idx (byte) main::j#3
|
||||
*((byte*) SCREEN#1 + (byte) main::i#2) ← (byte~) main::$0
|
||||
*((byte*) SCREEN#1 + (byte) main::i#2) ← *((byte[]) TXT#1 + (byte) main::j#3)
|
||||
(byte) main::j#1 ← ++ (byte) main::j#3
|
||||
(boolean~) main::$2 ← (byte) main::j#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$2) goto main::@2
|
||||
(boolean~) main::$1 ← (byte) main::j#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$1) goto main::@2
|
||||
to:main::@3
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte*) SCREEN#3 ← phi( main::@1/(byte*) SCREEN#1 main::@3/(byte*) SCREEN#1 )
|
||||
@ -435,8 +424,8 @@ main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte[]) TXT#3 ← phi( main::@1/(byte[]) TXT#1 main::@3/(byte[]) TXT#1 )
|
||||
(byte) main::i#3 ← phi( main::@1/(byte) main::i#2 main::@3/(byte) main::i#2 )
|
||||
(byte) main::i#1 ← ++ (byte) main::i#3
|
||||
(boolean~) main::$3 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 101
|
||||
if((boolean~) main::$3) goto main::@1
|
||||
(boolean~) main::$2 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 101
|
||||
if((boolean~) main::$2) goto main::@1
|
||||
to:main::@return
|
||||
main::@3: scope:[main] from main::@1
|
||||
(byte) main::j#2 ← (byte/signed byte/word/signed word) 0
|
||||
@ -471,17 +460,16 @@ main::@1: scope:[main] from main main::@2
|
||||
(byte*) SCREEN#1 ← phi( main/(byte*) SCREEN#2 main::@2/(byte*) SCREEN#1 )
|
||||
(byte) main::j#3 ← phi( main/(byte) main::j#0 main::@2/(byte) main::j#4 )
|
||||
(byte[]) TXT#1 ← phi( main/(byte[]) TXT#2 main::@2/(byte[]) TXT#1 )
|
||||
(byte~) main::$0 ← (byte[]) TXT#1 *idx (byte) main::j#3
|
||||
*((byte*) SCREEN#1 + (byte) main::i#2) ← (byte~) main::$0
|
||||
*((byte*) SCREEN#1 + (byte) main::i#2) ← *((byte[]) TXT#1 + (byte) main::j#3)
|
||||
(byte) main::j#1 ← ++ (byte) main::j#3
|
||||
(boolean~) main::$2 ← (byte) main::j#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$2) goto main::@2
|
||||
(boolean~) main::$1 ← (byte) main::j#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$1) goto main::@2
|
||||
to:main::@3
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte) main::j#4 ← phi( main::@1/(byte) main::j#1 main::@3/(byte) main::j#2 )
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
(boolean~) main::$3 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 101
|
||||
if((boolean~) main::$3) goto main::@1
|
||||
(boolean~) main::$2 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 101
|
||||
if((boolean~) main::$2) goto main::@1
|
||||
to:main::@return
|
||||
main::@3: scope:[main] from main::@1
|
||||
(byte) main::j#2 ← (byte/signed byte/word/signed word) 0
|
||||
@ -515,17 +503,16 @@ main::@1: scope:[main] from main main::@2
|
||||
(byte*) SCREEN#1 ← phi( main/(byte*) SCREEN#2 )
|
||||
(byte) main::j#3 ← phi( main/(byte) main::j#0 main::@2/(byte) main::j#4 )
|
||||
(byte[]) TXT#1 ← phi( main/(byte[]) TXT#2 )
|
||||
(byte~) main::$0 ← (byte[]) TXT#1 *idx (byte) main::j#3
|
||||
*((byte*) SCREEN#1 + (byte) main::i#2) ← (byte~) main::$0
|
||||
*((byte*) SCREEN#1 + (byte) main::i#2) ← *((byte[]) TXT#1 + (byte) main::j#3)
|
||||
(byte) main::j#1 ← ++ (byte) main::j#3
|
||||
(boolean~) main::$2 ← (byte) main::j#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$2) goto main::@2
|
||||
(boolean~) main::$1 ← (byte) main::j#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$1) goto main::@2
|
||||
to:main::@3
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte) main::j#4 ← phi( main::@1/(byte) main::j#1 main::@3/(byte) main::j#2 )
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
(boolean~) main::$3 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 101
|
||||
if((boolean~) main::$3) goto main::@1
|
||||
(boolean~) main::$2 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 101
|
||||
if((boolean~) main::$2) goto main::@1
|
||||
to:main::@return
|
||||
main::@3: scope:[main] from main::@1
|
||||
(byte) main::j#2 ← (byte/signed byte/word/signed word) 0
|
||||
@ -555,17 +542,16 @@ main: scope:[main] from @1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 )
|
||||
(byte) main::j#3 ← phi( main/(byte) main::j#0 main::@2/(byte) main::j#4 )
|
||||
(byte~) main::$0 ← (byte[]) TXT#0 *idx (byte) main::j#3
|
||||
*((byte*) SCREEN#0 + (byte) main::i#2) ← (byte~) main::$0
|
||||
*((byte*) SCREEN#0 + (byte) main::i#2) ← *((byte[]) TXT#0 + (byte) main::j#3)
|
||||
(byte) main::j#1 ← ++ (byte) main::j#3
|
||||
(boolean~) main::$2 ← (byte) main::j#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$2) goto main::@2
|
||||
(boolean~) main::$1 ← (byte) main::j#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$1) goto main::@2
|
||||
to:main::@3
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte) main::j#4 ← phi( main::@1/(byte) main::j#1 main::@3/(byte) main::j#2 )
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
(boolean~) main::$3 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 101
|
||||
if((boolean~) main::$3) goto main::@1
|
||||
(boolean~) main::$2 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 101
|
||||
if((boolean~) main::$2) goto main::@1
|
||||
to:main::@return
|
||||
main::@3: scope:[main] from main::@1
|
||||
(byte) main::j#2 ← (byte/signed byte/word/signed word) 0
|
||||
@ -578,8 +564,8 @@ main::@return: scope:[main] from main::@2
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
|
||||
Simple Condition (boolean~) main::$2 if((byte) main::j#1!=(byte/signed byte/word/signed word) 8) goto main::@2
|
||||
Simple Condition (boolean~) main::$3 if((byte) main::i#1!=(byte/signed byte/word/signed word) 101) goto main::@1
|
||||
Simple Condition (boolean~) main::$1 if((byte) main::j#1!=(byte/signed byte/word/signed word) 8) goto main::@2
|
||||
Simple Condition (boolean~) main::$2 if((byte) main::i#1!=(byte/signed byte/word/signed word) 101) goto main::@1
|
||||
Succesful SSA optimization Pass2ConditionalJumpSimplification
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
@ -593,8 +579,7 @@ main: scope:[main] from @1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 )
|
||||
(byte) main::j#3 ← phi( main/(byte) main::j#0 main::@2/(byte) main::j#4 )
|
||||
(byte~) main::$0 ← (byte[]) TXT#0 *idx (byte) main::j#3
|
||||
*((byte*) SCREEN#0 + (byte) main::i#2) ← (byte~) main::$0
|
||||
*((byte*) SCREEN#0 + (byte) main::i#2) ← *((byte[]) TXT#0 + (byte) main::j#3)
|
||||
(byte) main::j#1 ← ++ (byte) main::j#3
|
||||
if((byte) main::j#1!=(byte/signed byte/word/signed word) 8) goto main::@2
|
||||
to:main::@3
|
||||
@ -628,8 +613,7 @@ main: scope:[main] from @1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
(byte) main::i#2 ← phi( main/(const byte) main::i#0 main::@2/(byte) main::i#1 )
|
||||
(byte) main::j#3 ← phi( main/(const byte) main::j#0 main::@2/(byte) main::j#4 )
|
||||
(byte~) main::$0 ← (const byte[]) TXT#0 *idx (byte) main::j#3
|
||||
*((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte~) main::$0
|
||||
*((const byte*) SCREEN#0 + (byte) main::i#2) ← *((const byte[]) TXT#0 + (byte) main::j#3)
|
||||
(byte) main::j#1 ← ++ (byte) main::j#3
|
||||
if((byte) main::j#1!=(byte/signed byte/word/signed word) 8) goto main::@2
|
||||
to:main::@3
|
||||
@ -648,9 +632,7 @@ main::@return: scope:[main] from main::@2
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::j#3
|
||||
Not culling empty block because it shares successor with its predecessor. (label) main::@3
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::j#3
|
||||
Inlining constant with var siblings (const byte) main::j#0
|
||||
Inlining constant with var siblings (const byte) main::j#0
|
||||
Inlining constant with var siblings (const byte) main::j#0
|
||||
@ -671,8 +653,7 @@ main: scope:[main] from @1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
(byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word) 0 main::@2/(byte) main::i#1 )
|
||||
(byte) main::j#3 ← phi( main/(byte/signed byte/word/signed word) 0 main::@2/(byte) main::j#4 )
|
||||
(byte~) main::$0 ← (const byte[]) TXT#0 *idx (byte) main::j#3
|
||||
*((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte~) main::$0
|
||||
*((const byte*) SCREEN#0 + (byte) main::i#2) ← *((const byte[]) TXT#0 + (byte) main::j#3)
|
||||
(byte) main::j#1 ← ++ (byte) main::j#3
|
||||
if((byte) main::j#1!=(byte/signed byte/word/signed word) 8) goto main::@2
|
||||
to:main::@3
|
||||
@ -700,7 +681,6 @@ FINAL SYMBOL TABLE
|
||||
(byte[]) TXT
|
||||
(const byte[]) TXT#0 = { (byte/signed byte/word/signed word) 3, (byte/signed byte/word/signed word) 1, (byte/signed byte/word/signed word) 13, (byte/signed byte/word/signed word) 5, (byte/signed byte/word/signed word) 12, (byte/signed byte/word/signed word) 15, (byte/signed byte/word/signed word) 20, (byte/signed byte/word/signed word) 32 }
|
||||
(void()) main()
|
||||
(byte~) main::$0
|
||||
(label) main::@1
|
||||
(label) main::@2
|
||||
(label) main::@3
|
||||
@ -729,8 +709,7 @@ main: scope:[main] from @1
|
||||
main::@1: scope:[main] from main main::@5
|
||||
(byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word) 0 main::@5/(byte~) main::i#5 )
|
||||
(byte) main::j#3 ← phi( main/(byte/signed byte/word/signed word) 0 main::@5/(byte~) main::j#5 )
|
||||
(byte~) main::$0 ← (const byte[]) TXT#0 *idx (byte) main::j#3
|
||||
*((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte~) main::$0
|
||||
*((const byte*) SCREEN#0 + (byte) main::i#2) ← *((const byte[]) TXT#0 + (byte) main::j#3)
|
||||
(byte) main::j#1 ← ++ (byte) main::j#3
|
||||
if((byte) main::j#1!=(byte/signed byte/word/signed word) 8) goto main::@6
|
||||
to:main::@3
|
||||
@ -781,34 +760,33 @@ main: scope:[main] from @1
|
||||
main::@1: scope:[main] from main main::@5
|
||||
[5] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word) 0 main::@5/(byte~) main::i#5 ) [ main::j#3 main::i#2 ]
|
||||
[5] (byte) main::j#3 ← phi( main/(byte/signed byte/word/signed word) 0 main::@5/(byte~) main::j#5 ) [ main::j#3 main::i#2 ]
|
||||
[6] (byte~) main::$0 ← (const byte[]) TXT#0 *idx (byte) main::j#3 [ main::j#3 main::i#2 main::$0 ]
|
||||
[7] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte~) main::$0 [ main::j#3 main::i#2 ]
|
||||
[8] (byte) main::j#1 ← ++ (byte) main::j#3 [ main::i#2 main::j#1 ]
|
||||
[9] if((byte) main::j#1!=(byte/signed byte/word/signed word) 8) goto main::@6 [ main::i#2 main::j#1 ]
|
||||
[6] *((const byte*) SCREEN#0 + (byte) main::i#2) ← *((const byte[]) TXT#0 + (byte) main::j#3) [ main::j#3 main::i#2 ]
|
||||
[7] (byte) main::j#1 ← ++ (byte) main::j#3 [ main::i#2 main::j#1 ]
|
||||
[8] if((byte) main::j#1!=(byte/signed byte/word/signed word) 8) goto main::@6 [ main::i#2 main::j#1 ]
|
||||
to:main::@3
|
||||
main::@3: scope:[main] from main::@1
|
||||
[10] phi() [ main::i#2 ]
|
||||
[9] phi() [ main::i#2 ]
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@3 main::@6
|
||||
[11] (byte) main::j#4 ← phi( main::@6/(byte~) main::j#6 main::@3/(byte/signed byte/word/signed word) 0 ) [ main::i#2 main::j#4 ]
|
||||
[12] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::j#4 main::i#1 ]
|
||||
[13] if((byte) main::i#1!=(byte/signed byte/word/signed word) 101) goto main::@5 [ main::j#4 main::i#1 ]
|
||||
[10] (byte) main::j#4 ← phi( main::@6/(byte~) main::j#6 main::@3/(byte/signed byte/word/signed word) 0 ) [ main::i#2 main::j#4 ]
|
||||
[11] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::j#4 main::i#1 ]
|
||||
[12] if((byte) main::i#1!=(byte/signed byte/word/signed word) 101) goto main::@5 [ main::j#4 main::i#1 ]
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@2
|
||||
[14] return [ ]
|
||||
[13] return [ ]
|
||||
to:@return
|
||||
main::@5: scope:[main] from main::@2
|
||||
[15] (byte~) main::j#5 ← (byte) main::j#4 [ main::j#5 main::i#1 ]
|
||||
[16] (byte~) main::i#5 ← (byte) main::i#1 [ main::j#5 main::i#5 ]
|
||||
[14] (byte~) main::j#5 ← (byte) main::j#4 [ main::j#5 main::i#1 ]
|
||||
[15] (byte~) main::i#5 ← (byte) main::i#1 [ main::j#5 main::i#5 ]
|
||||
to:main::@1
|
||||
main::@6: scope:[main] from main::@1
|
||||
[17] (byte~) main::j#6 ← (byte) main::j#1 [ main::i#2 main::j#6 ]
|
||||
[16] (byte~) main::j#6 ← (byte) main::j#1 [ main::i#2 main::j#6 ]
|
||||
to:main::@2
|
||||
|
||||
Created 3 initial phi equivalence classes
|
||||
Coalesced [15] main::j#5 ← main::j#4
|
||||
Coalesced [16] main::i#5 ← main::i#1
|
||||
Coalesced [17] main::j#6 ← main::j#1
|
||||
Coalesced [14] main::j#5 ← main::j#4
|
||||
Coalesced [15] main::i#5 ← main::i#1
|
||||
Coalesced [16] main::j#6 ← main::j#1
|
||||
Coalesced down to 2 phi equivalence classes
|
||||
Culled Empty Block (label) main::@3
|
||||
Culled Empty Block (label) main::@5
|
||||
@ -840,21 +818,20 @@ main: scope:[main] from @1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
[5] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word) 0 main::@2/(byte) main::i#1 ) [ main::j#3 main::i#2 ]
|
||||
[5] (byte) main::j#3 ← phi( main/(byte/signed byte/word/signed word) 0 main::@2/(byte) main::j#4 ) [ main::j#3 main::i#2 ]
|
||||
[6] (byte~) main::$0 ← (const byte[]) TXT#0 *idx (byte) main::j#3 [ main::j#3 main::i#2 main::$0 ]
|
||||
[7] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte~) main::$0 [ main::j#3 main::i#2 ]
|
||||
[8] (byte) main::j#1 ← ++ (byte) main::j#3 [ main::i#2 main::j#1 ]
|
||||
[9] if((byte) main::j#1!=(byte/signed byte/word/signed word) 8) goto main::@6 [ main::i#2 main::j#1 ]
|
||||
[6] *((const byte*) SCREEN#0 + (byte) main::i#2) ← *((const byte[]) TXT#0 + (byte) main::j#3) [ main::j#3 main::i#2 ]
|
||||
[7] (byte) main::j#1 ← ++ (byte) main::j#3 [ main::i#2 main::j#1 ]
|
||||
[8] if((byte) main::j#1!=(byte/signed byte/word/signed word) 8) goto main::@6 [ main::i#2 main::j#1 ]
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1 main::@6
|
||||
[10] (byte) main::j#4 ← phi( main::@6/(byte) main::j#1 main::@1/(byte/signed byte/word/signed word) 0 ) [ main::i#2 main::j#4 ]
|
||||
[11] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::j#4 main::i#1 ]
|
||||
[12] if((byte) main::i#1!=(byte/signed byte/word/signed word) 101) goto main::@1 [ main::j#4 main::i#1 ]
|
||||
[9] (byte) main::j#4 ← phi( main::@6/(byte) main::j#1 main::@1/(byte/signed byte/word/signed word) 0 ) [ main::i#2 main::j#4 ]
|
||||
[10] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::j#4 main::i#1 ]
|
||||
[11] if((byte) main::i#1!=(byte/signed byte/word/signed word) 101) goto main::@1 [ main::j#4 main::i#1 ]
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@2
|
||||
[13] return [ ]
|
||||
[12] return [ ]
|
||||
to:@return
|
||||
main::@6: scope:[main] from main::@1
|
||||
[14] phi() [ main::i#2 main::j#1 ]
|
||||
[13] phi() [ main::i#2 main::j#1 ]
|
||||
to:main::@2
|
||||
|
||||
CONTROL FLOW GRAPH - PHI MEM COALESCED
|
||||
@ -873,21 +850,20 @@ main: scope:[main] from @1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
[5] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word) 0 main::@2/(byte) main::i#1 ) [ main::j#3 main::i#2 ] ( main:2 [ main::j#3 main::i#2 ] )
|
||||
[5] (byte) main::j#3 ← phi( main/(byte/signed byte/word/signed word) 0 main::@2/(byte) main::j#4 ) [ main::j#3 main::i#2 ] ( main:2 [ main::j#3 main::i#2 ] )
|
||||
[6] (byte~) main::$0 ← (const byte[]) TXT#0 *idx (byte) main::j#3 [ main::j#3 main::i#2 main::$0 ] ( main:2 [ main::j#3 main::i#2 main::$0 ] )
|
||||
[7] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte~) main::$0 [ main::j#3 main::i#2 ] ( main:2 [ main::j#3 main::i#2 ] )
|
||||
[8] (byte) main::j#1 ← ++ (byte) main::j#3 [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] )
|
||||
[9] if((byte) main::j#1!=(byte/signed byte/word/signed word) 8) goto main::@6 [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] )
|
||||
[6] *((const byte*) SCREEN#0 + (byte) main::i#2) ← *((const byte[]) TXT#0 + (byte) main::j#3) [ main::j#3 main::i#2 ] ( main:2 [ main::j#3 main::i#2 ] )
|
||||
[7] (byte) main::j#1 ← ++ (byte) main::j#3 [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] )
|
||||
[8] if((byte) main::j#1!=(byte/signed byte/word/signed word) 8) goto main::@6 [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] )
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1 main::@6
|
||||
[10] (byte) main::j#4 ← phi( main::@6/(byte) main::j#1 main::@1/(byte/signed byte/word/signed word) 0 ) [ main::i#2 main::j#4 ] ( main:2 [ main::i#2 main::j#4 ] )
|
||||
[11] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::j#4 main::i#1 ] ( main:2 [ main::j#4 main::i#1 ] )
|
||||
[12] if((byte) main::i#1!=(byte/signed byte/word/signed word) 101) goto main::@1 [ main::j#4 main::i#1 ] ( main:2 [ main::j#4 main::i#1 ] )
|
||||
[9] (byte) main::j#4 ← phi( main::@6/(byte) main::j#1 main::@1/(byte/signed byte/word/signed word) 0 ) [ main::i#2 main::j#4 ] ( main:2 [ main::i#2 main::j#4 ] )
|
||||
[10] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::j#4 main::i#1 ] ( main:2 [ main::j#4 main::i#1 ] )
|
||||
[11] if((byte) main::i#1!=(byte/signed byte/word/signed word) 101) goto main::@1 [ main::j#4 main::i#1 ] ( main:2 [ main::j#4 main::i#1 ] )
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@2
|
||||
[13] return [ ] ( main:2 [ ] )
|
||||
[12] return [ ] ( main:2 [ ] )
|
||||
to:@return
|
||||
main::@6: scope:[main] from main::@1
|
||||
[14] phi() [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] )
|
||||
[13] phi() [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] )
|
||||
to:main::@2
|
||||
|
||||
DOMINATORS
|
||||
@ -916,26 +892,22 @@ VARIABLE REGISTER WEIGHTS
|
||||
(byte*) SCREEN
|
||||
(byte[]) TXT
|
||||
(void()) main()
|
||||
(byte~) main::$0 22.0
|
||||
(byte) main::i
|
||||
(byte) main::i#1 16.5
|
||||
(byte) main::i#2 4.714285714285714
|
||||
(byte) main::i#2 5.5
|
||||
(byte) main::j
|
||||
(byte) main::j#1 11.0
|
||||
(byte) main::j#3 11.0
|
||||
(byte) main::j#3 16.5
|
||||
(byte) main::j#4 7.333333333333333
|
||||
|
||||
Initial phi equivalence classes
|
||||
[ main::j#3 main::j#4 main::j#1 ]
|
||||
[ main::i#2 main::i#1 ]
|
||||
Added variable main::$0 to zero page equivalence class [ main::$0 ]
|
||||
Complete equivalence classes
|
||||
[ main::j#3 main::j#4 main::j#1 ]
|
||||
[ main::i#2 main::i#1 ]
|
||||
[ main::$0 ]
|
||||
Allocated zp ZP_BYTE:2 [ main::j#3 main::j#4 main::j#1 ]
|
||||
Allocated zp ZP_BYTE:3 [ main::i#2 main::i#1 ]
|
||||
Allocated zp ZP_BYTE:4 [ main::$0 ]
|
||||
INITIAL ASM
|
||||
//SEG0 Basic Upstart
|
||||
.pc = $801 "Basic"
|
||||
@ -962,7 +934,6 @@ bend_from_b1:
|
||||
bend:
|
||||
//SEG9 main
|
||||
main: {
|
||||
.label _0 = 4
|
||||
.label j = 2
|
||||
.label i = 3
|
||||
//SEG10 [5] phi from main to main::@1 [phi:main->main::@1]
|
||||
@ -981,60 +952,60 @@ main: {
|
||||
jmp b1
|
||||
//SEG16 main::@1
|
||||
b1:
|
||||
//SEG17 [6] (byte~) main::$0 ← (const byte[]) TXT#0 *idx (byte) main::j#3 [ main::j#3 main::i#2 main::$0 ] ( main:2 [ main::j#3 main::i#2 main::$0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2
|
||||
//SEG17 [6] *((const byte*) SCREEN#0 + (byte) main::i#2) ← *((const byte[]) TXT#0 + (byte) main::j#3) [ main::j#3 main::i#2 ] ( main:2 [ main::j#3 main::i#2 ] ) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz2
|
||||
ldx j
|
||||
lda TXT,x
|
||||
sta _0
|
||||
//SEG18 [7] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte~) main::$0 [ main::j#3 main::i#2 ] ( main:2 [ main::j#3 main::i#2 ] ) -- pbuc1_derefidx_vbuz1=vbuz2
|
||||
lda _0
|
||||
ldx i
|
||||
sta SCREEN,x
|
||||
//SEG19 [8] (byte) main::j#1 ← ++ (byte) main::j#3 [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] ) -- vbuz1=_inc_vbuz1
|
||||
//SEG18 [7] (byte) main::j#1 ← ++ (byte) main::j#3 [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] ) -- vbuz1=_inc_vbuz1
|
||||
inc j
|
||||
//SEG20 [9] if((byte) main::j#1!=(byte/signed byte/word/signed word) 8) goto main::@6 [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] ) -- vbuz1_neq_vbuc1_then_la1
|
||||
//SEG19 [8] if((byte) main::j#1!=(byte/signed byte/word/signed word) 8) goto main::@6 [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] ) -- vbuz1_neq_vbuc1_then_la1
|
||||
lda j
|
||||
cmp #8
|
||||
bne b6_from_b1
|
||||
//SEG21 [10] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
|
||||
//SEG20 [9] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
|
||||
b2_from_b1:
|
||||
//SEG22 [10] phi (byte) main::j#4 = (byte/signed byte/word/signed word) 0 [phi:main::@1->main::@2#0] -- vbuz1=vbuc1
|
||||
//SEG21 [9] phi (byte) main::j#4 = (byte/signed byte/word/signed word) 0 [phi:main::@1->main::@2#0] -- vbuz1=vbuc1
|
||||
lda #0
|
||||
sta j
|
||||
jmp b2
|
||||
//SEG23 main::@2
|
||||
//SEG22 main::@2
|
||||
b2:
|
||||
//SEG24 [11] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::j#4 main::i#1 ] ( main:2 [ main::j#4 main::i#1 ] ) -- vbuz1=_inc_vbuz1
|
||||
//SEG23 [10] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::j#4 main::i#1 ] ( main:2 [ main::j#4 main::i#1 ] ) -- vbuz1=_inc_vbuz1
|
||||
inc i
|
||||
//SEG25 [12] if((byte) main::i#1!=(byte/signed byte/word/signed word) 101) goto main::@1 [ main::j#4 main::i#1 ] ( main:2 [ main::j#4 main::i#1 ] ) -- vbuz1_neq_vbuc1_then_la1
|
||||
//SEG24 [11] if((byte) main::i#1!=(byte/signed byte/word/signed word) 101) goto main::@1 [ main::j#4 main::i#1 ] ( main:2 [ main::j#4 main::i#1 ] ) -- vbuz1_neq_vbuc1_then_la1
|
||||
lda i
|
||||
cmp #$65
|
||||
bne b1_from_b2
|
||||
jmp breturn
|
||||
//SEG26 main::@return
|
||||
//SEG25 main::@return
|
||||
breturn:
|
||||
//SEG27 [13] return [ ] ( main:2 [ ] )
|
||||
//SEG26 [12] return [ ] ( main:2 [ ] )
|
||||
rts
|
||||
//SEG28 [14] phi from main::@1 to main::@6 [phi:main::@1->main::@6]
|
||||
//SEG27 [13] phi from main::@1 to main::@6 [phi:main::@1->main::@6]
|
||||
b6_from_b1:
|
||||
jmp b6
|
||||
//SEG29 main::@6
|
||||
//SEG28 main::@6
|
||||
b6:
|
||||
//SEG30 [10] phi from main::@6 to main::@2 [phi:main::@6->main::@2]
|
||||
//SEG29 [9] phi from main::@6 to main::@2 [phi:main::@6->main::@2]
|
||||
b2_from_b6:
|
||||
//SEG31 [10] phi (byte) main::j#4 = (byte) main::j#1 [phi:main::@6->main::@2#0] -- register_copy
|
||||
//SEG30 [9] phi (byte) main::j#4 = (byte) main::j#1 [phi:main::@6->main::@2#0] -- register_copy
|
||||
jmp b2
|
||||
}
|
||||
|
||||
REGISTER UPLIFT POTENTIAL REGISTERS
|
||||
Potential registers zp ZP_BYTE:2 [ main::j#3 main::j#4 main::j#1 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:3 [ main::i#2 main::i#1 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:4 [ main::$0 ] : zp ZP_BYTE:4 , reg byte a , reg byte x , reg byte y ,
|
||||
Statement [6] *((const byte*) SCREEN#0 + (byte) main::i#2) ← *((const byte[]) TXT#0 + (byte) main::j#3) [ main::j#3 main::i#2 ] ( main:2 [ main::j#3 main::i#2 ] ) always clobbers reg byte a
|
||||
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::j#3 main::j#4 main::j#1 ]
|
||||
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ main::i#2 main::i#1 ]
|
||||
Statement [6] *((const byte*) SCREEN#0 + (byte) main::i#2) ← *((const byte[]) TXT#0 + (byte) main::j#3) [ main::j#3 main::i#2 ] ( main:2 [ main::j#3 main::i#2 ] ) always clobbers reg byte a
|
||||
Potential registers zp ZP_BYTE:2 [ main::j#3 main::j#4 main::j#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:3 [ main::i#2 main::i#1 ] : zp ZP_BYTE:3 , reg byte x , reg byte y ,
|
||||
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [main] 29.33: zp ZP_BYTE:2 [ main::j#3 main::j#4 main::j#1 ] 22: zp ZP_BYTE:4 [ main::$0 ] 21.21: zp ZP_BYTE:3 [ main::i#2 main::i#1 ]
|
||||
Uplift Scope [main] 34.83: zp ZP_BYTE:2 [ main::j#3 main::j#4 main::j#1 ] 22: zp ZP_BYTE:3 [ main::i#2 main::i#1 ]
|
||||
Uplift Scope []
|
||||
|
||||
Uplifting [main] best 483 combination reg byte y [ main::j#3 main::j#4 main::j#1 ] reg byte a [ main::$0 ] reg byte x [ main::i#2 main::i#1 ]
|
||||
Uplifting [main] best 483 combination reg byte y [ main::j#3 main::j#4 main::j#1 ] reg byte x [ main::i#2 main::i#1 ]
|
||||
Uplifting [] best 483 combination
|
||||
|
||||
ASSEMBLER BEFORE OPTIMIZATION
|
||||
@ -1077,40 +1048,39 @@ main: {
|
||||
jmp b1
|
||||
//SEG16 main::@1
|
||||
b1:
|
||||
//SEG17 [6] (byte~) main::$0 ← (const byte[]) TXT#0 *idx (byte) main::j#3 [ main::j#3 main::i#2 main::$0 ] ( main:2 [ main::j#3 main::i#2 main::$0 ] ) -- vbuaa=pbuc1_derefidx_vbuyy
|
||||
//SEG17 [6] *((const byte*) SCREEN#0 + (byte) main::i#2) ← *((const byte[]) TXT#0 + (byte) main::j#3) [ main::j#3 main::i#2 ] ( main:2 [ main::j#3 main::i#2 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuyy
|
||||
lda TXT,y
|
||||
//SEG18 [7] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte~) main::$0 [ main::j#3 main::i#2 ] ( main:2 [ main::j#3 main::i#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa
|
||||
sta SCREEN,x
|
||||
//SEG19 [8] (byte) main::j#1 ← ++ (byte) main::j#3 [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] ) -- vbuyy=_inc_vbuyy
|
||||
//SEG18 [7] (byte) main::j#1 ← ++ (byte) main::j#3 [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] ) -- vbuyy=_inc_vbuyy
|
||||
iny
|
||||
//SEG20 [9] if((byte) main::j#1!=(byte/signed byte/word/signed word) 8) goto main::@6 [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] ) -- vbuyy_neq_vbuc1_then_la1
|
||||
//SEG19 [8] if((byte) main::j#1!=(byte/signed byte/word/signed word) 8) goto main::@6 [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] ) -- vbuyy_neq_vbuc1_then_la1
|
||||
cpy #8
|
||||
bne b6_from_b1
|
||||
//SEG21 [10] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
|
||||
//SEG20 [9] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
|
||||
b2_from_b1:
|
||||
//SEG22 [10] phi (byte) main::j#4 = (byte/signed byte/word/signed word) 0 [phi:main::@1->main::@2#0] -- vbuyy=vbuc1
|
||||
//SEG21 [9] phi (byte) main::j#4 = (byte/signed byte/word/signed word) 0 [phi:main::@1->main::@2#0] -- vbuyy=vbuc1
|
||||
ldy #0
|
||||
jmp b2
|
||||
//SEG23 main::@2
|
||||
//SEG22 main::@2
|
||||
b2:
|
||||
//SEG24 [11] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::j#4 main::i#1 ] ( main:2 [ main::j#4 main::i#1 ] ) -- vbuxx=_inc_vbuxx
|
||||
//SEG23 [10] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::j#4 main::i#1 ] ( main:2 [ main::j#4 main::i#1 ] ) -- vbuxx=_inc_vbuxx
|
||||
inx
|
||||
//SEG25 [12] if((byte) main::i#1!=(byte/signed byte/word/signed word) 101) goto main::@1 [ main::j#4 main::i#1 ] ( main:2 [ main::j#4 main::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1
|
||||
//SEG24 [11] if((byte) main::i#1!=(byte/signed byte/word/signed word) 101) goto main::@1 [ main::j#4 main::i#1 ] ( main:2 [ main::j#4 main::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1
|
||||
cpx #$65
|
||||
bne b1_from_b2
|
||||
jmp breturn
|
||||
//SEG26 main::@return
|
||||
//SEG25 main::@return
|
||||
breturn:
|
||||
//SEG27 [13] return [ ] ( main:2 [ ] )
|
||||
//SEG26 [12] return [ ] ( main:2 [ ] )
|
||||
rts
|
||||
//SEG28 [14] phi from main::@1 to main::@6 [phi:main::@1->main::@6]
|
||||
//SEG27 [13] phi from main::@1 to main::@6 [phi:main::@1->main::@6]
|
||||
b6_from_b1:
|
||||
jmp b6
|
||||
//SEG29 main::@6
|
||||
//SEG28 main::@6
|
||||
b6:
|
||||
//SEG30 [10] phi from main::@6 to main::@2 [phi:main::@6->main::@2]
|
||||
//SEG29 [9] phi from main::@6 to main::@2 [phi:main::@6->main::@2]
|
||||
b2_from_b6:
|
||||
//SEG31 [10] phi (byte) main::j#4 = (byte) main::j#1 [phi:main::@6->main::@2#0] -- register_copy
|
||||
//SEG30 [9] phi (byte) main::j#4 = (byte) main::j#1 [phi:main::@6->main::@2#0] -- register_copy
|
||||
jmp b2
|
||||
}
|
||||
|
||||
@ -1156,22 +1126,20 @@ FINAL SYMBOL TABLE
|
||||
(byte[]) TXT
|
||||
(const byte[]) TXT#0 TXT = { (byte/signed byte/word/signed word) 3, (byte/signed byte/word/signed word) 1, (byte/signed byte/word/signed word) 13, (byte/signed byte/word/signed word) 5, (byte/signed byte/word/signed word) 12, (byte/signed byte/word/signed word) 15, (byte/signed byte/word/signed word) 20, (byte/signed byte/word/signed word) 32 }
|
||||
(void()) main()
|
||||
(byte~) main::$0 reg byte a 22.0
|
||||
(label) main::@1
|
||||
(label) main::@2
|
||||
(label) main::@6
|
||||
(label) main::@return
|
||||
(byte) main::i
|
||||
(byte) main::i#1 reg byte x 16.5
|
||||
(byte) main::i#2 reg byte x 4.714285714285714
|
||||
(byte) main::i#2 reg byte x 5.5
|
||||
(byte) main::j
|
||||
(byte) main::j#1 reg byte y 11.0
|
||||
(byte) main::j#3 reg byte y 11.0
|
||||
(byte) main::j#3 reg byte y 16.5
|
||||
(byte) main::j#4 reg byte y 7.333333333333333
|
||||
|
||||
reg byte y [ main::j#3 main::j#4 main::j#1 ]
|
||||
reg byte x [ main::i#2 main::i#1 ]
|
||||
reg byte a [ main::$0 ]
|
||||
|
||||
FINAL CODE
|
||||
//SEG0 Basic Upstart
|
||||
@ -1201,31 +1169,30 @@ main: {
|
||||
//SEG15 [5] phi (byte) main::j#3 = (byte) main::j#4 [phi:main::@2->main::@1#1] -- register_copy
|
||||
//SEG16 main::@1
|
||||
b1:
|
||||
//SEG17 [6] (byte~) main::$0 ← (const byte[]) TXT#0 *idx (byte) main::j#3 [ main::j#3 main::i#2 main::$0 ] ( main:2 [ main::j#3 main::i#2 main::$0 ] ) -- vbuaa=pbuc1_derefidx_vbuyy
|
||||
//SEG17 [6] *((const byte*) SCREEN#0 + (byte) main::i#2) ← *((const byte[]) TXT#0 + (byte) main::j#3) [ main::j#3 main::i#2 ] ( main:2 [ main::j#3 main::i#2 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuyy
|
||||
lda TXT,y
|
||||
//SEG18 [7] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte~) main::$0 [ main::j#3 main::i#2 ] ( main:2 [ main::j#3 main::i#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa
|
||||
sta SCREEN,x
|
||||
//SEG19 [8] (byte) main::j#1 ← ++ (byte) main::j#3 [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] ) -- vbuyy=_inc_vbuyy
|
||||
//SEG18 [7] (byte) main::j#1 ← ++ (byte) main::j#3 [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] ) -- vbuyy=_inc_vbuyy
|
||||
iny
|
||||
//SEG20 [9] if((byte) main::j#1!=(byte/signed byte/word/signed word) 8) goto main::@6 [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] ) -- vbuyy_neq_vbuc1_then_la1
|
||||
//SEG19 [8] if((byte) main::j#1!=(byte/signed byte/word/signed word) 8) goto main::@6 [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] ) -- vbuyy_neq_vbuc1_then_la1
|
||||
cpy #8
|
||||
bne b2
|
||||
//SEG21 [10] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
|
||||
//SEG22 [10] phi (byte) main::j#4 = (byte/signed byte/word/signed word) 0 [phi:main::@1->main::@2#0] -- vbuyy=vbuc1
|
||||
//SEG20 [9] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
|
||||
//SEG21 [9] phi (byte) main::j#4 = (byte/signed byte/word/signed word) 0 [phi:main::@1->main::@2#0] -- vbuyy=vbuc1
|
||||
ldy #0
|
||||
//SEG23 main::@2
|
||||
//SEG22 main::@2
|
||||
b2:
|
||||
//SEG24 [11] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::j#4 main::i#1 ] ( main:2 [ main::j#4 main::i#1 ] ) -- vbuxx=_inc_vbuxx
|
||||
//SEG23 [10] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::j#4 main::i#1 ] ( main:2 [ main::j#4 main::i#1 ] ) -- vbuxx=_inc_vbuxx
|
||||
inx
|
||||
//SEG25 [12] if((byte) main::i#1!=(byte/signed byte/word/signed word) 101) goto main::@1 [ main::j#4 main::i#1 ] ( main:2 [ main::j#4 main::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1
|
||||
//SEG24 [11] if((byte) main::i#1!=(byte/signed byte/word/signed word) 101) goto main::@1 [ main::j#4 main::i#1 ] ( main:2 [ main::j#4 main::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1
|
||||
cpx #$65
|
||||
bne b1
|
||||
//SEG26 main::@return
|
||||
//SEG27 [13] return [ ] ( main:2 [ ] )
|
||||
//SEG25 main::@return
|
||||
//SEG26 [12] return [ ] ( main:2 [ ] )
|
||||
rts
|
||||
//SEG28 [14] phi from main::@1 to main::@6 [phi:main::@1->main::@6]
|
||||
//SEG29 main::@6
|
||||
//SEG30 [10] phi from main::@6 to main::@2 [phi:main::@6->main::@2]
|
||||
//SEG31 [10] phi (byte) main::j#4 = (byte) main::j#1 [phi:main::@6->main::@2#0] -- register_copy
|
||||
//SEG27 [13] phi from main::@1 to main::@6 [phi:main::@1->main::@6]
|
||||
//SEG28 main::@6
|
||||
//SEG29 [9] phi from main::@6 to main::@2 [phi:main::@6->main::@2]
|
||||
//SEG30 [9] phi (byte) main::j#4 = (byte) main::j#1 [phi:main::@6->main::@2#0] -- register_copy
|
||||
}
|
||||
|
||||
|
@ -6,19 +6,17 @@
|
||||
(byte[]) TXT
|
||||
(const byte[]) TXT#0 TXT = { (byte/signed byte/word/signed word) 3, (byte/signed byte/word/signed word) 1, (byte/signed byte/word/signed word) 13, (byte/signed byte/word/signed word) 5, (byte/signed byte/word/signed word) 12, (byte/signed byte/word/signed word) 15, (byte/signed byte/word/signed word) 20, (byte/signed byte/word/signed word) 32 }
|
||||
(void()) main()
|
||||
(byte~) main::$0 reg byte a 22.0
|
||||
(label) main::@1
|
||||
(label) main::@2
|
||||
(label) main::@6
|
||||
(label) main::@return
|
||||
(byte) main::i
|
||||
(byte) main::i#1 reg byte x 16.5
|
||||
(byte) main::i#2 reg byte x 4.714285714285714
|
||||
(byte) main::i#2 reg byte x 5.5
|
||||
(byte) main::j
|
||||
(byte) main::j#1 reg byte y 11.0
|
||||
(byte) main::j#3 reg byte y 11.0
|
||||
(byte) main::j#3 reg byte y 16.5
|
||||
(byte) main::j#4 reg byte y 7.333333333333333
|
||||
|
||||
reg byte y [ main::j#3 main::j#4 main::j#1 ]
|
||||
reg byte x [ main::i#2 main::i#1 ]
|
||||
reg byte a [ main::$0 ]
|
||||
|
@ -13,19 +13,18 @@ main: scope:[main] from @1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
[5] (byte*) main::cursor#2 ← phi( main/(const byte*) SCREEN#0 main::@2/(byte*) main::cursor#1 ) [ main::i#3 main::cursor#2 ] ( main:2 [ main::i#3 main::cursor#2 ] )
|
||||
[5] (byte) main::i#3 ← phi( main/(byte/signed byte/word/signed word) 0 main::@2/(byte) main::i#4 ) [ main::i#3 main::cursor#2 ] ( main:2 [ main::i#3 main::cursor#2 ] )
|
||||
[6] (byte~) main::$0 ← (const byte[]) TEXT#0 *idx (byte) main::i#3 [ main::i#3 main::cursor#2 main::$0 ] ( main:2 [ main::i#3 main::cursor#2 main::$0 ] )
|
||||
[7] *((byte*) main::cursor#2) ← (byte~) main::$0 [ main::i#3 main::cursor#2 ] ( main:2 [ main::i#3 main::cursor#2 ] )
|
||||
[8] (byte) main::i#1 ← ++ (byte) main::i#3 [ main::cursor#2 main::i#1 ] ( main:2 [ main::cursor#2 main::i#1 ] )
|
||||
[9] if((byte) main::i#1!=(byte/signed byte/word/signed word) 8) goto main::@6 [ main::cursor#2 main::i#1 ] ( main:2 [ main::cursor#2 main::i#1 ] )
|
||||
[6] *((byte*) main::cursor#2) ← *((const byte[]) TEXT#0 + (byte) main::i#3) [ main::i#3 main::cursor#2 ] ( main:2 [ main::i#3 main::cursor#2 ] )
|
||||
[7] (byte) main::i#1 ← ++ (byte) main::i#3 [ main::cursor#2 main::i#1 ] ( main:2 [ main::cursor#2 main::i#1 ] )
|
||||
[8] if((byte) main::i#1!=(byte/signed byte/word/signed word) 8) goto main::@6 [ main::cursor#2 main::i#1 ] ( main:2 [ main::cursor#2 main::i#1 ] )
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1 main::@6
|
||||
[10] (byte) main::i#4 ← phi( main::@6/(byte) main::i#1 main::@1/(byte/signed byte/word/signed word) 0 ) [ main::cursor#2 main::i#4 ] ( main:2 [ main::cursor#2 main::i#4 ] )
|
||||
[11] (byte*) main::cursor#1 ← ++ (byte*) main::cursor#2 [ main::i#4 main::cursor#1 ] ( main:2 [ main::i#4 main::cursor#1 ] )
|
||||
[12] if((byte*) main::cursor#1<(const byte*) SCREEN#0+(word/signed word) 1000) goto main::@1 [ main::i#4 main::cursor#1 ] ( main:2 [ main::i#4 main::cursor#1 ] )
|
||||
[9] (byte) main::i#4 ← phi( main::@6/(byte) main::i#1 main::@1/(byte/signed byte/word/signed word) 0 ) [ main::cursor#2 main::i#4 ] ( main:2 [ main::cursor#2 main::i#4 ] )
|
||||
[10] (byte*) main::cursor#1 ← ++ (byte*) main::cursor#2 [ main::i#4 main::cursor#1 ] ( main:2 [ main::i#4 main::cursor#1 ] )
|
||||
[11] if((byte*) main::cursor#1<(const byte*) SCREEN#0+(word/signed word) 1000) goto main::@1 [ main::i#4 main::cursor#1 ] ( main:2 [ main::i#4 main::cursor#1 ] )
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@2
|
||||
[13] return [ ] ( main:2 [ ] )
|
||||
[12] return [ ] ( main:2 [ ] )
|
||||
to:@return
|
||||
main::@6: scope:[main] from main::@1
|
||||
[14] phi() [ main::cursor#2 main::i#1 ] ( main:2 [ main::cursor#2 main::i#1 ] )
|
||||
[13] phi() [ main::cursor#2 main::i#1 ] ( main:2 [ main::cursor#2 main::i#1 ] )
|
||||
to:main::@2
|
||||
|
@ -21,18 +21,17 @@ proc (void()) main()
|
||||
(byte*) main::cursor ← (byte*) SCREEN
|
||||
(byte) main::i ← (byte/signed byte/word/signed word) 0
|
||||
main::@1:
|
||||
(byte~) main::$0 ← (byte[]) TEXT *idx (byte) main::i
|
||||
*((byte*) main::cursor) ← (byte~) main::$0
|
||||
*((byte*) main::cursor) ← *((byte[]) TEXT + (byte) main::i)
|
||||
(byte) main::i ← ++ (byte) main::i
|
||||
(boolean~) main::$1 ← (byte) main::i == (byte/signed byte/word/signed word) 8
|
||||
(boolean~) main::$2 ← ! (boolean~) main::$1
|
||||
if((boolean~) main::$2) goto main::@2
|
||||
(boolean~) main::$0 ← (byte) main::i == (byte/signed byte/word/signed word) 8
|
||||
(boolean~) main::$1 ← ! (boolean~) main::$0
|
||||
if((boolean~) main::$1) goto main::@2
|
||||
(byte) main::i ← (byte/signed byte/word/signed word) 0
|
||||
main::@2:
|
||||
(byte*) main::cursor ← ++ (byte*) main::cursor
|
||||
(byte*~) main::$3 ← (byte*) SCREEN + (word/signed word) 1000
|
||||
(boolean~) main::$4 ← (byte*) main::cursor < (byte*~) main::$3
|
||||
if((boolean~) main::$4) goto main::@1
|
||||
(byte*~) main::$2 ← (byte*) SCREEN + (word/signed word) 1000
|
||||
(boolean~) main::$3 ← (byte*) main::cursor < (byte*~) main::$2
|
||||
if((boolean~) main::$3) goto main::@1
|
||||
main::@return:
|
||||
return
|
||||
endproc // main()
|
||||
@ -42,11 +41,10 @@ SYMBOLS
|
||||
(byte*) SCREEN
|
||||
(byte[]) TEXT
|
||||
(void()) main()
|
||||
(byte~) main::$0
|
||||
(boolean~) main::$0
|
||||
(boolean~) main::$1
|
||||
(boolean~) main::$2
|
||||
(byte*~) main::$3
|
||||
(boolean~) main::$4
|
||||
(byte*~) main::$2
|
||||
(boolean~) main::$3
|
||||
(label) main::@1
|
||||
(label) main::@2
|
||||
(label) main::@return
|
||||
@ -64,18 +62,17 @@ main: scope:[main] from
|
||||
(byte) main::i ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
(byte~) main::$0 ← (byte[]) TEXT *idx (byte) main::i
|
||||
*((byte*) main::cursor) ← (byte~) main::$0
|
||||
*((byte*) main::cursor) ← *((byte[]) TEXT + (byte) main::i)
|
||||
(byte) main::i ← ++ (byte) main::i
|
||||
(boolean~) main::$1 ← (byte) main::i == (byte/signed byte/word/signed word) 8
|
||||
(boolean~) main::$2 ← ! (boolean~) main::$1
|
||||
if((boolean~) main::$2) goto main::@2
|
||||
(boolean~) main::$0 ← (byte) main::i == (byte/signed byte/word/signed word) 8
|
||||
(boolean~) main::$1 ← ! (boolean~) main::$0
|
||||
if((boolean~) main::$1) goto main::@2
|
||||
to:main::@3
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte*) main::cursor ← ++ (byte*) main::cursor
|
||||
(byte*~) main::$3 ← (byte*) SCREEN + (word/signed word) 1000
|
||||
(boolean~) main::$4 ← (byte*) main::cursor < (byte*~) main::$3
|
||||
if((boolean~) main::$4) goto main::@1
|
||||
(byte*~) main::$2 ← (byte*) SCREEN + (word/signed word) 1000
|
||||
(boolean~) main::$3 ← (byte*) main::cursor < (byte*~) main::$2
|
||||
if((boolean~) main::$3) goto main::@1
|
||||
to:main::@4
|
||||
main::@3: scope:[main] from main::@1
|
||||
(byte) main::i ← (byte/signed byte/word/signed word) 0
|
||||
@ -101,18 +98,17 @@ main: scope:[main] from
|
||||
(byte) main::i ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
(byte~) main::$0 ← (byte[]) TEXT *idx (byte) main::i
|
||||
*((byte*) main::cursor) ← (byte~) main::$0
|
||||
*((byte*) main::cursor) ← *((byte[]) TEXT + (byte) main::i)
|
||||
(byte) main::i ← ++ (byte) main::i
|
||||
(boolean~) main::$1 ← (byte) main::i == (byte/signed byte/word/signed word) 8
|
||||
(boolean~) main::$2 ← ! (boolean~) main::$1
|
||||
if((boolean~) main::$2) goto main::@2
|
||||
(boolean~) main::$0 ← (byte) main::i == (byte/signed byte/word/signed word) 8
|
||||
(boolean~) main::$1 ← ! (boolean~) main::$0
|
||||
if((boolean~) main::$1) goto main::@2
|
||||
to:main::@3
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte*) main::cursor ← ++ (byte*) main::cursor
|
||||
(byte*~) main::$3 ← (byte*) SCREEN + (word/signed word) 1000
|
||||
(boolean~) main::$4 ← (byte*) main::cursor < (byte*~) main::$3
|
||||
if((boolean~) main::$4) goto main::@1
|
||||
(byte*~) main::$2 ← (byte*) SCREEN + (word/signed word) 1000
|
||||
(boolean~) main::$3 ← (byte*) main::cursor < (byte*~) main::$2
|
||||
if((boolean~) main::$3) goto main::@1
|
||||
to:main::@return
|
||||
main::@3: scope:[main] from main::@1
|
||||
(byte) main::i ← (byte/signed byte/word/signed word) 0
|
||||
@ -137,18 +133,17 @@ main: scope:[main] from @1
|
||||
(byte) main::i ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
(byte~) main::$0 ← (byte[]) TEXT *idx (byte) main::i
|
||||
*((byte*) main::cursor) ← (byte~) main::$0
|
||||
*((byte*) main::cursor) ← *((byte[]) TEXT + (byte) main::i)
|
||||
(byte) main::i ← ++ (byte) main::i
|
||||
(boolean~) main::$1 ← (byte) main::i == (byte/signed byte/word/signed word) 8
|
||||
(boolean~) main::$2 ← ! (boolean~) main::$1
|
||||
if((boolean~) main::$2) goto main::@2
|
||||
(boolean~) main::$0 ← (byte) main::i == (byte/signed byte/word/signed word) 8
|
||||
(boolean~) main::$1 ← ! (boolean~) main::$0
|
||||
if((boolean~) main::$1) goto main::@2
|
||||
to:main::@3
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte*) main::cursor ← ++ (byte*) main::cursor
|
||||
(byte*~) main::$3 ← (byte*) SCREEN + (word/signed word) 1000
|
||||
(boolean~) main::$4 ← (byte*) main::cursor < (byte*~) main::$3
|
||||
if((boolean~) main::$4) goto main::@1
|
||||
(byte*~) main::$2 ← (byte*) SCREEN + (word/signed word) 1000
|
||||
(boolean~) main::$3 ← (byte*) main::cursor < (byte*~) main::$2
|
||||
if((boolean~) main::$3) goto main::@1
|
||||
to:main::@return
|
||||
main::@3: scope:[main] from main::@1
|
||||
(byte) main::i ← (byte/signed byte/word/signed word) 0
|
||||
@ -182,12 +177,11 @@ main::@1: scope:[main] from main main::@2
|
||||
(byte*) main::cursor#2 ← phi( main/(byte*) main::cursor#0 main::@2/(byte*) main::cursor#1 )
|
||||
(byte) main::i#3 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#4 )
|
||||
(byte[]) TEXT#1 ← phi( main/(byte[]) TEXT#2 main::@2/(byte[]) TEXT#3 )
|
||||
(byte~) main::$0 ← (byte[]) TEXT#1 *idx (byte) main::i#3
|
||||
*((byte*) main::cursor#2) ← (byte~) main::$0
|
||||
*((byte*) main::cursor#2) ← *((byte[]) TEXT#1 + (byte) main::i#3)
|
||||
(byte) main::i#1 ← ++ (byte) main::i#3
|
||||
(boolean~) main::$1 ← (byte) main::i#1 == (byte/signed byte/word/signed word) 8
|
||||
(boolean~) main::$2 ← ! (boolean~) main::$1
|
||||
if((boolean~) main::$2) goto main::@2
|
||||
(boolean~) main::$0 ← (byte) main::i#1 == (byte/signed byte/word/signed word) 8
|
||||
(boolean~) main::$1 ← ! (boolean~) main::$0
|
||||
if((boolean~) main::$1) goto main::@2
|
||||
to:main::@3
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte) main::i#4 ← phi( main::@1/(byte) main::i#1 main::@3/(byte) main::i#2 )
|
||||
@ -195,9 +189,9 @@ main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte*) SCREEN#2 ← phi( main::@1/(byte*) SCREEN#4 main::@3/(byte*) SCREEN#5 )
|
||||
(byte*) main::cursor#3 ← phi( main::@1/(byte*) main::cursor#2 main::@3/(byte*) main::cursor#4 )
|
||||
(byte*) main::cursor#1 ← ++ (byte*) main::cursor#3
|
||||
(byte*~) main::$3 ← (byte*) SCREEN#2 + (word/signed word) 1000
|
||||
(boolean~) main::$4 ← (byte*) main::cursor#1 < (byte*~) main::$3
|
||||
if((boolean~) main::$4) goto main::@1
|
||||
(byte*~) main::$2 ← (byte*) SCREEN#2 + (word/signed word) 1000
|
||||
(boolean~) main::$3 ← (byte*) main::cursor#1 < (byte*~) main::$2
|
||||
if((boolean~) main::$3) goto main::@1
|
||||
to:main::@return
|
||||
main::@3: scope:[main] from main::@1
|
||||
(byte[]) TEXT#5 ← phi( main::@1/(byte[]) TEXT#1 )
|
||||
@ -233,12 +227,11 @@ main::@1: scope:[main] from main main::@2
|
||||
(byte*) main::cursor#2 ← phi( main/(byte*) main::cursor#0 main::@2/(byte*) main::cursor#1 )
|
||||
(byte) main::i#3 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#4 )
|
||||
(byte[]) TEXT#1 ← phi( main/(byte[]) TEXT#2 main::@2/(byte[]) TEXT#3 )
|
||||
(byte~) main::$0 ← (byte[]) TEXT#1 *idx (byte) main::i#3
|
||||
*((byte*) main::cursor#2) ← (byte~) main::$0
|
||||
*((byte*) main::cursor#2) ← *((byte[]) TEXT#1 + (byte) main::i#3)
|
||||
(byte) main::i#1 ← ++ (byte) main::i#3
|
||||
(boolean~) main::$1 ← (byte) main::i#1 == (byte/signed byte/word/signed word) 8
|
||||
(boolean~) main::$2 ← ! (boolean~) main::$1
|
||||
if((boolean~) main::$2) goto main::@2
|
||||
(boolean~) main::$0 ← (byte) main::i#1 == (byte/signed byte/word/signed word) 8
|
||||
(boolean~) main::$1 ← ! (boolean~) main::$0
|
||||
if((boolean~) main::$1) goto main::@2
|
||||
to:main::@3
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte) main::i#4 ← phi( main::@1/(byte) main::i#1 main::@3/(byte) main::i#2 )
|
||||
@ -246,9 +239,9 @@ main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte*) SCREEN#2 ← phi( main::@1/(byte*) SCREEN#4 main::@3/(byte*) SCREEN#5 )
|
||||
(byte*) main::cursor#3 ← phi( main::@1/(byte*) main::cursor#2 main::@3/(byte*) main::cursor#4 )
|
||||
(byte*) main::cursor#1 ← ++ (byte*) main::cursor#3
|
||||
(byte*~) main::$3 ← (byte*) SCREEN#2 + (word/signed word) 1000
|
||||
(boolean~) main::$4 ← (byte*) main::cursor#1 < (byte*~) main::$3
|
||||
if((boolean~) main::$4) goto main::@1
|
||||
(byte*~) main::$2 ← (byte*) SCREEN#2 + (word/signed word) 1000
|
||||
(boolean~) main::$3 ← (byte*) main::cursor#1 < (byte*~) main::$2
|
||||
if((boolean~) main::$3) goto main::@1
|
||||
to:main::@return
|
||||
main::@3: scope:[main] from main::@1
|
||||
(byte[]) TEXT#5 ← phi( main::@1/(byte[]) TEXT#1 )
|
||||
@ -288,11 +281,10 @@ INITIAL SSA SYMBOL TABLE
|
||||
(byte[]) TEXT#4
|
||||
(byte[]) TEXT#5
|
||||
(void()) main()
|
||||
(byte~) main::$0
|
||||
(boolean~) main::$0
|
||||
(boolean~) main::$1
|
||||
(boolean~) main::$2
|
||||
(byte*~) main::$3
|
||||
(boolean~) main::$4
|
||||
(byte*~) main::$2
|
||||
(boolean~) main::$3
|
||||
(label) main::@1
|
||||
(label) main::@2
|
||||
(label) main::@3
|
||||
@ -328,12 +320,11 @@ main::@1: scope:[main] from main main::@2
|
||||
(byte*) main::cursor#2 ← phi( main/(byte*) main::cursor#0 main::@2/(byte*) main::cursor#1 )
|
||||
(byte) main::i#3 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#4 )
|
||||
(byte[]) TEXT#1 ← phi( main/(byte[]) TEXT#2 main::@2/(byte[]) TEXT#3 )
|
||||
(byte~) main::$0 ← (byte[]) TEXT#1 *idx (byte) main::i#3
|
||||
*((byte*) main::cursor#2) ← (byte~) main::$0
|
||||
*((byte*) main::cursor#2) ← *((byte[]) TEXT#1 + (byte) main::i#3)
|
||||
(byte) main::i#1 ← ++ (byte) main::i#3
|
||||
(boolean~) main::$1 ← (byte) main::i#1 == (byte/signed byte/word/signed word) 8
|
||||
(boolean~) main::$2 ← ! (boolean~) main::$1
|
||||
if((boolean~) main::$2) goto main::@2
|
||||
(boolean~) main::$0 ← (byte) main::i#1 == (byte/signed byte/word/signed word) 8
|
||||
(boolean~) main::$1 ← ! (boolean~) main::$0
|
||||
if((boolean~) main::$1) goto main::@2
|
||||
to:main::@3
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte) main::i#4 ← phi( main::@1/(byte) main::i#1 main::@3/(byte) main::i#2 )
|
||||
@ -341,9 +332,9 @@ main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte*) SCREEN#2 ← phi( main::@1/(byte*) SCREEN#4 main::@3/(byte*) SCREEN#5 )
|
||||
(byte*) main::cursor#3 ← phi( main::@1/(byte*) main::cursor#2 main::@3/(byte*) main::cursor#4 )
|
||||
(byte*) main::cursor#1 ← ++ (byte*) main::cursor#3
|
||||
(byte*~) main::$3 ← (byte*) SCREEN#2 + (word/signed word) 1000
|
||||
(boolean~) main::$4 ← (byte*) main::cursor#1 < (byte*~) main::$3
|
||||
if((boolean~) main::$4) goto main::@1
|
||||
(byte*~) main::$2 ← (byte*) SCREEN#2 + (word/signed word) 1000
|
||||
(boolean~) main::$3 ← (byte*) main::cursor#1 < (byte*~) main::$2
|
||||
if((boolean~) main::$3) goto main::@1
|
||||
to:main::@return
|
||||
main::@3: scope:[main] from main::@1
|
||||
(byte[]) TEXT#5 ← phi( main::@1/(byte[]) TEXT#1 )
|
||||
@ -361,7 +352,7 @@ main::@return: scope:[main] from main::@2
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
|
||||
Inversing boolean not (boolean~) main::$2 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 8 from (boolean~) main::$1 ← (byte) main::i#1 == (byte/signed byte/word/signed word) 8
|
||||
Inversing boolean not (boolean~) main::$1 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 8 from (boolean~) main::$0 ← (byte) main::i#1 == (byte/signed byte/word/signed word) 8
|
||||
Succesful SSA optimization Pass2UnaryNotSimplification
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
@ -379,11 +370,10 @@ main::@1: scope:[main] from main main::@2
|
||||
(byte*) main::cursor#2 ← phi( main/(byte*) main::cursor#0 main::@2/(byte*) main::cursor#1 )
|
||||
(byte) main::i#3 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#4 )
|
||||
(byte[]) TEXT#1 ← phi( main/(byte[]) TEXT#2 main::@2/(byte[]) TEXT#3 )
|
||||
(byte~) main::$0 ← (byte[]) TEXT#1 *idx (byte) main::i#3
|
||||
*((byte*) main::cursor#2) ← (byte~) main::$0
|
||||
*((byte*) main::cursor#2) ← *((byte[]) TEXT#1 + (byte) main::i#3)
|
||||
(byte) main::i#1 ← ++ (byte) main::i#3
|
||||
(boolean~) main::$2 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$2) goto main::@2
|
||||
(boolean~) main::$1 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$1) goto main::@2
|
||||
to:main::@3
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte) main::i#4 ← phi( main::@1/(byte) main::i#1 main::@3/(byte) main::i#2 )
|
||||
@ -391,9 +381,9 @@ main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte*) SCREEN#2 ← phi( main::@1/(byte*) SCREEN#4 main::@3/(byte*) SCREEN#5 )
|
||||
(byte*) main::cursor#3 ← phi( main::@1/(byte*) main::cursor#2 main::@3/(byte*) main::cursor#4 )
|
||||
(byte*) main::cursor#1 ← ++ (byte*) main::cursor#3
|
||||
(byte*~) main::$3 ← (byte*) SCREEN#2 + (word/signed word) 1000
|
||||
(boolean~) main::$4 ← (byte*) main::cursor#1 < (byte*~) main::$3
|
||||
if((boolean~) main::$4) goto main::@1
|
||||
(byte*~) main::$2 ← (byte*) SCREEN#2 + (word/signed word) 1000
|
||||
(boolean~) main::$3 ← (byte*) main::cursor#1 < (byte*~) main::$2
|
||||
if((boolean~) main::$3) goto main::@1
|
||||
to:main::@return
|
||||
main::@3: scope:[main] from main::@1
|
||||
(byte[]) TEXT#5 ← phi( main::@1/(byte[]) TEXT#1 )
|
||||
@ -436,11 +426,10 @@ main::@1: scope:[main] from main main::@2
|
||||
(byte*) main::cursor#2 ← phi( main/(byte*) main::cursor#0 main::@2/(byte*) main::cursor#1 )
|
||||
(byte) main::i#3 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#4 )
|
||||
(byte[]) TEXT#1 ← phi( main/(byte[]) TEXT#2 main::@2/(byte[]) TEXT#3 )
|
||||
(byte~) main::$0 ← (byte[]) TEXT#1 *idx (byte) main::i#3
|
||||
*((byte*) main::cursor#2) ← (byte~) main::$0
|
||||
*((byte*) main::cursor#2) ← *((byte[]) TEXT#1 + (byte) main::i#3)
|
||||
(byte) main::i#1 ← ++ (byte) main::i#3
|
||||
(boolean~) main::$2 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$2) goto main::@2
|
||||
(boolean~) main::$1 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$1) goto main::@2
|
||||
to:main::@3
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte) main::i#4 ← phi( main::@1/(byte) main::i#1 main::@3/(byte) main::i#2 )
|
||||
@ -448,9 +437,9 @@ main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte*) SCREEN#2 ← phi( main::@1/(byte*) SCREEN#4 main::@3/(byte*) SCREEN#4 )
|
||||
(byte*) main::cursor#3 ← phi( main::@1/(byte*) main::cursor#2 main::@3/(byte*) main::cursor#2 )
|
||||
(byte*) main::cursor#1 ← ++ (byte*) main::cursor#3
|
||||
(byte*~) main::$3 ← (byte*) SCREEN#2 + (word/signed word) 1000
|
||||
(boolean~) main::$4 ← (byte*) main::cursor#1 < (byte*~) main::$3
|
||||
if((boolean~) main::$4) goto main::@1
|
||||
(byte*~) main::$2 ← (byte*) SCREEN#2 + (word/signed word) 1000
|
||||
(boolean~) main::$3 ← (byte*) main::cursor#1 < (byte*~) main::$2
|
||||
if((boolean~) main::$3) goto main::@1
|
||||
to:main::@return
|
||||
main::@3: scope:[main] from main::@1
|
||||
(byte) main::i#2 ← (byte/signed byte/word/signed word) 0
|
||||
@ -486,18 +475,17 @@ main::@1: scope:[main] from main main::@2
|
||||
(byte*) main::cursor#2 ← phi( main/(byte*) main::cursor#0 main::@2/(byte*) main::cursor#1 )
|
||||
(byte) main::i#3 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#4 )
|
||||
(byte[]) TEXT#1 ← phi( main/(byte[]) TEXT#2 main::@2/(byte[]) TEXT#1 )
|
||||
(byte~) main::$0 ← (byte[]) TEXT#1 *idx (byte) main::i#3
|
||||
*((byte*) main::cursor#2) ← (byte~) main::$0
|
||||
*((byte*) main::cursor#2) ← *((byte[]) TEXT#1 + (byte) main::i#3)
|
||||
(byte) main::i#1 ← ++ (byte) main::i#3
|
||||
(boolean~) main::$2 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$2) goto main::@2
|
||||
(boolean~) main::$1 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$1) goto main::@2
|
||||
to:main::@3
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte) main::i#4 ← phi( main::@1/(byte) main::i#1 main::@3/(byte) main::i#2 )
|
||||
(byte*) main::cursor#1 ← ++ (byte*) main::cursor#2
|
||||
(byte*~) main::$3 ← (byte*) SCREEN#2 + (word/signed word) 1000
|
||||
(boolean~) main::$4 ← (byte*) main::cursor#1 < (byte*~) main::$3
|
||||
if((boolean~) main::$4) goto main::@1
|
||||
(byte*~) main::$2 ← (byte*) SCREEN#2 + (word/signed word) 1000
|
||||
(boolean~) main::$3 ← (byte*) main::cursor#1 < (byte*~) main::$2
|
||||
if((boolean~) main::$3) goto main::@1
|
||||
to:main::@return
|
||||
main::@3: scope:[main] from main::@1
|
||||
(byte) main::i#2 ← (byte/signed byte/word/signed word) 0
|
||||
@ -532,18 +520,17 @@ main::@1: scope:[main] from main main::@2
|
||||
(byte*) main::cursor#2 ← phi( main/(byte*) main::cursor#0 main::@2/(byte*) main::cursor#1 )
|
||||
(byte) main::i#3 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#4 )
|
||||
(byte[]) TEXT#1 ← phi( main/(byte[]) TEXT#2 )
|
||||
(byte~) main::$0 ← (byte[]) TEXT#1 *idx (byte) main::i#3
|
||||
*((byte*) main::cursor#2) ← (byte~) main::$0
|
||||
*((byte*) main::cursor#2) ← *((byte[]) TEXT#1 + (byte) main::i#3)
|
||||
(byte) main::i#1 ← ++ (byte) main::i#3
|
||||
(boolean~) main::$2 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$2) goto main::@2
|
||||
(boolean~) main::$1 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$1) goto main::@2
|
||||
to:main::@3
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte) main::i#4 ← phi( main::@1/(byte) main::i#1 main::@3/(byte) main::i#2 )
|
||||
(byte*) main::cursor#1 ← ++ (byte*) main::cursor#2
|
||||
(byte*~) main::$3 ← (byte*) SCREEN#2 + (word/signed word) 1000
|
||||
(boolean~) main::$4 ← (byte*) main::cursor#1 < (byte*~) main::$3
|
||||
if((boolean~) main::$4) goto main::@1
|
||||
(byte*~) main::$2 ← (byte*) SCREEN#2 + (word/signed word) 1000
|
||||
(boolean~) main::$3 ← (byte*) main::cursor#1 < (byte*~) main::$2
|
||||
if((boolean~) main::$3) goto main::@1
|
||||
to:main::@return
|
||||
main::@3: scope:[main] from main::@1
|
||||
(byte) main::i#2 ← (byte/signed byte/word/signed word) 0
|
||||
@ -573,18 +560,17 @@ main: scope:[main] from @1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
(byte*) main::cursor#2 ← phi( main/(byte*) main::cursor#0 main::@2/(byte*) main::cursor#1 )
|
||||
(byte) main::i#3 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#4 )
|
||||
(byte~) main::$0 ← (byte[]) TEXT#0 *idx (byte) main::i#3
|
||||
*((byte*) main::cursor#2) ← (byte~) main::$0
|
||||
*((byte*) main::cursor#2) ← *((byte[]) TEXT#0 + (byte) main::i#3)
|
||||
(byte) main::i#1 ← ++ (byte) main::i#3
|
||||
(boolean~) main::$2 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$2) goto main::@2
|
||||
(boolean~) main::$1 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 8
|
||||
if((boolean~) main::$1) goto main::@2
|
||||
to:main::@3
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte) main::i#4 ← phi( main::@1/(byte) main::i#1 main::@3/(byte) main::i#2 )
|
||||
(byte*) main::cursor#1 ← ++ (byte*) main::cursor#2
|
||||
(byte*~) main::$3 ← (byte*) SCREEN#0 + (word/signed word) 1000
|
||||
(boolean~) main::$4 ← (byte*) main::cursor#1 < (byte*~) main::$3
|
||||
if((boolean~) main::$4) goto main::@1
|
||||
(byte*~) main::$2 ← (byte*) SCREEN#0 + (word/signed word) 1000
|
||||
(boolean~) main::$3 ← (byte*) main::cursor#1 < (byte*~) main::$2
|
||||
if((boolean~) main::$3) goto main::@1
|
||||
to:main::@return
|
||||
main::@3: scope:[main] from main::@1
|
||||
(byte) main::i#2 ← (byte/signed byte/word/signed word) 0
|
||||
@ -597,8 +583,8 @@ main::@return: scope:[main] from main::@2
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
|
||||
Simple Condition (boolean~) main::$2 if((byte) main::i#1!=(byte/signed byte/word/signed word) 8) goto main::@2
|
||||
Simple Condition (boolean~) main::$4 if((byte*) main::cursor#1<(byte*~) main::$3) goto main::@1
|
||||
Simple Condition (boolean~) main::$1 if((byte) main::i#1!=(byte/signed byte/word/signed word) 8) goto main::@2
|
||||
Simple Condition (boolean~) main::$3 if((byte*) main::cursor#1<(byte*~) main::$2) goto main::@1
|
||||
Succesful SSA optimization Pass2ConditionalJumpSimplification
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
@ -612,16 +598,15 @@ main: scope:[main] from @1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
(byte*) main::cursor#2 ← phi( main/(byte*) main::cursor#0 main::@2/(byte*) main::cursor#1 )
|
||||
(byte) main::i#3 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#4 )
|
||||
(byte~) main::$0 ← (byte[]) TEXT#0 *idx (byte) main::i#3
|
||||
*((byte*) main::cursor#2) ← (byte~) main::$0
|
||||
*((byte*) main::cursor#2) ← *((byte[]) TEXT#0 + (byte) main::i#3)
|
||||
(byte) main::i#1 ← ++ (byte) main::i#3
|
||||
if((byte) main::i#1!=(byte/signed byte/word/signed word) 8) goto main::@2
|
||||
to:main::@3
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte) main::i#4 ← phi( main::@1/(byte) main::i#1 main::@3/(byte) main::i#2 )
|
||||
(byte*) main::cursor#1 ← ++ (byte*) main::cursor#2
|
||||
(byte*~) main::$3 ← (byte*) SCREEN#0 + (word/signed word) 1000
|
||||
if((byte*) main::cursor#1<(byte*~) main::$3) goto main::@1
|
||||
(byte*~) main::$2 ← (byte*) SCREEN#0 + (word/signed word) 1000
|
||||
if((byte*) main::cursor#1<(byte*~) main::$2) goto main::@1
|
||||
to:main::@return
|
||||
main::@3: scope:[main] from main::@1
|
||||
(byte) main::i#2 ← (byte/signed byte/word/signed word) 0
|
||||
@ -648,16 +633,15 @@ main: scope:[main] from @1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
(byte*) main::cursor#2 ← phi( main/(byte*) main::cursor#0 main::@2/(byte*) main::cursor#1 )
|
||||
(byte) main::i#3 ← phi( main/(const byte) main::i#0 main::@2/(byte) main::i#4 )
|
||||
(byte~) main::$0 ← (const byte[]) TEXT#0 *idx (byte) main::i#3
|
||||
*((byte*) main::cursor#2) ← (byte~) main::$0
|
||||
*((byte*) main::cursor#2) ← *((const byte[]) TEXT#0 + (byte) main::i#3)
|
||||
(byte) main::i#1 ← ++ (byte) main::i#3
|
||||
if((byte) main::i#1!=(byte/signed byte/word/signed word) 8) goto main::@2
|
||||
to:main::@3
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte) main::i#4 ← phi( main::@1/(byte) main::i#1 main::@3/(const byte) main::i#2 )
|
||||
(byte*) main::cursor#1 ← ++ (byte*) main::cursor#2
|
||||
(byte*~) main::$3 ← (const byte*) SCREEN#0 + (word/signed word) 1000
|
||||
if((byte*) main::cursor#1<(byte*~) main::$3) goto main::@1
|
||||
(byte*~) main::$2 ← (const byte*) SCREEN#0 + (word/signed word) 1000
|
||||
if((byte*) main::cursor#1<(byte*~) main::$2) goto main::@1
|
||||
to:main::@return
|
||||
main::@3: scope:[main] from main::@1
|
||||
to:main::@2
|
||||
@ -670,7 +654,7 @@ main::@return: scope:[main] from main::@2
|
||||
@end: scope:[] from @1
|
||||
|
||||
Constant (const byte*) main::cursor#0 = SCREEN#0
|
||||
Constant (const byte*) main::$3 = SCREEN#0+1000
|
||||
Constant (const byte*) main::$2 = SCREEN#0+1000
|
||||
Succesful SSA optimization Pass2ConstantIdentification
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
@ -680,15 +664,14 @@ main: scope:[main] from @1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
(byte*) main::cursor#2 ← phi( main/(const byte*) main::cursor#0 main::@2/(byte*) main::cursor#1 )
|
||||
(byte) main::i#3 ← phi( main/(const byte) main::i#0 main::@2/(byte) main::i#4 )
|
||||
(byte~) main::$0 ← (const byte[]) TEXT#0 *idx (byte) main::i#3
|
||||
*((byte*) main::cursor#2) ← (byte~) main::$0
|
||||
*((byte*) main::cursor#2) ← *((const byte[]) TEXT#0 + (byte) main::i#3)
|
||||
(byte) main::i#1 ← ++ (byte) main::i#3
|
||||
if((byte) main::i#1!=(byte/signed byte/word/signed word) 8) goto main::@2
|
||||
to:main::@3
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
(byte) main::i#4 ← phi( main::@1/(byte) main::i#1 main::@3/(const byte) main::i#2 )
|
||||
(byte*) main::cursor#1 ← ++ (byte*) main::cursor#2
|
||||
if((byte*) main::cursor#1<(const byte*) main::$3) goto main::@1
|
||||
if((byte*) main::cursor#1<(const byte*) main::$2) goto main::@1
|
||||
to:main::@return
|
||||
main::@3: scope:[main] from main::@1
|
||||
to:main::@2
|
||||
@ -700,9 +683,7 @@ main::@return: scope:[main] from main::@2
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#3
|
||||
Not culling empty block because it shares successor with its predecessor. (label) main::@3
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#3
|
||||
Inlining constant with var siblings (const byte) main::i#0
|
||||
Inlining constant with var siblings (const byte) main::i#0
|
||||
Inlining constant with var siblings (const byte) main::i#0
|
||||
@ -712,8 +693,8 @@ Inlining constant with var siblings (const byte) main::i#2
|
||||
Inlining constant with var siblings (const byte*) main::cursor#0
|
||||
Inlining constant with var siblings (const byte*) main::cursor#0
|
||||
Constant inlined main::i#0 = (byte/signed byte/word/signed word) 0
|
||||
Constant inlined main::$3 = (const byte*) SCREEN#0+(word/signed word) 1000
|
||||
Constant inlined main::i#2 = (byte/signed byte/word/signed word) 0
|
||||
Constant inlined main::$2 = (const byte*) SCREEN#0+(word/signed word) 1000
|
||||
Constant inlined main::cursor#0 = (const byte*) SCREEN#0
|
||||
Succesful SSA optimization Pass2ConstantInlining
|
||||
CONTROL FLOW GRAPH
|
||||
@ -724,8 +705,7 @@ main: scope:[main] from @1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
(byte*) main::cursor#2 ← phi( main/(const byte*) SCREEN#0 main::@2/(byte*) main::cursor#1 )
|
||||
(byte) main::i#3 ← phi( main/(byte/signed byte/word/signed word) 0 main::@2/(byte) main::i#4 )
|
||||
(byte~) main::$0 ← (const byte[]) TEXT#0 *idx (byte) main::i#3
|
||||
*((byte*) main::cursor#2) ← (byte~) main::$0
|
||||
*((byte*) main::cursor#2) ← *((const byte[]) TEXT#0 + (byte) main::i#3)
|
||||
(byte) main::i#1 ← ++ (byte) main::i#3
|
||||
if((byte) main::i#1!=(byte/signed byte/word/signed word) 8) goto main::@2
|
||||
to:main::@3
|
||||
@ -753,7 +733,6 @@ FINAL SYMBOL TABLE
|
||||
(byte[]) TEXT
|
||||
(const byte[]) TEXT#0 = (string) "camelot "
|
||||
(void()) main()
|
||||
(byte~) main::$0
|
||||
(label) main::@1
|
||||
(label) main::@2
|
||||
(label) main::@3
|
||||
@ -782,8 +761,7 @@ main: scope:[main] from @1
|
||||
main::@1: scope:[main] from main main::@5
|
||||
(byte*) main::cursor#2 ← phi( main/(const byte*) SCREEN#0 main::@5/(byte*~) main::cursor#5 )
|
||||
(byte) main::i#3 ← phi( main/(byte/signed byte/word/signed word) 0 main::@5/(byte~) main::i#5 )
|
||||
(byte~) main::$0 ← (const byte[]) TEXT#0 *idx (byte) main::i#3
|
||||
*((byte*) main::cursor#2) ← (byte~) main::$0
|
||||
*((byte*) main::cursor#2) ← *((const byte[]) TEXT#0 + (byte) main::i#3)
|
||||
(byte) main::i#1 ← ++ (byte) main::i#3
|
||||
if((byte) main::i#1!=(byte/signed byte/word/signed word) 8) goto main::@6
|
||||
to:main::@3
|
||||
@ -834,34 +812,33 @@ main: scope:[main] from @1
|
||||
main::@1: scope:[main] from main main::@5
|
||||
[5] (byte*) main::cursor#2 ← phi( main/(const byte*) SCREEN#0 main::@5/(byte*~) main::cursor#5 ) [ main::i#3 main::cursor#2 ]
|
||||
[5] (byte) main::i#3 ← phi( main/(byte/signed byte/word/signed word) 0 main::@5/(byte~) main::i#5 ) [ main::i#3 main::cursor#2 ]
|
||||
[6] (byte~) main::$0 ← (const byte[]) TEXT#0 *idx (byte) main::i#3 [ main::i#3 main::cursor#2 main::$0 ]
|
||||
[7] *((byte*) main::cursor#2) ← (byte~) main::$0 [ main::i#3 main::cursor#2 ]
|
||||
[8] (byte) main::i#1 ← ++ (byte) main::i#3 [ main::cursor#2 main::i#1 ]
|
||||
[9] if((byte) main::i#1!=(byte/signed byte/word/signed word) 8) goto main::@6 [ main::cursor#2 main::i#1 ]
|
||||
[6] *((byte*) main::cursor#2) ← *((const byte[]) TEXT#0 + (byte) main::i#3) [ main::i#3 main::cursor#2 ]
|
||||
[7] (byte) main::i#1 ← ++ (byte) main::i#3 [ main::cursor#2 main::i#1 ]
|
||||
[8] if((byte) main::i#1!=(byte/signed byte/word/signed word) 8) goto main::@6 [ main::cursor#2 main::i#1 ]
|
||||
to:main::@3
|
||||
main::@3: scope:[main] from main::@1
|
||||
[10] phi() [ main::cursor#2 ]
|
||||
[9] phi() [ main::cursor#2 ]
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@3 main::@6
|
||||
[11] (byte) main::i#4 ← phi( main::@6/(byte~) main::i#6 main::@3/(byte/signed byte/word/signed word) 0 ) [ main::cursor#2 main::i#4 ]
|
||||
[12] (byte*) main::cursor#1 ← ++ (byte*) main::cursor#2 [ main::i#4 main::cursor#1 ]
|
||||
[13] if((byte*) main::cursor#1<(const byte*) SCREEN#0+(word/signed word) 1000) goto main::@5 [ main::i#4 main::cursor#1 ]
|
||||
[10] (byte) main::i#4 ← phi( main::@6/(byte~) main::i#6 main::@3/(byte/signed byte/word/signed word) 0 ) [ main::cursor#2 main::i#4 ]
|
||||
[11] (byte*) main::cursor#1 ← ++ (byte*) main::cursor#2 [ main::i#4 main::cursor#1 ]
|
||||
[12] if((byte*) main::cursor#1<(const byte*) SCREEN#0+(word/signed word) 1000) goto main::@5 [ main::i#4 main::cursor#1 ]
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@2
|
||||
[14] return [ ]
|
||||
[13] return [ ]
|
||||
to:@return
|
||||
main::@5: scope:[main] from main::@2
|
||||
[15] (byte~) main::i#5 ← (byte) main::i#4 [ main::i#5 main::cursor#1 ]
|
||||
[16] (byte*~) main::cursor#5 ← (byte*) main::cursor#1 [ main::i#5 main::cursor#5 ]
|
||||
[14] (byte~) main::i#5 ← (byte) main::i#4 [ main::i#5 main::cursor#1 ]
|
||||
[15] (byte*~) main::cursor#5 ← (byte*) main::cursor#1 [ main::i#5 main::cursor#5 ]
|
||||
to:main::@1
|
||||
main::@6: scope:[main] from main::@1
|
||||
[17] (byte~) main::i#6 ← (byte) main::i#1 [ main::cursor#2 main::i#6 ]
|
||||
[16] (byte~) main::i#6 ← (byte) main::i#1 [ main::cursor#2 main::i#6 ]
|
||||
to:main::@2
|
||||
|
||||
Created 3 initial phi equivalence classes
|
||||
Coalesced [15] main::i#5 ← main::i#4
|
||||
Coalesced [16] main::cursor#5 ← main::cursor#1
|
||||
Coalesced [17] main::i#6 ← main::i#1
|
||||
Coalesced [14] main::i#5 ← main::i#4
|
||||
Coalesced [15] main::cursor#5 ← main::cursor#1
|
||||
Coalesced [16] main::i#6 ← main::i#1
|
||||
Coalesced down to 2 phi equivalence classes
|
||||
Culled Empty Block (label) main::@3
|
||||
Culled Empty Block (label) main::@5
|
||||
@ -893,21 +870,20 @@ main: scope:[main] from @1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
[5] (byte*) main::cursor#2 ← phi( main/(const byte*) SCREEN#0 main::@2/(byte*) main::cursor#1 ) [ main::i#3 main::cursor#2 ]
|
||||
[5] (byte) main::i#3 ← phi( main/(byte/signed byte/word/signed word) 0 main::@2/(byte) main::i#4 ) [ main::i#3 main::cursor#2 ]
|
||||
[6] (byte~) main::$0 ← (const byte[]) TEXT#0 *idx (byte) main::i#3 [ main::i#3 main::cursor#2 main::$0 ]
|
||||
[7] *((byte*) main::cursor#2) ← (byte~) main::$0 [ main::i#3 main::cursor#2 ]
|
||||
[8] (byte) main::i#1 ← ++ (byte) main::i#3 [ main::cursor#2 main::i#1 ]
|
||||
[9] if((byte) main::i#1!=(byte/signed byte/word/signed word) 8) goto main::@6 [ main::cursor#2 main::i#1 ]
|
||||
[6] *((byte*) main::cursor#2) ← *((const byte[]) TEXT#0 + (byte) main::i#3) [ main::i#3 main::cursor#2 ]
|
||||
[7] (byte) main::i#1 ← ++ (byte) main::i#3 [ main::cursor#2 main::i#1 ]
|
||||
[8] if((byte) main::i#1!=(byte/signed byte/word/signed word) 8) goto main::@6 [ main::cursor#2 main::i#1 ]
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1 main::@6
|
||||
[10] (byte) main::i#4 ← phi( main::@6/(byte) main::i#1 main::@1/(byte/signed byte/word/signed word) 0 ) [ main::cursor#2 main::i#4 ]
|
||||
[11] (byte*) main::cursor#1 ← ++ (byte*) main::cursor#2 [ main::i#4 main::cursor#1 ]
|
||||
[12] if((byte*) main::cursor#1<(const byte*) SCREEN#0+(word/signed word) 1000) goto main::@1 [ main::i#4 main::cursor#1 ]
|
||||
[9] (byte) main::i#4 ← phi( main::@6/(byte) main::i#1 main::@1/(byte/signed byte/word/signed word) 0 ) [ main::cursor#2 main::i#4 ]
|
||||
[10] (byte*) main::cursor#1 ← ++ (byte*) main::cursor#2 [ main::i#4 main::cursor#1 ]
|
||||
[11] if((byte*) main::cursor#1<(const byte*) SCREEN#0+(word/signed word) 1000) goto main::@1 [ main::i#4 main::cursor#1 ]
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@2
|
||||
[13] return [ ]
|
||||
[12] return [ ]
|
||||
to:@return
|
||||
main::@6: scope:[main] from main::@1
|
||||
[14] phi() [ main::cursor#2 main::i#1 ]
|
||||
[13] phi() [ main::cursor#2 main::i#1 ]
|
||||
to:main::@2
|
||||
|
||||
CONTROL FLOW GRAPH - PHI MEM COALESCED
|
||||
@ -926,21 +902,20 @@ main: scope:[main] from @1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
[5] (byte*) main::cursor#2 ← phi( main/(const byte*) SCREEN#0 main::@2/(byte*) main::cursor#1 ) [ main::i#3 main::cursor#2 ] ( main:2 [ main::i#3 main::cursor#2 ] )
|
||||
[5] (byte) main::i#3 ← phi( main/(byte/signed byte/word/signed word) 0 main::@2/(byte) main::i#4 ) [ main::i#3 main::cursor#2 ] ( main:2 [ main::i#3 main::cursor#2 ] )
|
||||
[6] (byte~) main::$0 ← (const byte[]) TEXT#0 *idx (byte) main::i#3 [ main::i#3 main::cursor#2 main::$0 ] ( main:2 [ main::i#3 main::cursor#2 main::$0 ] )
|
||||
[7] *((byte*) main::cursor#2) ← (byte~) main::$0 [ main::i#3 main::cursor#2 ] ( main:2 [ main::i#3 main::cursor#2 ] )
|
||||
[8] (byte) main::i#1 ← ++ (byte) main::i#3 [ main::cursor#2 main::i#1 ] ( main:2 [ main::cursor#2 main::i#1 ] )
|
||||
[9] if((byte) main::i#1!=(byte/signed byte/word/signed word) 8) goto main::@6 [ main::cursor#2 main::i#1 ] ( main:2 [ main::cursor#2 main::i#1 ] )
|
||||
[6] *((byte*) main::cursor#2) ← *((const byte[]) TEXT#0 + (byte) main::i#3) [ main::i#3 main::cursor#2 ] ( main:2 [ main::i#3 main::cursor#2 ] )
|
||||
[7] (byte) main::i#1 ← ++ (byte) main::i#3 [ main::cursor#2 main::i#1 ] ( main:2 [ main::cursor#2 main::i#1 ] )
|
||||
[8] if((byte) main::i#1!=(byte/signed byte/word/signed word) 8) goto main::@6 [ main::cursor#2 main::i#1 ] ( main:2 [ main::cursor#2 main::i#1 ] )
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1 main::@6
|
||||
[10] (byte) main::i#4 ← phi( main::@6/(byte) main::i#1 main::@1/(byte/signed byte/word/signed word) 0 ) [ main::cursor#2 main::i#4 ] ( main:2 [ main::cursor#2 main::i#4 ] )
|
||||
[11] (byte*) main::cursor#1 ← ++ (byte*) main::cursor#2 [ main::i#4 main::cursor#1 ] ( main:2 [ main::i#4 main::cursor#1 ] )
|
||||
[12] if((byte*) main::cursor#1<(const byte*) SCREEN#0+(word/signed word) 1000) goto main::@1 [ main::i#4 main::cursor#1 ] ( main:2 [ main::i#4 main::cursor#1 ] )
|
||||
[9] (byte) main::i#4 ← phi( main::@6/(byte) main::i#1 main::@1/(byte/signed byte/word/signed word) 0 ) [ main::cursor#2 main::i#4 ] ( main:2 [ main::cursor#2 main::i#4 ] )
|
||||
[10] (byte*) main::cursor#1 ← ++ (byte*) main::cursor#2 [ main::i#4 main::cursor#1 ] ( main:2 [ main::i#4 main::cursor#1 ] )
|
||||
[11] if((byte*) main::cursor#1<(const byte*) SCREEN#0+(word/signed word) 1000) goto main::@1 [ main::i#4 main::cursor#1 ] ( main:2 [ main::i#4 main::cursor#1 ] )
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@2
|
||||
[13] return [ ] ( main:2 [ ] )
|
||||
[12] return [ ] ( main:2 [ ] )
|
||||
to:@return
|
||||
main::@6: scope:[main] from main::@1
|
||||
[14] phi() [ main::cursor#2 main::i#1 ] ( main:2 [ main::cursor#2 main::i#1 ] )
|
||||
[13] phi() [ main::cursor#2 main::i#1 ] ( main:2 [ main::cursor#2 main::i#1 ] )
|
||||
to:main::@2
|
||||
|
||||
DOMINATORS
|
||||
@ -969,26 +944,22 @@ VARIABLE REGISTER WEIGHTS
|
||||
(byte*) SCREEN
|
||||
(byte[]) TEXT
|
||||
(void()) main()
|
||||
(byte~) main::$0 22.0
|
||||
(byte*) main::cursor
|
||||
(byte*) main::cursor#1 16.5
|
||||
(byte*) main::cursor#2 4.714285714285714
|
||||
(byte*) main::cursor#2 5.5
|
||||
(byte) main::i
|
||||
(byte) main::i#1 11.0
|
||||
(byte) main::i#3 11.0
|
||||
(byte) main::i#3 16.5
|
||||
(byte) main::i#4 7.333333333333333
|
||||
|
||||
Initial phi equivalence classes
|
||||
[ main::i#3 main::i#4 main::i#1 ]
|
||||
[ main::cursor#2 main::cursor#1 ]
|
||||
Added variable main::$0 to zero page equivalence class [ main::$0 ]
|
||||
Complete equivalence classes
|
||||
[ main::i#3 main::i#4 main::i#1 ]
|
||||
[ main::cursor#2 main::cursor#1 ]
|
||||
[ main::$0 ]
|
||||
Allocated zp ZP_BYTE:2 [ main::i#3 main::i#4 main::i#1 ]
|
||||
Allocated zp ZP_WORD:3 [ main::cursor#2 main::cursor#1 ]
|
||||
Allocated zp ZP_BYTE:5 [ main::$0 ]
|
||||
INITIAL ASM
|
||||
//SEG0 Basic Upstart
|
||||
.pc = $801 "Basic"
|
||||
@ -1015,7 +986,6 @@ bend_from_b1:
|
||||
bend:
|
||||
//SEG9 main
|
||||
main: {
|
||||
.label _0 = 5
|
||||
.label i = 2
|
||||
.label cursor = 3
|
||||
//SEG10 [5] phi from main to main::@1 [phi:main->main::@1]
|
||||
@ -1036,34 +1006,31 @@ main: {
|
||||
jmp b1
|
||||
//SEG16 main::@1
|
||||
b1:
|
||||
//SEG17 [6] (byte~) main::$0 ← (const byte[]) TEXT#0 *idx (byte) main::i#3 [ main::i#3 main::cursor#2 main::$0 ] ( main:2 [ main::i#3 main::cursor#2 main::$0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2
|
||||
//SEG17 [6] *((byte*) main::cursor#2) ← *((const byte[]) TEXT#0 + (byte) main::i#3) [ main::i#3 main::cursor#2 ] ( main:2 [ main::i#3 main::cursor#2 ] ) -- _deref_pbuz1=pbuc1_derefidx_vbuz2
|
||||
ldx i
|
||||
lda TEXT,x
|
||||
sta _0
|
||||
//SEG18 [7] *((byte*) main::cursor#2) ← (byte~) main::$0 [ main::i#3 main::cursor#2 ] ( main:2 [ main::i#3 main::cursor#2 ] ) -- _deref_pbuz1=vbuz2
|
||||
ldy #0
|
||||
lda _0
|
||||
sta (cursor),y
|
||||
//SEG19 [8] (byte) main::i#1 ← ++ (byte) main::i#3 [ main::cursor#2 main::i#1 ] ( main:2 [ main::cursor#2 main::i#1 ] ) -- vbuz1=_inc_vbuz1
|
||||
//SEG18 [7] (byte) main::i#1 ← ++ (byte) main::i#3 [ main::cursor#2 main::i#1 ] ( main:2 [ main::cursor#2 main::i#1 ] ) -- vbuz1=_inc_vbuz1
|
||||
inc i
|
||||
//SEG20 [9] if((byte) main::i#1!=(byte/signed byte/word/signed word) 8) goto main::@6 [ main::cursor#2 main::i#1 ] ( main:2 [ main::cursor#2 main::i#1 ] ) -- vbuz1_neq_vbuc1_then_la1
|
||||
//SEG19 [8] if((byte) main::i#1!=(byte/signed byte/word/signed word) 8) goto main::@6 [ main::cursor#2 main::i#1 ] ( main:2 [ main::cursor#2 main::i#1 ] ) -- vbuz1_neq_vbuc1_then_la1
|
||||
lda i
|
||||
cmp #8
|
||||
bne b6_from_b1
|
||||
//SEG21 [10] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
|
||||
//SEG20 [9] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
|
||||
b2_from_b1:
|
||||
//SEG22 [10] phi (byte) main::i#4 = (byte/signed byte/word/signed word) 0 [phi:main::@1->main::@2#0] -- vbuz1=vbuc1
|
||||
//SEG21 [9] phi (byte) main::i#4 = (byte/signed byte/word/signed word) 0 [phi:main::@1->main::@2#0] -- vbuz1=vbuc1
|
||||
lda #0
|
||||
sta i
|
||||
jmp b2
|
||||
//SEG23 main::@2
|
||||
//SEG22 main::@2
|
||||
b2:
|
||||
//SEG24 [11] (byte*) main::cursor#1 ← ++ (byte*) main::cursor#2 [ main::i#4 main::cursor#1 ] ( main:2 [ main::i#4 main::cursor#1 ] ) -- pbuz1=_inc_pbuz1
|
||||
//SEG23 [10] (byte*) main::cursor#1 ← ++ (byte*) main::cursor#2 [ main::i#4 main::cursor#1 ] ( main:2 [ main::i#4 main::cursor#1 ] ) -- pbuz1=_inc_pbuz1
|
||||
inc cursor
|
||||
bne !+
|
||||
inc cursor+1
|
||||
!:
|
||||
//SEG25 [12] if((byte*) main::cursor#1<(const byte*) SCREEN#0+(word/signed word) 1000) goto main::@1 [ main::i#4 main::cursor#1 ] ( main:2 [ main::i#4 main::cursor#1 ] ) -- pbuz1_lt_pbuc1_then_la1
|
||||
//SEG24 [11] if((byte*) main::cursor#1<(const byte*) SCREEN#0+(word/signed word) 1000) goto main::@1 [ main::i#4 main::cursor#1 ] ( main:2 [ main::i#4 main::cursor#1 ] ) -- pbuz1_lt_pbuc1_then_la1
|
||||
lda cursor+1
|
||||
cmp #>SCREEN+$3e8
|
||||
bcc b1_from_b2
|
||||
@ -1073,37 +1040,36 @@ main: {
|
||||
bcc b1_from_b2
|
||||
!:
|
||||
jmp breturn
|
||||
//SEG26 main::@return
|
||||
//SEG25 main::@return
|
||||
breturn:
|
||||
//SEG27 [13] return [ ] ( main:2 [ ] )
|
||||
//SEG26 [12] return [ ] ( main:2 [ ] )
|
||||
rts
|
||||
//SEG28 [14] phi from main::@1 to main::@6 [phi:main::@1->main::@6]
|
||||
//SEG27 [13] phi from main::@1 to main::@6 [phi:main::@1->main::@6]
|
||||
b6_from_b1:
|
||||
jmp b6
|
||||
//SEG29 main::@6
|
||||
//SEG28 main::@6
|
||||
b6:
|
||||
//SEG30 [10] phi from main::@6 to main::@2 [phi:main::@6->main::@2]
|
||||
//SEG29 [9] phi from main::@6 to main::@2 [phi:main::@6->main::@2]
|
||||
b2_from_b6:
|
||||
//SEG31 [10] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@6->main::@2#0] -- register_copy
|
||||
//SEG30 [9] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@6->main::@2#0] -- register_copy
|
||||
jmp b2
|
||||
}
|
||||
|
||||
REGISTER UPLIFT POTENTIAL REGISTERS
|
||||
Statement [7] *((byte*) main::cursor#2) ← (byte~) main::$0 [ main::i#3 main::cursor#2 ] ( main:2 [ main::i#3 main::cursor#2 ] ) always clobbers reg byte y
|
||||
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ main::i#3 main::i#4 main::i#1 ]
|
||||
Statement [12] if((byte*) main::cursor#1<(const byte*) SCREEN#0+(word/signed word) 1000) goto main::@1 [ main::i#4 main::cursor#1 ] ( main:2 [ main::i#4 main::cursor#1 ] ) always clobbers reg byte a
|
||||
Statement [6] *((byte*) main::cursor#2) ← *((const byte[]) TEXT#0 + (byte) main::i#3) [ main::i#3 main::cursor#2 ] ( main:2 [ main::i#3 main::cursor#2 ] ) always clobbers reg byte a reg byte y
|
||||
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#3 main::i#4 main::i#1 ]
|
||||
Statement [7] *((byte*) main::cursor#2) ← (byte~) main::$0 [ main::i#3 main::cursor#2 ] ( main:2 [ main::i#3 main::cursor#2 ] ) always clobbers reg byte y
|
||||
Statement [12] if((byte*) main::cursor#1<(const byte*) SCREEN#0+(word/signed word) 1000) goto main::@1 [ main::i#4 main::cursor#1 ] ( main:2 [ main::i#4 main::cursor#1 ] ) always clobbers reg byte a
|
||||
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ main::i#3 main::i#4 main::i#1 ]
|
||||
Statement [11] if((byte*) main::cursor#1<(const byte*) SCREEN#0+(word/signed word) 1000) goto main::@1 [ main::i#4 main::cursor#1 ] ( main:2 [ main::i#4 main::cursor#1 ] ) always clobbers reg byte a
|
||||
Statement [6] *((byte*) main::cursor#2) ← *((const byte[]) TEXT#0 + (byte) main::i#3) [ main::i#3 main::cursor#2 ] ( main:2 [ main::i#3 main::cursor#2 ] ) always clobbers reg byte a reg byte y
|
||||
Statement [11] if((byte*) main::cursor#1<(const byte*) SCREEN#0+(word/signed word) 1000) goto main::@1 [ main::i#4 main::cursor#1 ] ( main:2 [ main::i#4 main::cursor#1 ] ) always clobbers reg byte a
|
||||
Potential registers zp ZP_BYTE:2 [ main::i#3 main::i#4 main::i#1 ] : zp ZP_BYTE:2 , reg byte x ,
|
||||
Potential registers zp ZP_WORD:3 [ main::cursor#2 main::cursor#1 ] : zp ZP_WORD:3 ,
|
||||
Potential registers zp ZP_BYTE:5 [ main::$0 ] : zp ZP_BYTE:5 , reg byte a , reg byte x , reg byte y ,
|
||||
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [main] 29.33: zp ZP_BYTE:2 [ main::i#3 main::i#4 main::i#1 ] 22: zp ZP_BYTE:5 [ main::$0 ] 21.21: zp ZP_WORD:3 [ main::cursor#2 main::cursor#1 ]
|
||||
Uplift Scope [main] 34.83: zp ZP_BYTE:2 [ main::i#3 main::i#4 main::i#1 ] 22: zp ZP_WORD:3 [ main::cursor#2 main::cursor#1 ]
|
||||
Uplift Scope []
|
||||
|
||||
Uplifting [main] best 858 combination reg byte x [ main::i#3 main::i#4 main::i#1 ] reg byte a [ main::$0 ] zp ZP_WORD:3 [ main::cursor#2 main::cursor#1 ]
|
||||
Uplifting [main] best 858 combination reg byte x [ main::i#3 main::i#4 main::i#1 ] zp ZP_WORD:3 [ main::cursor#2 main::cursor#1 ]
|
||||
Uplifting [] best 858 combination
|
||||
Allocated (was zp ZP_WORD:3) zp ZP_WORD:2 [ main::cursor#2 main::cursor#1 ]
|
||||
|
||||
@ -1151,29 +1117,28 @@ main: {
|
||||
jmp b1
|
||||
//SEG16 main::@1
|
||||
b1:
|
||||
//SEG17 [6] (byte~) main::$0 ← (const byte[]) TEXT#0 *idx (byte) main::i#3 [ main::i#3 main::cursor#2 main::$0 ] ( main:2 [ main::i#3 main::cursor#2 main::$0 ] ) -- vbuaa=pbuc1_derefidx_vbuxx
|
||||
//SEG17 [6] *((byte*) main::cursor#2) ← *((const byte[]) TEXT#0 + (byte) main::i#3) [ main::i#3 main::cursor#2 ] ( main:2 [ main::i#3 main::cursor#2 ] ) -- _deref_pbuz1=pbuc1_derefidx_vbuxx
|
||||
lda TEXT,x
|
||||
//SEG18 [7] *((byte*) main::cursor#2) ← (byte~) main::$0 [ main::i#3 main::cursor#2 ] ( main:2 [ main::i#3 main::cursor#2 ] ) -- _deref_pbuz1=vbuaa
|
||||
ldy #0
|
||||
sta (cursor),y
|
||||
//SEG19 [8] (byte) main::i#1 ← ++ (byte) main::i#3 [ main::cursor#2 main::i#1 ] ( main:2 [ main::cursor#2 main::i#1 ] ) -- vbuxx=_inc_vbuxx
|
||||
//SEG18 [7] (byte) main::i#1 ← ++ (byte) main::i#3 [ main::cursor#2 main::i#1 ] ( main:2 [ main::cursor#2 main::i#1 ] ) -- vbuxx=_inc_vbuxx
|
||||
inx
|
||||
//SEG20 [9] if((byte) main::i#1!=(byte/signed byte/word/signed word) 8) goto main::@6 [ main::cursor#2 main::i#1 ] ( main:2 [ main::cursor#2 main::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1
|
||||
//SEG19 [8] if((byte) main::i#1!=(byte/signed byte/word/signed word) 8) goto main::@6 [ main::cursor#2 main::i#1 ] ( main:2 [ main::cursor#2 main::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1
|
||||
cpx #8
|
||||
bne b6_from_b1
|
||||
//SEG21 [10] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
|
||||
//SEG20 [9] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
|
||||
b2_from_b1:
|
||||
//SEG22 [10] phi (byte) main::i#4 = (byte/signed byte/word/signed word) 0 [phi:main::@1->main::@2#0] -- vbuxx=vbuc1
|
||||
//SEG21 [9] phi (byte) main::i#4 = (byte/signed byte/word/signed word) 0 [phi:main::@1->main::@2#0] -- vbuxx=vbuc1
|
||||
ldx #0
|
||||
jmp b2
|
||||
//SEG23 main::@2
|
||||
//SEG22 main::@2
|
||||
b2:
|
||||
//SEG24 [11] (byte*) main::cursor#1 ← ++ (byte*) main::cursor#2 [ main::i#4 main::cursor#1 ] ( main:2 [ main::i#4 main::cursor#1 ] ) -- pbuz1=_inc_pbuz1
|
||||
//SEG23 [10] (byte*) main::cursor#1 ← ++ (byte*) main::cursor#2 [ main::i#4 main::cursor#1 ] ( main:2 [ main::i#4 main::cursor#1 ] ) -- pbuz1=_inc_pbuz1
|
||||
inc cursor
|
||||
bne !+
|
||||
inc cursor+1
|
||||
!:
|
||||
//SEG25 [12] if((byte*) main::cursor#1<(const byte*) SCREEN#0+(word/signed word) 1000) goto main::@1 [ main::i#4 main::cursor#1 ] ( main:2 [ main::i#4 main::cursor#1 ] ) -- pbuz1_lt_pbuc1_then_la1
|
||||
//SEG24 [11] if((byte*) main::cursor#1<(const byte*) SCREEN#0+(word/signed word) 1000) goto main::@1 [ main::i#4 main::cursor#1 ] ( main:2 [ main::i#4 main::cursor#1 ] ) -- pbuz1_lt_pbuc1_then_la1
|
||||
lda cursor+1
|
||||
cmp #>SCREEN+$3e8
|
||||
bcc b1_from_b2
|
||||
@ -1183,18 +1148,18 @@ main: {
|
||||
bcc b1_from_b2
|
||||
!:
|
||||
jmp breturn
|
||||
//SEG26 main::@return
|
||||
//SEG25 main::@return
|
||||
breturn:
|
||||
//SEG27 [13] return [ ] ( main:2 [ ] )
|
||||
//SEG26 [12] return [ ] ( main:2 [ ] )
|
||||
rts
|
||||
//SEG28 [14] phi from main::@1 to main::@6 [phi:main::@1->main::@6]
|
||||
//SEG27 [13] phi from main::@1 to main::@6 [phi:main::@1->main::@6]
|
||||
b6_from_b1:
|
||||
jmp b6
|
||||
//SEG29 main::@6
|
||||
//SEG28 main::@6
|
||||
b6:
|
||||
//SEG30 [10] phi from main::@6 to main::@2 [phi:main::@6->main::@2]
|
||||
//SEG29 [9] phi from main::@6 to main::@2 [phi:main::@6->main::@2]
|
||||
b2_from_b6:
|
||||
//SEG31 [10] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@6->main::@2#0] -- register_copy
|
||||
//SEG30 [9] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@6->main::@2#0] -- register_copy
|
||||
jmp b2
|
||||
}
|
||||
|
||||
@ -1241,22 +1206,20 @@ FINAL SYMBOL TABLE
|
||||
(byte[]) TEXT
|
||||
(const byte[]) TEXT#0 TEXT = (string) "camelot "
|
||||
(void()) main()
|
||||
(byte~) main::$0 reg byte a 22.0
|
||||
(label) main::@1
|
||||
(label) main::@2
|
||||
(label) main::@6
|
||||
(label) main::@return
|
||||
(byte*) main::cursor
|
||||
(byte*) main::cursor#1 cursor zp ZP_WORD:2 16.5
|
||||
(byte*) main::cursor#2 cursor zp ZP_WORD:2 4.714285714285714
|
||||
(byte*) main::cursor#2 cursor zp ZP_WORD:2 5.5
|
||||
(byte) main::i
|
||||
(byte) main::i#1 reg byte x 11.0
|
||||
(byte) main::i#3 reg byte x 11.0
|
||||
(byte) main::i#3 reg byte x 16.5
|
||||
(byte) main::i#4 reg byte x 7.333333333333333
|
||||
|
||||
reg byte x [ main::i#3 main::i#4 main::i#1 ]
|
||||
zp ZP_WORD:2 [ main::cursor#2 main::cursor#1 ]
|
||||
reg byte a [ main::$0 ]
|
||||
|
||||
FINAL CODE
|
||||
//SEG0 Basic Upstart
|
||||
@ -1290,27 +1253,26 @@ main: {
|
||||
//SEG15 [5] phi (byte) main::i#3 = (byte) main::i#4 [phi:main::@2->main::@1#1] -- register_copy
|
||||
//SEG16 main::@1
|
||||
b1:
|
||||
//SEG17 [6] (byte~) main::$0 ← (const byte[]) TEXT#0 *idx (byte) main::i#3 [ main::i#3 main::cursor#2 main::$0 ] ( main:2 [ main::i#3 main::cursor#2 main::$0 ] ) -- vbuaa=pbuc1_derefidx_vbuxx
|
||||
//SEG17 [6] *((byte*) main::cursor#2) ← *((const byte[]) TEXT#0 + (byte) main::i#3) [ main::i#3 main::cursor#2 ] ( main:2 [ main::i#3 main::cursor#2 ] ) -- _deref_pbuz1=pbuc1_derefidx_vbuxx
|
||||
lda TEXT,x
|
||||
//SEG18 [7] *((byte*) main::cursor#2) ← (byte~) main::$0 [ main::i#3 main::cursor#2 ] ( main:2 [ main::i#3 main::cursor#2 ] ) -- _deref_pbuz1=vbuaa
|
||||
ldy #0
|
||||
sta (cursor),y
|
||||
//SEG19 [8] (byte) main::i#1 ← ++ (byte) main::i#3 [ main::cursor#2 main::i#1 ] ( main:2 [ main::cursor#2 main::i#1 ] ) -- vbuxx=_inc_vbuxx
|
||||
//SEG18 [7] (byte) main::i#1 ← ++ (byte) main::i#3 [ main::cursor#2 main::i#1 ] ( main:2 [ main::cursor#2 main::i#1 ] ) -- vbuxx=_inc_vbuxx
|
||||
inx
|
||||
//SEG20 [9] if((byte) main::i#1!=(byte/signed byte/word/signed word) 8) goto main::@6 [ main::cursor#2 main::i#1 ] ( main:2 [ main::cursor#2 main::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1
|
||||
//SEG19 [8] if((byte) main::i#1!=(byte/signed byte/word/signed word) 8) goto main::@6 [ main::cursor#2 main::i#1 ] ( main:2 [ main::cursor#2 main::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1
|
||||
cpx #8
|
||||
bne b2
|
||||
//SEG21 [10] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
|
||||
//SEG22 [10] phi (byte) main::i#4 = (byte/signed byte/word/signed word) 0 [phi:main::@1->main::@2#0] -- vbuxx=vbuc1
|
||||
//SEG20 [9] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
|
||||
//SEG21 [9] phi (byte) main::i#4 = (byte/signed byte/word/signed word) 0 [phi:main::@1->main::@2#0] -- vbuxx=vbuc1
|
||||
ldx #0
|
||||
//SEG23 main::@2
|
||||
//SEG22 main::@2
|
||||
b2:
|
||||
//SEG24 [11] (byte*) main::cursor#1 ← ++ (byte*) main::cursor#2 [ main::i#4 main::cursor#1 ] ( main:2 [ main::i#4 main::cursor#1 ] ) -- pbuz1=_inc_pbuz1
|
||||
//SEG23 [10] (byte*) main::cursor#1 ← ++ (byte*) main::cursor#2 [ main::i#4 main::cursor#1 ] ( main:2 [ main::i#4 main::cursor#1 ] ) -- pbuz1=_inc_pbuz1
|
||||
inc cursor
|
||||
bne !+
|
||||
inc cursor+1
|
||||
!:
|
||||
//SEG25 [12] if((byte*) main::cursor#1<(const byte*) SCREEN#0+(word/signed word) 1000) goto main::@1 [ main::i#4 main::cursor#1 ] ( main:2 [ main::i#4 main::cursor#1 ] ) -- pbuz1_lt_pbuc1_then_la1
|
||||
//SEG24 [11] if((byte*) main::cursor#1<(const byte*) SCREEN#0+(word/signed word) 1000) goto main::@1 [ main::i#4 main::cursor#1 ] ( main:2 [ main::i#4 main::cursor#1 ] ) -- pbuz1_lt_pbuc1_then_la1
|
||||
lda cursor+1
|
||||
cmp #>SCREEN+$3e8
|
||||
bcc b1
|
||||
@ -1319,12 +1281,12 @@ main: {
|
||||
cmp #<SCREEN+$3e8
|
||||
bcc b1
|
||||
!:
|
||||
//SEG26 main::@return
|
||||
//SEG27 [13] return [ ] ( main:2 [ ] )
|
||||
//SEG25 main::@return
|
||||
//SEG26 [12] return [ ] ( main:2 [ ] )
|
||||
rts
|
||||
//SEG28 [14] phi from main::@1 to main::@6 [phi:main::@1->main::@6]
|
||||
//SEG29 main::@6
|
||||
//SEG30 [10] phi from main::@6 to main::@2 [phi:main::@6->main::@2]
|
||||
//SEG31 [10] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@6->main::@2#0] -- register_copy
|
||||
//SEG27 [13] phi from main::@1 to main::@6 [phi:main::@1->main::@6]
|
||||
//SEG28 main::@6
|
||||
//SEG29 [9] phi from main::@6 to main::@2 [phi:main::@6->main::@2]
|
||||
//SEG30 [9] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@6->main::@2#0] -- register_copy
|
||||
}
|
||||
|
||||
|
@ -6,19 +6,17 @@
|
||||
(byte[]) TEXT
|
||||
(const byte[]) TEXT#0 TEXT = (string) "camelot "
|
||||
(void()) main()
|
||||
(byte~) main::$0 reg byte a 22.0
|
||||
(label) main::@1
|
||||
(label) main::@2
|
||||
(label) main::@6
|
||||
(label) main::@return
|
||||
(byte*) main::cursor
|
||||
(byte*) main::cursor#1 cursor zp ZP_WORD:2 16.5
|
||||
(byte*) main::cursor#2 cursor zp ZP_WORD:2 4.714285714285714
|
||||
(byte*) main::cursor#2 cursor zp ZP_WORD:2 5.5
|
||||
(byte) main::i
|
||||
(byte) main::i#1 reg byte x 11.0
|
||||
(byte) main::i#3 reg byte x 11.0
|
||||
(byte) main::i#3 reg byte x 16.5
|
||||
(byte) main::i#4 reg byte x 7.333333333333333
|
||||
|
||||
reg byte x [ main::i#3 main::i#4 main::i#1 ]
|
||||
zp ZP_WORD:2 [ main::cursor#2 main::cursor#1 ]
|
||||
reg byte a [ main::$0 ]
|
||||
|
@ -13,13 +13,11 @@ main: scope:[main] from @1
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
[6] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word) 0 main::@1/(byte) main::i#1 ) [ main::i#2 ] ( main:2 [ main::i#2 ] )
|
||||
[7] (byte~) main::$1 ← (const byte[]) str#0 *idx (byte) main::i#2 [ main::i#2 main::$1 ] ( main:2 [ main::i#2 main::$1 ] )
|
||||
[8] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 4 + (byte) main::i#2) ← (byte~) main::$1 [ main::i#2 ] ( main:2 [ main::i#2 ] )
|
||||
[9] (byte~) main::$3 ← (const byte[]) nums#0 *idx (byte) main::i#2 [ main::i#2 main::$3 ] ( main:2 [ main::i#2 main::$3 ] )
|
||||
[10] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 9 + (byte) main::i#2) ← (byte~) main::$3 [ main::i#2 ] ( main:2 [ main::i#2 ] )
|
||||
[11] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] )
|
||||
[12] if((byte) main::i#1!=(byte/signed byte/word/signed word) 4) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] )
|
||||
[7] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 4 + (byte) main::i#2) ← *((const byte[]) str#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] )
|
||||
[8] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 9 + (byte) main::i#2) ← *((const byte[]) nums#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] )
|
||||
[9] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] )
|
||||
[10] if((byte) main::i#1!=(byte/signed byte/word/signed word) 4) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] )
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
[13] return [ ] ( main:2 [ ] )
|
||||
[11] return [ ] ( main:2 [ ] )
|
||||
to:@return
|
||||
|
@ -27,14 +27,12 @@ proc (void()) main()
|
||||
(byte) main::i ← (byte/signed byte/word/signed word) 0
|
||||
main::@1:
|
||||
(byte~) main::$0 ← (byte/signed byte/word/signed word) 4 + (byte) main::i
|
||||
(byte~) main::$1 ← (byte[]) str *idx (byte) main::i
|
||||
*((byte*) SCREEN + (byte~) main::$0) ← (byte~) main::$1
|
||||
(byte~) main::$2 ← (byte/signed byte/word/signed word) 9 + (byte) main::i
|
||||
(byte~) main::$3 ← (byte[]) nums *idx (byte) main::i
|
||||
*((byte*) SCREEN + (byte~) main::$2) ← (byte~) main::$3
|
||||
*((byte*) SCREEN + (byte~) main::$0) ← *((byte[]) str + (byte) main::i)
|
||||
(byte~) main::$1 ← (byte/signed byte/word/signed word) 9 + (byte) main::i
|
||||
*((byte*) SCREEN + (byte~) main::$1) ← *((byte[]) nums + (byte) main::i)
|
||||
(byte) main::i ← ++ (byte) main::i
|
||||
(boolean~) main::$4 ← (byte) main::i != (byte/signed byte/word/signed word) 4
|
||||
if((boolean~) main::$4) goto main::@1
|
||||
(boolean~) main::$2 ← (byte) main::i != (byte/signed byte/word/signed word) 4
|
||||
if((boolean~) main::$2) goto main::@1
|
||||
main::@return:
|
||||
return
|
||||
endproc // main()
|
||||
@ -48,9 +46,7 @@ SYMBOLS
|
||||
(void()) main()
|
||||
(byte~) main::$0
|
||||
(byte~) main::$1
|
||||
(byte~) main::$2
|
||||
(byte~) main::$3
|
||||
(boolean~) main::$4
|
||||
(boolean~) main::$2
|
||||
(label) main::@1
|
||||
(label) main::@return
|
||||
(byte) main::i
|
||||
@ -76,14 +72,12 @@ main: scope:[main] from
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(byte~) main::$0 ← (byte/signed byte/word/signed word) 4 + (byte) main::i
|
||||
(byte~) main::$1 ← (byte[]) str *idx (byte) main::i
|
||||
*((byte*) SCREEN + (byte~) main::$0) ← (byte~) main::$1
|
||||
(byte~) main::$2 ← (byte/signed byte/word/signed word) 9 + (byte) main::i
|
||||
(byte~) main::$3 ← (byte[]) nums *idx (byte) main::i
|
||||
*((byte*) SCREEN + (byte~) main::$2) ← (byte~) main::$3
|
||||
*((byte*) SCREEN + (byte~) main::$0) ← *((byte[]) str + (byte) main::i)
|
||||
(byte~) main::$1 ← (byte/signed byte/word/signed word) 9 + (byte) main::i
|
||||
*((byte*) SCREEN + (byte~) main::$1) ← *((byte[]) nums + (byte) main::i)
|
||||
(byte) main::i ← ++ (byte) main::i
|
||||
(boolean~) main::$4 ← (byte) main::i != (byte/signed byte/word/signed word) 4
|
||||
if((boolean~) main::$4) goto main::@1
|
||||
(boolean~) main::$2 ← (byte) main::i != (byte/signed byte/word/signed word) 4
|
||||
if((boolean~) main::$2) goto main::@1
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1
|
||||
to:main::@return
|
||||
@ -113,14 +107,12 @@ main: scope:[main] from
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(byte~) main::$0 ← (byte/signed byte/word/signed word) 4 + (byte) main::i
|
||||
(byte~) main::$1 ← (byte[]) str *idx (byte) main::i
|
||||
*((byte*) SCREEN + (byte~) main::$0) ← (byte~) main::$1
|
||||
(byte~) main::$2 ← (byte/signed byte/word/signed word) 9 + (byte) main::i
|
||||
(byte~) main::$3 ← (byte[]) nums *idx (byte) main::i
|
||||
*((byte*) SCREEN + (byte~) main::$2) ← (byte~) main::$3
|
||||
*((byte*) SCREEN + (byte~) main::$0) ← *((byte[]) str + (byte) main::i)
|
||||
(byte~) main::$1 ← (byte/signed byte/word/signed word) 9 + (byte) main::i
|
||||
*((byte*) SCREEN + (byte~) main::$1) ← *((byte[]) nums + (byte) main::i)
|
||||
(byte) main::i ← ++ (byte) main::i
|
||||
(boolean~) main::$4 ← (byte) main::i != (byte/signed byte/word/signed word) 4
|
||||
if((boolean~) main::$4) goto main::@1
|
||||
(boolean~) main::$2 ← (byte) main::i != (byte/signed byte/word/signed word) 4
|
||||
if((boolean~) main::$2) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
@ -149,14 +141,12 @@ main: scope:[main] from @1
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(byte~) main::$0 ← (byte/signed byte/word/signed word) 4 + (byte) main::i
|
||||
(byte~) main::$1 ← (byte[]) str *idx (byte) main::i
|
||||
*((byte*) SCREEN + (byte~) main::$0) ← (byte~) main::$1
|
||||
(byte~) main::$2 ← (byte/signed byte/word/signed word) 9 + (byte) main::i
|
||||
(byte~) main::$3 ← (byte[]) nums *idx (byte) main::i
|
||||
*((byte*) SCREEN + (byte~) main::$2) ← (byte~) main::$3
|
||||
*((byte*) SCREEN + (byte~) main::$0) ← *((byte[]) str + (byte) main::i)
|
||||
(byte~) main::$1 ← (byte/signed byte/word/signed word) 9 + (byte) main::i
|
||||
*((byte*) SCREEN + (byte~) main::$1) ← *((byte[]) nums + (byte) main::i)
|
||||
(byte) main::i ← ++ (byte) main::i
|
||||
(boolean~) main::$4 ← (byte) main::i != (byte/signed byte/word/signed word) 4
|
||||
if((boolean~) main::$4) goto main::@1
|
||||
(boolean~) main::$2 ← (byte) main::i != (byte/signed byte/word/signed word) 4
|
||||
if((boolean~) main::$2) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
@ -197,14 +187,12 @@ main::@1: scope:[main] from main main::@1
|
||||
(byte[]) str#1 ← phi( main/(byte[]) str#2 main::@1/(byte[]) str#1 )
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 )
|
||||
(byte~) main::$0 ← (byte/signed byte/word/signed word) 4 + (byte) main::i#2
|
||||
(byte~) main::$1 ← (byte[]) str#1 *idx (byte) main::i#2
|
||||
*((byte*) SCREEN#2 + (byte~) main::$0) ← (byte~) main::$1
|
||||
(byte~) main::$2 ← (byte/signed byte/word/signed word) 9 + (byte) main::i#2
|
||||
(byte~) main::$3 ← (byte[]) nums#1 *idx (byte) main::i#2
|
||||
*((byte*) SCREEN#2 + (byte~) main::$2) ← (byte~) main::$3
|
||||
*((byte*) SCREEN#2 + (byte~) main::$0) ← *((byte[]) str#1 + (byte) main::i#2)
|
||||
(byte~) main::$1 ← (byte/signed byte/word/signed word) 9 + (byte) main::i#2
|
||||
*((byte*) SCREEN#2 + (byte~) main::$1) ← *((byte[]) nums#1 + (byte) main::i#2)
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
(boolean~) main::$4 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 4
|
||||
if((boolean~) main::$4) goto main::@1
|
||||
(boolean~) main::$2 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 4
|
||||
if((boolean~) main::$2) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
@ -247,14 +235,12 @@ main::@1: scope:[main] from main main::@1
|
||||
(byte[]) str#1 ← phi( main/(byte[]) str#2 main::@1/(byte[]) str#1 )
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 )
|
||||
(byte~) main::$0 ← (byte/signed byte/word/signed word) 4 + (byte) main::i#2
|
||||
(byte~) main::$1 ← (byte[]) str#1 *idx (byte) main::i#2
|
||||
*((byte*) SCREEN#2 + (byte~) main::$0) ← (byte~) main::$1
|
||||
(byte~) main::$2 ← (byte/signed byte/word/signed word) 9 + (byte) main::i#2
|
||||
(byte~) main::$3 ← (byte[]) nums#1 *idx (byte) main::i#2
|
||||
*((byte*) SCREEN#2 + (byte~) main::$2) ← (byte~) main::$3
|
||||
*((byte*) SCREEN#2 + (byte~) main::$0) ← *((byte[]) str#1 + (byte) main::i#2)
|
||||
(byte~) main::$1 ← (byte/signed byte/word/signed word) 9 + (byte) main::i#2
|
||||
*((byte*) SCREEN#2 + (byte~) main::$1) ← *((byte[]) nums#1 + (byte) main::i#2)
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
(boolean~) main::$4 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 4
|
||||
if((boolean~) main::$4) goto main::@1
|
||||
(boolean~) main::$2 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 4
|
||||
if((boolean~) main::$2) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
@ -290,9 +276,7 @@ INITIAL SSA SYMBOL TABLE
|
||||
(void()) main()
|
||||
(byte~) main::$0
|
||||
(byte~) main::$1
|
||||
(byte~) main::$2
|
||||
(byte~) main::$3
|
||||
(boolean~) main::$4
|
||||
(boolean~) main::$2
|
||||
(label) main::@1
|
||||
(label) main::@return
|
||||
(byte) main::i
|
||||
@ -342,14 +326,12 @@ main::@1: scope:[main] from main main::@1
|
||||
(byte[]) str#1 ← phi( main/(byte[]) str#2 main::@1/(byte[]) str#1 )
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 )
|
||||
(byte~) main::$0 ← (byte/signed byte/word/signed word) 4 + (byte) main::i#2
|
||||
(byte~) main::$1 ← (byte[]) str#1 *idx (byte) main::i#2
|
||||
*((byte*) SCREEN#2 + (byte~) main::$0) ← (byte~) main::$1
|
||||
(byte~) main::$2 ← (byte/signed byte/word/signed word) 9 + (byte) main::i#2
|
||||
(byte~) main::$3 ← (byte[]) nums#1 *idx (byte) main::i#2
|
||||
*((byte*) SCREEN#2 + (byte~) main::$2) ← (byte~) main::$3
|
||||
*((byte*) SCREEN#2 + (byte~) main::$0) ← *((byte[]) str#1 + (byte) main::i#2)
|
||||
(byte~) main::$1 ← (byte/signed byte/word/signed word) 9 + (byte) main::i#2
|
||||
*((byte*) SCREEN#2 + (byte~) main::$1) ← *((byte[]) nums#1 + (byte) main::i#2)
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
(boolean~) main::$4 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 4
|
||||
if((boolean~) main::$4) goto main::@1
|
||||
(boolean~) main::$2 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 4
|
||||
if((boolean~) main::$2) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
@ -400,14 +382,12 @@ main::@1: scope:[main] from main main::@1
|
||||
(byte[]) str#1 ← phi( main/(byte[]) str#2 main::@1/(byte[]) str#1 )
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 )
|
||||
(byte~) main::$0 ← (byte/signed byte/word/signed word) 4 + (byte) main::i#2
|
||||
(byte~) main::$1 ← (byte[]) str#1 *idx (byte) main::i#2
|
||||
*((byte*) SCREEN#2 + (byte~) main::$0) ← (byte~) main::$1
|
||||
(byte~) main::$2 ← (byte/signed byte/word/signed word) 9 + (byte) main::i#2
|
||||
(byte~) main::$3 ← (byte[]) nums#1 *idx (byte) main::i#2
|
||||
*((byte*) SCREEN#2 + (byte~) main::$2) ← (byte~) main::$3
|
||||
*((byte*) SCREEN#2 + (byte~) main::$0) ← *((byte[]) str#1 + (byte) main::i#2)
|
||||
(byte~) main::$1 ← (byte/signed byte/word/signed word) 9 + (byte) main::i#2
|
||||
*((byte*) SCREEN#2 + (byte~) main::$1) ← *((byte[]) nums#1 + (byte) main::i#2)
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
(boolean~) main::$4 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 4
|
||||
if((boolean~) main::$4) goto main::@1
|
||||
(boolean~) main::$2 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 4
|
||||
if((boolean~) main::$2) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
@ -451,14 +431,12 @@ main::@1: scope:[main] from main main::@1
|
||||
(byte[]) str#1 ← phi( main/(byte[]) str#2 )
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 )
|
||||
(byte~) main::$0 ← (byte/signed byte/word/signed word) 4 + (byte) main::i#2
|
||||
(byte~) main::$1 ← (byte[]) str#1 *idx (byte) main::i#2
|
||||
*((byte*) SCREEN#2 + (byte~) main::$0) ← (byte~) main::$1
|
||||
(byte~) main::$2 ← (byte/signed byte/word/signed word) 9 + (byte) main::i#2
|
||||
(byte~) main::$3 ← (byte[]) nums#1 *idx (byte) main::i#2
|
||||
*((byte*) SCREEN#2 + (byte~) main::$2) ← (byte~) main::$3
|
||||
*((byte*) SCREEN#2 + (byte~) main::$0) ← *((byte[]) str#1 + (byte) main::i#2)
|
||||
(byte~) main::$1 ← (byte/signed byte/word/signed word) 9 + (byte) main::i#2
|
||||
*((byte*) SCREEN#2 + (byte~) main::$1) ← *((byte[]) nums#1 + (byte) main::i#2)
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
(boolean~) main::$4 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 4
|
||||
if((boolean~) main::$4) goto main::@1
|
||||
(boolean~) main::$2 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 4
|
||||
if((boolean~) main::$2) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
@ -494,14 +472,12 @@ main: scope:[main] from @1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 )
|
||||
(byte~) main::$0 ← (byte/signed byte/word/signed word) 4 + (byte) main::i#2
|
||||
(byte~) main::$1 ← (byte[]) str#0 *idx (byte) main::i#2
|
||||
*((byte*) SCREEN#0 + (byte~) main::$0) ← (byte~) main::$1
|
||||
(byte~) main::$2 ← (byte/signed byte/word/signed word) 9 + (byte) main::i#2
|
||||
(byte~) main::$3 ← (byte[]) nums#0 *idx (byte) main::i#2
|
||||
*((byte*) SCREEN#0 + (byte~) main::$2) ← (byte~) main::$3
|
||||
*((byte*) SCREEN#0 + (byte~) main::$0) ← *((byte[]) str#0 + (byte) main::i#2)
|
||||
(byte~) main::$1 ← (byte/signed byte/word/signed word) 9 + (byte) main::i#2
|
||||
*((byte*) SCREEN#0 + (byte~) main::$1) ← *((byte[]) nums#0 + (byte) main::i#2)
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
(boolean~) main::$4 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 4
|
||||
if((boolean~) main::$4) goto main::@1
|
||||
(boolean~) main::$2 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 4
|
||||
if((boolean~) main::$2) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
@ -511,7 +487,7 @@ main::@return: scope:[main] from main::@1
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
|
||||
Simple Condition (boolean~) main::$4 if((byte) main::i#1!=(byte/signed byte/word/signed word) 4) goto main::@1
|
||||
Simple Condition (boolean~) main::$2 if((byte) main::i#1!=(byte/signed byte/word/signed word) 4) goto main::@1
|
||||
Succesful SSA optimization Pass2ConditionalJumpSimplification
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
@ -530,11 +506,9 @@ main: scope:[main] from @1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 )
|
||||
(byte~) main::$0 ← (byte/signed byte/word/signed word) 4 + (byte) main::i#2
|
||||
(byte~) main::$1 ← (byte[]) str#0 *idx (byte) main::i#2
|
||||
*((byte*) SCREEN#0 + (byte~) main::$0) ← (byte~) main::$1
|
||||
(byte~) main::$2 ← (byte/signed byte/word/signed word) 9 + (byte) main::i#2
|
||||
(byte~) main::$3 ← (byte[]) nums#0 *idx (byte) main::i#2
|
||||
*((byte*) SCREEN#0 + (byte~) main::$2) ← (byte~) main::$3
|
||||
*((byte*) SCREEN#0 + (byte~) main::$0) ← *((byte[]) str#0 + (byte) main::i#2)
|
||||
(byte~) main::$1 ← (byte/signed byte/word/signed word) 9 + (byte) main::i#2
|
||||
*((byte*) SCREEN#0 + (byte~) main::$1) ← *((byte[]) nums#0 + (byte) main::i#2)
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
if((byte) main::i#1!=(byte/signed byte/word/signed word) 4) goto main::@1
|
||||
to:main::@return
|
||||
@ -564,11 +538,9 @@ main: scope:[main] from @1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(byte) main::i#2 ← phi( main/(const byte) main::i#0 main::@1/(byte) main::i#1 )
|
||||
(byte~) main::$0 ← (byte/signed byte/word/signed word) 4 + (byte) main::i#2
|
||||
(byte~) main::$1 ← (byte[]) str#0 *idx (byte) main::i#2
|
||||
*((const byte*) SCREEN#0 + (byte~) main::$0) ← (byte~) main::$1
|
||||
(byte~) main::$2 ← (byte/signed byte/word/signed word) 9 + (byte) main::i#2
|
||||
(byte~) main::$3 ← (const byte[]) nums#0 *idx (byte) main::i#2
|
||||
*((const byte*) SCREEN#0 + (byte~) main::$2) ← (byte~) main::$3
|
||||
*((const byte*) SCREEN#0 + (byte~) main::$0) ← *((byte[]) str#0 + (byte) main::i#2)
|
||||
(byte~) main::$1 ← (byte/signed byte/word/signed word) 9 + (byte) main::i#2
|
||||
*((const byte*) SCREEN#0 + (byte~) main::$1) ← *((const byte[]) nums#0 + (byte) main::i#2)
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
if((byte) main::i#1!=(byte/signed byte/word/signed word) 4) goto main::@1
|
||||
to:main::@return
|
||||
@ -592,11 +564,9 @@ main: scope:[main] from @1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(byte) main::i#2 ← phi( main/(const byte) main::i#0 main::@1/(byte) main::i#1 )
|
||||
(byte~) main::$0 ← (byte/signed byte/word/signed word) 4 + (byte) main::i#2
|
||||
(byte~) main::$1 ← (const byte[]) str#0 *idx (byte) main::i#2
|
||||
*((const byte*) SCREEN#0 + (byte~) main::$0) ← (byte~) main::$1
|
||||
(byte~) main::$2 ← (byte/signed byte/word/signed word) 9 + (byte) main::i#2
|
||||
(byte~) main::$3 ← (const byte[]) nums#0 *idx (byte) main::i#2
|
||||
*((const byte*) SCREEN#0 + (byte~) main::$2) ← (byte~) main::$3
|
||||
*((const byte*) SCREEN#0 + (byte~) main::$0) ← *((const byte[]) str#0 + (byte) main::i#2)
|
||||
(byte~) main::$1 ← (byte/signed byte/word/signed word) 9 + (byte) main::i#2
|
||||
*((const byte*) SCREEN#0 + (byte~) main::$1) ← *((const byte[]) nums#0 + (byte) main::i#2)
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
if((byte) main::i#1!=(byte/signed byte/word/signed word) 4) goto main::@1
|
||||
to:main::@return
|
||||
@ -608,14 +578,14 @@ main::@return: scope:[main] from main::@1
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
|
||||
Consolidated assigned array index constant in assignment *(SCREEN#0+0)
|
||||
Consolidated assigned array index constant in assignment *(SCREEN#0+2)
|
||||
Consolidated array index constant in *(SCREEN#0+0)
|
||||
Consolidated array index constant in *(SCREEN#0+2)
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
||||
Consolidated array index constant in assignment *(SCREEN#0+4 + main::$0)
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
||||
Consolidated assigned array index constant in assignment *(SCREEN#0+4 + main::$0)
|
||||
Consolidated array index constant in assignment *(SCREEN#0+9 + main::$1)
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
||||
Consolidated assigned array index constant in assignment *(SCREEN#0+9 + main::$2)
|
||||
Succesful SSA optimization Pass2ConstantAdditionElimination
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
@ -627,11 +597,9 @@ main: scope:[main] from @1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(byte) main::i#2 ← phi( main/(const byte) main::i#0 main::@1/(byte) main::i#1 )
|
||||
(byte~) main::$0 ← (byte) main::i#2
|
||||
(byte~) main::$1 ← (const byte[]) str#0 *idx (byte) main::i#2
|
||||
*((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 4 + (byte~) main::$0) ← (byte~) main::$1
|
||||
(byte~) main::$2 ← (byte) main::i#2
|
||||
(byte~) main::$3 ← (const byte[]) nums#0 *idx (byte) main::i#2
|
||||
*((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 9 + (byte~) main::$2) ← (byte~) main::$3
|
||||
*((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 4 + (byte~) main::$0) ← *((const byte[]) str#0 + (byte) main::i#2)
|
||||
(byte~) main::$1 ← (byte) main::i#2
|
||||
*((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 9 + (byte~) main::$1) ← *((const byte[]) nums#0 + (byte) main::i#2)
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
if((byte) main::i#1!=(byte/signed byte/word/signed word) 4) goto main::@1
|
||||
to:main::@return
|
||||
@ -645,7 +613,7 @@ main::@return: scope:[main] from main::@1
|
||||
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
||||
Alias (byte) main::i#2 = (byte~) main::$0 (byte~) main::$2
|
||||
Alias (byte) main::i#2 = (byte~) main::$0 (byte~) main::$1
|
||||
Succesful SSA optimization Pass2AliasElimination
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
@ -656,10 +624,8 @@ main: scope:[main] from @1
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(byte) main::i#2 ← phi( main/(const byte) main::i#0 main::@1/(byte) main::i#1 )
|
||||
(byte~) main::$1 ← (const byte[]) str#0 *idx (byte) main::i#2
|
||||
*((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 4 + (byte) main::i#2) ← (byte~) main::$1
|
||||
(byte~) main::$3 ← (const byte[]) nums#0 *idx (byte) main::i#2
|
||||
*((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 9 + (byte) main::i#2) ← (byte~) main::$3
|
||||
*((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 4 + (byte) main::i#2) ← *((const byte[]) str#0 + (byte) main::i#2)
|
||||
*((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 9 + (byte) main::i#2) ← *((const byte[]) nums#0 + (byte) main::i#2)
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
if((byte) main::i#1!=(byte/signed byte/word/signed word) 4) goto main::@1
|
||||
to:main::@return
|
||||
@ -671,14 +637,6 @@ main::@return: scope:[main] from main::@1
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
||||
Inlining constant with var siblings (const byte) main::i#0
|
||||
Inlining constant with var siblings (const byte) main::i#0
|
||||
Constant inlined $0 = (string) "bc"+(string) "d"
|
||||
@ -693,10 +651,8 @@ main: scope:[main] from @1
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word) 0 main::@1/(byte) main::i#1 )
|
||||
(byte~) main::$1 ← (const byte[]) str#0 *idx (byte) main::i#2
|
||||
*((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 4 + (byte) main::i#2) ← (byte~) main::$1
|
||||
(byte~) main::$3 ← (const byte[]) nums#0 *idx (byte) main::i#2
|
||||
*((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 9 + (byte) main::i#2) ← (byte~) main::$3
|
||||
*((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 4 + (byte) main::i#2) ← *((const byte[]) str#0 + (byte) main::i#2)
|
||||
*((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 9 + (byte) main::i#2) ← *((const byte[]) nums#0 + (byte) main::i#2)
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
if((byte) main::i#1!=(byte/signed byte/word/signed word) 4) goto main::@1
|
||||
to:main::@return
|
||||
@ -717,8 +673,6 @@ FINAL SYMBOL TABLE
|
||||
(byte) char
|
||||
(const byte) char#0 = (byte) 'a'
|
||||
(void()) main()
|
||||
(byte~) main::$1
|
||||
(byte~) main::$3
|
||||
(label) main::@1
|
||||
(label) main::@return
|
||||
(byte) main::i
|
||||
@ -747,10 +701,8 @@ main: scope:[main] from @1
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@3
|
||||
(byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word) 0 main::@3/(byte~) main::i#3 )
|
||||
(byte~) main::$1 ← (const byte[]) str#0 *idx (byte) main::i#2
|
||||
*((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 4 + (byte) main::i#2) ← (byte~) main::$1
|
||||
(byte~) main::$3 ← (const byte[]) nums#0 *idx (byte) main::i#2
|
||||
*((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 9 + (byte) main::i#2) ← (byte~) main::$3
|
||||
*((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 4 + (byte) main::i#2) ← *((const byte[]) str#0 + (byte) main::i#2)
|
||||
*((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 9 + (byte) main::i#2) ← *((const byte[]) nums#0 + (byte) main::i#2)
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
if((byte) main::i#1!=(byte/signed byte/word/signed word) 4) goto main::@3
|
||||
to:main::@return
|
||||
@ -785,22 +737,20 @@ main: scope:[main] from @1
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@3
|
||||
[6] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word) 0 main::@3/(byte~) main::i#3 ) [ main::i#2 ]
|
||||
[7] (byte~) main::$1 ← (const byte[]) str#0 *idx (byte) main::i#2 [ main::i#2 main::$1 ]
|
||||
[8] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 4 + (byte) main::i#2) ← (byte~) main::$1 [ main::i#2 ]
|
||||
[9] (byte~) main::$3 ← (const byte[]) nums#0 *idx (byte) main::i#2 [ main::i#2 main::$3 ]
|
||||
[10] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 9 + (byte) main::i#2) ← (byte~) main::$3 [ main::i#2 ]
|
||||
[11] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ]
|
||||
[12] if((byte) main::i#1!=(byte/signed byte/word/signed word) 4) goto main::@3 [ main::i#1 ]
|
||||
[7] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 4 + (byte) main::i#2) ← *((const byte[]) str#0 + (byte) main::i#2) [ main::i#2 ]
|
||||
[8] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 9 + (byte) main::i#2) ← *((const byte[]) nums#0 + (byte) main::i#2) [ main::i#2 ]
|
||||
[9] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ]
|
||||
[10] if((byte) main::i#1!=(byte/signed byte/word/signed word) 4) goto main::@3 [ main::i#1 ]
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
[13] return [ ]
|
||||
[11] return [ ]
|
||||
to:@return
|
||||
main::@3: scope:[main] from main::@1
|
||||
[14] (byte~) main::i#3 ← (byte) main::i#1 [ main::i#3 ]
|
||||
[12] (byte~) main::i#3 ← (byte) main::i#1 [ main::i#3 ]
|
||||
to:main::@1
|
||||
|
||||
Created 1 initial phi equivalence classes
|
||||
Coalesced [14] main::i#3 ← main::i#1
|
||||
Coalesced [12] main::i#3 ← main::i#1
|
||||
Coalesced down to 1 phi equivalence classes
|
||||
Culled Empty Block (label) main::@3
|
||||
Block Sequence Planned @begin @1 @end main main::@1 main::@return
|
||||
@ -825,15 +775,13 @@ main: scope:[main] from @1
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
[6] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word) 0 main::@1/(byte) main::i#1 ) [ main::i#2 ]
|
||||
[7] (byte~) main::$1 ← (const byte[]) str#0 *idx (byte) main::i#2 [ main::i#2 main::$1 ]
|
||||
[8] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 4 + (byte) main::i#2) ← (byte~) main::$1 [ main::i#2 ]
|
||||
[9] (byte~) main::$3 ← (const byte[]) nums#0 *idx (byte) main::i#2 [ main::i#2 main::$3 ]
|
||||
[10] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 9 + (byte) main::i#2) ← (byte~) main::$3 [ main::i#2 ]
|
||||
[11] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ]
|
||||
[12] if((byte) main::i#1!=(byte/signed byte/word/signed word) 4) goto main::@1 [ main::i#1 ]
|
||||
[7] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 4 + (byte) main::i#2) ← *((const byte[]) str#0 + (byte) main::i#2) [ main::i#2 ]
|
||||
[8] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 9 + (byte) main::i#2) ← *((const byte[]) nums#0 + (byte) main::i#2) [ main::i#2 ]
|
||||
[9] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ]
|
||||
[10] if((byte) main::i#1!=(byte/signed byte/word/signed word) 4) goto main::@1 [ main::i#1 ]
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
[13] return [ ]
|
||||
[11] return [ ]
|
||||
to:@return
|
||||
|
||||
CONTROL FLOW GRAPH - PHI MEM COALESCED
|
||||
@ -852,15 +800,13 @@ main: scope:[main] from @1
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
[6] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word) 0 main::@1/(byte) main::i#1 ) [ main::i#2 ] ( main:2 [ main::i#2 ] )
|
||||
[7] (byte~) main::$1 ← (const byte[]) str#0 *idx (byte) main::i#2 [ main::i#2 main::$1 ] ( main:2 [ main::i#2 main::$1 ] )
|
||||
[8] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 4 + (byte) main::i#2) ← (byte~) main::$1 [ main::i#2 ] ( main:2 [ main::i#2 ] )
|
||||
[9] (byte~) main::$3 ← (const byte[]) nums#0 *idx (byte) main::i#2 [ main::i#2 main::$3 ] ( main:2 [ main::i#2 main::$3 ] )
|
||||
[10] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 9 + (byte) main::i#2) ← (byte~) main::$3 [ main::i#2 ] ( main:2 [ main::i#2 ] )
|
||||
[11] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] )
|
||||
[12] if((byte) main::i#1!=(byte/signed byte/word/signed word) 4) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] )
|
||||
[7] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 4 + (byte) main::i#2) ← *((const byte[]) str#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] )
|
||||
[8] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 9 + (byte) main::i#2) ← *((const byte[]) nums#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] )
|
||||
[9] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] )
|
||||
[10] if((byte) main::i#1!=(byte/signed byte/word/signed word) 4) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] )
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
[13] return [ ] ( main:2 [ ] )
|
||||
[11] return [ ] ( main:2 [ ] )
|
||||
to:@return
|
||||
|
||||
DOMINATORS
|
||||
@ -887,26 +833,18 @@ VARIABLE REGISTER WEIGHTS
|
||||
(byte*) SCREEN
|
||||
(byte) char
|
||||
(void()) main()
|
||||
(byte~) main::$1 22.0
|
||||
(byte~) main::$3 22.0
|
||||
(byte) main::i
|
||||
(byte) main::i#1 16.5
|
||||
(byte) main::i#2 13.2
|
||||
(byte) main::i#2 22.0
|
||||
(byte) num
|
||||
(byte[]) nums
|
||||
(byte[]) str
|
||||
|
||||
Initial phi equivalence classes
|
||||
[ main::i#2 main::i#1 ]
|
||||
Added variable main::$1 to zero page equivalence class [ main::$1 ]
|
||||
Added variable main::$3 to zero page equivalence class [ main::$3 ]
|
||||
Complete equivalence classes
|
||||
[ main::i#2 main::i#1 ]
|
||||
[ main::$1 ]
|
||||
[ main::$3 ]
|
||||
Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
|
||||
Allocated zp ZP_BYTE:3 [ main::$1 ]
|
||||
Allocated zp ZP_BYTE:4 [ main::$3 ]
|
||||
INITIAL ASM
|
||||
//SEG0 Basic Upstart
|
||||
.pc = $801 "Basic"
|
||||
@ -934,8 +872,6 @@ bend_from_b1:
|
||||
bend:
|
||||
//SEG8 main
|
||||
main: {
|
||||
.label _1 = 3
|
||||
.label _3 = 4
|
||||
.label i = 2
|
||||
//SEG9 [4] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 0) ← (const byte) char#0 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2
|
||||
lda #char
|
||||
@ -955,47 +891,44 @@ main: {
|
||||
jmp b1
|
||||
//SEG15 main::@1
|
||||
b1:
|
||||
//SEG16 [7] (byte~) main::$1 ← (const byte[]) str#0 *idx (byte) main::i#2 [ main::i#2 main::$1 ] ( main:2 [ main::i#2 main::$1 ] ) -- vbuz1=pbuc1_derefidx_vbuz2
|
||||
ldx i
|
||||
//SEG16 [7] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 4 + (byte) main::i#2) ← *((const byte[]) str#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1
|
||||
lda str,x
|
||||
sta _1
|
||||
//SEG17 [8] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 4 + (byte) main::i#2) ← (byte~) main::$1 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuz1=vbuz2
|
||||
lda _1
|
||||
ldx i
|
||||
sta SCREEN+4,x
|
||||
//SEG18 [9] (byte~) main::$3 ← (const byte[]) nums#0 *idx (byte) main::i#2 [ main::i#2 main::$3 ] ( main:2 [ main::i#2 main::$3 ] ) -- vbuz1=pbuc1_derefidx_vbuz2
|
||||
ldx i
|
||||
//SEG17 [8] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 9 + (byte) main::i#2) ← *((const byte[]) nums#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1
|
||||
lda nums,x
|
||||
sta _3
|
||||
//SEG19 [10] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 9 + (byte) main::i#2) ← (byte~) main::$3 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuz1=vbuz2
|
||||
lda _3
|
||||
ldx i
|
||||
sta SCREEN+9,x
|
||||
//SEG20 [11] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1=_inc_vbuz1
|
||||
ldx i
|
||||
//SEG18 [9] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1=_inc_vbuz1
|
||||
inc i
|
||||
//SEG21 [12] if((byte) main::i#1!=(byte/signed byte/word/signed word) 4) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1_neq_vbuc1_then_la1
|
||||
//SEG19 [10] if((byte) main::i#1!=(byte/signed byte/word/signed word) 4) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1_neq_vbuc1_then_la1
|
||||
lda i
|
||||
cmp #4
|
||||
bne b1_from_b1
|
||||
jmp breturn
|
||||
//SEG22 main::@return
|
||||
//SEG20 main::@return
|
||||
breturn:
|
||||
//SEG23 [13] return [ ] ( main:2 [ ] )
|
||||
//SEG21 [11] return [ ] ( main:2 [ ] )
|
||||
rts
|
||||
}
|
||||
|
||||
REGISTER UPLIFT POTENTIAL REGISTERS
|
||||
Statement [4] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 0) ← (const byte) char#0 [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
Statement [5] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 2) ← (const byte) num#0 [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:3 [ main::$1 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:4 [ main::$3 ] : zp ZP_BYTE:4 , reg byte a , reg byte x , reg byte y ,
|
||||
Statement [7] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 4 + (byte) main::i#2) ← *((const byte[]) str#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a
|
||||
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
|
||||
Statement [8] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 9 + (byte) main::i#2) ← *((const byte[]) nums#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a
|
||||
Statement [4] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 0) ← (const byte) char#0 [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
Statement [5] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 2) ← (const byte) num#0 [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
Statement [7] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 4 + (byte) main::i#2) ← *((const byte[]) str#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a
|
||||
Statement [8] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 9 + (byte) main::i#2) ← *((const byte[]) nums#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a
|
||||
Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y ,
|
||||
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [main] 29.7: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] 22: zp ZP_BYTE:3 [ main::$1 ] 22: zp ZP_BYTE:4 [ main::$3 ]
|
||||
Uplift Scope [main] 38.5: zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
|
||||
Uplift Scope []
|
||||
|
||||
Uplifting [main] best 395 combination reg byte x [ main::i#2 main::i#1 ] reg byte a [ main::$1 ] reg byte a [ main::$3 ]
|
||||
Uplifting [main] best 395 combination reg byte x [ main::i#2 main::i#1 ]
|
||||
Uplifting [] best 395 combination
|
||||
|
||||
ASSEMBLER BEFORE OPTIMIZATION
|
||||
@ -1042,23 +975,21 @@ main: {
|
||||
jmp b1
|
||||
//SEG15 main::@1
|
||||
b1:
|
||||
//SEG16 [7] (byte~) main::$1 ← (const byte[]) str#0 *idx (byte) main::i#2 [ main::i#2 main::$1 ] ( main:2 [ main::i#2 main::$1 ] ) -- vbuaa=pbuc1_derefidx_vbuxx
|
||||
//SEG16 [7] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 4 + (byte) main::i#2) ← *((const byte[]) str#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx
|
||||
lda str,x
|
||||
//SEG17 [8] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 4 + (byte) main::i#2) ← (byte~) main::$1 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa
|
||||
sta SCREEN+4,x
|
||||
//SEG18 [9] (byte~) main::$3 ← (const byte[]) nums#0 *idx (byte) main::i#2 [ main::i#2 main::$3 ] ( main:2 [ main::i#2 main::$3 ] ) -- vbuaa=pbuc1_derefidx_vbuxx
|
||||
//SEG17 [8] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 9 + (byte) main::i#2) ← *((const byte[]) nums#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx
|
||||
lda nums,x
|
||||
//SEG19 [10] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 9 + (byte) main::i#2) ← (byte~) main::$3 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa
|
||||
sta SCREEN+9,x
|
||||
//SEG20 [11] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx=_inc_vbuxx
|
||||
//SEG18 [9] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx=_inc_vbuxx
|
||||
inx
|
||||
//SEG21 [12] if((byte) main::i#1!=(byte/signed byte/word/signed word) 4) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1
|
||||
//SEG19 [10] if((byte) main::i#1!=(byte/signed byte/word/signed word) 4) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1
|
||||
cpx #4
|
||||
bne b1_from_b1
|
||||
jmp breturn
|
||||
//SEG22 main::@return
|
||||
//SEG20 main::@return
|
||||
breturn:
|
||||
//SEG23 [13] return [ ] ( main:2 [ ] )
|
||||
//SEG21 [11] return [ ] ( main:2 [ ] )
|
||||
rts
|
||||
}
|
||||
|
||||
@ -1091,13 +1022,11 @@ FINAL SYMBOL TABLE
|
||||
(byte) char
|
||||
(const byte) char#0 char = (byte) 'a'
|
||||
(void()) main()
|
||||
(byte~) main::$1 reg byte a 22.0
|
||||
(byte~) main::$3 reg byte a 22.0
|
||||
(label) main::@1
|
||||
(label) main::@return
|
||||
(byte) main::i
|
||||
(byte) main::i#1 reg byte x 16.5
|
||||
(byte) main::i#2 reg byte x 13.2
|
||||
(byte) main::i#2 reg byte x 22.0
|
||||
(byte) num
|
||||
(const byte) num#0 num = (byte/signed byte/word/signed word) 1
|
||||
(byte[]) nums
|
||||
@ -1106,8 +1035,6 @@ FINAL SYMBOL TABLE
|
||||
(const byte[]) str#0 str = (string) "bc"+(string) "d"+(byte) 'e'
|
||||
|
||||
reg byte x [ main::i#2 main::i#1 ]
|
||||
reg byte a [ main::$1 ]
|
||||
reg byte a [ main::$3 ]
|
||||
|
||||
FINAL CODE
|
||||
//SEG0 Basic Upstart
|
||||
@ -1142,21 +1069,19 @@ main: {
|
||||
//SEG14 [6] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@1->main::@1#0] -- register_copy
|
||||
//SEG15 main::@1
|
||||
b1:
|
||||
//SEG16 [7] (byte~) main::$1 ← (const byte[]) str#0 *idx (byte) main::i#2 [ main::i#2 main::$1 ] ( main:2 [ main::i#2 main::$1 ] ) -- vbuaa=pbuc1_derefidx_vbuxx
|
||||
//SEG16 [7] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 4 + (byte) main::i#2) ← *((const byte[]) str#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx
|
||||
lda str,x
|
||||
//SEG17 [8] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 4 + (byte) main::i#2) ← (byte~) main::$1 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa
|
||||
sta SCREEN+4,x
|
||||
//SEG18 [9] (byte~) main::$3 ← (const byte[]) nums#0 *idx (byte) main::i#2 [ main::i#2 main::$3 ] ( main:2 [ main::i#2 main::$3 ] ) -- vbuaa=pbuc1_derefidx_vbuxx
|
||||
//SEG17 [8] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 9 + (byte) main::i#2) ← *((const byte[]) nums#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx
|
||||
lda nums,x
|
||||
//SEG19 [10] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 9 + (byte) main::i#2) ← (byte~) main::$3 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa
|
||||
sta SCREEN+9,x
|
||||
//SEG20 [11] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx=_inc_vbuxx
|
||||
//SEG18 [9] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx=_inc_vbuxx
|
||||
inx
|
||||
//SEG21 [12] if((byte) main::i#1!=(byte/signed byte/word/signed word) 4) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1
|
||||
//SEG19 [10] if((byte) main::i#1!=(byte/signed byte/word/signed word) 4) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1
|
||||
cpx #4
|
||||
bne b1
|
||||
//SEG22 main::@return
|
||||
//SEG23 [13] return [ ] ( main:2 [ ] )
|
||||
//SEG20 main::@return
|
||||
//SEG21 [11] return [ ] ( main:2 [ ] )
|
||||
rts
|
||||
}
|
||||
|
||||
|
@ -6,13 +6,11 @@
|
||||
(byte) char
|
||||
(const byte) char#0 char = (byte) 'a'
|
||||
(void()) main()
|
||||
(byte~) main::$1 reg byte a 22.0
|
||||
(byte~) main::$3 reg byte a 22.0
|
||||
(label) main::@1
|
||||
(label) main::@return
|
||||
(byte) main::i
|
||||
(byte) main::i#1 reg byte x 16.5
|
||||
(byte) main::i#2 reg byte x 13.2
|
||||
(byte) main::i#2 reg byte x 22.0
|
||||
(byte) num
|
||||
(const byte) num#0 num = (byte/signed byte/word/signed word) 1
|
||||
(byte[]) nums
|
||||
@ -21,5 +19,3 @@
|
||||
(const byte[]) str#0 str = (string) "bc"+(string) "d"+(byte) 'e'
|
||||
|
||||
reg byte x [ main::i#2 main::i#1 ]
|
||||
reg byte a [ main::$1 ]
|
||||
reg byte a [ main::$3 ]
|
||||
|
@ -12,14 +12,12 @@ main: scope:[main] from @1
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
[5] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word) 0 main::@2/(byte) main::i#1 ) [ main::i#2 ] ( main:2 [ main::i#2 ] )
|
||||
[6] (byte~) main::$0 ← (const byte[]) main::msg#0 *idx (byte) main::i#2 [ main::i#2 main::$0 ] ( main:2 [ main::i#2 main::$0 ] )
|
||||
[7] if((byte~) main::$0!=(byte) '@') goto main::@2 [ main::i#2 ] ( main:2 [ main::i#2 ] )
|
||||
[6] if(*((const byte[]) main::msg#0 + (byte) main::i#2)!=(byte) '@') goto main::@2 [ main::i#2 ] ( main:2 [ main::i#2 ] )
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
[8] return [ ] ( main:2 [ ] )
|
||||
[7] return [ ] ( main:2 [ ] )
|
||||
to:@return
|
||||
main::@2: scope:[main] from main::@1
|
||||
[9] (byte~) main::$2 ← (const byte[]) main::msg#0 *idx (byte) main::i#2 [ main::i#2 main::$2 ] ( main:2 [ main::i#2 main::$2 ] )
|
||||
[10] *((const byte*) main::screen#0 + (byte) main::i#2) ← (byte~) main::$2 [ main::i#2 ] ( main:2 [ main::i#2 ] )
|
||||
[11] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] )
|
||||
[8] *((const byte*) main::screen#0 + (byte) main::i#2) ← *((const byte[]) main::msg#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] )
|
||||
[9] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] )
|
||||
to:main::@1
|
||||
|
@ -15,13 +15,11 @@ proc (void()) main()
|
||||
(byte[]) main::msg ← (string) "message 2 @"
|
||||
(byte) main::i ← (byte/signed byte/word/signed word) 0
|
||||
main::@1:
|
||||
(byte~) main::$0 ← (byte[]) main::msg *idx (byte) main::i
|
||||
(boolean~) main::$1 ← (byte~) main::$0 != (byte) '@'
|
||||
if((boolean~) main::$1) goto main::@2
|
||||
(boolean~) main::$0 ← *((byte[]) main::msg + (byte) main::i) != (byte) '@'
|
||||
if((boolean~) main::$0) goto main::@2
|
||||
goto main::@3
|
||||
main::@2:
|
||||
(byte~) main::$2 ← (byte[]) main::msg *idx (byte) main::i
|
||||
*((byte*) main::screen + (byte) main::i) ← (byte~) main::$2
|
||||
*((byte*) main::screen + (byte) main::i) ← *((byte[]) main::msg + (byte) main::i)
|
||||
(byte) main::i ← ++ (byte) main::i
|
||||
goto main::@1
|
||||
main::@3:
|
||||
@ -32,9 +30,7 @@ endproc // main()
|
||||
|
||||
SYMBOLS
|
||||
(void()) main()
|
||||
(byte~) main::$0
|
||||
(boolean~) main::$1
|
||||
(byte~) main::$2
|
||||
(boolean~) main::$0
|
||||
(label) main::@1
|
||||
(label) main::@2
|
||||
(label) main::@3
|
||||
@ -53,13 +49,11 @@ main: scope:[main] from
|
||||
(byte) main::i ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
(byte~) main::$0 ← (byte[]) main::msg *idx (byte) main::i
|
||||
(boolean~) main::$1 ← (byte~) main::$0 != (byte) '@'
|
||||
if((boolean~) main::$1) goto main::@2
|
||||
(boolean~) main::$0 ← *((byte[]) main::msg + (byte) main::i) != (byte) '@'
|
||||
if((boolean~) main::$0) goto main::@2
|
||||
to:main::@4
|
||||
main::@2: scope:[main] from main::@1 main::@5
|
||||
(byte~) main::$2 ← (byte[]) main::msg *idx (byte) main::i
|
||||
*((byte*) main::screen + (byte) main::i) ← (byte~) main::$2
|
||||
*((byte*) main::screen + (byte) main::i) ← *((byte[]) main::msg + (byte) main::i)
|
||||
(byte) main::i ← ++ (byte) main::i
|
||||
to:main::@1
|
||||
main::@4: scope:[main] from main::@1
|
||||
@ -91,13 +85,11 @@ main: scope:[main] from
|
||||
(byte) main::i ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
(byte~) main::$0 ← (byte[]) main::msg *idx (byte) main::i
|
||||
(boolean~) main::$1 ← (byte~) main::$0 != (byte) '@'
|
||||
if((boolean~) main::$1) goto main::@2
|
||||
(boolean~) main::$0 ← *((byte[]) main::msg + (byte) main::i) != (byte) '@'
|
||||
if((boolean~) main::$0) goto main::@2
|
||||
to:main::@return
|
||||
main::@2: scope:[main] from main::@1
|
||||
(byte~) main::$2 ← (byte[]) main::msg *idx (byte) main::i
|
||||
*((byte*) main::screen + (byte) main::i) ← (byte~) main::$2
|
||||
*((byte*) main::screen + (byte) main::i) ← *((byte[]) main::msg + (byte) main::i)
|
||||
(byte) main::i ← ++ (byte) main::i
|
||||
to:main::@1
|
||||
main::@return: scope:[main] from main::@1
|
||||
@ -119,13 +111,11 @@ main: scope:[main] from @1
|
||||
(byte) main::i ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
(byte~) main::$0 ← (byte[]) main::msg *idx (byte) main::i
|
||||
(boolean~) main::$1 ← (byte~) main::$0 != (byte) '@'
|
||||
if((boolean~) main::$1) goto main::@2
|
||||
(boolean~) main::$0 ← *((byte[]) main::msg + (byte) main::i) != (byte) '@'
|
||||
if((boolean~) main::$0) goto main::@2
|
||||
to:main::@return
|
||||
main::@2: scope:[main] from main::@1
|
||||
(byte~) main::$2 ← (byte[]) main::msg *idx (byte) main::i
|
||||
*((byte*) main::screen + (byte) main::i) ← (byte~) main::$2
|
||||
*((byte*) main::screen + (byte) main::i) ← *((byte[]) main::msg + (byte) main::i)
|
||||
(byte) main::i ← ++ (byte) main::i
|
||||
to:main::@1
|
||||
main::@return: scope:[main] from main::@1
|
||||
@ -152,16 +142,14 @@ main::@1: scope:[main] from main main::@2
|
||||
(byte*) main::screen#2 ← phi( main/(byte*) main::screen#0 main::@2/(byte*) main::screen#1 )
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 )
|
||||
(byte[]) main::msg#1 ← phi( main/(byte[]) main::msg#0 main::@2/(byte[]) main::msg#2 )
|
||||
(byte~) main::$0 ← (byte[]) main::msg#1 *idx (byte) main::i#2
|
||||
(boolean~) main::$1 ← (byte~) main::$0 != (byte) '@'
|
||||
if((boolean~) main::$1) goto main::@2
|
||||
(boolean~) main::$0 ← *((byte[]) main::msg#1 + (byte) main::i#2) != (byte) '@'
|
||||
if((boolean~) main::$0) goto main::@2
|
||||
to:main::@return
|
||||
main::@2: scope:[main] from main::@1
|
||||
(byte*) main::screen#1 ← phi( main::@1/(byte*) main::screen#2 )
|
||||
(byte) main::i#3 ← phi( main::@1/(byte) main::i#2 )
|
||||
(byte[]) main::msg#2 ← phi( main::@1/(byte[]) main::msg#1 )
|
||||
(byte~) main::$2 ← (byte[]) main::msg#2 *idx (byte) main::i#3
|
||||
*((byte*) main::screen#1 + (byte) main::i#3) ← (byte~) main::$2
|
||||
*((byte*) main::screen#1 + (byte) main::i#3) ← *((byte[]) main::msg#2 + (byte) main::i#3)
|
||||
(byte) main::i#1 ← ++ (byte) main::i#3
|
||||
to:main::@1
|
||||
main::@return: scope:[main] from main::@1
|
||||
@ -186,16 +174,14 @@ main::@1: scope:[main] from main main::@2
|
||||
(byte*) main::screen#2 ← phi( main/(byte*) main::screen#0 main::@2/(byte*) main::screen#1 )
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 )
|
||||
(byte[]) main::msg#1 ← phi( main/(byte[]) main::msg#0 main::@2/(byte[]) main::msg#2 )
|
||||
(byte~) main::$0 ← (byte[]) main::msg#1 *idx (byte) main::i#2
|
||||
(boolean~) main::$1 ← (byte~) main::$0 != (byte) '@'
|
||||
if((boolean~) main::$1) goto main::@2
|
||||
(boolean~) main::$0 ← *((byte[]) main::msg#1 + (byte) main::i#2) != (byte) '@'
|
||||
if((boolean~) main::$0) goto main::@2
|
||||
to:main::@return
|
||||
main::@2: scope:[main] from main::@1
|
||||
(byte*) main::screen#1 ← phi( main::@1/(byte*) main::screen#2 )
|
||||
(byte) main::i#3 ← phi( main::@1/(byte) main::i#2 )
|
||||
(byte[]) main::msg#2 ← phi( main::@1/(byte[]) main::msg#1 )
|
||||
(byte~) main::$2 ← (byte[]) main::msg#2 *idx (byte) main::i#3
|
||||
*((byte*) main::screen#1 + (byte) main::i#3) ← (byte~) main::$2
|
||||
*((byte*) main::screen#1 + (byte) main::i#3) ← *((byte[]) main::msg#2 + (byte) main::i#3)
|
||||
(byte) main::i#1 ← ++ (byte) main::i#3
|
||||
to:main::@1
|
||||
main::@return: scope:[main] from main::@1
|
||||
@ -214,9 +200,7 @@ INITIAL SSA SYMBOL TABLE
|
||||
(label) @begin
|
||||
(label) @end
|
||||
(void()) main()
|
||||
(byte~) main::$0
|
||||
(boolean~) main::$1
|
||||
(byte~) main::$2
|
||||
(boolean~) main::$0
|
||||
(label) main::@1
|
||||
(label) main::@2
|
||||
(label) main::@return
|
||||
@ -248,16 +232,14 @@ main::@1: scope:[main] from main main::@2
|
||||
(byte*) main::screen#2 ← phi( main/(byte*) main::screen#0 main::@2/(byte*) main::screen#1 )
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 )
|
||||
(byte[]) main::msg#1 ← phi( main/(byte[]) main::msg#0 main::@2/(byte[]) main::msg#2 )
|
||||
(byte~) main::$0 ← (byte[]) main::msg#1 *idx (byte) main::i#2
|
||||
(boolean~) main::$1 ← (byte~) main::$0 != (byte) '@'
|
||||
if((boolean~) main::$1) goto main::@2
|
||||
(boolean~) main::$0 ← *((byte[]) main::msg#1 + (byte) main::i#2) != (byte) '@'
|
||||
if((boolean~) main::$0) goto main::@2
|
||||
to:main::@return
|
||||
main::@2: scope:[main] from main::@1
|
||||
(byte*) main::screen#1 ← phi( main::@1/(byte*) main::screen#2 )
|
||||
(byte) main::i#3 ← phi( main::@1/(byte) main::i#2 )
|
||||
(byte[]) main::msg#2 ← phi( main::@1/(byte[]) main::msg#1 )
|
||||
(byte~) main::$2 ← (byte[]) main::msg#2 *idx (byte) main::i#3
|
||||
*((byte*) main::screen#1 + (byte) main::i#3) ← (byte~) main::$2
|
||||
*((byte*) main::screen#1 + (byte) main::i#3) ← *((byte[]) main::msg#2 + (byte) main::i#3)
|
||||
(byte) main::i#1 ← ++ (byte) main::i#3
|
||||
to:main::@1
|
||||
main::@return: scope:[main] from main::@1
|
||||
@ -284,13 +266,11 @@ main::@1: scope:[main] from main main::@2
|
||||
(byte*) main::screen#1 ← phi( main/(byte*) main::screen#0 main::@2/(byte*) main::screen#1 )
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 )
|
||||
(byte[]) main::msg#1 ← phi( main/(byte[]) main::msg#0 main::@2/(byte[]) main::msg#1 )
|
||||
(byte~) main::$0 ← (byte[]) main::msg#1 *idx (byte) main::i#2
|
||||
(boolean~) main::$1 ← (byte~) main::$0 != (byte) '@'
|
||||
if((boolean~) main::$1) goto main::@2
|
||||
(boolean~) main::$0 ← *((byte[]) main::msg#1 + (byte) main::i#2) != (byte) '@'
|
||||
if((boolean~) main::$0) goto main::@2
|
||||
to:main::@return
|
||||
main::@2: scope:[main] from main::@1
|
||||
(byte~) main::$2 ← (byte[]) main::msg#1 *idx (byte) main::i#2
|
||||
*((byte*) main::screen#1 + (byte) main::i#2) ← (byte~) main::$2
|
||||
*((byte*) main::screen#1 + (byte) main::i#2) ← *((byte[]) main::msg#1 + (byte) main::i#2)
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
to:main::@1
|
||||
main::@return: scope:[main] from main::@1
|
||||
@ -316,13 +296,11 @@ main::@1: scope:[main] from main main::@2
|
||||
(byte*) main::screen#1 ← phi( main/(byte*) main::screen#0 )
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 )
|
||||
(byte[]) main::msg#1 ← phi( main/(byte[]) main::msg#0 )
|
||||
(byte~) main::$0 ← (byte[]) main::msg#1 *idx (byte) main::i#2
|
||||
(boolean~) main::$1 ← (byte~) main::$0 != (byte) '@'
|
||||
if((boolean~) main::$1) goto main::@2
|
||||
(boolean~) main::$0 ← *((byte[]) main::msg#1 + (byte) main::i#2) != (byte) '@'
|
||||
if((boolean~) main::$0) goto main::@2
|
||||
to:main::@return
|
||||
main::@2: scope:[main] from main::@1
|
||||
(byte~) main::$2 ← (byte[]) main::msg#1 *idx (byte) main::i#2
|
||||
*((byte*) main::screen#1 + (byte) main::i#2) ← (byte~) main::$2
|
||||
*((byte*) main::screen#1 + (byte) main::i#2) ← *((byte[]) main::msg#1 + (byte) main::i#2)
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
to:main::@1
|
||||
main::@return: scope:[main] from main::@1
|
||||
@ -346,13 +324,11 @@ main: scope:[main] from @1
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 )
|
||||
(byte~) main::$0 ← (byte[]) main::msg#0 *idx (byte) main::i#2
|
||||
(boolean~) main::$1 ← (byte~) main::$0 != (byte) '@'
|
||||
if((boolean~) main::$1) goto main::@2
|
||||
(boolean~) main::$0 ← *((byte[]) main::msg#0 + (byte) main::i#2) != (byte) '@'
|
||||
if((boolean~) main::$0) goto main::@2
|
||||
to:main::@return
|
||||
main::@2: scope:[main] from main::@1
|
||||
(byte~) main::$2 ← (byte[]) main::msg#0 *idx (byte) main::i#2
|
||||
*((byte*) main::screen#0 + (byte) main::i#2) ← (byte~) main::$2
|
||||
*((byte*) main::screen#0 + (byte) main::i#2) ← *((byte[]) main::msg#0 + (byte) main::i#2)
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
to:main::@1
|
||||
main::@return: scope:[main] from main::@1
|
||||
@ -363,7 +339,7 @@ main::@return: scope:[main] from main::@1
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
|
||||
Simple Condition (boolean~) main::$1 if((byte~) main::$0!=(byte) '@') goto main::@2
|
||||
Simple Condition (boolean~) main::$0 if(*((byte[]) main::msg#0 + (byte) main::i#2)!=(byte) '@') goto main::@2
|
||||
Succesful SSA optimization Pass2ConditionalJumpSimplification
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
@ -375,12 +351,10 @@ main: scope:[main] from @1
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 )
|
||||
(byte~) main::$0 ← (byte[]) main::msg#0 *idx (byte) main::i#2
|
||||
if((byte~) main::$0!=(byte) '@') goto main::@2
|
||||
if(*((byte[]) main::msg#0 + (byte) main::i#2)!=(byte) '@') goto main::@2
|
||||
to:main::@return
|
||||
main::@2: scope:[main] from main::@1
|
||||
(byte~) main::$2 ← (byte[]) main::msg#0 *idx (byte) main::i#2
|
||||
*((byte*) main::screen#0 + (byte) main::i#2) ← (byte~) main::$2
|
||||
*((byte*) main::screen#0 + (byte) main::i#2) ← *((byte[]) main::msg#0 + (byte) main::i#2)
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
to:main::@1
|
||||
main::@return: scope:[main] from main::@1
|
||||
@ -402,12 +376,10 @@ main: scope:[main] from @1
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
(byte) main::i#2 ← phi( main/(const byte) main::i#0 main::@2/(byte) main::i#1 )
|
||||
(byte~) main::$0 ← (const byte[]) main::msg#0 *idx (byte) main::i#2
|
||||
if((byte~) main::$0!=(byte) '@') goto main::@2
|
||||
if(*((const byte[]) main::msg#0 + (byte) main::i#2)!=(byte) '@') goto main::@2
|
||||
to:main::@return
|
||||
main::@2: scope:[main] from main::@1
|
||||
(byte~) main::$2 ← (const byte[]) main::msg#0 *idx (byte) main::i#2
|
||||
*((const byte*) main::screen#0 + (byte) main::i#2) ← (byte~) main::$2
|
||||
*((const byte*) main::screen#0 + (byte) main::i#2) ← *((const byte[]) main::msg#0 + (byte) main::i#2)
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
to:main::@1
|
||||
main::@return: scope:[main] from main::@1
|
||||
@ -418,12 +390,6 @@ main::@return: scope:[main] from main::@1
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
||||
Inlining constant with var siblings (const byte) main::i#0
|
||||
Inlining constant with var siblings (const byte) main::i#0
|
||||
Constant inlined main::i#0 = (byte/signed byte/word/signed word) 0
|
||||
@ -435,12 +401,10 @@ main: scope:[main] from @1
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
(byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word) 0 main::@2/(byte) main::i#1 )
|
||||
(byte~) main::$0 ← (const byte[]) main::msg#0 *idx (byte) main::i#2
|
||||
if((byte~) main::$0!=(byte) '@') goto main::@2
|
||||
if(*((const byte[]) main::msg#0 + (byte) main::i#2)!=(byte) '@') goto main::@2
|
||||
to:main::@return
|
||||
main::@2: scope:[main] from main::@1
|
||||
(byte~) main::$2 ← (const byte[]) main::msg#0 *idx (byte) main::i#2
|
||||
*((const byte*) main::screen#0 + (byte) main::i#2) ← (byte~) main::$2
|
||||
*((const byte*) main::screen#0 + (byte) main::i#2) ← *((const byte[]) main::msg#0 + (byte) main::i#2)
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
to:main::@1
|
||||
main::@return: scope:[main] from main::@1
|
||||
@ -456,8 +420,6 @@ FINAL SYMBOL TABLE
|
||||
(label) @begin
|
||||
(label) @end
|
||||
(void()) main()
|
||||
(byte~) main::$0
|
||||
(byte~) main::$2
|
||||
(label) main::@1
|
||||
(label) main::@2
|
||||
(label) main::@return
|
||||
@ -482,15 +444,13 @@ main: scope:[main] from @1
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
(byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word) 0 main::@2/(byte~) main::i#4 )
|
||||
(byte~) main::$0 ← (const byte[]) main::msg#0 *idx (byte) main::i#2
|
||||
if((byte~) main::$0!=(byte) '@') goto main::@2
|
||||
if(*((const byte[]) main::msg#0 + (byte) main::i#2)!=(byte) '@') goto main::@2
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
to:@return
|
||||
main::@2: scope:[main] from main::@1
|
||||
(byte~) main::$2 ← (const byte[]) main::msg#0 *idx (byte) main::i#2
|
||||
*((const byte*) main::screen#0 + (byte) main::i#2) ← (byte~) main::$2
|
||||
*((const byte*) main::screen#0 + (byte) main::i#2) ← *((const byte[]) main::msg#0 + (byte) main::i#2)
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
(byte~) main::i#4 ← (byte) main::i#1
|
||||
to:main::@1
|
||||
@ -502,7 +462,6 @@ Adding NOP phi() at start of main
|
||||
CALL GRAPH
|
||||
Calls in [] to main:2
|
||||
|
||||
Propagating live ranges...
|
||||
Propagating live ranges...
|
||||
Propagating live ranges...
|
||||
CONTROL FLOW GRAPH - LIVE RANGES FOUND
|
||||
@ -520,21 +479,19 @@ main: scope:[main] from @1
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
[5] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word) 0 main::@2/(byte~) main::i#4 ) [ main::i#2 ]
|
||||
[6] (byte~) main::$0 ← (const byte[]) main::msg#0 *idx (byte) main::i#2 [ main::i#2 main::$0 ]
|
||||
[7] if((byte~) main::$0!=(byte) '@') goto main::@2 [ main::i#2 ]
|
||||
[6] if(*((const byte[]) main::msg#0 + (byte) main::i#2)!=(byte) '@') goto main::@2 [ main::i#2 ]
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
[8] return [ ]
|
||||
[7] return [ ]
|
||||
to:@return
|
||||
main::@2: scope:[main] from main::@1
|
||||
[9] (byte~) main::$2 ← (const byte[]) main::msg#0 *idx (byte) main::i#2 [ main::i#2 main::$2 ]
|
||||
[10] *((const byte*) main::screen#0 + (byte) main::i#2) ← (byte~) main::$2 [ main::i#2 ]
|
||||
[11] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ]
|
||||
[12] (byte~) main::i#4 ← (byte) main::i#1 [ main::i#4 ]
|
||||
[8] *((const byte*) main::screen#0 + (byte) main::i#2) ← *((const byte[]) main::msg#0 + (byte) main::i#2) [ main::i#2 ]
|
||||
[9] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ]
|
||||
[10] (byte~) main::i#4 ← (byte) main::i#1 [ main::i#4 ]
|
||||
to:main::@1
|
||||
|
||||
Created 1 initial phi equivalence classes
|
||||
Coalesced [12] main::i#4 ← main::i#1
|
||||
Coalesced [10] main::i#4 ← main::i#1
|
||||
Coalesced down to 1 phi equivalence classes
|
||||
Block Sequence Planned @begin @1 @end main main::@1 main::@return main::@2
|
||||
Adding NOP phi() at start of @begin
|
||||
@ -543,7 +500,6 @@ Adding NOP phi() at start of @end
|
||||
Adding NOP phi() at start of main
|
||||
Propagating live ranges...
|
||||
Propagating live ranges...
|
||||
Propagating live ranges...
|
||||
CONTROL FLOW GRAPH - BEFORE EFFECTIVE LIVE RANGES
|
||||
@begin: scope:[] from
|
||||
[0] phi() [ ]
|
||||
@ -559,16 +515,14 @@ main: scope:[main] from @1
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
[5] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word) 0 main::@2/(byte) main::i#1 ) [ main::i#2 ]
|
||||
[6] (byte~) main::$0 ← (const byte[]) main::msg#0 *idx (byte) main::i#2 [ main::i#2 main::$0 ]
|
||||
[7] if((byte~) main::$0!=(byte) '@') goto main::@2 [ main::i#2 ]
|
||||
[6] if(*((const byte[]) main::msg#0 + (byte) main::i#2)!=(byte) '@') goto main::@2 [ main::i#2 ]
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
[8] return [ ]
|
||||
[7] return [ ]
|
||||
to:@return
|
||||
main::@2: scope:[main] from main::@1
|
||||
[9] (byte~) main::$2 ← (const byte[]) main::msg#0 *idx (byte) main::i#2 [ main::i#2 main::$2 ]
|
||||
[10] *((const byte*) main::screen#0 + (byte) main::i#2) ← (byte~) main::$2 [ main::i#2 ]
|
||||
[11] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ]
|
||||
[8] *((const byte*) main::screen#0 + (byte) main::i#2) ← *((const byte[]) main::msg#0 + (byte) main::i#2) [ main::i#2 ]
|
||||
[9] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ]
|
||||
to:main::@1
|
||||
|
||||
CONTROL FLOW GRAPH - PHI MEM COALESCED
|
||||
@ -586,16 +540,14 @@ main: scope:[main] from @1
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
[5] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word) 0 main::@2/(byte) main::i#1 ) [ main::i#2 ] ( main:2 [ main::i#2 ] )
|
||||
[6] (byte~) main::$0 ← (const byte[]) main::msg#0 *idx (byte) main::i#2 [ main::i#2 main::$0 ] ( main:2 [ main::i#2 main::$0 ] )
|
||||
[7] if((byte~) main::$0!=(byte) '@') goto main::@2 [ main::i#2 ] ( main:2 [ main::i#2 ] )
|
||||
[6] if(*((const byte[]) main::msg#0 + (byte) main::i#2)!=(byte) '@') goto main::@2 [ main::i#2 ] ( main:2 [ main::i#2 ] )
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
[8] return [ ] ( main:2 [ ] )
|
||||
[7] return [ ] ( main:2 [ ] )
|
||||
to:@return
|
||||
main::@2: scope:[main] from main::@1
|
||||
[9] (byte~) main::$2 ← (const byte[]) main::msg#0 *idx (byte) main::i#2 [ main::i#2 main::$2 ] ( main:2 [ main::i#2 main::$2 ] )
|
||||
[10] *((const byte*) main::screen#0 + (byte) main::i#2) ← (byte~) main::$2 [ main::i#2 ] ( main:2 [ main::i#2 ] )
|
||||
[11] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] )
|
||||
[8] *((const byte*) main::screen#0 + (byte) main::i#2) ← *((const byte[]) main::msg#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] )
|
||||
[9] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] )
|
||||
to:main::@1
|
||||
|
||||
DOMINATORS
|
||||
@ -621,25 +573,17 @@ Loop head: main::@1 tails: main::@2 blocks: main::@2 main::@1 depth: 1
|
||||
|
||||
VARIABLE REGISTER WEIGHTS
|
||||
(void()) main()
|
||||
(byte~) main::$0 22.0
|
||||
(byte~) main::$2 22.0
|
||||
(byte) main::i
|
||||
(byte) main::i#1 22.0
|
||||
(byte) main::i#2 11.0
|
||||
(byte) main::i#2 18.333333333333332
|
||||
(byte[]) main::msg
|
||||
(byte*) main::screen
|
||||
|
||||
Initial phi equivalence classes
|
||||
[ main::i#2 main::i#1 ]
|
||||
Added variable main::$0 to zero page equivalence class [ main::$0 ]
|
||||
Added variable main::$2 to zero page equivalence class [ main::$2 ]
|
||||
Complete equivalence classes
|
||||
[ main::i#2 main::i#1 ]
|
||||
[ main::$0 ]
|
||||
[ main::$2 ]
|
||||
Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
|
||||
Allocated zp ZP_BYTE:3 [ main::$0 ]
|
||||
Allocated zp ZP_BYTE:4 [ main::$2 ]
|
||||
INITIAL ASM
|
||||
//SEG0 Basic Upstart
|
||||
.pc = $801 "Basic"
|
||||
@ -665,8 +609,6 @@ bend:
|
||||
//SEG9 main
|
||||
main: {
|
||||
.const screen = $400
|
||||
.label _0 = 3
|
||||
.label _2 = 4
|
||||
.label i = 2
|
||||
//SEG10 [5] phi from main to main::@1 [phi:main->main::@1]
|
||||
b1_from_main:
|
||||
@ -676,48 +618,47 @@ main: {
|
||||
jmp b1
|
||||
//SEG12 main::@1
|
||||
b1:
|
||||
//SEG13 [6] (byte~) main::$0 ← (const byte[]) main::msg#0 *idx (byte) main::i#2 [ main::i#2 main::$0 ] ( main:2 [ main::i#2 main::$0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2
|
||||
ldx i
|
||||
lda msg,x
|
||||
sta _0
|
||||
//SEG14 [7] if((byte~) main::$0!=(byte) '@') goto main::@2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- vbuz1_neq_vbuc1_then_la1
|
||||
lda _0
|
||||
//SEG13 [6] if(*((const byte[]) main::msg#0 + (byte) main::i#2)!=(byte) '@') goto main::@2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuz1_neq_vbuc2_then_la1
|
||||
ldy i
|
||||
lda msg,y
|
||||
cmp #'@'
|
||||
bne b2
|
||||
jmp breturn
|
||||
//SEG15 main::@return
|
||||
//SEG14 main::@return
|
||||
breturn:
|
||||
//SEG16 [8] return [ ] ( main:2 [ ] )
|
||||
//SEG15 [7] return [ ] ( main:2 [ ] )
|
||||
rts
|
||||
//SEG17 main::@2
|
||||
//SEG16 main::@2
|
||||
b2:
|
||||
//SEG18 [9] (byte~) main::$2 ← (const byte[]) main::msg#0 *idx (byte) main::i#2 [ main::i#2 main::$2 ] ( main:2 [ main::i#2 main::$2 ] ) -- vbuz1=pbuc1_derefidx_vbuz2
|
||||
ldx i
|
||||
//SEG17 [8] *((const byte*) main::screen#0 + (byte) main::i#2) ← *((const byte[]) main::msg#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1
|
||||
lda msg,x
|
||||
sta _2
|
||||
//SEG19 [10] *((const byte*) main::screen#0 + (byte) main::i#2) ← (byte~) main::$2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuz1=vbuz2
|
||||
lda _2
|
||||
ldx i
|
||||
sta screen,x
|
||||
//SEG20 [11] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1=_inc_vbuz1
|
||||
ldx i
|
||||
//SEG18 [9] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1=_inc_vbuz1
|
||||
inc i
|
||||
//SEG21 [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1]
|
||||
//SEG19 [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1]
|
||||
b1_from_b2:
|
||||
//SEG22 [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy
|
||||
//SEG20 [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy
|
||||
jmp b1
|
||||
msg: .text "message 2 @"
|
||||
}
|
||||
|
||||
REGISTER UPLIFT POTENTIAL REGISTERS
|
||||
Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:3 [ main::$0 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:4 [ main::$2 ] : zp ZP_BYTE:4 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential register analysis [6] if(*(main::msg#0 + main::i#2)!='@') goto main::@2 missing fragment pbuc1_derefidx_vbuaa_neq_vbuc2_then_la1 allocation: reg byte a [ main::i#2 main::i#1 ]
|
||||
MISSING FRAGMENTS
|
||||
pbuc1_derefidx_vbuaa_neq_vbuc2_then_la1
|
||||
Statement [6] if(*((const byte[]) main::msg#0 + (byte) main::i#2)!=(byte) '@') goto main::@2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a
|
||||
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
|
||||
Statement [8] *((const byte*) main::screen#0 + (byte) main::i#2) ← *((const byte[]) main::msg#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a
|
||||
Statement [6] if(*((const byte[]) main::msg#0 + (byte) main::i#2)!=(byte) '@') goto main::@2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a
|
||||
Statement [8] *((const byte*) main::screen#0 + (byte) main::i#2) ← *((const byte[]) main::msg#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a
|
||||
Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y ,
|
||||
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [main] 33: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] 22: zp ZP_BYTE:3 [ main::$0 ] 22: zp ZP_BYTE:4 [ main::$2 ]
|
||||
Uplift Scope [main] 40.33: zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
|
||||
Uplift Scope []
|
||||
|
||||
Uplifting [main] best 333 combination reg byte x [ main::i#2 main::i#1 ] reg byte a [ main::$0 ] reg byte a [ main::$2 ]
|
||||
Uplifting [main] best 333 combination reg byte x [ main::i#2 main::i#1 ]
|
||||
Uplifting [] best 333 combination
|
||||
|
||||
ASSEMBLER BEFORE OPTIMIZATION
|
||||
@ -752,27 +693,25 @@ main: {
|
||||
jmp b1
|
||||
//SEG12 main::@1
|
||||
b1:
|
||||
//SEG13 [6] (byte~) main::$0 ← (const byte[]) main::msg#0 *idx (byte) main::i#2 [ main::i#2 main::$0 ] ( main:2 [ main::i#2 main::$0 ] ) -- vbuaa=pbuc1_derefidx_vbuxx
|
||||
//SEG13 [6] if(*((const byte[]) main::msg#0 + (byte) main::i#2)!=(byte) '@') goto main::@2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx_neq_vbuc2_then_la1
|
||||
lda msg,x
|
||||
//SEG14 [7] if((byte~) main::$0!=(byte) '@') goto main::@2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- vbuaa_neq_vbuc1_then_la1
|
||||
cmp #'@'
|
||||
bne b2
|
||||
jmp breturn
|
||||
//SEG15 main::@return
|
||||
//SEG14 main::@return
|
||||
breturn:
|
||||
//SEG16 [8] return [ ] ( main:2 [ ] )
|
||||
//SEG15 [7] return [ ] ( main:2 [ ] )
|
||||
rts
|
||||
//SEG17 main::@2
|
||||
//SEG16 main::@2
|
||||
b2:
|
||||
//SEG18 [9] (byte~) main::$2 ← (const byte[]) main::msg#0 *idx (byte) main::i#2 [ main::i#2 main::$2 ] ( main:2 [ main::i#2 main::$2 ] ) -- vbuaa=pbuc1_derefidx_vbuxx
|
||||
//SEG17 [8] *((const byte*) main::screen#0 + (byte) main::i#2) ← *((const byte[]) main::msg#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx
|
||||
lda msg,x
|
||||
//SEG19 [10] *((const byte*) main::screen#0 + (byte) main::i#2) ← (byte~) main::$2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa
|
||||
sta screen,x
|
||||
//SEG20 [11] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx=_inc_vbuxx
|
||||
//SEG18 [9] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx=_inc_vbuxx
|
||||
inx
|
||||
//SEG21 [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1]
|
||||
//SEG19 [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1]
|
||||
b1_from_b2:
|
||||
//SEG22 [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy
|
||||
//SEG20 [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy
|
||||
jmp b1
|
||||
msg: .text "message 2 @"
|
||||
}
|
||||
@ -800,22 +739,18 @@ FINAL SYMBOL TABLE
|
||||
(label) @begin
|
||||
(label) @end
|
||||
(void()) main()
|
||||
(byte~) main::$0 reg byte a 22.0
|
||||
(byte~) main::$2 reg byte a 22.0
|
||||
(label) main::@1
|
||||
(label) main::@2
|
||||
(label) main::@return
|
||||
(byte) main::i
|
||||
(byte) main::i#1 reg byte x 22.0
|
||||
(byte) main::i#2 reg byte x 11.0
|
||||
(byte) main::i#2 reg byte x 18.333333333333332
|
||||
(byte[]) main::msg
|
||||
(const byte[]) main::msg#0 msg = (string) "message 2 @"
|
||||
(byte*) main::screen
|
||||
(const byte*) main::screen#0 screen = ((byte*))(word/signed word) 1024
|
||||
|
||||
reg byte x [ main::i#2 main::i#1 ]
|
||||
reg byte a [ main::$0 ]
|
||||
reg byte a [ main::$2 ]
|
||||
|
||||
FINAL CODE
|
||||
//SEG0 Basic Upstart
|
||||
@ -839,24 +774,22 @@ main: {
|
||||
ldx #0
|
||||
//SEG12 main::@1
|
||||
b1:
|
||||
//SEG13 [6] (byte~) main::$0 ← (const byte[]) main::msg#0 *idx (byte) main::i#2 [ main::i#2 main::$0 ] ( main:2 [ main::i#2 main::$0 ] ) -- vbuaa=pbuc1_derefidx_vbuxx
|
||||
//SEG13 [6] if(*((const byte[]) main::msg#0 + (byte) main::i#2)!=(byte) '@') goto main::@2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx_neq_vbuc2_then_la1
|
||||
lda msg,x
|
||||
//SEG14 [7] if((byte~) main::$0!=(byte) '@') goto main::@2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- vbuaa_neq_vbuc1_then_la1
|
||||
cmp #'@'
|
||||
bne b2
|
||||
//SEG15 main::@return
|
||||
//SEG16 [8] return [ ] ( main:2 [ ] )
|
||||
//SEG14 main::@return
|
||||
//SEG15 [7] return [ ] ( main:2 [ ] )
|
||||
rts
|
||||
//SEG17 main::@2
|
||||
//SEG16 main::@2
|
||||
b2:
|
||||
//SEG18 [9] (byte~) main::$2 ← (const byte[]) main::msg#0 *idx (byte) main::i#2 [ main::i#2 main::$2 ] ( main:2 [ main::i#2 main::$2 ] ) -- vbuaa=pbuc1_derefidx_vbuxx
|
||||
//SEG17 [8] *((const byte*) main::screen#0 + (byte) main::i#2) ← *((const byte[]) main::msg#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx
|
||||
lda msg,x
|
||||
//SEG19 [10] *((const byte*) main::screen#0 + (byte) main::i#2) ← (byte~) main::$2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa
|
||||
sta screen,x
|
||||
//SEG20 [11] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx=_inc_vbuxx
|
||||
//SEG18 [9] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx=_inc_vbuxx
|
||||
inx
|
||||
//SEG21 [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1]
|
||||
//SEG22 [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy
|
||||
//SEG19 [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1]
|
||||
//SEG20 [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy
|
||||
jmp b1
|
||||
msg: .text "message 2 @"
|
||||
}
|
||||
|
@ -2,19 +2,15 @@
|
||||
(label) @begin
|
||||
(label) @end
|
||||
(void()) main()
|
||||
(byte~) main::$0 reg byte a 22.0
|
||||
(byte~) main::$2 reg byte a 22.0
|
||||
(label) main::@1
|
||||
(label) main::@2
|
||||
(label) main::@return
|
||||
(byte) main::i
|
||||
(byte) main::i#1 reg byte x 22.0
|
||||
(byte) main::i#2 reg byte x 11.0
|
||||
(byte) main::i#2 reg byte x 18.333333333333332
|
||||
(byte[]) main::msg
|
||||
(const byte[]) main::msg#0 msg = (string) "message 2 @"
|
||||
(byte*) main::screen
|
||||
(const byte*) main::screen#0 screen = ((byte*))(word/signed word) 1024
|
||||
|
||||
reg byte x [ main::i#2 main::i#1 ]
|
||||
reg byte a [ main::$0 ]
|
||||
reg byte a [ main::$2 ]
|
||||
|
@ -673,8 +673,8 @@ inccnt::@return: scope:[inccnt] from inccnt
|
||||
to:@end
|
||||
@end: scope:[] from @3
|
||||
|
||||
Consolidated assigned array index constant in assignment *(SCREEN#0+0)
|
||||
Consolidated assigned array index constant in assignment *(SCREEN#0+1)
|
||||
Consolidated array index constant in *(SCREEN#0+0)
|
||||
Consolidated array index constant in *(SCREEN#0+1)
|
||||
Succesful SSA optimization Pass2ConstantAdditionElimination
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
|
@ -424,8 +424,8 @@ inccnt::@return: scope:[inccnt] from inccnt
|
||||
to:@end
|
||||
@end: scope:[] from @3
|
||||
|
||||
Consolidated assigned array index constant in assignment *(SCREEN#0+0)
|
||||
Consolidated assigned array index constant in assignment *(SCREEN#0+1)
|
||||
Consolidated array index constant in *(SCREEN#0+0)
|
||||
Consolidated array index constant in *(SCREEN#0+1)
|
||||
Succesful SSA optimization Pass2ConstantAdditionElimination
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
|
@ -94,11 +94,9 @@ endproc // print_word()
|
||||
proc (void()) print_byte((byte) print_byte::b)
|
||||
(byte[]) print_byte::hextab ← { (byte) '0', (byte) '1', (byte) '2', (byte) '3', (byte) '4', (byte) '5', (byte) '6', (byte) '7', (byte) '8', (byte) '9', (byte) 'a', (byte) 'b', (byte) 'c', (byte) 'd', (byte) 'e', (byte) 'f' }
|
||||
(byte~) print_byte::$0 ← (byte) print_byte::b >> (byte/signed byte/word/signed word) 4
|
||||
(byte~) print_byte::$1 ← (byte[]) print_byte::hextab *idx (byte~) print_byte::$0
|
||||
(void~) print_byte::$2 ← call print_char (byte~) print_byte::$1
|
||||
(byte~) print_byte::$3 ← (byte) print_byte::b & (byte/signed byte/word/signed word) 15
|
||||
(byte~) print_byte::$4 ← (byte[]) print_byte::hextab *idx (byte~) print_byte::$3
|
||||
(void~) print_byte::$5 ← call print_char (byte~) print_byte::$4
|
||||
(void~) print_byte::$1 ← call print_char *((byte[]) print_byte::hextab + (byte~) print_byte::$0)
|
||||
(byte~) print_byte::$2 ← (byte) print_byte::b & (byte/signed byte/word/signed word) 15
|
||||
(void~) print_byte::$3 ← call print_char *((byte[]) print_byte::hextab + (byte~) print_byte::$2)
|
||||
print_byte::@return:
|
||||
return
|
||||
endproc // print_byte()
|
||||
@ -139,11 +137,9 @@ SYMBOLS
|
||||
(byte[]) msg3
|
||||
(void()) print_byte((byte) print_byte::b)
|
||||
(byte~) print_byte::$0
|
||||
(byte~) print_byte::$1
|
||||
(void~) print_byte::$2
|
||||
(byte~) print_byte::$3
|
||||
(byte~) print_byte::$4
|
||||
(void~) print_byte::$5
|
||||
(void~) print_byte::$1
|
||||
(byte~) print_byte::$2
|
||||
(void~) print_byte::$3
|
||||
(label) print_byte::@return
|
||||
(byte) print_byte::b
|
||||
(byte[]) print_byte::hextab
|
||||
@ -230,11 +226,9 @@ print_word::@return: scope:[print_word] from print_word
|
||||
print_byte: scope:[print_byte] from
|
||||
(byte[]) print_byte::hextab ← { (byte) '0', (byte) '1', (byte) '2', (byte) '3', (byte) '4', (byte) '5', (byte) '6', (byte) '7', (byte) '8', (byte) '9', (byte) 'a', (byte) 'b', (byte) 'c', (byte) 'd', (byte) 'e', (byte) 'f' }
|
||||
(byte~) print_byte::$0 ← (byte) print_byte::b >> (byte/signed byte/word/signed word) 4
|
||||
(byte~) print_byte::$1 ← (byte[]) print_byte::hextab *idx (byte~) print_byte::$0
|
||||
(void~) print_byte::$2 ← call print_char (byte~) print_byte::$1
|
||||
(byte~) print_byte::$3 ← (byte) print_byte::b & (byte/signed byte/word/signed word) 15
|
||||
(byte~) print_byte::$4 ← (byte[]) print_byte::hextab *idx (byte~) print_byte::$3
|
||||
(void~) print_byte::$5 ← call print_char (byte~) print_byte::$4
|
||||
(void~) print_byte::$1 ← call print_char *((byte[]) print_byte::hextab + (byte~) print_byte::$0)
|
||||
(byte~) print_byte::$2 ← (byte) print_byte::b & (byte/signed byte/word/signed word) 15
|
||||
(void~) print_byte::$3 ← call print_char *((byte[]) print_byte::hextab + (byte~) print_byte::$2)
|
||||
to:print_byte::@return
|
||||
print_byte::@return: scope:[print_byte] from print_byte
|
||||
return
|
||||
|
@ -59,7 +59,7 @@ rvaluevar::@2: scope:[rvaluevar] from rvaluevar::@1
|
||||
to:rvaluevar::@1
|
||||
rvalue: scope:[rvalue] from main::@1
|
||||
[26] (byte) rvalue::b#0 ← *((const byte[1024]) rvalue::SCREEN#0) [ ] ( main:2::rvalue:7 [ ] )
|
||||
[27] (byte) rvalue::b#1 ← * (const byte[1024]) rvalue::SCREEN#0+(byte/signed byte/word/signed word) 1 [ ] ( main:2::rvalue:7 [ ] )
|
||||
[27] (byte) rvalue::b#1 ← *((const byte[1024]) rvalue::SCREEN#0+(byte/signed byte/word/signed word) 1) [ ] ( main:2::rvalue:7 [ ] )
|
||||
to:rvalue::@1
|
||||
rvalue::@1: scope:[rvalue] from rvalue rvalue::@2
|
||||
[28] (byte) rvalue::i#2 ← phi( rvalue/(byte/signed byte/word/signed word) 2 rvalue::@2/(byte) rvalue::i#1 ) [ rvalue::i#2 ] ( main:2::rvalue:7 [ rvalue::i#2 ] )
|
||||
@ -69,7 +69,7 @@ rvalue::@return: scope:[rvalue] from rvalue::@1
|
||||
[30] return [ ] ( main:2::rvalue:7 [ ] )
|
||||
to:@return
|
||||
rvalue::@2: scope:[rvalue] from rvalue::@1
|
||||
[31] (byte) rvalue::b#2 ← (const byte[1024]) rvalue::SCREEN#0 *idx (byte) rvalue::i#2 [ rvalue::i#2 ] ( main:2::rvalue:7 [ rvalue::i#2 ] )
|
||||
[31] (byte) rvalue::b#2 ← *((const byte[1024]) rvalue::SCREEN#0 + (byte) rvalue::i#2) [ rvalue::i#2 ] ( main:2::rvalue:7 [ rvalue::i#2 ] )
|
||||
[32] (byte) rvalue::i#1 ← ++ (byte) rvalue::i#2 [ rvalue::i#1 ] ( main:2::rvalue:7 [ rvalue::i#1 ] )
|
||||
to:rvalue::@1
|
||||
lvalue: scope:[lvalue] from main
|
||||
|
@ -107,16 +107,14 @@ endproc // lvalue()
|
||||
proc (void()) rvalue()
|
||||
(byte[1024]) rvalue::SCREEN ← (word/signed word) 1024
|
||||
(byte) rvalue::b ← *((byte[1024]) rvalue::SCREEN)
|
||||
(byte~) rvalue::$0 ← (byte[1024]) rvalue::SCREEN *idx (byte/signed byte/word/signed word) 1
|
||||
(byte) rvalue::b ← (byte~) rvalue::$0
|
||||
(byte) rvalue::b ← *((byte[1024]) rvalue::SCREEN + (byte/signed byte/word/signed word) 1)
|
||||
(byte) rvalue::i ← (byte/signed byte/word/signed word) 2
|
||||
rvalue::@1:
|
||||
(boolean~) rvalue::$1 ← (byte) rvalue::i < (byte/signed byte/word/signed word) 10
|
||||
if((boolean~) rvalue::$1) goto rvalue::@2
|
||||
(boolean~) rvalue::$0 ← (byte) rvalue::i < (byte/signed byte/word/signed word) 10
|
||||
if((boolean~) rvalue::$0) goto rvalue::@2
|
||||
goto rvalue::@3
|
||||
rvalue::@2:
|
||||
(byte~) rvalue::$2 ← (byte[1024]) rvalue::SCREEN *idx (byte) rvalue::i
|
||||
(byte) rvalue::b ← (byte~) rvalue::$2
|
||||
(byte) rvalue::b ← *((byte[1024]) rvalue::SCREEN + (byte) rvalue::i)
|
||||
(byte) rvalue::i ← ++ (byte) rvalue::i
|
||||
goto rvalue::@1
|
||||
rvalue::@3:
|
||||
@ -183,9 +181,7 @@ SYMBOLS
|
||||
(void~) main::$3
|
||||
(label) main::@return
|
||||
(void()) rvalue()
|
||||
(byte~) rvalue::$0
|
||||
(boolean~) rvalue::$1
|
||||
(byte~) rvalue::$2
|
||||
(boolean~) rvalue::$0
|
||||
(label) rvalue::@1
|
||||
(label) rvalue::@2
|
||||
(label) rvalue::@3
|
||||
@ -251,17 +247,15 @@ lvalue::@return: scope:[lvalue] from lvalue::@3
|
||||
rvalue: scope:[rvalue] from
|
||||
(byte[1024]) rvalue::SCREEN ← ((byte*)) (word/signed word) 1024
|
||||
(byte) rvalue::b ← *((byte[1024]) rvalue::SCREEN)
|
||||
(byte~) rvalue::$0 ← (byte[1024]) rvalue::SCREEN *idx (byte/signed byte/word/signed word) 1
|
||||
(byte) rvalue::b ← (byte~) rvalue::$0
|
||||
(byte) rvalue::b ← *((byte[1024]) rvalue::SCREEN + (byte/signed byte/word/signed word) 1)
|
||||
(byte) rvalue::i ← (byte/signed byte/word/signed word) 2
|
||||
to:rvalue::@1
|
||||
rvalue::@1: scope:[rvalue] from rvalue rvalue::@2
|
||||
(boolean~) rvalue::$1 ← (byte) rvalue::i < (byte/signed byte/word/signed word) 10
|
||||
if((boolean~) rvalue::$1) goto rvalue::@2
|
||||
(boolean~) rvalue::$0 ← (byte) rvalue::i < (byte/signed byte/word/signed word) 10
|
||||
if((boolean~) rvalue::$0) goto rvalue::@2
|
||||
to:rvalue::@4
|
||||
rvalue::@2: scope:[rvalue] from rvalue::@1 rvalue::@5
|
||||
(byte~) rvalue::$2 ← (byte[1024]) rvalue::SCREEN *idx (byte) rvalue::i
|
||||
(byte) rvalue::b ← (byte~) rvalue::$2
|
||||
(byte) rvalue::b ← *((byte[1024]) rvalue::SCREEN + (byte) rvalue::i)
|
||||
(byte) rvalue::i ← ++ (byte) rvalue::i
|
||||
to:rvalue::@1
|
||||
rvalue::@4: scope:[rvalue] from rvalue::@1
|
||||
@ -337,7 +331,7 @@ Eliminating unused variable - keeping the call (void~) main::$0
|
||||
Eliminating unused variable - keeping the call (void~) main::$1
|
||||
Eliminating unused variable - keeping the call (void~) main::$2
|
||||
Eliminating unused variable - keeping the call (void~) main::$3
|
||||
Eliminating unused variable (byte) rvaluevar::b and assignment [38] (byte) rvaluevar::b ← *((byte*) rvaluevar::screen)
|
||||
Eliminating unused variable (byte) rvaluevar::b and assignment [36] (byte) rvaluevar::b ← *((byte*) rvaluevar::screen)
|
||||
Removing empty block @1
|
||||
Removing empty block lvalue::@4
|
||||
Removing empty block lvalue::@3
|
||||
@ -390,17 +384,15 @@ lvalue::@return: scope:[lvalue] from lvalue::@1
|
||||
rvalue: scope:[rvalue] from
|
||||
(byte[1024]) rvalue::SCREEN ← ((byte*)) (word/signed word) 1024
|
||||
(byte) rvalue::b ← *((byte[1024]) rvalue::SCREEN)
|
||||
(byte~) rvalue::$0 ← (byte[1024]) rvalue::SCREEN *idx (byte/signed byte/word/signed word) 1
|
||||
(byte) rvalue::b ← (byte~) rvalue::$0
|
||||
(byte) rvalue::b ← *((byte[1024]) rvalue::SCREEN + (byte/signed byte/word/signed word) 1)
|
||||
(byte) rvalue::i ← (byte/signed byte/word/signed word) 2
|
||||
to:rvalue::@1
|
||||
rvalue::@1: scope:[rvalue] from rvalue rvalue::@2
|
||||
(boolean~) rvalue::$1 ← (byte) rvalue::i < (byte/signed byte/word/signed word) 10
|
||||
if((boolean~) rvalue::$1) goto rvalue::@2
|
||||
(boolean~) rvalue::$0 ← (byte) rvalue::i < (byte/signed byte/word/signed word) 10
|
||||
if((boolean~) rvalue::$0) goto rvalue::@2
|
||||
to:rvalue::@return
|
||||
rvalue::@2: scope:[rvalue] from rvalue::@1
|
||||
(byte~) rvalue::$2 ← (byte[1024]) rvalue::SCREEN *idx (byte) rvalue::i
|
||||
(byte) rvalue::b ← (byte~) rvalue::$2
|
||||
(byte) rvalue::b ← *((byte[1024]) rvalue::SCREEN + (byte) rvalue::i)
|
||||
(byte) rvalue::i ← ++ (byte) rvalue::i
|
||||
to:rvalue::@1
|
||||
rvalue::@return: scope:[rvalue] from rvalue::@1
|
||||
@ -485,17 +477,15 @@ lvalue::@return: scope:[lvalue] from lvalue::@1
|
||||
rvalue: scope:[rvalue] from main::@1
|
||||
(byte[1024]) rvalue::SCREEN ← ((byte*)) (word/signed word) 1024
|
||||
(byte) rvalue::b ← *((byte[1024]) rvalue::SCREEN)
|
||||
(byte~) rvalue::$0 ← (byte[1024]) rvalue::SCREEN *idx (byte/signed byte/word/signed word) 1
|
||||
(byte) rvalue::b ← (byte~) rvalue::$0
|
||||
(byte) rvalue::b ← *((byte[1024]) rvalue::SCREEN + (byte/signed byte/word/signed word) 1)
|
||||
(byte) rvalue::i ← (byte/signed byte/word/signed word) 2
|
||||
to:rvalue::@1
|
||||
rvalue::@1: scope:[rvalue] from rvalue rvalue::@2
|
||||
(boolean~) rvalue::$1 ← (byte) rvalue::i < (byte/signed byte/word/signed word) 10
|
||||
if((boolean~) rvalue::$1) goto rvalue::@2
|
||||
(boolean~) rvalue::$0 ← (byte) rvalue::i < (byte/signed byte/word/signed word) 10
|
||||
if((boolean~) rvalue::$0) goto rvalue::@2
|
||||
to:rvalue::@return
|
||||
rvalue::@2: scope:[rvalue] from rvalue::@1
|
||||
(byte~) rvalue::$2 ← (byte[1024]) rvalue::SCREEN *idx (byte) rvalue::i
|
||||
(byte) rvalue::b ← (byte~) rvalue::$2
|
||||
(byte) rvalue::b ← *((byte[1024]) rvalue::SCREEN + (byte) rvalue::i)
|
||||
(byte) rvalue::i ← ++ (byte) rvalue::i
|
||||
to:rvalue::@1
|
||||
rvalue::@return: scope:[rvalue] from rvalue::@1
|
||||
@ -586,21 +576,19 @@ lvalue::@return: scope:[lvalue] from lvalue::@1
|
||||
rvalue: scope:[rvalue] from main::@1
|
||||
(byte[1024]) rvalue::SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte) rvalue::b#0 ← *((byte[1024]) rvalue::SCREEN#0)
|
||||
(byte~) rvalue::$0 ← (byte[1024]) rvalue::SCREEN#0 *idx (byte/signed byte/word/signed word) 1
|
||||
(byte) rvalue::b#1 ← (byte~) rvalue::$0
|
||||
(byte) rvalue::b#1 ← *((byte[1024]) rvalue::SCREEN#0 + (byte/signed byte/word/signed word) 1)
|
||||
(byte) rvalue::i#0 ← (byte/signed byte/word/signed word) 2
|
||||
to:rvalue::@1
|
||||
rvalue::@1: scope:[rvalue] from rvalue rvalue::@2
|
||||
(byte[1024]) rvalue::SCREEN#2 ← phi( rvalue/(byte[1024]) rvalue::SCREEN#0 rvalue::@2/(byte[1024]) rvalue::SCREEN#1 )
|
||||
(byte) rvalue::i#2 ← phi( rvalue/(byte) rvalue::i#0 rvalue::@2/(byte) rvalue::i#1 )
|
||||
(boolean~) rvalue::$1 ← (byte) rvalue::i#2 < (byte/signed byte/word/signed word) 10
|
||||
if((boolean~) rvalue::$1) goto rvalue::@2
|
||||
(boolean~) rvalue::$0 ← (byte) rvalue::i#2 < (byte/signed byte/word/signed word) 10
|
||||
if((boolean~) rvalue::$0) goto rvalue::@2
|
||||
to:rvalue::@return
|
||||
rvalue::@2: scope:[rvalue] from rvalue::@1
|
||||
(byte) rvalue::i#3 ← phi( rvalue::@1/(byte) rvalue::i#2 )
|
||||
(byte[1024]) rvalue::SCREEN#1 ← phi( rvalue::@1/(byte[1024]) rvalue::SCREEN#2 )
|
||||
(byte~) rvalue::$2 ← (byte[1024]) rvalue::SCREEN#1 *idx (byte) rvalue::i#3
|
||||
(byte) rvalue::b#2 ← (byte~) rvalue::$2
|
||||
(byte) rvalue::b#2 ← *((byte[1024]) rvalue::SCREEN#1 + (byte) rvalue::i#3)
|
||||
(byte) rvalue::i#1 ← ++ (byte) rvalue::i#3
|
||||
to:rvalue::@1
|
||||
rvalue::@return: scope:[rvalue] from rvalue::@1
|
||||
@ -699,21 +687,19 @@ lvalue::@return: scope:[lvalue] from lvalue::@1
|
||||
rvalue: scope:[rvalue] from main::@1
|
||||
(byte[1024]) rvalue::SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte) rvalue::b#0 ← *((byte[1024]) rvalue::SCREEN#0)
|
||||
(byte~) rvalue::$0 ← (byte[1024]) rvalue::SCREEN#0 *idx (byte/signed byte/word/signed word) 1
|
||||
(byte) rvalue::b#1 ← (byte~) rvalue::$0
|
||||
(byte) rvalue::b#1 ← *((byte[1024]) rvalue::SCREEN#0 + (byte/signed byte/word/signed word) 1)
|
||||
(byte) rvalue::i#0 ← (byte/signed byte/word/signed word) 2
|
||||
to:rvalue::@1
|
||||
rvalue::@1: scope:[rvalue] from rvalue rvalue::@2
|
||||
(byte[1024]) rvalue::SCREEN#2 ← phi( rvalue/(byte[1024]) rvalue::SCREEN#0 rvalue::@2/(byte[1024]) rvalue::SCREEN#1 )
|
||||
(byte) rvalue::i#2 ← phi( rvalue/(byte) rvalue::i#0 rvalue::@2/(byte) rvalue::i#1 )
|
||||
(boolean~) rvalue::$1 ← (byte) rvalue::i#2 < (byte/signed byte/word/signed word) 10
|
||||
if((boolean~) rvalue::$1) goto rvalue::@2
|
||||
(boolean~) rvalue::$0 ← (byte) rvalue::i#2 < (byte/signed byte/word/signed word) 10
|
||||
if((boolean~) rvalue::$0) goto rvalue::@2
|
||||
to:rvalue::@return
|
||||
rvalue::@2: scope:[rvalue] from rvalue::@1
|
||||
(byte) rvalue::i#3 ← phi( rvalue::@1/(byte) rvalue::i#2 )
|
||||
(byte[1024]) rvalue::SCREEN#1 ← phi( rvalue::@1/(byte[1024]) rvalue::SCREEN#2 )
|
||||
(byte~) rvalue::$2 ← (byte[1024]) rvalue::SCREEN#1 *idx (byte) rvalue::i#3
|
||||
(byte) rvalue::b#2 ← (byte~) rvalue::$2
|
||||
(byte) rvalue::b#2 ← *((byte[1024]) rvalue::SCREEN#1 + (byte) rvalue::i#3)
|
||||
(byte) rvalue::i#1 ← ++ (byte) rvalue::i#3
|
||||
to:rvalue::@1
|
||||
rvalue::@return: scope:[rvalue] from rvalue::@1
|
||||
@ -813,9 +799,7 @@ INITIAL SSA SYMBOL TABLE
|
||||
(label) main::@4
|
||||
(label) main::@return
|
||||
(void()) rvalue()
|
||||
(byte~) rvalue::$0
|
||||
(boolean~) rvalue::$1
|
||||
(byte~) rvalue::$2
|
||||
(boolean~) rvalue::$0
|
||||
(label) rvalue::@1
|
||||
(label) rvalue::@2
|
||||
(label) rvalue::@return
|
||||
@ -893,21 +877,19 @@ lvalue::@return: scope:[lvalue] from lvalue::@1
|
||||
rvalue: scope:[rvalue] from main::@1
|
||||
(byte[1024]) rvalue::SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte) rvalue::b#0 ← *((byte[1024]) rvalue::SCREEN#0)
|
||||
(byte~) rvalue::$0 ← (byte[1024]) rvalue::SCREEN#0 *idx (byte/signed byte/word/signed word) 1
|
||||
(byte) rvalue::b#1 ← (byte~) rvalue::$0
|
||||
(byte) rvalue::b#1 ← *((byte[1024]) rvalue::SCREEN#0 + (byte/signed byte/word/signed word) 1)
|
||||
(byte) rvalue::i#0 ← (byte/signed byte/word/signed word) 2
|
||||
to:rvalue::@1
|
||||
rvalue::@1: scope:[rvalue] from rvalue rvalue::@2
|
||||
(byte[1024]) rvalue::SCREEN#2 ← phi( rvalue/(byte[1024]) rvalue::SCREEN#0 rvalue::@2/(byte[1024]) rvalue::SCREEN#1 )
|
||||
(byte) rvalue::i#2 ← phi( rvalue/(byte) rvalue::i#0 rvalue::@2/(byte) rvalue::i#1 )
|
||||
(boolean~) rvalue::$1 ← (byte) rvalue::i#2 < (byte/signed byte/word/signed word) 10
|
||||
if((boolean~) rvalue::$1) goto rvalue::@2
|
||||
(boolean~) rvalue::$0 ← (byte) rvalue::i#2 < (byte/signed byte/word/signed word) 10
|
||||
if((boolean~) rvalue::$0) goto rvalue::@2
|
||||
to:rvalue::@return
|
||||
rvalue::@2: scope:[rvalue] from rvalue::@1
|
||||
(byte) rvalue::i#3 ← phi( rvalue::@1/(byte) rvalue::i#2 )
|
||||
(byte[1024]) rvalue::SCREEN#1 ← phi( rvalue::@1/(byte[1024]) rvalue::SCREEN#2 )
|
||||
(byte~) rvalue::$2 ← (byte[1024]) rvalue::SCREEN#1 *idx (byte) rvalue::i#3
|
||||
(byte) rvalue::b#2 ← (byte~) rvalue::$2
|
||||
(byte) rvalue::b#2 ← *((byte[1024]) rvalue::SCREEN#1 + (byte) rvalue::i#3)
|
||||
(byte) rvalue::i#1 ← ++ (byte) rvalue::i#3
|
||||
to:rvalue::@1
|
||||
rvalue::@return: scope:[rvalue] from rvalue::@1
|
||||
@ -962,10 +944,8 @@ rvaluevar::@return: scope:[rvaluevar] from rvaluevar::@1
|
||||
|
||||
Alias (byte[1024]) lvalue::SCREEN#1 = (byte[1024]) lvalue::SCREEN#2
|
||||
Alias (byte) lvalue::i#2 = (byte) lvalue::i#3
|
||||
Alias (byte) rvalue::b#1 = (byte~) rvalue::$0
|
||||
Alias (byte[1024]) rvalue::SCREEN#1 = (byte[1024]) rvalue::SCREEN#2
|
||||
Alias (byte) rvalue::i#2 = (byte) rvalue::i#3
|
||||
Alias (byte) rvalue::b#2 = (byte~) rvalue::$2
|
||||
Alias (byte) lvaluevar::b#1 = (byte) lvaluevar::b#2
|
||||
Alias (byte*) lvaluevar::screen#2 = (byte*) lvaluevar::screen#3
|
||||
Alias (byte) lvaluevar::i#2 = (byte) lvaluevar::i#3
|
||||
@ -1012,17 +992,17 @@ lvalue::@return: scope:[lvalue] from lvalue::@1
|
||||
rvalue: scope:[rvalue] from main::@1
|
||||
(byte[1024]) rvalue::SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte) rvalue::b#0 ← *((byte[1024]) rvalue::SCREEN#0)
|
||||
(byte) rvalue::b#1 ← (byte[1024]) rvalue::SCREEN#0 *idx (byte/signed byte/word/signed word) 1
|
||||
(byte) rvalue::b#1 ← *((byte[1024]) rvalue::SCREEN#0 + (byte/signed byte/word/signed word) 1)
|
||||
(byte) rvalue::i#0 ← (byte/signed byte/word/signed word) 2
|
||||
to:rvalue::@1
|
||||
rvalue::@1: scope:[rvalue] from rvalue rvalue::@2
|
||||
(byte[1024]) rvalue::SCREEN#1 ← phi( rvalue/(byte[1024]) rvalue::SCREEN#0 rvalue::@2/(byte[1024]) rvalue::SCREEN#1 )
|
||||
(byte) rvalue::i#2 ← phi( rvalue/(byte) rvalue::i#0 rvalue::@2/(byte) rvalue::i#1 )
|
||||
(boolean~) rvalue::$1 ← (byte) rvalue::i#2 < (byte/signed byte/word/signed word) 10
|
||||
if((boolean~) rvalue::$1) goto rvalue::@2
|
||||
(boolean~) rvalue::$0 ← (byte) rvalue::i#2 < (byte/signed byte/word/signed word) 10
|
||||
if((boolean~) rvalue::$0) goto rvalue::@2
|
||||
to:rvalue::@return
|
||||
rvalue::@2: scope:[rvalue] from rvalue::@1
|
||||
(byte) rvalue::b#2 ← (byte[1024]) rvalue::SCREEN#1 *idx (byte) rvalue::i#2
|
||||
(byte) rvalue::b#2 ← *((byte[1024]) rvalue::SCREEN#1 + (byte) rvalue::i#2)
|
||||
(byte) rvalue::i#1 ← ++ (byte) rvalue::i#2
|
||||
to:rvalue::@1
|
||||
rvalue::@return: scope:[rvalue] from rvalue::@1
|
||||
@ -1114,17 +1094,17 @@ lvalue::@return: scope:[lvalue] from lvalue::@1
|
||||
rvalue: scope:[rvalue] from main::@1
|
||||
(byte[1024]) rvalue::SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte) rvalue::b#0 ← *((byte[1024]) rvalue::SCREEN#0)
|
||||
(byte) rvalue::b#1 ← (byte[1024]) rvalue::SCREEN#0 *idx (byte/signed byte/word/signed word) 1
|
||||
(byte) rvalue::b#1 ← *((byte[1024]) rvalue::SCREEN#0 + (byte/signed byte/word/signed word) 1)
|
||||
(byte) rvalue::i#0 ← (byte/signed byte/word/signed word) 2
|
||||
to:rvalue::@1
|
||||
rvalue::@1: scope:[rvalue] from rvalue rvalue::@2
|
||||
(byte[1024]) rvalue::SCREEN#1 ← phi( rvalue/(byte[1024]) rvalue::SCREEN#0 )
|
||||
(byte) rvalue::i#2 ← phi( rvalue/(byte) rvalue::i#0 rvalue::@2/(byte) rvalue::i#1 )
|
||||
(boolean~) rvalue::$1 ← (byte) rvalue::i#2 < (byte/signed byte/word/signed word) 10
|
||||
if((boolean~) rvalue::$1) goto rvalue::@2
|
||||
(boolean~) rvalue::$0 ← (byte) rvalue::i#2 < (byte/signed byte/word/signed word) 10
|
||||
if((boolean~) rvalue::$0) goto rvalue::@2
|
||||
to:rvalue::@return
|
||||
rvalue::@2: scope:[rvalue] from rvalue::@1
|
||||
(byte) rvalue::b#2 ← (byte[1024]) rvalue::SCREEN#1 *idx (byte) rvalue::i#2
|
||||
(byte) rvalue::b#2 ← *((byte[1024]) rvalue::SCREEN#1 + (byte) rvalue::i#2)
|
||||
(byte) rvalue::i#1 ← ++ (byte) rvalue::i#2
|
||||
to:rvalue::@1
|
||||
rvalue::@return: scope:[rvalue] from rvalue::@1
|
||||
@ -1215,16 +1195,16 @@ lvalue::@return: scope:[lvalue] from lvalue::@1
|
||||
rvalue: scope:[rvalue] from main::@1
|
||||
(byte[1024]) rvalue::SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte) rvalue::b#0 ← *((byte[1024]) rvalue::SCREEN#0)
|
||||
(byte) rvalue::b#1 ← (byte[1024]) rvalue::SCREEN#0 *idx (byte/signed byte/word/signed word) 1
|
||||
(byte) rvalue::b#1 ← *((byte[1024]) rvalue::SCREEN#0 + (byte/signed byte/word/signed word) 1)
|
||||
(byte) rvalue::i#0 ← (byte/signed byte/word/signed word) 2
|
||||
to:rvalue::@1
|
||||
rvalue::@1: scope:[rvalue] from rvalue rvalue::@2
|
||||
(byte) rvalue::i#2 ← phi( rvalue/(byte) rvalue::i#0 rvalue::@2/(byte) rvalue::i#1 )
|
||||
(boolean~) rvalue::$1 ← (byte) rvalue::i#2 < (byte/signed byte/word/signed word) 10
|
||||
if((boolean~) rvalue::$1) goto rvalue::@2
|
||||
(boolean~) rvalue::$0 ← (byte) rvalue::i#2 < (byte/signed byte/word/signed word) 10
|
||||
if((boolean~) rvalue::$0) goto rvalue::@2
|
||||
to:rvalue::@return
|
||||
rvalue::@2: scope:[rvalue] from rvalue::@1
|
||||
(byte) rvalue::b#2 ← (byte[1024]) rvalue::SCREEN#0 *idx (byte) rvalue::i#2
|
||||
(byte) rvalue::b#2 ← *((byte[1024]) rvalue::SCREEN#0 + (byte) rvalue::i#2)
|
||||
(byte) rvalue::i#1 ← ++ (byte) rvalue::i#2
|
||||
to:rvalue::@1
|
||||
rvalue::@return: scope:[rvalue] from rvalue::@1
|
||||
@ -1272,7 +1252,7 @@ rvaluevar::@return: scope:[rvaluevar] from rvaluevar::@1
|
||||
@end: scope:[] from @5
|
||||
|
||||
Simple Condition (boolean~) lvalue::$0 if((byte) lvalue::i#2<(byte/signed byte/word/signed word) 10) goto lvalue::@2
|
||||
Simple Condition (boolean~) rvalue::$1 if((byte) rvalue::i#2<(byte/signed byte/word/signed word) 10) goto rvalue::@2
|
||||
Simple Condition (boolean~) rvalue::$0 if((byte) rvalue::i#2<(byte/signed byte/word/signed word) 10) goto rvalue::@2
|
||||
Simple Condition (boolean~) lvaluevar::$0 if((byte) lvaluevar::i#2<(byte/signed byte/word/signed word) 10) goto lvaluevar::@2
|
||||
Simple Condition (boolean~) rvaluevar::$0 if((byte) rvaluevar::i#2<(byte/signed byte/word/signed word) 10) goto rvaluevar::@2
|
||||
Succesful SSA optimization Pass2ConditionalJumpSimplification
|
||||
@ -1314,7 +1294,7 @@ lvalue::@return: scope:[lvalue] from lvalue::@1
|
||||
rvalue: scope:[rvalue] from main::@1
|
||||
(byte[1024]) rvalue::SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte) rvalue::b#0 ← *((byte[1024]) rvalue::SCREEN#0)
|
||||
(byte) rvalue::b#1 ← (byte[1024]) rvalue::SCREEN#0 *idx (byte/signed byte/word/signed word) 1
|
||||
(byte) rvalue::b#1 ← *((byte[1024]) rvalue::SCREEN#0 + (byte/signed byte/word/signed word) 1)
|
||||
(byte) rvalue::i#0 ← (byte/signed byte/word/signed word) 2
|
||||
to:rvalue::@1
|
||||
rvalue::@1: scope:[rvalue] from rvalue rvalue::@2
|
||||
@ -1322,7 +1302,7 @@ rvalue::@1: scope:[rvalue] from rvalue rvalue::@2
|
||||
if((byte) rvalue::i#2<(byte/signed byte/word/signed word) 10) goto rvalue::@2
|
||||
to:rvalue::@return
|
||||
rvalue::@2: scope:[rvalue] from rvalue::@1
|
||||
(byte) rvalue::b#2 ← (byte[1024]) rvalue::SCREEN#0 *idx (byte) rvalue::i#2
|
||||
(byte) rvalue::b#2 ← *((byte[1024]) rvalue::SCREEN#0 + (byte) rvalue::i#2)
|
||||
(byte) rvalue::i#1 ← ++ (byte) rvalue::i#2
|
||||
to:rvalue::@1
|
||||
rvalue::@return: scope:[rvalue] from rvalue::@1
|
||||
@ -1412,14 +1392,14 @@ lvalue::@return: scope:[lvalue] from lvalue::@1
|
||||
to:@return
|
||||
rvalue: scope:[rvalue] from main::@1
|
||||
(byte) rvalue::b#0 ← *((const byte[1024]) rvalue::SCREEN#0)
|
||||
(byte) rvalue::b#1 ← (const byte[1024]) rvalue::SCREEN#0 *idx (byte/signed byte/word/signed word) 1
|
||||
(byte) rvalue::b#1 ← *((const byte[1024]) rvalue::SCREEN#0 + (byte/signed byte/word/signed word) 1)
|
||||
to:rvalue::@1
|
||||
rvalue::@1: scope:[rvalue] from rvalue rvalue::@2
|
||||
(byte) rvalue::i#2 ← phi( rvalue/(const byte) rvalue::i#0 rvalue::@2/(byte) rvalue::i#1 )
|
||||
if((byte) rvalue::i#2<(byte/signed byte/word/signed word) 10) goto rvalue::@2
|
||||
to:rvalue::@return
|
||||
rvalue::@2: scope:[rvalue] from rvalue::@1
|
||||
(byte) rvalue::b#2 ← (const byte[1024]) rvalue::SCREEN#0 *idx (byte) rvalue::i#2
|
||||
(byte) rvalue::b#2 ← *((const byte[1024]) rvalue::SCREEN#0 + (byte) rvalue::i#2)
|
||||
(byte) rvalue::i#1 ← ++ (byte) rvalue::i#2
|
||||
to:rvalue::@1
|
||||
rvalue::@return: scope:[rvalue] from rvalue::@1
|
||||
@ -1459,9 +1439,8 @@ rvaluevar::@return: scope:[rvaluevar] from rvaluevar::@1
|
||||
to:@end
|
||||
@end: scope:[] from @5
|
||||
|
||||
Consolidated assigned array index constant in assignment *(lvalue::SCREEN#0+1)
|
||||
Consolidated referenced array index constant in assignment rvalue::b#1
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) rvalue::i#2
|
||||
Consolidated array index constant in *(lvalue::SCREEN#0+1)
|
||||
Consolidated array index constant in *(rvalue::SCREEN#0+1)
|
||||
Succesful SSA optimization Pass2ConstantAdditionElimination
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
@ -1498,14 +1477,14 @@ lvalue::@return: scope:[lvalue] from lvalue::@1
|
||||
to:@return
|
||||
rvalue: scope:[rvalue] from main::@1
|
||||
(byte) rvalue::b#0 ← *((const byte[1024]) rvalue::SCREEN#0)
|
||||
(byte) rvalue::b#1 ← * (const byte[1024]) rvalue::SCREEN#0+(byte/signed byte/word/signed word) 1
|
||||
(byte) rvalue::b#1 ← *((const byte[1024]) rvalue::SCREEN#0+(byte/signed byte/word/signed word) 1)
|
||||
to:rvalue::@1
|
||||
rvalue::@1: scope:[rvalue] from rvalue rvalue::@2
|
||||
(byte) rvalue::i#2 ← phi( rvalue/(const byte) rvalue::i#0 rvalue::@2/(byte) rvalue::i#1 )
|
||||
if((byte) rvalue::i#2<(byte/signed byte/word/signed word) 10) goto rvalue::@2
|
||||
to:rvalue::@return
|
||||
rvalue::@2: scope:[rvalue] from rvalue::@1
|
||||
(byte) rvalue::b#2 ← (const byte[1024]) rvalue::SCREEN#0 *idx (byte) rvalue::i#2
|
||||
(byte) rvalue::b#2 ← *((const byte[1024]) rvalue::SCREEN#0 + (byte) rvalue::i#2)
|
||||
(byte) rvalue::i#1 ← ++ (byte) rvalue::i#2
|
||||
to:rvalue::@1
|
||||
rvalue::@return: scope:[rvalue] from rvalue::@1
|
||||
@ -1545,8 +1524,6 @@ rvaluevar::@return: scope:[rvaluevar] from rvaluevar::@1
|
||||
to:@end
|
||||
@end: scope:[] from @5
|
||||
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) rvalue::i#2
|
||||
Multiple usages for variable. Not optimizing sub-constant (byte) rvalue::i#2
|
||||
Inlining constant with var siblings (const byte) lvalue::i#0
|
||||
Inlining constant with var siblings (const byte) lvalue::i#0
|
||||
Inlining constant with var siblings (const byte) rvalue::i#0
|
||||
@ -1601,14 +1578,14 @@ lvalue::@return: scope:[lvalue] from lvalue::@1
|
||||
to:@return
|
||||
rvalue: scope:[rvalue] from main::@1
|
||||
(byte) rvalue::b#0 ← *((const byte[1024]) rvalue::SCREEN#0)
|
||||
(byte) rvalue::b#1 ← * (const byte[1024]) rvalue::SCREEN#0+(byte/signed byte/word/signed word) 1
|
||||
(byte) rvalue::b#1 ← *((const byte[1024]) rvalue::SCREEN#0+(byte/signed byte/word/signed word) 1)
|
||||
to:rvalue::@1
|
||||
rvalue::@1: scope:[rvalue] from rvalue rvalue::@2
|
||||
(byte) rvalue::i#2 ← phi( rvalue/(byte/signed byte/word/signed word) 2 rvalue::@2/(byte) rvalue::i#1 )
|
||||
if((byte) rvalue::i#2<(byte/signed byte/word/signed word) 10) goto rvalue::@2
|
||||
to:rvalue::@return
|
||||
rvalue::@2: scope:[rvalue] from rvalue::@1
|
||||
(byte) rvalue::b#2 ← (const byte[1024]) rvalue::SCREEN#0 *idx (byte) rvalue::i#2
|
||||
(byte) rvalue::b#2 ← *((const byte[1024]) rvalue::SCREEN#0 + (byte) rvalue::i#2)
|
||||
(byte) rvalue::i#1 ← ++ (byte) rvalue::i#2
|
||||
to:rvalue::@1
|
||||
rvalue::@return: scope:[rvalue] from rvalue::@1
|
||||
@ -1761,7 +1738,7 @@ rvaluevar::@2: scope:[rvaluevar] from rvaluevar::@1
|
||||
to:rvaluevar::@1
|
||||
rvalue: scope:[rvalue] from main::@1
|
||||
(byte) rvalue::b#0 ← *((const byte[1024]) rvalue::SCREEN#0)
|
||||
(byte) rvalue::b#1 ← * (const byte[1024]) rvalue::SCREEN#0+(byte/signed byte/word/signed word) 1
|
||||
(byte) rvalue::b#1 ← *((const byte[1024]) rvalue::SCREEN#0+(byte/signed byte/word/signed word) 1)
|
||||
to:rvalue::@1
|
||||
rvalue::@1: scope:[rvalue] from rvalue rvalue::@2
|
||||
(byte) rvalue::i#2 ← phi( rvalue/(byte/signed byte/word/signed word) 2 rvalue::@2/(byte~) rvalue::i#4 )
|
||||
@ -1771,7 +1748,7 @@ rvalue::@return: scope:[rvalue] from rvalue::@1
|
||||
return
|
||||
to:@return
|
||||
rvalue::@2: scope:[rvalue] from rvalue::@1
|
||||
(byte) rvalue::b#2 ← (const byte[1024]) rvalue::SCREEN#0 *idx (byte) rvalue::i#2
|
||||
(byte) rvalue::b#2 ← *((const byte[1024]) rvalue::SCREEN#0 + (byte) rvalue::i#2)
|
||||
(byte) rvalue::i#1 ← ++ (byte) rvalue::i#2
|
||||
(byte~) rvalue::i#4 ← (byte) rvalue::i#1
|
||||
to:rvalue::@1
|
||||
@ -1875,7 +1852,7 @@ rvaluevar::@2: scope:[rvaluevar] from rvaluevar::@1
|
||||
to:rvaluevar::@1
|
||||
rvalue: scope:[rvalue] from main::@1
|
||||
[30] (byte) rvalue::b#0 ← *((const byte[1024]) rvalue::SCREEN#0) [ ]
|
||||
[31] (byte) rvalue::b#1 ← * (const byte[1024]) rvalue::SCREEN#0+(byte/signed byte/word/signed word) 1 [ ]
|
||||
[31] (byte) rvalue::b#1 ← *((const byte[1024]) rvalue::SCREEN#0+(byte/signed byte/word/signed word) 1) [ ]
|
||||
to:rvalue::@1
|
||||
rvalue::@1: scope:[rvalue] from rvalue rvalue::@2
|
||||
[32] (byte) rvalue::i#2 ← phi( rvalue/(byte/signed byte/word/signed word) 2 rvalue::@2/(byte~) rvalue::i#4 ) [ rvalue::i#2 ]
|
||||
@ -1885,7 +1862,7 @@ rvalue::@return: scope:[rvalue] from rvalue::@1
|
||||
[34] return [ ]
|
||||
to:@return
|
||||
rvalue::@2: scope:[rvalue] from rvalue::@1
|
||||
[35] (byte) rvalue::b#2 ← (const byte[1024]) rvalue::SCREEN#0 *idx (byte) rvalue::i#2 [ rvalue::i#2 ]
|
||||
[35] (byte) rvalue::b#2 ← *((const byte[1024]) rvalue::SCREEN#0 + (byte) rvalue::i#2) [ rvalue::i#2 ]
|
||||
[36] (byte) rvalue::i#1 ← ++ (byte) rvalue::i#2 [ rvalue::i#1 ]
|
||||
[37] (byte~) rvalue::i#4 ← (byte) rvalue::i#1 [ rvalue::i#4 ]
|
||||
to:rvalue::@1
|
||||
@ -1990,7 +1967,7 @@ rvaluevar::@2: scope:[rvaluevar] from rvaluevar::@1
|
||||
to:rvaluevar::@1
|
||||
rvalue: scope:[rvalue] from main::@1
|
||||
[26] (byte) rvalue::b#0 ← *((const byte[1024]) rvalue::SCREEN#0) [ ]
|
||||
[27] (byte) rvalue::b#1 ← * (const byte[1024]) rvalue::SCREEN#0+(byte/signed byte/word/signed word) 1 [ ]
|
||||
[27] (byte) rvalue::b#1 ← *((const byte[1024]) rvalue::SCREEN#0+(byte/signed byte/word/signed word) 1) [ ]
|
||||
to:rvalue::@1
|
||||
rvalue::@1: scope:[rvalue] from rvalue rvalue::@2
|
||||
[28] (byte) rvalue::i#2 ← phi( rvalue/(byte/signed byte/word/signed word) 2 rvalue::@2/(byte) rvalue::i#1 ) [ rvalue::i#2 ]
|
||||
@ -2000,7 +1977,7 @@ rvalue::@return: scope:[rvalue] from rvalue::@1
|
||||
[30] return [ ]
|
||||
to:@return
|
||||
rvalue::@2: scope:[rvalue] from rvalue::@1
|
||||
[31] (byte) rvalue::b#2 ← (const byte[1024]) rvalue::SCREEN#0 *idx (byte) rvalue::i#2 [ rvalue::i#2 ]
|
||||
[31] (byte) rvalue::b#2 ← *((const byte[1024]) rvalue::SCREEN#0 + (byte) rvalue::i#2) [ rvalue::i#2 ]
|
||||
[32] (byte) rvalue::i#1 ← ++ (byte) rvalue::i#2 [ rvalue::i#1 ]
|
||||
to:rvalue::@1
|
||||
lvalue: scope:[lvalue] from main
|
||||
@ -2081,7 +2058,7 @@ rvaluevar::@2: scope:[rvaluevar] from rvaluevar::@1
|
||||
to:rvaluevar::@1
|
||||
rvalue: scope:[rvalue] from main::@1
|
||||
[26] (byte) rvalue::b#0 ← *((const byte[1024]) rvalue::SCREEN#0) [ ] ( main:2::rvalue:7 [ ] )
|
||||
[27] (byte) rvalue::b#1 ← * (const byte[1024]) rvalue::SCREEN#0+(byte/signed byte/word/signed word) 1 [ ] ( main:2::rvalue:7 [ ] )
|
||||
[27] (byte) rvalue::b#1 ← *((const byte[1024]) rvalue::SCREEN#0+(byte/signed byte/word/signed word) 1) [ ] ( main:2::rvalue:7 [ ] )
|
||||
to:rvalue::@1
|
||||
rvalue::@1: scope:[rvalue] from rvalue rvalue::@2
|
||||
[28] (byte) rvalue::i#2 ← phi( rvalue/(byte/signed byte/word/signed word) 2 rvalue::@2/(byte) rvalue::i#1 ) [ rvalue::i#2 ] ( main:2::rvalue:7 [ rvalue::i#2 ] )
|
||||
@ -2091,7 +2068,7 @@ rvalue::@return: scope:[rvalue] from rvalue::@1
|
||||
[30] return [ ] ( main:2::rvalue:7 [ ] )
|
||||
to:@return
|
||||
rvalue::@2: scope:[rvalue] from rvalue::@1
|
||||
[31] (byte) rvalue::b#2 ← (const byte[1024]) rvalue::SCREEN#0 *idx (byte) rvalue::i#2 [ rvalue::i#2 ] ( main:2::rvalue:7 [ rvalue::i#2 ] )
|
||||
[31] (byte) rvalue::b#2 ← *((const byte[1024]) rvalue::SCREEN#0 + (byte) rvalue::i#2) [ rvalue::i#2 ] ( main:2::rvalue:7 [ rvalue::i#2 ] )
|
||||
[32] (byte) rvalue::i#1 ← ++ (byte) rvalue::i#2 [ rvalue::i#1 ] ( main:2::rvalue:7 [ rvalue::i#1 ] )
|
||||
to:rvalue::@1
|
||||
lvalue: scope:[lvalue] from main
|
||||
@ -2382,7 +2359,7 @@ rvalue: {
|
||||
//SEG54 [26] (byte) rvalue::b#0 ← *((const byte[1024]) rvalue::SCREEN#0) [ ] ( main:2::rvalue:7 [ ] ) -- vbuz1=_deref_pbuc1
|
||||
lda SCREEN
|
||||
sta b
|
||||
//SEG55 [27] (byte) rvalue::b#1 ← * (const byte[1024]) rvalue::SCREEN#0+(byte/signed byte/word/signed word) 1 [ ] ( main:2::rvalue:7 [ ] ) -- vbuz1=_deref_pbuc1
|
||||
//SEG55 [27] (byte) rvalue::b#1 ← *((const byte[1024]) rvalue::SCREEN#0+(byte/signed byte/word/signed word) 1) [ ] ( main:2::rvalue:7 [ ] ) -- vbuz1=_deref_pbuc1
|
||||
lda SCREEN+1
|
||||
sta b_1
|
||||
//SEG56 [28] phi from rvalue to rvalue::@1 [phi:rvalue->rvalue::@1]
|
||||
@ -2404,7 +2381,7 @@ rvalue: {
|
||||
rts
|
||||
//SEG62 rvalue::@2
|
||||
b2:
|
||||
//SEG63 [31] (byte) rvalue::b#2 ← (const byte[1024]) rvalue::SCREEN#0 *idx (byte) rvalue::i#2 [ rvalue::i#2 ] ( main:2::rvalue:7 [ rvalue::i#2 ] ) -- vbuz1=pbuc1_derefidx_vbuz2
|
||||
//SEG63 [31] (byte) rvalue::b#2 ← *((const byte[1024]) rvalue::SCREEN#0 + (byte) rvalue::i#2) [ rvalue::i#2 ] ( main:2::rvalue:7 [ rvalue::i#2 ] ) -- vbuz1=pbuc1_derefidx_vbuz2
|
||||
ldx i
|
||||
lda SCREEN,x
|
||||
sta b_2
|
||||
@ -2638,7 +2615,7 @@ rvalue: {
|
||||
.const SCREEN = $400
|
||||
//SEG54 [26] (byte) rvalue::b#0 ← *((const byte[1024]) rvalue::SCREEN#0) [ ] ( main:2::rvalue:7 [ ] ) -- vbuaa=_deref_pbuc1
|
||||
lda SCREEN
|
||||
//SEG55 [27] (byte) rvalue::b#1 ← * (const byte[1024]) rvalue::SCREEN#0+(byte/signed byte/word/signed word) 1 [ ] ( main:2::rvalue:7 [ ] ) -- vbuaa=_deref_pbuc1
|
||||
//SEG55 [27] (byte) rvalue::b#1 ← *((const byte[1024]) rvalue::SCREEN#0+(byte/signed byte/word/signed word) 1) [ ] ( main:2::rvalue:7 [ ] ) -- vbuaa=_deref_pbuc1
|
||||
lda SCREEN+1
|
||||
//SEG56 [28] phi from rvalue to rvalue::@1 [phi:rvalue->rvalue::@1]
|
||||
b1_from_rvalue:
|
||||
@ -2657,7 +2634,7 @@ rvalue: {
|
||||
rts
|
||||
//SEG62 rvalue::@2
|
||||
b2:
|
||||
//SEG63 [31] (byte) rvalue::b#2 ← (const byte[1024]) rvalue::SCREEN#0 *idx (byte) rvalue::i#2 [ rvalue::i#2 ] ( main:2::rvalue:7 [ rvalue::i#2 ] ) -- vbuaa=pbuc1_derefidx_vbuxx
|
||||
//SEG63 [31] (byte) rvalue::b#2 ← *((const byte[1024]) rvalue::SCREEN#0 + (byte) rvalue::i#2) [ rvalue::i#2 ] ( main:2::rvalue:7 [ rvalue::i#2 ] ) -- vbuaa=pbuc1_derefidx_vbuxx
|
||||
lda SCREEN,x
|
||||
//SEG64 [32] (byte) rvalue::i#1 ← ++ (byte) rvalue::i#2 [ rvalue::i#1 ] ( main:2::rvalue:7 [ rvalue::i#1 ] ) -- vbuxx=_inc_vbuxx
|
||||
inx
|
||||
@ -2925,7 +2902,7 @@ rvalue: {
|
||||
.const SCREEN = $400
|
||||
//SEG54 [26] (byte) rvalue::b#0 ← *((const byte[1024]) rvalue::SCREEN#0) [ ] ( main:2::rvalue:7 [ ] ) -- vbuaa=_deref_pbuc1
|
||||
lda SCREEN
|
||||
//SEG55 [27] (byte) rvalue::b#1 ← * (const byte[1024]) rvalue::SCREEN#0+(byte/signed byte/word/signed word) 1 [ ] ( main:2::rvalue:7 [ ] ) -- vbuaa=_deref_pbuc1
|
||||
//SEG55 [27] (byte) rvalue::b#1 ← *((const byte[1024]) rvalue::SCREEN#0+(byte/signed byte/word/signed word) 1) [ ] ( main:2::rvalue:7 [ ] ) -- vbuaa=_deref_pbuc1
|
||||
lda SCREEN+1
|
||||
//SEG56 [28] phi from rvalue to rvalue::@1 [phi:rvalue->rvalue::@1]
|
||||
//SEG57 [28] phi (byte) rvalue::i#2 = (byte/signed byte/word/signed word) 2 [phi:rvalue->rvalue::@1#0] -- vbuxx=vbuc1
|
||||
@ -2940,7 +2917,7 @@ rvalue: {
|
||||
rts
|
||||
//SEG62 rvalue::@2
|
||||
b2:
|
||||
//SEG63 [31] (byte) rvalue::b#2 ← (const byte[1024]) rvalue::SCREEN#0 *idx (byte) rvalue::i#2 [ rvalue::i#2 ] ( main:2::rvalue:7 [ rvalue::i#2 ] ) -- vbuaa=pbuc1_derefidx_vbuxx
|
||||
//SEG63 [31] (byte) rvalue::b#2 ← *((const byte[1024]) rvalue::SCREEN#0 + (byte) rvalue::i#2) [ rvalue::i#2 ] ( main:2::rvalue:7 [ rvalue::i#2 ] ) -- vbuaa=pbuc1_derefidx_vbuxx
|
||||
lda SCREEN,x
|
||||
//SEG64 [32] (byte) rvalue::i#1 ← ++ (byte) rvalue::i#2 [ rvalue::i#1 ] ( main:2::rvalue:7 [ rvalue::i#1 ] ) -- vbuxx=_inc_vbuxx
|
||||
inx
|
||||
|
@ -25,8 +25,7 @@ main::@1:
|
||||
if((boolean~) main::$0) goto main::@2
|
||||
goto main::@3
|
||||
main::@2:
|
||||
(byte~) main::$1 ← (byte[1024]) main::SCREEN *idx (byte) main::i
|
||||
(byte) main::b ← (byte~) main::$1
|
||||
(byte) main::b ← *((byte[1024]) main::SCREEN + (byte) main::i)
|
||||
(byte) main::i ← ++ (byte) main::i
|
||||
goto main::@1
|
||||
main::@3:
|
||||
@ -38,7 +37,6 @@ endproc // main()
|
||||
SYMBOLS
|
||||
(void()) main()
|
||||
(boolean~) main::$0
|
||||
(byte~) main::$1
|
||||
(label) main::@1
|
||||
(label) main::@2
|
||||
(label) main::@3
|
||||
@ -60,8 +58,7 @@ main::@1: scope:[main] from main main::@2
|
||||
if((boolean~) main::$0) goto main::@2
|
||||
to:main::@4
|
||||
main::@2: scope:[main] from main::@1 main::@5
|
||||
(byte~) main::$1 ← (byte[1024]) main::SCREEN *idx (byte) main::i
|
||||
(byte) main::b ← (byte~) main::$1
|
||||
(byte) main::b ← *((byte[1024]) main::SCREEN + (byte) main::i)
|
||||
(byte) main::i ← ++ (byte) main::i
|
||||
to:main::@1
|
||||
main::@4: scope:[main] from main::@1
|
||||
@ -80,8 +77,7 @@ main::@return: scope:[main] from main::@3
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
|
||||
Eliminating unused variable (byte) main::b and assignment [5] (byte) main::b ← (byte~) main::$1
|
||||
Eliminating unused variable (byte~) main::$1 and assignment [4] (byte~) main::$1 ← (byte[1024]) main::SCREEN *idx (byte) main::i
|
||||
Eliminating unused variable (byte) main::b and assignment [4] (byte) main::b ← *((byte[1024]) main::SCREEN + (byte) main::i)
|
||||
Eliminating unused variable (byte[1024]) main::SCREEN and assignment [0] (byte[1024]) main::SCREEN ← ((byte*)) (word/signed word) 1024
|
||||
Removing empty block main::@4
|
||||
Removing empty block main::@3
|
||||
|
@ -26,43 +26,42 @@ main::@8: scope:[main] from main::@3
|
||||
to:main::@5
|
||||
main::@5: scope:[main] from main::@5 main::@8
|
||||
[12] (byte) main::i#2 ← phi( main::@5/(byte) main::i#1 main::@8/(byte/signed byte/word/signed word) 0 ) [ main::nxt#9 main::i#2 ] ( main:2 [ main::nxt#9 main::i#2 ] )
|
||||
[13] (byte~) main::$7 ← (const byte[]) main::line#0+(byte/signed byte/word/signed word) 1 *idx (byte) main::i#2 [ main::nxt#9 main::i#2 main::$7 ] ( main:2 [ main::nxt#9 main::i#2 main::$7 ] )
|
||||
[14] *((const byte[]) main::line#0 + (byte) main::i#2) ← (byte~) main::$7 [ main::nxt#9 main::i#2 ] ( main:2 [ main::nxt#9 main::i#2 ] )
|
||||
[15] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::nxt#9 main::i#1 ] ( main:2 [ main::nxt#9 main::i#1 ] )
|
||||
[16] if((byte) main::i#1!=(byte/signed byte/word/signed word) 39) goto main::@5 [ main::nxt#9 main::i#1 ] ( main:2 [ main::nxt#9 main::i#1 ] )
|
||||
[13] *((const byte[]) main::line#0 + (byte) main::i#2) ← *((const byte[]) main::line#0+(byte/signed byte/word/signed word) 1 + (byte) main::i#2) [ main::nxt#9 main::i#2 ] ( main:2 [ main::nxt#9 main::i#2 ] )
|
||||
[14] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::nxt#9 main::i#1 ] ( main:2 [ main::nxt#9 main::i#1 ] )
|
||||
[15] if((byte) main::i#1!=(byte/signed byte/word/signed word) 39) goto main::@5 [ main::nxt#9 main::i#1 ] ( main:2 [ main::nxt#9 main::i#1 ] )
|
||||
to:main::@10
|
||||
main::@10: scope:[main] from main::@5
|
||||
[17] (byte) main::c#0 ← *((byte*) main::nxt#9) [ main::nxt#9 main::c#0 ] ( main:2 [ main::nxt#9 main::c#0 ] )
|
||||
[18] if((byte) main::c#0!=(byte) '@') goto main::@6 [ main::nxt#9 main::c#0 ] ( main:2 [ main::nxt#9 main::c#0 ] )
|
||||
[16] (byte) main::c#0 ← *((byte*) main::nxt#9) [ main::nxt#9 main::c#0 ] ( main:2 [ main::nxt#9 main::c#0 ] )
|
||||
[17] if((byte) main::c#0!=(byte) '@') goto main::@6 [ main::nxt#9 main::c#0 ] ( main:2 [ main::nxt#9 main::c#0 ] )
|
||||
to:main::@11
|
||||
main::@11: scope:[main] from main::@10
|
||||
[19] (byte) main::c#1 ← *((const byte*) TEXT#0) [ main::c#1 ] ( main:2 [ main::c#1 ] )
|
||||
[18] (byte) main::c#1 ← *((const byte*) TEXT#0) [ main::c#1 ] ( main:2 [ main::c#1 ] )
|
||||
to:main::@6
|
||||
main::@6: scope:[main] from main::@10 main::@11
|
||||
[20] (byte*) main::nxt#4 ← phi( main::@10/(byte*) main::nxt#9 main::@11/(const byte*) TEXT#0 ) [ main::c#2 main::nxt#4 ] ( main:2 [ main::c#2 main::nxt#4 ] )
|
||||
[20] (byte) main::c#2 ← phi( main::@10/(byte) main::c#0 main::@11/(byte) main::c#1 ) [ main::c#2 main::nxt#4 ] ( main:2 [ main::c#2 main::nxt#4 ] )
|
||||
[21] *((const byte[]) main::line#0+(byte/signed byte/word/signed word) 39) ← (byte) main::c#2 [ main::nxt#4 ] ( main:2 [ main::nxt#4 ] )
|
||||
[22] (byte*) main::nxt#1 ← ++ (byte*) main::nxt#4 [ main::nxt#1 ] ( main:2 [ main::nxt#1 ] )
|
||||
[19] (byte*) main::nxt#4 ← phi( main::@10/(byte*) main::nxt#9 main::@11/(const byte*) TEXT#0 ) [ main::c#2 main::nxt#4 ] ( main:2 [ main::c#2 main::nxt#4 ] )
|
||||
[19] (byte) main::c#2 ← phi( main::@10/(byte) main::c#0 main::@11/(byte) main::c#1 ) [ main::c#2 main::nxt#4 ] ( main:2 [ main::c#2 main::nxt#4 ] )
|
||||
[20] *((const byte[]) main::line#0+(byte/signed byte/word/signed word) 39) ← (byte) main::c#2 [ main::nxt#4 ] ( main:2 [ main::nxt#4 ] )
|
||||
[21] (byte*) main::nxt#1 ← ++ (byte*) main::nxt#4 [ main::nxt#1 ] ( main:2 [ main::nxt#1 ] )
|
||||
to:main::@4
|
||||
main::@4: scope:[main] from main::@6 main::@8
|
||||
[23] (byte*) main::nxt#10 ← phi( main::@6/(byte*) main::nxt#1 main::@8/(byte*) main::nxt#9 ) [ main::scroll#10 main::nxt#10 ] ( main:2 [ main::scroll#10 main::nxt#10 ] )
|
||||
[23] (byte) main::scroll#10 ← phi( main::@6/(byte/signed byte/word/signed word) 7 main::@8/(byte) main::scroll#1 ) [ main::scroll#10 main::nxt#10 ] ( main:2 [ main::scroll#10 main::nxt#10 ] )
|
||||
[24] *((const byte*) SCROLL#0) ← (byte) main::scroll#10 [ main::scroll#10 main::nxt#10 ] ( main:2 [ main::scroll#10 main::nxt#10 ] )
|
||||
[25] *((const byte*) BGCOL#0) ← -- *((const byte*) BGCOL#0) [ main::scroll#10 main::nxt#10 ] ( main:2 [ main::scroll#10 main::nxt#10 ] )
|
||||
[26] if(true) goto main::@2 [ main::scroll#10 main::nxt#10 ] ( main:2 [ main::scroll#10 main::nxt#10 ] )
|
||||
[22] (byte*) main::nxt#10 ← phi( main::@6/(byte*) main::nxt#1 main::@8/(byte*) main::nxt#9 ) [ main::scroll#10 main::nxt#10 ] ( main:2 [ main::scroll#10 main::nxt#10 ] )
|
||||
[22] (byte) main::scroll#10 ← phi( main::@6/(byte/signed byte/word/signed word) 7 main::@8/(byte) main::scroll#1 ) [ main::scroll#10 main::nxt#10 ] ( main:2 [ main::scroll#10 main::nxt#10 ] )
|
||||
[23] *((const byte*) SCROLL#0) ← (byte) main::scroll#10 [ main::scroll#10 main::nxt#10 ] ( main:2 [ main::scroll#10 main::nxt#10 ] )
|
||||
[24] *((const byte*) BGCOL#0) ← -- *((const byte*) BGCOL#0) [ main::scroll#10 main::nxt#10 ] ( main:2 [ main::scroll#10 main::nxt#10 ] )
|
||||
[25] if(true) goto main::@2 [ main::scroll#10 main::nxt#10 ] ( main:2 [ main::scroll#10 main::nxt#10 ] )
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@4
|
||||
[27] return [ ] ( main:2 [ ] )
|
||||
[26] return [ ] ( main:2 [ ] )
|
||||
to:@return
|
||||
fillscreen: scope:[fillscreen] from main
|
||||
[28] phi() [ ] ( main:2::fillscreen:5 [ ] )
|
||||
[27] phi() [ ] ( main:2::fillscreen:5 [ ] )
|
||||
to:fillscreen::@1
|
||||
fillscreen::@1: scope:[fillscreen] from fillscreen fillscreen::@1
|
||||
[29] (byte*) fillscreen::cursor#2 ← phi( fillscreen/(const byte*) SCREEN#0 fillscreen::@1/(byte*) fillscreen::cursor#1 ) [ fillscreen::cursor#2 ] ( main:2::fillscreen:5 [ fillscreen::cursor#2 ] )
|
||||
[30] *((byte*) fillscreen::cursor#2) ← (const byte) fillscreen::fill#0 [ fillscreen::cursor#2 ] ( main:2::fillscreen:5 [ fillscreen::cursor#2 ] )
|
||||
[31] (byte*) fillscreen::cursor#1 ← ++ (byte*) fillscreen::cursor#2 [ fillscreen::cursor#1 ] ( main:2::fillscreen:5 [ fillscreen::cursor#1 ] )
|
||||
[32] if((byte*) fillscreen::cursor#1<(const byte*) SCREEN#0+(word/signed word) 1000) goto fillscreen::@1 [ fillscreen::cursor#1 ] ( main:2::fillscreen:5 [ fillscreen::cursor#1 ] )
|
||||
[28] (byte*) fillscreen::cursor#2 ← phi( fillscreen/(const byte*) SCREEN#0 fillscreen::@1/(byte*) fillscreen::cursor#1 ) [ fillscreen::cursor#2 ] ( main:2::fillscreen:5 [ fillscreen::cursor#2 ] )
|
||||
[29] *((byte*) fillscreen::cursor#2) ← (const byte) fillscreen::fill#0 [ fillscreen::cursor#2 ] ( main:2::fillscreen:5 [ fillscreen::cursor#2 ] )
|
||||
[30] (byte*) fillscreen::cursor#1 ← ++ (byte*) fillscreen::cursor#2 [ fillscreen::cursor#1 ] ( main:2::fillscreen:5 [ fillscreen::cursor#1 ] )
|
||||
[31] if((byte*) fillscreen::cursor#1<(const byte*) SCREEN#0+(word/signed word) 1000) goto fillscreen::@1 [ fillscreen::cursor#1 ] ( main:2::fillscreen:5 [ fillscreen::cursor#1 ] )
|
||||
to:fillscreen::@return
|
||||
fillscreen::@return: scope:[fillscreen] from fillscreen::@1
|
||||
[33] return [ ] ( main:2::fillscreen:5 [ ] )
|
||||
[32] return [ ] ( main:2::fillscreen:5 [ ] )
|
||||
to:@return
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -21,7 +21,6 @@
|
||||
(const byte) fillscreen::fill#0 fill = (byte/signed byte/word/signed word) 32
|
||||
(byte*) fillscreen::screen
|
||||
(void()) main()
|
||||
(byte~) main::$7 reg byte a 202.0
|
||||
(label) main::@10
|
||||
(label) main::@11
|
||||
(label) main::@2
|
||||
@ -37,14 +36,14 @@
|
||||
(byte) main::c#2 reg byte x 33.0
|
||||
(byte) main::i
|
||||
(byte) main::i#1 reg byte x 151.5
|
||||
(byte) main::i#2 reg byte x 134.66666666666666
|
||||
(byte) main::i#2 reg byte x 202.0
|
||||
(byte[]) main::line
|
||||
(const byte[]) main::line#0 line = (const byte*) SCREEN#0+(byte/signed byte/word/signed word) 40
|
||||
(byte*) main::nxt
|
||||
(byte*) main::nxt#1 nxt zp ZP_WORD:2 22.0
|
||||
(byte*) main::nxt#10 nxt zp ZP_WORD:2 8.25
|
||||
(byte*) main::nxt#4 nxt zp ZP_WORD:2 11.0
|
||||
(byte*) main::nxt#9 nxt zp ZP_WORD:2 3.3846153846153846
|
||||
(byte*) main::nxt#9 nxt zp ZP_WORD:2 3.6666666666666665
|
||||
(byte) main::scroll
|
||||
(byte) main::scroll#1 reg byte x 16.5
|
||||
(byte) main::scroll#10 reg byte x 8.25
|
||||
@ -54,4 +53,3 @@ reg byte x [ main::scroll#7 main::scroll#10 main::scroll#1 ]
|
||||
reg byte x [ main::i#2 main::i#1 ]
|
||||
reg byte x [ main::c#2 main::c#0 main::c#1 ]
|
||||
zp ZP_WORD:2 [ main::nxt#4 main::nxt#9 main::nxt#10 main::nxt#1 fillscreen::cursor#2 fillscreen::cursor#1 ]
|
||||
reg byte a [ main::$7 ]
|
||||
|
@ -78,9 +78,9 @@ scroll_bit::@7: scope:[scroll_bit] from scroll_bit::@1
|
||||
scroll_bit::@2: scope:[scroll_bit] from scroll_bit::@3 scroll_bit::@7
|
||||
[34] (byte*) scroll_bit::sc#2 ← phi( scroll_bit::@3/(byte*) scroll_bit::sc#1 scroll_bit::@7/(const byte*) SCREEN#0+(byte/signed byte/word/signed word) 40+(byte/signed byte/word/signed word) 39 ) [ current_bit#21 nxt#36 current_chargen#19 scroll_bit::r#2 scroll_bit::sc#2 ] ( main:2::scroll_soft:10::scroll_bit:17 [ current_bit#21 nxt#36 current_chargen#19 scroll_bit::r#2 scroll_bit::sc#2 ] )
|
||||
[34] (byte) scroll_bit::r#2 ← phi( scroll_bit::@3/(byte) scroll_bit::r#1 scroll_bit::@7/(byte/signed byte/word/signed word) 0 ) [ current_bit#21 nxt#36 current_chargen#19 scroll_bit::r#2 scroll_bit::sc#2 ] ( main:2::scroll_soft:10::scroll_bit:17 [ current_bit#21 nxt#36 current_chargen#19 scroll_bit::r#2 scroll_bit::sc#2 ] )
|
||||
[35] (byte) scroll_bit::bits#0 ← (byte*) current_chargen#19 *idx (byte) scroll_bit::r#2 [ current_bit#21 nxt#36 current_chargen#19 scroll_bit::r#2 scroll_bit::sc#2 scroll_bit::bits#0 ] ( main:2::scroll_soft:10::scroll_bit:17 [ current_bit#21 nxt#36 current_chargen#19 scroll_bit::r#2 scroll_bit::sc#2 scroll_bit::bits#0 ] )
|
||||
[36] (byte~) scroll_bit::$10 ← (byte) scroll_bit::bits#0 & (byte) current_bit#21 [ current_bit#21 nxt#36 current_chargen#19 scroll_bit::r#2 scroll_bit::sc#2 scroll_bit::$10 ] ( main:2::scroll_soft:10::scroll_bit:17 [ current_bit#21 nxt#36 current_chargen#19 scroll_bit::r#2 scroll_bit::sc#2 scroll_bit::$10 ] )
|
||||
[37] if((byte~) scroll_bit::$10==(byte/signed byte/word/signed word) 0) goto scroll_bit::@3 [ current_bit#21 nxt#36 current_chargen#19 scroll_bit::r#2 scroll_bit::sc#2 ] ( main:2::scroll_soft:10::scroll_bit:17 [ current_bit#21 nxt#36 current_chargen#19 scroll_bit::r#2 scroll_bit::sc#2 ] )
|
||||
[35] (byte) scroll_bit::bits#0 ← *((byte*) current_chargen#19 + (byte) scroll_bit::r#2) [ current_bit#21 nxt#36 current_chargen#19 scroll_bit::r#2 scroll_bit::sc#2 scroll_bit::bits#0 ] ( main:2::scroll_soft:10::scroll_bit:17 [ current_bit#21 nxt#36 current_chargen#19 scroll_bit::r#2 scroll_bit::sc#2 scroll_bit::bits#0 ] )
|
||||
[36] (byte~) scroll_bit::$9 ← (byte) scroll_bit::bits#0 & (byte) current_bit#21 [ current_bit#21 nxt#36 current_chargen#19 scroll_bit::r#2 scroll_bit::sc#2 scroll_bit::$9 ] ( main:2::scroll_soft:10::scroll_bit:17 [ current_bit#21 nxt#36 current_chargen#19 scroll_bit::r#2 scroll_bit::sc#2 scroll_bit::$9 ] )
|
||||
[37] if((byte~) scroll_bit::$9==(byte/signed byte/word/signed word) 0) goto scroll_bit::@3 [ current_bit#21 nxt#36 current_chargen#19 scroll_bit::r#2 scroll_bit::sc#2 ] ( main:2::scroll_soft:10::scroll_bit:17 [ current_bit#21 nxt#36 current_chargen#19 scroll_bit::r#2 scroll_bit::sc#2 ] )
|
||||
to:scroll_bit::@5
|
||||
scroll_bit::@5: scope:[scroll_bit] from scroll_bit::@2
|
||||
[38] phi() [ current_bit#21 nxt#36 current_chargen#19 scroll_bit::r#2 scroll_bit::sc#2 ] ( main:2::scroll_soft:10::scroll_bit:17 [ current_bit#21 nxt#36 current_chargen#19 scroll_bit::r#2 scroll_bit::sc#2 ] )
|
||||
@ -104,52 +104,44 @@ scroll_hard: scope:[scroll_hard] from scroll_bit::@1
|
||||
to:scroll_hard::@1
|
||||
scroll_hard::@1: scope:[scroll_hard] from scroll_hard scroll_hard::@1
|
||||
[48] (byte) scroll_hard::i#2 ← phi( scroll_hard/(byte/signed byte/word/signed word) 0 scroll_hard::@1/(byte) scroll_hard::i#1 ) [ scroll_hard::i#2 ] ( main:2::scroll_soft:10::scroll_bit:17::scroll_hard:31 [ current_bit#21 nxt#36 current_chargen#19 scroll_hard::i#2 ] )
|
||||
[49] (byte~) scroll_hard::$17 ← (const byte[]) scroll_hard::line0#0+(byte/signed byte/word/signed word) 1 *idx (byte) scroll_hard::i#2 [ scroll_hard::i#2 scroll_hard::$17 ] ( main:2::scroll_soft:10::scroll_bit:17::scroll_hard:31 [ current_bit#21 nxt#36 current_chargen#19 scroll_hard::i#2 scroll_hard::$17 ] )
|
||||
[50] *((const byte[]) scroll_hard::line0#0 + (byte) scroll_hard::i#2) ← (byte~) scroll_hard::$17 [ scroll_hard::i#2 ] ( main:2::scroll_soft:10::scroll_bit:17::scroll_hard:31 [ current_bit#21 nxt#36 current_chargen#19 scroll_hard::i#2 ] )
|
||||
[51] (byte~) scroll_hard::$19 ← (const byte[]) scroll_hard::line1#0+(byte/signed byte/word/signed word) 1 *idx (byte) scroll_hard::i#2 [ scroll_hard::i#2 scroll_hard::$19 ] ( main:2::scroll_soft:10::scroll_bit:17::scroll_hard:31 [ current_bit#21 nxt#36 current_chargen#19 scroll_hard::i#2 scroll_hard::$19 ] )
|
||||
[52] *((const byte[]) scroll_hard::line1#0 + (byte) scroll_hard::i#2) ← (byte~) scroll_hard::$19 [ scroll_hard::i#2 ] ( main:2::scroll_soft:10::scroll_bit:17::scroll_hard:31 [ current_bit#21 nxt#36 current_chargen#19 scroll_hard::i#2 ] )
|
||||
[53] (byte~) scroll_hard::$21 ← (const byte[]) scroll_hard::line2#0+(byte/signed byte/word/signed word) 1 *idx (byte) scroll_hard::i#2 [ scroll_hard::i#2 scroll_hard::$21 ] ( main:2::scroll_soft:10::scroll_bit:17::scroll_hard:31 [ current_bit#21 nxt#36 current_chargen#19 scroll_hard::i#2 scroll_hard::$21 ] )
|
||||
[54] *((const byte[]) scroll_hard::line2#0 + (byte) scroll_hard::i#2) ← (byte~) scroll_hard::$21 [ scroll_hard::i#2 ] ( main:2::scroll_soft:10::scroll_bit:17::scroll_hard:31 [ current_bit#21 nxt#36 current_chargen#19 scroll_hard::i#2 ] )
|
||||
[55] (byte~) scroll_hard::$23 ← (const byte[]) scroll_hard::line3#0+(byte/signed byte/word/signed word) 1 *idx (byte) scroll_hard::i#2 [ scroll_hard::i#2 scroll_hard::$23 ] ( main:2::scroll_soft:10::scroll_bit:17::scroll_hard:31 [ current_bit#21 nxt#36 current_chargen#19 scroll_hard::i#2 scroll_hard::$23 ] )
|
||||
[56] *((const byte[]) scroll_hard::line3#0 + (byte) scroll_hard::i#2) ← (byte~) scroll_hard::$23 [ scroll_hard::i#2 ] ( main:2::scroll_soft:10::scroll_bit:17::scroll_hard:31 [ current_bit#21 nxt#36 current_chargen#19 scroll_hard::i#2 ] )
|
||||
[57] (byte~) scroll_hard::$25 ← (const byte[]) scroll_hard::line4#0+(byte/signed byte/word/signed word) 1 *idx (byte) scroll_hard::i#2 [ scroll_hard::i#2 scroll_hard::$25 ] ( main:2::scroll_soft:10::scroll_bit:17::scroll_hard:31 [ current_bit#21 nxt#36 current_chargen#19 scroll_hard::i#2 scroll_hard::$25 ] )
|
||||
[58] *((const byte[]) scroll_hard::line4#0 + (byte) scroll_hard::i#2) ← (byte~) scroll_hard::$25 [ scroll_hard::i#2 ] ( main:2::scroll_soft:10::scroll_bit:17::scroll_hard:31 [ current_bit#21 nxt#36 current_chargen#19 scroll_hard::i#2 ] )
|
||||
[59] (byte~) scroll_hard::$27 ← (const byte[]) scroll_hard::line5#0+(byte/signed byte/word/signed word) 1 *idx (byte) scroll_hard::i#2 [ scroll_hard::i#2 scroll_hard::$27 ] ( main:2::scroll_soft:10::scroll_bit:17::scroll_hard:31 [ current_bit#21 nxt#36 current_chargen#19 scroll_hard::i#2 scroll_hard::$27 ] )
|
||||
[60] *((const byte[]) scroll_hard::line5#0 + (byte) scroll_hard::i#2) ← (byte~) scroll_hard::$27 [ scroll_hard::i#2 ] ( main:2::scroll_soft:10::scroll_bit:17::scroll_hard:31 [ current_bit#21 nxt#36 current_chargen#19 scroll_hard::i#2 ] )
|
||||
[61] (byte~) scroll_hard::$29 ← (const byte[]) scroll_hard::line6#0+(byte/signed byte/word/signed word) 1 *idx (byte) scroll_hard::i#2 [ scroll_hard::i#2 scroll_hard::$29 ] ( main:2::scroll_soft:10::scroll_bit:17::scroll_hard:31 [ current_bit#21 nxt#36 current_chargen#19 scroll_hard::i#2 scroll_hard::$29 ] )
|
||||
[62] *((const byte[]) scroll_hard::line6#0 + (byte) scroll_hard::i#2) ← (byte~) scroll_hard::$29 [ scroll_hard::i#2 ] ( main:2::scroll_soft:10::scroll_bit:17::scroll_hard:31 [ current_bit#21 nxt#36 current_chargen#19 scroll_hard::i#2 ] )
|
||||
[63] (byte~) scroll_hard::$31 ← (const byte[]) scroll_hard::line7#0+(byte/signed byte/word/signed word) 1 *idx (byte) scroll_hard::i#2 [ scroll_hard::i#2 scroll_hard::$31 ] ( main:2::scroll_soft:10::scroll_bit:17::scroll_hard:31 [ current_bit#21 nxt#36 current_chargen#19 scroll_hard::i#2 scroll_hard::$31 ] )
|
||||
[64] *((const byte[]) scroll_hard::line7#0 + (byte) scroll_hard::i#2) ← (byte~) scroll_hard::$31 [ scroll_hard::i#2 ] ( main:2::scroll_soft:10::scroll_bit:17::scroll_hard:31 [ current_bit#21 nxt#36 current_chargen#19 scroll_hard::i#2 ] )
|
||||
[65] (byte) scroll_hard::i#1 ← ++ (byte) scroll_hard::i#2 [ scroll_hard::i#1 ] ( main:2::scroll_soft:10::scroll_bit:17::scroll_hard:31 [ current_bit#21 nxt#36 current_chargen#19 scroll_hard::i#1 ] )
|
||||
[66] if((byte) scroll_hard::i#1!=(byte/signed byte/word/signed word) 39) goto scroll_hard::@1 [ scroll_hard::i#1 ] ( main:2::scroll_soft:10::scroll_bit:17::scroll_hard:31 [ current_bit#21 nxt#36 current_chargen#19 scroll_hard::i#1 ] )
|
||||
[49] *((const byte[]) scroll_hard::line0#0 + (byte) scroll_hard::i#2) ← *((const byte[]) scroll_hard::line0#0+(byte/signed byte/word/signed word) 1 + (byte) scroll_hard::i#2) [ scroll_hard::i#2 ] ( main:2::scroll_soft:10::scroll_bit:17::scroll_hard:31 [ current_bit#21 nxt#36 current_chargen#19 scroll_hard::i#2 ] )
|
||||
[50] *((const byte[]) scroll_hard::line1#0 + (byte) scroll_hard::i#2) ← *((const byte[]) scroll_hard::line1#0+(byte/signed byte/word/signed word) 1 + (byte) scroll_hard::i#2) [ scroll_hard::i#2 ] ( main:2::scroll_soft:10::scroll_bit:17::scroll_hard:31 [ current_bit#21 nxt#36 current_chargen#19 scroll_hard::i#2 ] )
|
||||
[51] *((const byte[]) scroll_hard::line2#0 + (byte) scroll_hard::i#2) ← *((const byte[]) scroll_hard::line2#0+(byte/signed byte/word/signed word) 1 + (byte) scroll_hard::i#2) [ scroll_hard::i#2 ] ( main:2::scroll_soft:10::scroll_bit:17::scroll_hard:31 [ current_bit#21 nxt#36 current_chargen#19 scroll_hard::i#2 ] )
|
||||
[52] *((const byte[]) scroll_hard::line3#0 + (byte) scroll_hard::i#2) ← *((const byte[]) scroll_hard::line3#0+(byte/signed byte/word/signed word) 1 + (byte) scroll_hard::i#2) [ scroll_hard::i#2 ] ( main:2::scroll_soft:10::scroll_bit:17::scroll_hard:31 [ current_bit#21 nxt#36 current_chargen#19 scroll_hard::i#2 ] )
|
||||
[53] *((const byte[]) scroll_hard::line4#0 + (byte) scroll_hard::i#2) ← *((const byte[]) scroll_hard::line4#0+(byte/signed byte/word/signed word) 1 + (byte) scroll_hard::i#2) [ scroll_hard::i#2 ] ( main:2::scroll_soft:10::scroll_bit:17::scroll_hard:31 [ current_bit#21 nxt#36 current_chargen#19 scroll_hard::i#2 ] )
|
||||
[54] *((const byte[]) scroll_hard::line5#0 + (byte) scroll_hard::i#2) ← *((const byte[]) scroll_hard::line5#0+(byte/signed byte/word/signed word) 1 + (byte) scroll_hard::i#2) [ scroll_hard::i#2 ] ( main:2::scroll_soft:10::scroll_bit:17::scroll_hard:31 [ current_bit#21 nxt#36 current_chargen#19 scroll_hard::i#2 ] )
|
||||
[55] *((const byte[]) scroll_hard::line6#0 + (byte) scroll_hard::i#2) ← *((const byte[]) scroll_hard::line6#0+(byte/signed byte/word/signed word) 1 + (byte) scroll_hard::i#2) [ scroll_hard::i#2 ] ( main:2::scroll_soft:10::scroll_bit:17::scroll_hard:31 [ current_bit#21 nxt#36 current_chargen#19 scroll_hard::i#2 ] )
|
||||
[56] *((const byte[]) scroll_hard::line7#0 + (byte) scroll_hard::i#2) ← *((const byte[]) scroll_hard::line7#0+(byte/signed byte/word/signed word) 1 + (byte) scroll_hard::i#2) [ scroll_hard::i#2 ] ( main:2::scroll_soft:10::scroll_bit:17::scroll_hard:31 [ current_bit#21 nxt#36 current_chargen#19 scroll_hard::i#2 ] )
|
||||
[57] (byte) scroll_hard::i#1 ← ++ (byte) scroll_hard::i#2 [ scroll_hard::i#1 ] ( main:2::scroll_soft:10::scroll_bit:17::scroll_hard:31 [ current_bit#21 nxt#36 current_chargen#19 scroll_hard::i#1 ] )
|
||||
[58] if((byte) scroll_hard::i#1!=(byte/signed byte/word/signed word) 39) goto scroll_hard::@1 [ scroll_hard::i#1 ] ( main:2::scroll_soft:10::scroll_bit:17::scroll_hard:31 [ current_bit#21 nxt#36 current_chargen#19 scroll_hard::i#1 ] )
|
||||
to:scroll_hard::@return
|
||||
scroll_hard::@return: scope:[scroll_hard] from scroll_hard::@1
|
||||
[67] return [ ] ( main:2::scroll_soft:10::scroll_bit:17::scroll_hard:31 [ current_bit#21 nxt#36 current_chargen#19 ] )
|
||||
[59] return [ ] ( main:2::scroll_soft:10::scroll_bit:17::scroll_hard:31 [ current_bit#21 nxt#36 current_chargen#19 ] )
|
||||
to:@return
|
||||
next_char: scope:[next_char] from scroll_bit::@4
|
||||
[68] (byte) next_char::c#0 ← *((byte*) nxt#31) [ nxt#31 next_char::c#0 ] ( main:2::scroll_soft:10::scroll_bit:17::next_char:24 [ nxt#31 next_char::c#0 ] )
|
||||
[69] if((byte) next_char::c#0!=(byte) '@') goto next_char::@1 [ nxt#31 next_char::c#0 ] ( main:2::scroll_soft:10::scroll_bit:17::next_char:24 [ nxt#31 next_char::c#0 ] )
|
||||
[60] (byte) next_char::c#0 ← *((byte*) nxt#31) [ nxt#31 next_char::c#0 ] ( main:2::scroll_soft:10::scroll_bit:17::next_char:24 [ nxt#31 next_char::c#0 ] )
|
||||
[61] if((byte) next_char::c#0!=(byte) '@') goto next_char::@1 [ nxt#31 next_char::c#0 ] ( main:2::scroll_soft:10::scroll_bit:17::next_char:24 [ nxt#31 next_char::c#0 ] )
|
||||
to:next_char::@2
|
||||
next_char::@2: scope:[next_char] from next_char
|
||||
[70] (byte) next_char::c#1 ← *((const byte*) TEXT#0) [ next_char::c#1 ] ( main:2::scroll_soft:10::scroll_bit:17::next_char:24 [ next_char::c#1 ] )
|
||||
[62] (byte) next_char::c#1 ← *((const byte*) TEXT#0) [ next_char::c#1 ] ( main:2::scroll_soft:10::scroll_bit:17::next_char:24 [ next_char::c#1 ] )
|
||||
to:next_char::@1
|
||||
next_char::@1: scope:[next_char] from next_char next_char::@2
|
||||
[71] (byte) next_char::return#1 ← phi( next_char/(byte) next_char::c#0 next_char::@2/(byte) next_char::c#1 ) [ next_char::return#1 nxt#18 ] ( main:2::scroll_soft:10::scroll_bit:17::next_char:24 [ next_char::return#1 nxt#18 ] )
|
||||
[71] (byte*) nxt#18 ← phi( next_char/(byte*) nxt#31 next_char::@2/(const byte*) TEXT#0 ) [ next_char::return#1 nxt#18 ] ( main:2::scroll_soft:10::scroll_bit:17::next_char:24 [ next_char::return#1 nxt#18 ] )
|
||||
[72] (byte*) nxt#19 ← ++ (byte*) nxt#18 [ next_char::return#1 nxt#19 ] ( main:2::scroll_soft:10::scroll_bit:17::next_char:24 [ next_char::return#1 nxt#19 ] )
|
||||
[63] (byte) next_char::return#1 ← phi( next_char/(byte) next_char::c#0 next_char::@2/(byte) next_char::c#1 ) [ next_char::return#1 nxt#18 ] ( main:2::scroll_soft:10::scroll_bit:17::next_char:24 [ next_char::return#1 nxt#18 ] )
|
||||
[63] (byte*) nxt#18 ← phi( next_char/(byte*) nxt#31 next_char::@2/(const byte*) TEXT#0 ) [ next_char::return#1 nxt#18 ] ( main:2::scroll_soft:10::scroll_bit:17::next_char:24 [ next_char::return#1 nxt#18 ] )
|
||||
[64] (byte*) nxt#19 ← ++ (byte*) nxt#18 [ next_char::return#1 nxt#19 ] ( main:2::scroll_soft:10::scroll_bit:17::next_char:24 [ next_char::return#1 nxt#19 ] )
|
||||
to:next_char::@return
|
||||
next_char::@return: scope:[next_char] from next_char::@1
|
||||
[73] return [ next_char::return#1 nxt#19 ] ( main:2::scroll_soft:10::scroll_bit:17::next_char:24 [ next_char::return#1 nxt#19 ] )
|
||||
[65] return [ next_char::return#1 nxt#19 ] ( main:2::scroll_soft:10::scroll_bit:17::next_char:24 [ next_char::return#1 nxt#19 ] )
|
||||
to:@return
|
||||
fillscreen: scope:[fillscreen] from main
|
||||
[74] phi() [ ] ( main:2::fillscreen:5 [ ] )
|
||||
[66] phi() [ ] ( main:2::fillscreen:5 [ ] )
|
||||
to:fillscreen::@1
|
||||
fillscreen::@1: scope:[fillscreen] from fillscreen fillscreen::@1
|
||||
[75] (byte*) fillscreen::cursor#2 ← phi( fillscreen/(const byte*) SCREEN#0 fillscreen::@1/(byte*) fillscreen::cursor#1 ) [ fillscreen::cursor#2 ] ( main:2::fillscreen:5 [ fillscreen::cursor#2 ] )
|
||||
[76] *((byte*) fillscreen::cursor#2) ← (const byte) fillscreen::fill#0 [ fillscreen::cursor#2 ] ( main:2::fillscreen:5 [ fillscreen::cursor#2 ] )
|
||||
[77] (byte*) fillscreen::cursor#1 ← ++ (byte*) fillscreen::cursor#2 [ fillscreen::cursor#1 ] ( main:2::fillscreen:5 [ fillscreen::cursor#1 ] )
|
||||
[78] if((byte*) fillscreen::cursor#1<(const byte*) SCREEN#0+(word/signed word) 1000) goto fillscreen::@1 [ fillscreen::cursor#1 ] ( main:2::fillscreen:5 [ fillscreen::cursor#1 ] )
|
||||
[67] (byte*) fillscreen::cursor#2 ← phi( fillscreen/(const byte*) SCREEN#0 fillscreen::@1/(byte*) fillscreen::cursor#1 ) [ fillscreen::cursor#2 ] ( main:2::fillscreen:5 [ fillscreen::cursor#2 ] )
|
||||
[68] *((byte*) fillscreen::cursor#2) ← (const byte) fillscreen::fill#0 [ fillscreen::cursor#2 ] ( main:2::fillscreen:5 [ fillscreen::cursor#2 ] )
|
||||
[69] (byte*) fillscreen::cursor#1 ← ++ (byte*) fillscreen::cursor#2 [ fillscreen::cursor#1 ] ( main:2::fillscreen:5 [ fillscreen::cursor#1 ] )
|
||||
[70] if((byte*) fillscreen::cursor#1<(const byte*) SCREEN#0+(word/signed word) 1000) goto fillscreen::@1 [ fillscreen::cursor#1 ] ( main:2::fillscreen:5 [ fillscreen::cursor#1 ] )
|
||||
to:fillscreen::@return
|
||||
fillscreen::@return: scope:[fillscreen] from fillscreen::@1
|
||||
[79] return [ ] ( main:2::fillscreen:5 [ ] )
|
||||
[71] return [ ] ( main:2::fillscreen:5 [ ] )
|
||||
to:@return
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -61,9 +61,9 @@
|
||||
(byte) scroll#18 reg byte x 3.25
|
||||
(byte) scroll#3 reg byte x 3.0
|
||||
(void()) scroll_bit()
|
||||
(byte~) scroll_bit::$10 reg byte a 22.0
|
||||
(byte~) scroll_bit::$3 reg byte a 4.0
|
||||
(word~) scroll_bit::$4 $4 zp ZP_WORD:3 4.0
|
||||
(byte~) scroll_bit::$9 reg byte a 22.0
|
||||
(label) scroll_bit::@1
|
||||
(label) scroll_bit::@2
|
||||
(label) scroll_bit::@3
|
||||
@ -86,19 +86,11 @@
|
||||
(byte*) scroll_bit::sc#1 sc zp ZP_WORD:5 7.333333333333333
|
||||
(byte*) scroll_bit::sc#2 sc zp ZP_WORD:5 4.714285714285714
|
||||
(void()) scroll_hard()
|
||||
(byte~) scroll_hard::$17 reg byte a 22.0
|
||||
(byte~) scroll_hard::$19 reg byte a 22.0
|
||||
(byte~) scroll_hard::$21 reg byte a 22.0
|
||||
(byte~) scroll_hard::$23 reg byte a 22.0
|
||||
(byte~) scroll_hard::$25 reg byte a 22.0
|
||||
(byte~) scroll_hard::$27 reg byte a 22.0
|
||||
(byte~) scroll_hard::$29 reg byte a 22.0
|
||||
(byte~) scroll_hard::$31 reg byte a 22.0
|
||||
(label) scroll_hard::@1
|
||||
(label) scroll_hard::@return
|
||||
(byte) scroll_hard::i
|
||||
(byte) scroll_hard::i#1 reg byte x 16.5
|
||||
(byte) scroll_hard::i#2 reg byte x 11.647058823529411
|
||||
(byte) scroll_hard::i#2 reg byte x 21.999999999999993
|
||||
(byte[]) scroll_hard::line0
|
||||
(const byte[]) scroll_hard::line0#0 line0 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word) 40*(byte/signed byte/word/signed word) 0
|
||||
(byte[]) scroll_hard::line1
|
||||
@ -132,12 +124,4 @@ reg byte a [ next_char::return#1 next_char::c#0 next_char::c#1 ]
|
||||
reg byte a [ next_char::return#0 ]
|
||||
reg byte a [ scroll_bit::$3 ]
|
||||
reg byte a [ scroll_bit::bits#0 ]
|
||||
reg byte a [ scroll_bit::$10 ]
|
||||
reg byte a [ scroll_hard::$17 ]
|
||||
reg byte a [ scroll_hard::$19 ]
|
||||
reg byte a [ scroll_hard::$21 ]
|
||||
reg byte a [ scroll_hard::$23 ]
|
||||
reg byte a [ scroll_hard::$25 ]
|
||||
reg byte a [ scroll_hard::$27 ]
|
||||
reg byte a [ scroll_hard::$29 ]
|
||||
reg byte a [ scroll_hard::$31 ]
|
||||
reg byte a [ scroll_bit::$9 ]
|
||||
|
@ -2777,12 +2777,12 @@ anim::@return: scope:[anim] from anim::@1
|
||||
to:@end
|
||||
@end: scope:[] from @4
|
||||
|
||||
Consolidated assigned array index constant in assignment *(SPRITES_XPOS#0+0)
|
||||
Consolidated assigned array index constant in assignment *(SPRITES_YPOS#0+0)
|
||||
Consolidated assigned array index constant in assignment *(SPRITES_COLS#0+0)
|
||||
Consolidated assigned array index constant in assignment *(SPRITES_PTR#0+0)
|
||||
Consolidated assigned array index constant in assignment *(SPRITES_XPOS#0+0)
|
||||
Consolidated assigned array index constant in assignment *(SPRITES_YPOS#0+0)
|
||||
Consolidated array index constant in *(SPRITES_XPOS#0+0)
|
||||
Consolidated array index constant in *(SPRITES_YPOS#0+0)
|
||||
Consolidated array index constant in *(SPRITES_COLS#0+0)
|
||||
Consolidated array index constant in *(SPRITES_PTR#0+0)
|
||||
Consolidated array index constant in *(SPRITES_XPOS#0+0)
|
||||
Consolidated array index constant in *(SPRITES_YPOS#0+0)
|
||||
Succesful SSA optimization Pass2ConstantAdditionElimination
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
|
@ -103,12 +103,12 @@ print_byte: scope:[print_byte] from print_word print_word::@1
|
||||
[48] (byte*) char_cursor#31 ← phi( print_word/(byte*) char_cursor#32 print_word::@1/(byte*) char_cursor#10 ) [ print_byte::b#2 char_cursor#31 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 print_byte::b#2 char_cursor#31 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 print_byte::b#2 char_cursor#31 ] )
|
||||
[48] (byte) print_byte::b#2 ← phi( print_word/(byte) print_byte::b#0 print_word::@1/(byte) print_byte::b#1 ) [ print_byte::b#2 char_cursor#31 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 print_byte::b#2 char_cursor#31 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 print_byte::b#2 char_cursor#31 ] )
|
||||
[49] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte/signed byte/word/signed word) 4 [ print_byte::b#2 char_cursor#31 print_byte::$0 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 print_byte::b#2 char_cursor#31 print_byte::$0 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 print_byte::b#2 char_cursor#31 print_byte::$0 ] )
|
||||
[50] (byte) print_char::ch#0 ← (const byte[]) print_byte::hextab#0 *idx (byte~) print_byte::$0 [ print_byte::b#2 char_cursor#31 print_char::ch#0 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 print_byte::b#2 char_cursor#31 print_char::ch#0 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 print_byte::b#2 char_cursor#31 print_char::ch#0 ] )
|
||||
[50] (byte) print_char::ch#0 ← *((const byte[]) print_byte::hextab#0 + (byte~) print_byte::$0) [ print_byte::b#2 char_cursor#31 print_char::ch#0 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 print_byte::b#2 char_cursor#31 print_char::ch#0 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 print_byte::b#2 char_cursor#31 print_char::ch#0 ] )
|
||||
[51] call print_char param-assignment [ char_cursor#10 print_byte::b#2 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 char_cursor#10 print_byte::b#2 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 char_cursor#10 print_byte::b#2 ] )
|
||||
to:print_byte::@1
|
||||
print_byte::@1: scope:[print_byte] from print_byte
|
||||
[52] (byte~) print_byte::$3 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15 [ char_cursor#10 print_byte::$3 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 char_cursor#10 print_byte::$3 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 char_cursor#10 print_byte::$3 ] )
|
||||
[53] (byte) print_char::ch#1 ← (const byte[]) print_byte::hextab#0 *idx (byte~) print_byte::$3 [ char_cursor#10 print_char::ch#1 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 char_cursor#10 print_char::ch#1 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 char_cursor#10 print_char::ch#1 ] )
|
||||
[52] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15 [ char_cursor#10 print_byte::$2 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 char_cursor#10 print_byte::$2 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 char_cursor#10 print_byte::$2 ] )
|
||||
[53] (byte) print_char::ch#1 ← *((const byte[]) print_byte::hextab#0 + (byte~) print_byte::$2) [ char_cursor#10 print_char::ch#1 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 char_cursor#10 print_char::ch#1 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 char_cursor#10 print_char::ch#1 ] )
|
||||
[54] call print_char param-assignment [ char_cursor#10 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 char_cursor#10 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 char_cursor#10 ] )
|
||||
to:print_byte::@return
|
||||
print_byte::@return: scope:[print_byte] from print_byte::@1
|
||||
|
@ -381,11 +381,9 @@ endproc // print_word()
|
||||
proc (void()) print_byte((byte) print_byte::b)
|
||||
(byte[]) print_byte::hextab ← { (byte) '0', (byte) '1', (byte) '2', (byte) '3', (byte) '4', (byte) '5', (byte) '6', (byte) '7', (byte) '8', (byte) '9', (byte) 'a', (byte) 'b', (byte) 'c', (byte) 'd', (byte) 'e', (byte) 'f' }
|
||||
(byte~) print_byte::$0 ← (byte) print_byte::b >> (byte/signed byte/word/signed word) 4
|
||||
(byte~) print_byte::$1 ← (byte[]) print_byte::hextab *idx (byte~) print_byte::$0
|
||||
(void~) print_byte::$2 ← call print_char (byte~) print_byte::$1
|
||||
(byte~) print_byte::$3 ← (byte) print_byte::b & (byte/signed byte/word/signed word) 15
|
||||
(byte~) print_byte::$4 ← (byte[]) print_byte::hextab *idx (byte~) print_byte::$3
|
||||
(void~) print_byte::$5 ← call print_char (byte~) print_byte::$4
|
||||
(void~) print_byte::$1 ← call print_char *((byte[]) print_byte::hextab + (byte~) print_byte::$0)
|
||||
(byte~) print_byte::$2 ← (byte) print_byte::b & (byte/signed byte/word/signed word) 15
|
||||
(void~) print_byte::$3 ← call print_char *((byte[]) print_byte::hextab + (byte~) print_byte::$2)
|
||||
print_byte::@return:
|
||||
return
|
||||
endproc // print_byte()
|
||||
@ -645,11 +643,9 @@ SYMBOLS
|
||||
(byte*) prepareMEM::mem
|
||||
(void()) print_byte((byte) print_byte::b)
|
||||
(byte~) print_byte::$0
|
||||
(byte~) print_byte::$1
|
||||
(void~) print_byte::$2
|
||||
(byte~) print_byte::$3
|
||||
(byte~) print_byte::$4
|
||||
(void~) print_byte::$5
|
||||
(void~) print_byte::$1
|
||||
(byte~) print_byte::$2
|
||||
(void~) print_byte::$3
|
||||
(label) print_byte::@return
|
||||
(byte) print_byte::b
|
||||
(byte[]) print_byte::hextab
|
||||
@ -780,11 +776,9 @@ print_word::@return: scope:[print_word] from print_word
|
||||
print_byte: scope:[print_byte] from
|
||||
(byte[]) print_byte::hextab ← { (byte) '0', (byte) '1', (byte) '2', (byte) '3', (byte) '4', (byte) '5', (byte) '6', (byte) '7', (byte) '8', (byte) '9', (byte) 'a', (byte) 'b', (byte) 'c', (byte) 'd', (byte) 'e', (byte) 'f' }
|
||||
(byte~) print_byte::$0 ← (byte) print_byte::b >> (byte/signed byte/word/signed word) 4
|
||||
(byte~) print_byte::$1 ← (byte[]) print_byte::hextab *idx (byte~) print_byte::$0
|
||||
(void~) print_byte::$2 ← call print_char (byte~) print_byte::$1
|
||||
(byte~) print_byte::$3 ← (byte) print_byte::b & (byte/signed byte/word/signed word) 15
|
||||
(byte~) print_byte::$4 ← (byte[]) print_byte::hextab *idx (byte~) print_byte::$3
|
||||
(void~) print_byte::$5 ← call print_char (byte~) print_byte::$4
|
||||
(void~) print_byte::$1 ← call print_char *((byte[]) print_byte::hextab + (byte~) print_byte::$0)
|
||||
(byte~) print_byte::$2 ← (byte) print_byte::b & (byte/signed byte/word/signed word) 15
|
||||
(void~) print_byte::$3 ← call print_char *((byte[]) print_byte::hextab + (byte~) print_byte::$2)
|
||||
to:print_byte::@return
|
||||
print_byte::@return: scope:[print_byte] from print_byte
|
||||
return
|
||||
@ -1093,8 +1087,8 @@ Removing unused procedure logFAC
|
||||
Removing unused procedure mulFACby10
|
||||
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::$2
|
||||
Eliminating unused variable - keeping the call (void~) print_byte::$5
|
||||
Eliminating unused variable - keeping the call (void~) print_byte::$1
|
||||
Eliminating unused variable - keeping the call (void~) print_byte::$3
|
||||
Eliminating unused variable - keeping the call (void~) setFAC::$1
|
||||
Eliminating unused variable - keeping the call (void~) setMEMtoFAC::$0
|
||||
Eliminating unused variable - keeping the call (void~) addMEMtoFAC::$0
|
||||
@ -1178,11 +1172,9 @@ print_word::@return: scope:[print_word] from print_word
|
||||
print_byte: scope:[print_byte] from
|
||||
(byte[]) print_byte::hextab ← { (byte) '0', (byte) '1', (byte) '2', (byte) '3', (byte) '4', (byte) '5', (byte) '6', (byte) '7', (byte) '8', (byte) '9', (byte) 'a', (byte) 'b', (byte) 'c', (byte) 'd', (byte) 'e', (byte) 'f' }
|
||||
(byte~) print_byte::$0 ← (byte) print_byte::b >> (byte/signed byte/word/signed word) 4
|
||||
(byte~) print_byte::$1 ← (byte[]) print_byte::hextab *idx (byte~) print_byte::$0
|
||||
call print_char (byte~) print_byte::$1
|
||||
(byte~) print_byte::$3 ← (byte) print_byte::b & (byte/signed byte/word/signed word) 15
|
||||
(byte~) print_byte::$4 ← (byte[]) print_byte::hextab *idx (byte~) print_byte::$3
|
||||
call print_char (byte~) print_byte::$4
|
||||
call print_char *((byte[]) print_byte::hextab + (byte~) print_byte::$0)
|
||||
(byte~) print_byte::$2 ← (byte) print_byte::b & (byte/signed byte/word/signed word) 15
|
||||
call print_char *((byte[]) print_byte::hextab + (byte~) print_byte::$2)
|
||||
to:print_byte::@return
|
||||
print_byte::@return: scope:[print_byte] from print_byte
|
||||
return
|
||||
@ -1349,15 +1341,13 @@ print_word::@return: scope:[print_word] from print_word::@2
|
||||
print_byte: scope:[print_byte] from print_word print_word::@1
|
||||
(byte[]) print_byte::hextab ← { (byte) '0', (byte) '1', (byte) '2', (byte) '3', (byte) '4', (byte) '5', (byte) '6', (byte) '7', (byte) '8', (byte) '9', (byte) 'a', (byte) 'b', (byte) 'c', (byte) 'd', (byte) 'e', (byte) 'f' }
|
||||
(byte~) print_byte::$0 ← (byte) print_byte::b >> (byte/signed byte/word/signed word) 4
|
||||
(byte~) print_byte::$1 ← (byte[]) print_byte::hextab *idx (byte~) print_byte::$0
|
||||
(byte) print_char::ch ← (byte~) print_byte::$1
|
||||
(byte) print_char::ch ← *((byte[]) print_byte::hextab + (byte~) print_byte::$0)
|
||||
call print_char param-assignment
|
||||
to:print_byte::@1
|
||||
print_byte::@1: scope:[print_byte] from print_byte
|
||||
(byte*) char_cursor ← (byte*) char_cursor
|
||||
(byte~) print_byte::$3 ← (byte) print_byte::b & (byte/signed byte/word/signed word) 15
|
||||
(byte~) print_byte::$4 ← (byte[]) print_byte::hextab *idx (byte~) print_byte::$3
|
||||
(byte) print_char::ch ← (byte~) print_byte::$4
|
||||
(byte~) print_byte::$2 ← (byte) print_byte::b & (byte/signed byte/word/signed word) 15
|
||||
(byte) print_char::ch ← *((byte[]) print_byte::hextab + (byte~) print_byte::$2)
|
||||
call print_char param-assignment
|
||||
to:print_byte::@2
|
||||
print_byte::@2: scope:[print_byte] from print_byte::@1
|
||||
@ -1615,17 +1605,15 @@ print_byte: scope:[print_byte] from print_word print_word::@1
|
||||
(byte) print_byte::b#2 ← phi( print_word/(byte) print_byte::b#0 print_word::@1/(byte) print_byte::b#1 )
|
||||
(byte[]) print_byte::hextab#0 ← { (byte) '0', (byte) '1', (byte) '2', (byte) '3', (byte) '4', (byte) '5', (byte) '6', (byte) '7', (byte) '8', (byte) '9', (byte) 'a', (byte) 'b', (byte) 'c', (byte) 'd', (byte) 'e', (byte) 'f' }
|
||||
(byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte/signed byte/word/signed word) 4
|
||||
(byte~) print_byte::$1 ← (byte[]) print_byte::hextab#0 *idx (byte~) print_byte::$0
|
||||
(byte) print_char::ch#0 ← (byte~) print_byte::$1
|
||||
(byte) print_char::ch#0 ← *((byte[]) print_byte::hextab#0 + (byte~) print_byte::$0)
|
||||
call print_char param-assignment
|
||||
to:print_byte::@1
|
||||
print_byte::@1: scope:[print_byte] from print_byte
|
||||
(byte) print_byte::b#3 ← phi( print_byte/(byte) print_byte::b#2 )
|
||||
(byte*) char_cursor#20 ← phi( print_byte/(byte*) char_cursor#31 )
|
||||
(byte*) char_cursor#6 ← (byte*) char_cursor#20
|
||||
(byte~) print_byte::$3 ← (byte) print_byte::b#3 & (byte/signed byte/word/signed word) 15
|
||||
(byte~) print_byte::$4 ← (byte[]) print_byte::hextab#0 *idx (byte~) print_byte::$3
|
||||
(byte) print_char::ch#1 ← (byte~) print_byte::$4
|
||||
(byte~) print_byte::$2 ← (byte) print_byte::b#3 & (byte/signed byte/word/signed word) 15
|
||||
(byte) print_char::ch#1 ← *((byte[]) print_byte::hextab#0 + (byte~) print_byte::$2)
|
||||
call print_char param-assignment
|
||||
to:print_byte::@2
|
||||
print_byte::@2: scope:[print_byte] from print_byte::@1
|
||||
@ -1962,17 +1950,15 @@ print_byte: scope:[print_byte] from print_word print_word::@1
|
||||
(byte) print_byte::b#2 ← phi( print_word/(byte) print_byte::b#0 print_word::@1/(byte) print_byte::b#1 )
|
||||
(byte[]) print_byte::hextab#0 ← { (byte) '0', (byte) '1', (byte) '2', (byte) '3', (byte) '4', (byte) '5', (byte) '6', (byte) '7', (byte) '8', (byte) '9', (byte) 'a', (byte) 'b', (byte) 'c', (byte) 'd', (byte) 'e', (byte) 'f' }
|
||||
(byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte/signed byte/word/signed word) 4
|
||||
(byte~) print_byte::$1 ← (byte[]) print_byte::hextab#0 *idx (byte~) print_byte::$0
|
||||
(byte) print_char::ch#0 ← (byte~) print_byte::$1
|
||||
(byte) print_char::ch#0 ← *((byte[]) print_byte::hextab#0 + (byte~) print_byte::$0)
|
||||
call print_char param-assignment
|
||||
to:print_byte::@1
|
||||
print_byte::@1: scope:[print_byte] from print_byte
|
||||
(byte) print_byte::b#3 ← phi( print_byte/(byte) print_byte::b#2 )
|
||||
(byte*) char_cursor#20 ← phi( print_byte/(byte*) char_cursor#10 )
|
||||
(byte*) char_cursor#6 ← (byte*) char_cursor#20
|
||||
(byte~) print_byte::$3 ← (byte) print_byte::b#3 & (byte/signed byte/word/signed word) 15
|
||||
(byte~) print_byte::$4 ← (byte[]) print_byte::hextab#0 *idx (byte~) print_byte::$3
|
||||
(byte) print_char::ch#1 ← (byte~) print_byte::$4
|
||||
(byte~) print_byte::$2 ← (byte) print_byte::b#3 & (byte/signed byte/word/signed word) 15
|
||||
(byte) print_char::ch#1 ← *((byte[]) print_byte::hextab#0 + (byte~) print_byte::$2)
|
||||
call print_char param-assignment
|
||||
to:print_byte::@2
|
||||
print_byte::@2: scope:[print_byte] from print_byte::@1
|
||||
@ -2458,9 +2444,7 @@ INITIAL SSA SYMBOL TABLE
|
||||
(byte*) prepareMEM::mem#5
|
||||
(void()) print_byte((byte) print_byte::b)
|
||||
(byte~) print_byte::$0
|
||||
(byte~) print_byte::$1
|
||||
(byte~) print_byte::$3
|
||||
(byte~) print_byte::$4
|
||||
(byte~) print_byte::$2
|
||||
(label) print_byte::@1
|
||||
(label) print_byte::@2
|
||||
(label) print_byte::@return
|
||||
@ -2556,10 +2540,8 @@ Alias (word) print_word::w#1 = (word) print_word::w#2
|
||||
Alias (byte*) char_cursor#17 = (byte*) char_cursor#3
|
||||
Alias (byte) print_byte::b#1 = (byte~) print_word::$2
|
||||
Alias (byte*) char_cursor#18 = (byte*) char_cursor#4 (byte*) char_cursor#19 (byte*) char_cursor#5
|
||||
Alias (byte) print_char::ch#0 = (byte~) print_byte::$1
|
||||
Alias (byte) print_byte::b#2 = (byte) print_byte::b#3
|
||||
Alias (byte*) char_cursor#20 = (byte*) char_cursor#6
|
||||
Alias (byte) print_char::ch#1 = (byte~) print_byte::$4
|
||||
Alias (byte*) char_cursor#21 = (byte*) char_cursor#7 (byte*) char_cursor#22 (byte*) char_cursor#8
|
||||
Alias (byte*) char_cursor#10 = (byte*) char_cursor#24 (byte*) char_cursor#9
|
||||
Alias (byte*) prepareMEM::mem#0 = (byte*~) setFAC::$0
|
||||
@ -2624,13 +2606,13 @@ print_byte: scope:[print_byte] from print_word print_word::@1
|
||||
(byte) print_byte::b#2 ← phi( print_word/(byte) print_byte::b#0 print_word::@1/(byte) print_byte::b#1 )
|
||||
(byte[]) print_byte::hextab#0 ← { (byte) '0', (byte) '1', (byte) '2', (byte) '3', (byte) '4', (byte) '5', (byte) '6', (byte) '7', (byte) '8', (byte) '9', (byte) 'a', (byte) 'b', (byte) 'c', (byte) 'd', (byte) 'e', (byte) 'f' }
|
||||
(byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte/signed byte/word/signed word) 4
|
||||
(byte) print_char::ch#0 ← (byte[]) print_byte::hextab#0 *idx (byte~) print_byte::$0
|
||||
(byte) print_char::ch#0 ← *((byte[]) print_byte::hextab#0 + (byte~) print_byte::$0)
|
||||
call print_char param-assignment
|
||||
to:print_byte::@1
|
||||
print_byte::@1: scope:[print_byte] from print_byte
|
||||
(byte*) char_cursor#20 ← phi( print_byte/(byte*) char_cursor#10 )
|
||||
(byte~) print_byte::$3 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15
|
||||
(byte) print_char::ch#1 ← (byte[]) print_byte::hextab#0 *idx (byte~) print_byte::$3
|
||||
(byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15
|
||||
(byte) print_char::ch#1 ← *((byte[]) print_byte::hextab#0 + (byte~) print_byte::$2)
|
||||
call print_char param-assignment
|
||||
to:print_byte::@2
|
||||
print_byte::@2: scope:[print_byte] from print_byte::@1
|
||||
@ -2907,13 +2889,13 @@ print_byte: scope:[print_byte] from print_word print_word::@1
|
||||
(byte) print_byte::b#2 ← phi( print_word/(byte) print_byte::b#0 print_word::@1/(byte) print_byte::b#1 )
|
||||
(byte[]) print_byte::hextab#0 ← { (byte) '0', (byte) '1', (byte) '2', (byte) '3', (byte) '4', (byte) '5', (byte) '6', (byte) '7', (byte) '8', (byte) '9', (byte) 'a', (byte) 'b', (byte) 'c', (byte) 'd', (byte) 'e', (byte) 'f' }
|
||||
(byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte/signed byte/word/signed word) 4
|
||||
(byte) print_char::ch#0 ← (byte[]) print_byte::hextab#0 *idx (byte~) print_byte::$0
|
||||
(byte) print_char::ch#0 ← *((byte[]) print_byte::hextab#0 + (byte~) print_byte::$0)
|
||||
call print_char param-assignment
|
||||
to:print_byte::@1
|
||||
print_byte::@1: scope:[print_byte] from print_byte
|
||||
(byte*) char_cursor#20 ← phi( print_byte/(byte*) char_cursor#10 )
|
||||
(byte~) print_byte::$3 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15
|
||||
(byte) print_char::ch#1 ← (byte[]) print_byte::hextab#0 *idx (byte~) print_byte::$3
|
||||
(byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15
|
||||
(byte) print_char::ch#1 ← *((byte[]) print_byte::hextab#0 + (byte~) print_byte::$2)
|
||||
call print_char param-assignment
|
||||
to:print_byte::@2
|
||||
print_byte::@2: scope:[print_byte] from print_byte::@1
|
||||
@ -3161,12 +3143,12 @@ print_byte: scope:[print_byte] from print_word print_word::@1
|
||||
(byte) print_byte::b#2 ← phi( print_word/(byte) print_byte::b#0 print_word::@1/(byte) print_byte::b#1 )
|
||||
(byte[]) print_byte::hextab#0 ← { (byte) '0', (byte) '1', (byte) '2', (byte) '3', (byte) '4', (byte) '5', (byte) '6', (byte) '7', (byte) '8', (byte) '9', (byte) 'a', (byte) 'b', (byte) 'c', (byte) 'd', (byte) 'e', (byte) 'f' }
|
||||
(byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte/signed byte/word/signed word) 4
|
||||
(byte) print_char::ch#0 ← (byte[]) print_byte::hextab#0 *idx (byte~) print_byte::$0
|
||||
(byte) print_char::ch#0 ← *((byte[]) print_byte::hextab#0 + (byte~) print_byte::$0)
|
||||
call print_char param-assignment
|
||||
to:print_byte::@1
|
||||
print_byte::@1: scope:[print_byte] from print_byte
|
||||
(byte~) print_byte::$3 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15
|
||||
(byte) print_char::ch#1 ← (byte[]) print_byte::hextab#0 *idx (byte~) print_byte::$3
|
||||
(byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15
|
||||
(byte) print_char::ch#1 ← *((byte[]) print_byte::hextab#0 + (byte~) print_byte::$2)
|
||||
call print_char param-assignment
|
||||
to:print_byte::@2
|
||||
print_byte::@2: scope:[print_byte] from print_byte::@1
|
||||
@ -3383,12 +3365,12 @@ print_byte: scope:[print_byte] from print_word print_word::@1
|
||||
(byte) print_byte::b#2 ← phi( print_word/(byte) print_byte::b#0 print_word::@1/(byte) print_byte::b#1 )
|
||||
(byte[]) print_byte::hextab#0 ← { (byte) '0', (byte) '1', (byte) '2', (byte) '3', (byte) '4', (byte) '5', (byte) '6', (byte) '7', (byte) '8', (byte) '9', (byte) 'a', (byte) 'b', (byte) 'c', (byte) 'd', (byte) 'e', (byte) 'f' }
|
||||
(byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte/signed byte/word/signed word) 4
|
||||
(byte) print_char::ch#0 ← (byte[]) print_byte::hextab#0 *idx (byte~) print_byte::$0
|
||||
(byte) print_char::ch#0 ← *((byte[]) print_byte::hextab#0 + (byte~) print_byte::$0)
|
||||
call print_char param-assignment
|
||||
to:print_byte::@1
|
||||
print_byte::@1: scope:[print_byte] from print_byte
|
||||
(byte~) print_byte::$3 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15
|
||||
(byte) print_char::ch#1 ← (byte[]) print_byte::hextab#0 *idx (byte~) print_byte::$3
|
||||
(byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15
|
||||
(byte) print_char::ch#1 ← *((byte[]) print_byte::hextab#0 + (byte~) print_byte::$2)
|
||||
call print_char param-assignment
|
||||
to:print_byte::@2
|
||||
print_byte::@2: scope:[print_byte] from print_byte::@1
|
||||
@ -3610,12 +3592,12 @@ print_byte: scope:[print_byte] from print_word print_word::@1
|
||||
(byte*) char_cursor#31 ← phi( print_word/(byte*) char_cursor#32 print_word::@1/(byte*) char_cursor#10 )
|
||||
(byte) print_byte::b#2 ← phi( print_word/(byte) print_byte::b#0 print_word::@1/(byte) print_byte::b#1 )
|
||||
(byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte/signed byte/word/signed word) 4
|
||||
(byte) print_char::ch#0 ← (const byte[]) print_byte::hextab#0 *idx (byte~) print_byte::$0
|
||||
(byte) print_char::ch#0 ← *((const byte[]) print_byte::hextab#0 + (byte~) print_byte::$0)
|
||||
call print_char param-assignment
|
||||
to:print_byte::@1
|
||||
print_byte::@1: scope:[print_byte] from print_byte
|
||||
(byte~) print_byte::$3 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15
|
||||
(byte) print_char::ch#1 ← (const byte[]) print_byte::hextab#0 *idx (byte~) print_byte::$3
|
||||
(byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15
|
||||
(byte) print_char::ch#1 ← *((const byte[]) print_byte::hextab#0 + (byte~) print_byte::$2)
|
||||
call print_char param-assignment
|
||||
to:print_byte::@2
|
||||
print_byte::@2: scope:[print_byte] from print_byte::@1
|
||||
@ -3825,12 +3807,12 @@ print_byte: scope:[print_byte] from print_word print_word::@1
|
||||
(byte*) char_cursor#31 ← phi( print_word/(byte*) char_cursor#32 print_word::@1/(byte*) char_cursor#10 )
|
||||
(byte) print_byte::b#2 ← phi( print_word/(byte) print_byte::b#0 print_word::@1/(byte) print_byte::b#1 )
|
||||
(byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte/signed byte/word/signed word) 4
|
||||
(byte) print_char::ch#0 ← (const byte[]) print_byte::hextab#0 *idx (byte~) print_byte::$0
|
||||
(byte) print_char::ch#0 ← *((const byte[]) print_byte::hextab#0 + (byte~) print_byte::$0)
|
||||
call print_char param-assignment
|
||||
to:print_byte::@1
|
||||
print_byte::@1: scope:[print_byte] from print_byte
|
||||
(byte~) print_byte::$3 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15
|
||||
(byte) print_char::ch#1 ← (const byte[]) print_byte::hextab#0 *idx (byte~) print_byte::$3
|
||||
(byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15
|
||||
(byte) print_char::ch#1 ← *((const byte[]) print_byte::hextab#0 + (byte~) print_byte::$2)
|
||||
call print_char param-assignment
|
||||
to:print_byte::@2
|
||||
print_byte::@2: scope:[print_byte] from print_byte::@1
|
||||
@ -4030,12 +4012,12 @@ print_byte: scope:[print_byte] from print_word print_word::@1
|
||||
(byte*) char_cursor#31 ← phi( print_word/(byte*) char_cursor#32 print_word::@1/(byte*) char_cursor#10 )
|
||||
(byte) print_byte::b#2 ← phi( print_word/(byte) print_byte::b#0 print_word::@1/(byte) print_byte::b#1 )
|
||||
(byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte/signed byte/word/signed word) 4
|
||||
(byte) print_char::ch#0 ← (const byte[]) print_byte::hextab#0 *idx (byte~) print_byte::$0
|
||||
(byte) print_char::ch#0 ← *((const byte[]) print_byte::hextab#0 + (byte~) print_byte::$0)
|
||||
call print_char param-assignment
|
||||
to:print_byte::@1
|
||||
print_byte::@1: scope:[print_byte] from print_byte
|
||||
(byte~) print_byte::$3 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15
|
||||
(byte) print_char::ch#1 ← (const byte[]) print_byte::hextab#0 *idx (byte~) print_byte::$3
|
||||
(byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15
|
||||
(byte) print_char::ch#1 ← *((const byte[]) print_byte::hextab#0 + (byte~) print_byte::$2)
|
||||
call print_char param-assignment
|
||||
to:print_byte::@2
|
||||
print_byte::@2: scope:[print_byte] from print_byte::@1
|
||||
@ -4233,12 +4215,12 @@ print_byte: scope:[print_byte] from print_word print_word::@1
|
||||
(byte*) char_cursor#31 ← phi( print_word/(byte*) char_cursor#32 print_word::@1/(byte*) char_cursor#10 )
|
||||
(byte) print_byte::b#2 ← phi( print_word/(byte) print_byte::b#0 print_word::@1/(byte) print_byte::b#1 )
|
||||
(byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte/signed byte/word/signed word) 4
|
||||
(byte) print_char::ch#0 ← (const byte[]) print_byte::hextab#0 *idx (byte~) print_byte::$0
|
||||
(byte) print_char::ch#0 ← *((const byte[]) print_byte::hextab#0 + (byte~) print_byte::$0)
|
||||
call print_char param-assignment
|
||||
to:print_byte::@1
|
||||
print_byte::@1: scope:[print_byte] from print_byte
|
||||
(byte~) print_byte::$3 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15
|
||||
(byte) print_char::ch#1 ← (const byte[]) print_byte::hextab#0 *idx (byte~) print_byte::$3
|
||||
(byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15
|
||||
(byte) print_char::ch#1 ← *((const byte[]) print_byte::hextab#0 + (byte~) print_byte::$2)
|
||||
call print_char param-assignment
|
||||
to:print_byte::@return
|
||||
print_byte::@return: scope:[print_byte] from print_byte::@1
|
||||
@ -4480,12 +4462,12 @@ print_byte: scope:[print_byte] from print_word print_word::@1
|
||||
(byte*) char_cursor#31 ← phi( print_word/(byte*) char_cursor#32 print_word::@1/(byte*) char_cursor#10 )
|
||||
(byte) print_byte::b#2 ← phi( print_word/(byte) print_byte::b#0 print_word::@1/(byte) print_byte::b#1 )
|
||||
(byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte/signed byte/word/signed word) 4
|
||||
(byte) print_char::ch#0 ← (const byte[]) print_byte::hextab#0 *idx (byte~) print_byte::$0
|
||||
(byte) print_char::ch#0 ← *((const byte[]) print_byte::hextab#0 + (byte~) print_byte::$0)
|
||||
call print_char param-assignment
|
||||
to:print_byte::@1
|
||||
print_byte::@1: scope:[print_byte] from print_byte
|
||||
(byte~) print_byte::$3 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15
|
||||
(byte) print_char::ch#1 ← (const byte[]) print_byte::hextab#0 *idx (byte~) print_byte::$3
|
||||
(byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15
|
||||
(byte) print_char::ch#1 ← *((const byte[]) print_byte::hextab#0 + (byte~) print_byte::$2)
|
||||
call print_char param-assignment
|
||||
to:print_byte::@return
|
||||
print_byte::@return: scope:[print_byte] from print_byte::@1
|
||||
@ -4714,7 +4696,7 @@ FINAL SYMBOL TABLE
|
||||
(byte*) prepareMEM::mem#5
|
||||
(void()) print_byte((byte) print_byte::b)
|
||||
(byte~) print_byte::$0
|
||||
(byte~) print_byte::$3
|
||||
(byte~) print_byte::$2
|
||||
(label) print_byte::@1
|
||||
(label) print_byte::@return
|
||||
(byte) print_byte::b
|
||||
@ -4856,14 +4838,14 @@ print_byte: scope:[print_byte] from print_word print_word::@1
|
||||
(byte*) char_cursor#31 ← phi( print_word/(byte*~) char_cursor#49 print_word::@1/(byte*~) char_cursor#50 )
|
||||
(byte) print_byte::b#2 ← phi( print_word/(byte~) print_byte::b#4 print_word::@1/(byte~) print_byte::b#5 )
|
||||
(byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte/signed byte/word/signed word) 4
|
||||
(byte) print_char::ch#0 ← (const byte[]) print_byte::hextab#0 *idx (byte~) print_byte::$0
|
||||
(byte) print_char::ch#0 ← *((const byte[]) print_byte::hextab#0 + (byte~) print_byte::$0)
|
||||
(byte~) print_char::ch#3 ← (byte) print_char::ch#0
|
||||
(byte*~) char_cursor#51 ← (byte*) char_cursor#31
|
||||
call print_char param-assignment
|
||||
to:print_byte::@1
|
||||
print_byte::@1: scope:[print_byte] from print_byte
|
||||
(byte~) print_byte::$3 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15
|
||||
(byte) print_char::ch#1 ← (const byte[]) print_byte::hextab#0 *idx (byte~) print_byte::$3
|
||||
(byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15
|
||||
(byte) print_char::ch#1 ← *((const byte[]) print_byte::hextab#0 + (byte~) print_byte::$2)
|
||||
(byte~) print_char::ch#4 ← (byte) print_char::ch#1
|
||||
(byte*~) char_cursor#52 ← (byte*) char_cursor#10
|
||||
call print_char param-assignment
|
||||
@ -5133,14 +5115,14 @@ print_byte: scope:[print_byte] from print_word print_word::@1
|
||||
[56] (byte*) char_cursor#31 ← phi( print_word/(byte*~) char_cursor#49 print_word::@1/(byte*~) char_cursor#50 ) [ print_byte::b#2 char_cursor#31 ]
|
||||
[56] (byte) print_byte::b#2 ← phi( print_word/(byte~) print_byte::b#4 print_word::@1/(byte~) print_byte::b#5 ) [ print_byte::b#2 char_cursor#31 ]
|
||||
[57] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte/signed byte/word/signed word) 4 [ print_byte::b#2 char_cursor#31 print_byte::$0 ]
|
||||
[58] (byte) print_char::ch#0 ← (const byte[]) print_byte::hextab#0 *idx (byte~) print_byte::$0 [ print_byte::b#2 char_cursor#31 print_char::ch#0 ]
|
||||
[58] (byte) print_char::ch#0 ← *((const byte[]) print_byte::hextab#0 + (byte~) print_byte::$0) [ print_byte::b#2 char_cursor#31 print_char::ch#0 ]
|
||||
[59] (byte~) print_char::ch#3 ← (byte) print_char::ch#0 [ print_byte::b#2 char_cursor#31 print_char::ch#3 ]
|
||||
[60] (byte*~) char_cursor#51 ← (byte*) char_cursor#31 [ print_byte::b#2 print_char::ch#3 char_cursor#51 ]
|
||||
[61] call print_char param-assignment [ char_cursor#10 print_byte::b#2 ]
|
||||
to:print_byte::@1
|
||||
print_byte::@1: scope:[print_byte] from print_byte
|
||||
[62] (byte~) print_byte::$3 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15 [ char_cursor#10 print_byte::$3 ]
|
||||
[63] (byte) print_char::ch#1 ← (const byte[]) print_byte::hextab#0 *idx (byte~) print_byte::$3 [ char_cursor#10 print_char::ch#1 ]
|
||||
[62] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15 [ char_cursor#10 print_byte::$2 ]
|
||||
[63] (byte) print_char::ch#1 ← *((const byte[]) print_byte::hextab#0 + (byte~) print_byte::$2) [ char_cursor#10 print_char::ch#1 ]
|
||||
[64] (byte~) print_char::ch#4 ← (byte) print_char::ch#1 [ char_cursor#10 print_char::ch#4 ]
|
||||
[65] (byte*~) char_cursor#52 ← (byte*) char_cursor#10 [ print_char::ch#4 char_cursor#52 ]
|
||||
[66] call print_char param-assignment [ char_cursor#10 ]
|
||||
@ -5413,12 +5395,12 @@ print_byte: scope:[print_byte] from print_word print_word::@1
|
||||
[48] (byte*) char_cursor#31 ← phi( print_word/(byte*) char_cursor#32 print_word::@1/(byte*) char_cursor#10 ) [ print_byte::b#2 char_cursor#31 ]
|
||||
[48] (byte) print_byte::b#2 ← phi( print_word/(byte) print_byte::b#0 print_word::@1/(byte) print_byte::b#1 ) [ print_byte::b#2 char_cursor#31 ]
|
||||
[49] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte/signed byte/word/signed word) 4 [ print_byte::b#2 char_cursor#31 print_byte::$0 ]
|
||||
[50] (byte) print_char::ch#0 ← (const byte[]) print_byte::hextab#0 *idx (byte~) print_byte::$0 [ print_byte::b#2 char_cursor#31 print_char::ch#0 ]
|
||||
[50] (byte) print_char::ch#0 ← *((const byte[]) print_byte::hextab#0 + (byte~) print_byte::$0) [ print_byte::b#2 char_cursor#31 print_char::ch#0 ]
|
||||
[51] call print_char param-assignment [ char_cursor#10 print_byte::b#2 ]
|
||||
to:print_byte::@1
|
||||
print_byte::@1: scope:[print_byte] from print_byte
|
||||
[52] (byte~) print_byte::$3 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15 [ char_cursor#10 print_byte::$3 ]
|
||||
[53] (byte) print_char::ch#1 ← (const byte[]) print_byte::hextab#0 *idx (byte~) print_byte::$3 [ char_cursor#10 print_char::ch#1 ]
|
||||
[52] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15 [ char_cursor#10 print_byte::$2 ]
|
||||
[53] (byte) print_char::ch#1 ← *((const byte[]) print_byte::hextab#0 + (byte~) print_byte::$2) [ char_cursor#10 print_char::ch#1 ]
|
||||
[54] call print_char param-assignment [ char_cursor#10 ]
|
||||
to:print_byte::@return
|
||||
print_byte::@return: scope:[print_byte] from print_byte::@1
|
||||
@ -5622,12 +5604,12 @@ print_byte: scope:[print_byte] from print_word print_word::@1
|
||||
[48] (byte*) char_cursor#31 ← phi( print_word/(byte*) char_cursor#32 print_word::@1/(byte*) char_cursor#10 ) [ print_byte::b#2 char_cursor#31 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 print_byte::b#2 char_cursor#31 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 print_byte::b#2 char_cursor#31 ] )
|
||||
[48] (byte) print_byte::b#2 ← phi( print_word/(byte) print_byte::b#0 print_word::@1/(byte) print_byte::b#1 ) [ print_byte::b#2 char_cursor#31 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 print_byte::b#2 char_cursor#31 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 print_byte::b#2 char_cursor#31 ] )
|
||||
[49] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte/signed byte/word/signed word) 4 [ print_byte::b#2 char_cursor#31 print_byte::$0 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 print_byte::b#2 char_cursor#31 print_byte::$0 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 print_byte::b#2 char_cursor#31 print_byte::$0 ] )
|
||||
[50] (byte) print_char::ch#0 ← (const byte[]) print_byte::hextab#0 *idx (byte~) print_byte::$0 [ print_byte::b#2 char_cursor#31 print_char::ch#0 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 print_byte::b#2 char_cursor#31 print_char::ch#0 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 print_byte::b#2 char_cursor#31 print_char::ch#0 ] )
|
||||
[50] (byte) print_char::ch#0 ← *((const byte[]) print_byte::hextab#0 + (byte~) print_byte::$0) [ print_byte::b#2 char_cursor#31 print_char::ch#0 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 print_byte::b#2 char_cursor#31 print_char::ch#0 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 print_byte::b#2 char_cursor#31 print_char::ch#0 ] )
|
||||
[51] call print_char param-assignment [ char_cursor#10 print_byte::b#2 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 char_cursor#10 print_byte::b#2 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 char_cursor#10 print_byte::b#2 ] )
|
||||
to:print_byte::@1
|
||||
print_byte::@1: scope:[print_byte] from print_byte
|
||||
[52] (byte~) print_byte::$3 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15 [ char_cursor#10 print_byte::$3 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 char_cursor#10 print_byte::$3 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 char_cursor#10 print_byte::$3 ] )
|
||||
[53] (byte) print_char::ch#1 ← (const byte[]) print_byte::hextab#0 *idx (byte~) print_byte::$3 [ char_cursor#10 print_char::ch#1 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 char_cursor#10 print_char::ch#1 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 char_cursor#10 print_char::ch#1 ] )
|
||||
[52] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15 [ char_cursor#10 print_byte::$2 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 char_cursor#10 print_byte::$2 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 char_cursor#10 print_byte::$2 ] )
|
||||
[53] (byte) print_char::ch#1 ← *((const byte[]) print_byte::hextab#0 + (byte~) print_byte::$2) [ char_cursor#10 print_char::ch#1 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 char_cursor#10 print_char::ch#1 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 char_cursor#10 print_char::ch#1 ] )
|
||||
[54] call print_char param-assignment [ char_cursor#10 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 char_cursor#10 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 char_cursor#10 ] )
|
||||
to:print_byte::@return
|
||||
print_byte::@return: scope:[print_byte] from print_byte::@1
|
||||
@ -5854,7 +5836,7 @@ VARIABLE REGISTER WEIGHTS
|
||||
(byte*) prepareMEM::mem#5 3.333333333333333
|
||||
(void()) print_byte((byte) print_byte::b)
|
||||
(byte~) print_byte::$0 4.0
|
||||
(byte~) print_byte::$3 4.0
|
||||
(byte~) print_byte::$2 4.0
|
||||
(byte) print_byte::b
|
||||
(byte) print_byte::b#0 4.0
|
||||
(byte) print_byte::b#1 4.0
|
||||
@ -5891,7 +5873,7 @@ Initial phi equivalence classes
|
||||
Added variable getFAC::return#2 to zero page equivalence class [ getFAC::return#2 ]
|
||||
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::$3 to zero page equivalence class [ print_byte::$3 ]
|
||||
Added variable print_byte::$2 to zero page equivalence class [ print_byte::$2 ]
|
||||
Added variable getFAC::return#0 to zero page equivalence class [ getFAC::return#0 ]
|
||||
Added variable prepareMEM::$0 to zero page equivalence class [ prepareMEM::$0 ]
|
||||
Added variable prepareMEM::$1 to zero page equivalence class [ prepareMEM::$1 ]
|
||||
@ -5908,7 +5890,7 @@ Complete equivalence classes
|
||||
[ getFAC::return#2 ]
|
||||
[ print_word::w#0 ]
|
||||
[ print_byte::$0 ]
|
||||
[ print_byte::$3 ]
|
||||
[ print_byte::$2 ]
|
||||
[ getFAC::return#0 ]
|
||||
[ prepareMEM::$0 ]
|
||||
[ prepareMEM::$1 ]
|
||||
@ -5924,7 +5906,7 @@ Allocated zp ZP_WORD:15 [ setMEMtoFAC::mem#2 ]
|
||||
Allocated zp ZP_WORD:17 [ getFAC::return#2 ]
|
||||
Allocated zp ZP_WORD:19 [ print_word::w#0 ]
|
||||
Allocated zp ZP_BYTE:21 [ print_byte::$0 ]
|
||||
Allocated zp ZP_BYTE:22 [ print_byte::$3 ]
|
||||
Allocated zp ZP_BYTE:22 [ print_byte::$2 ]
|
||||
Allocated zp ZP_WORD:23 [ getFAC::return#0 ]
|
||||
Allocated zp ZP_BYTE:25 [ prepareMEM::$0 ]
|
||||
Allocated zp ZP_BYTE:26 [ prepareMEM::$1 ]
|
||||
@ -6223,7 +6205,7 @@ print_word: {
|
||||
//SEG105 print_byte
|
||||
print_byte: {
|
||||
.label _0 = $15
|
||||
.label _3 = $16
|
||||
.label _2 = $16
|
||||
.label b = 5
|
||||
//SEG106 [49] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte/signed byte/word/signed word) 4 [ print_byte::b#2 char_cursor#31 print_byte::$0 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 print_byte::b#2 char_cursor#31 print_byte::$0 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 print_byte::b#2 char_cursor#31 print_byte::$0 ] ) -- vbuz1=vbuz2_ror_4
|
||||
lda b
|
||||
@ -6232,7 +6214,7 @@ print_byte: {
|
||||
lsr
|
||||
lsr
|
||||
sta _0
|
||||
//SEG107 [50] (byte) print_char::ch#0 ← (const byte[]) print_byte::hextab#0 *idx (byte~) print_byte::$0 [ print_byte::b#2 char_cursor#31 print_char::ch#0 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 print_byte::b#2 char_cursor#31 print_char::ch#0 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 print_byte::b#2 char_cursor#31 print_char::ch#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2
|
||||
//SEG107 [50] (byte) print_char::ch#0 ← *((const byte[]) print_byte::hextab#0 + (byte~) print_byte::$0) [ print_byte::b#2 char_cursor#31 print_char::ch#0 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 print_byte::b#2 char_cursor#31 print_char::ch#0 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 print_byte::b#2 char_cursor#31 print_char::ch#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2
|
||||
ldx _0
|
||||
lda hextab,x
|
||||
sta print_char.ch
|
||||
@ -6245,12 +6227,12 @@ print_byte: {
|
||||
jmp b1
|
||||
//SEG112 print_byte::@1
|
||||
b1:
|
||||
//SEG113 [52] (byte~) print_byte::$3 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15 [ char_cursor#10 print_byte::$3 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 char_cursor#10 print_byte::$3 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 char_cursor#10 print_byte::$3 ] ) -- vbuz1=vbuz2_band_vbuc1
|
||||
//SEG113 [52] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15 [ char_cursor#10 print_byte::$2 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 char_cursor#10 print_byte::$2 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 char_cursor#10 print_byte::$2 ] ) -- vbuz1=vbuz2_band_vbuc1
|
||||
lda b
|
||||
and #$f
|
||||
sta _3
|
||||
//SEG114 [53] (byte) print_char::ch#1 ← (const byte[]) print_byte::hextab#0 *idx (byte~) print_byte::$3 [ char_cursor#10 print_char::ch#1 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 char_cursor#10 print_char::ch#1 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 char_cursor#10 print_char::ch#1 ] ) -- vbuz1=pbuc1_derefidx_vbuz2
|
||||
ldx _3
|
||||
sta _2
|
||||
//SEG114 [53] (byte) print_char::ch#1 ← *((const byte[]) print_byte::hextab#0 + (byte~) print_byte::$2) [ char_cursor#10 print_char::ch#1 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 char_cursor#10 print_char::ch#1 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 char_cursor#10 print_char::ch#1 ] ) -- vbuz1=pbuc1_derefidx_vbuz2
|
||||
ldx _2
|
||||
lda hextab,x
|
||||
sta print_char.ch
|
||||
//SEG115 [54] call print_char param-assignment [ char_cursor#10 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 char_cursor#10 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 char_cursor#10 ] )
|
||||
@ -6483,7 +6465,7 @@ Statement [40] (byte*) line_cursor#1 ← (byte*) line_cursor#6 + (byte/signed by
|
||||
Statement [41] if((byte*) line_cursor#1<(byte*) char_cursor#10) goto print_ln::@1 [ line_cursor#1 char_cursor#10 ] ( main:2::print_ln:33 [ main::i#10 line_cursor#1 char_cursor#10 ] ) always clobbers reg byte a
|
||||
Statement [43] (byte) print_byte::b#0 ← > (word) print_word::w#0 [ char_cursor#32 print_word::w#0 print_byte::b#0 ] ( main:2::print_word:31 [ main::i#10 line_cursor#13 char_cursor#32 print_word::w#0 print_byte::b#0 ] ) always clobbers reg byte a
|
||||
Statement [45] (byte) print_byte::b#1 ← < (word) print_word::w#0 [ char_cursor#10 print_byte::b#1 ] ( main:2::print_word:31 [ main::i#10 line_cursor#13 char_cursor#10 print_byte::b#1 ] ) always clobbers reg byte a
|
||||
Statement [52] (byte~) print_byte::$3 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15 [ char_cursor#10 print_byte::$3 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 char_cursor#10 print_byte::$3 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 char_cursor#10 print_byte::$3 ] ) always clobbers reg byte a
|
||||
Statement [52] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15 [ char_cursor#10 print_byte::$2 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 char_cursor#10 print_byte::$2 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 char_cursor#10 print_byte::$2 ] ) always clobbers reg byte a
|
||||
Statement [57] *((byte*) char_cursor#23) ← (byte) print_char::ch#2 [ char_cursor#23 ] ( main:2::print_word:31::print_byte:44::print_char:51 [ main::i#10 line_cursor#13 print_word::w#0 print_byte::b#2 char_cursor#23 ] main:2::print_word:31::print_byte:46::print_char:51 [ main::i#10 line_cursor#13 print_byte::b#2 char_cursor#23 ] main:2::print_word:31::print_byte:44::print_char:54 [ main::i#10 line_cursor#13 print_word::w#0 char_cursor#23 ] main:2::print_word:31::print_byte:46::print_char:54 [ main::i#10 line_cursor#13 char_cursor#23 ] ) always clobbers reg byte y
|
||||
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ main::i#10 main::i#1 ]
|
||||
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:5 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ]
|
||||
@ -6508,7 +6490,7 @@ Statement [40] (byte*) line_cursor#1 ← (byte*) line_cursor#6 + (byte/signed by
|
||||
Statement [41] if((byte*) line_cursor#1<(byte*) char_cursor#10) goto print_ln::@1 [ line_cursor#1 char_cursor#10 ] ( main:2::print_ln:33 [ main::i#10 line_cursor#1 char_cursor#10 ] ) always clobbers reg byte a
|
||||
Statement [43] (byte) print_byte::b#0 ← > (word) print_word::w#0 [ char_cursor#32 print_word::w#0 print_byte::b#0 ] ( main:2::print_word:31 [ main::i#10 line_cursor#13 char_cursor#32 print_word::w#0 print_byte::b#0 ] ) always clobbers reg byte a
|
||||
Statement [45] (byte) print_byte::b#1 ← < (word) print_word::w#0 [ char_cursor#10 print_byte::b#1 ] ( main:2::print_word:31 [ main::i#10 line_cursor#13 char_cursor#10 print_byte::b#1 ] ) always clobbers reg byte a
|
||||
Statement [52] (byte~) print_byte::$3 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15 [ char_cursor#10 print_byte::$3 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 char_cursor#10 print_byte::$3 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 char_cursor#10 print_byte::$3 ] ) always clobbers reg byte a
|
||||
Statement [52] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15 [ char_cursor#10 print_byte::$2 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 char_cursor#10 print_byte::$2 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 char_cursor#10 print_byte::$2 ] ) always clobbers reg byte a
|
||||
Statement [57] *((byte*) char_cursor#23) ← (byte) print_char::ch#2 [ char_cursor#23 ] ( main:2::print_word:31::print_byte:44::print_char:51 [ main::i#10 line_cursor#13 print_word::w#0 print_byte::b#2 char_cursor#23 ] main:2::print_word:31::print_byte:46::print_char:51 [ main::i#10 line_cursor#13 print_byte::b#2 char_cursor#23 ] main:2::print_word:31::print_byte:44::print_char:54 [ main::i#10 line_cursor#13 print_word::w#0 char_cursor#23 ] main:2::print_word:31::print_byte:46::print_char:54 [ main::i#10 line_cursor#13 char_cursor#23 ] ) always clobbers reg byte y
|
||||
Statement [61] (word) getFAC::return#0 ← *((const byte*) memHi#0) w= *((const byte*) memLo#0) [ getFAC::return#0 ] ( main:2::getFAC:28 [ main::i#10 char_cursor#32 line_cursor#13 getFAC::return#0 ] ) always clobbers reg byte a
|
||||
Statement asm { lda$feldy$ffjsr$b867 } always clobbers reg byte a reg byte y
|
||||
@ -6533,7 +6515,7 @@ Potential registers zp ZP_WORD:15 [ setMEMtoFAC::mem#2 ] : zp ZP_WORD:15 ,
|
||||
Potential registers zp ZP_WORD:17 [ getFAC::return#2 ] : zp ZP_WORD:17 ,
|
||||
Potential registers zp ZP_WORD:19 [ print_word::w#0 ] : zp ZP_WORD:19 ,
|
||||
Potential registers zp ZP_BYTE:21 [ print_byte::$0 ] : zp ZP_BYTE:21 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:22 [ print_byte::$3 ] : zp ZP_BYTE:22 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:22 [ print_byte::$2 ] : zp ZP_BYTE:22 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_WORD:23 [ getFAC::return#0 ] : zp ZP_WORD:23 ,
|
||||
Potential registers zp ZP_BYTE:25 [ prepareMEM::$0 ] : zp ZP_BYTE:25 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:26 [ prepareMEM::$1 ] : zp ZP_BYTE:26 , reg byte a , reg byte x , reg byte y ,
|
||||
@ -6543,7 +6525,7 @@ Uplift Scope [] 250.97: zp ZP_WORD:3 [ line_cursor#6 line_cursor#13 line_cursor#
|
||||
Uplift Scope [setFAC] 35: zp ZP_WORD:13 [ setFAC::w#3 setFAC::w#1 ]
|
||||
Uplift Scope [getFAC] 22: zp ZP_WORD:17 [ getFAC::return#2 ] 4.33: zp ZP_WORD:23 [ getFAC::return#0 ]
|
||||
Uplift Scope [prepareMEM] 15.33: zp ZP_WORD:9 [ prepareMEM::mem#5 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 ] 4: zp ZP_BYTE:25 [ prepareMEM::$0 ] 4: zp ZP_BYTE:26 [ prepareMEM::$1 ]
|
||||
Uplift Scope [print_byte] 10: zp ZP_BYTE:5 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] 4: zp ZP_BYTE:21 [ print_byte::$0 ] 4: zp ZP_BYTE:22 [ print_byte::$3 ]
|
||||
Uplift Scope [print_byte] 10: zp ZP_BYTE:5 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] 4: zp ZP_BYTE:21 [ print_byte::$0 ] 4: zp ZP_BYTE:22 [ print_byte::$2 ]
|
||||
Uplift Scope [print_char] 14: zp ZP_BYTE:6 [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ]
|
||||
Uplift Scope [main] 12.38: zp ZP_BYTE:2 [ main::i#10 main::i#1 ]
|
||||
Uplift Scope [print_word] 5: zp ZP_WORD:19 [ print_word::w#0 ]
|
||||
@ -6559,7 +6541,7 @@ Uplifting [] best 6734 combination zp ZP_WORD:3 [ line_cursor#6 line_cursor#13 l
|
||||
Uplifting [setFAC] best 6734 combination zp ZP_WORD:13 [ setFAC::w#3 setFAC::w#1 ]
|
||||
Uplifting [getFAC] best 6734 combination zp ZP_WORD:17 [ getFAC::return#2 ] zp ZP_WORD:23 [ getFAC::return#0 ]
|
||||
Uplifting [prepareMEM] best 6722 combination zp ZP_WORD:9 [ prepareMEM::mem#5 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 ] reg byte a [ prepareMEM::$0 ] reg byte a [ prepareMEM::$1 ]
|
||||
Uplifting [print_byte] best 6710 combination reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte y [ print_byte::$0 ] reg byte a [ print_byte::$3 ]
|
||||
Uplifting [print_byte] best 6710 combination reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte y [ print_byte::$0 ] reg byte a [ print_byte::$2 ]
|
||||
Uplifting [print_char] best 6701 combination reg byte a [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ]
|
||||
Uplifting [main] best 6701 combination zp ZP_BYTE:2 [ main::i#10 main::i#1 ]
|
||||
Uplifting [print_word] best 6701 combination zp ZP_WORD:19 [ print_word::w#0 ]
|
||||
@ -6876,7 +6858,7 @@ print_byte: {
|
||||
lsr
|
||||
lsr
|
||||
tay
|
||||
//SEG107 [50] (byte) print_char::ch#0 ← (const byte[]) print_byte::hextab#0 *idx (byte~) print_byte::$0 [ print_byte::b#2 char_cursor#31 print_char::ch#0 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 print_byte::b#2 char_cursor#31 print_char::ch#0 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 print_byte::b#2 char_cursor#31 print_char::ch#0 ] ) -- vbuaa=pbuc1_derefidx_vbuyy
|
||||
//SEG107 [50] (byte) print_char::ch#0 ← *((const byte[]) print_byte::hextab#0 + (byte~) print_byte::$0) [ print_byte::b#2 char_cursor#31 print_char::ch#0 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 print_byte::b#2 char_cursor#31 print_char::ch#0 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 print_byte::b#2 char_cursor#31 print_char::ch#0 ] ) -- vbuaa=pbuc1_derefidx_vbuyy
|
||||
lda hextab,y
|
||||
//SEG108 [51] call print_char param-assignment [ char_cursor#10 print_byte::b#2 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 char_cursor#10 print_byte::b#2 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 char_cursor#10 print_byte::b#2 ] )
|
||||
//SEG109 [56] phi from print_byte to print_char [phi:print_byte->print_char]
|
||||
@ -6887,10 +6869,10 @@ print_byte: {
|
||||
jmp b1
|
||||
//SEG112 print_byte::@1
|
||||
b1:
|
||||
//SEG113 [52] (byte~) print_byte::$3 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15 [ char_cursor#10 print_byte::$3 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 char_cursor#10 print_byte::$3 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 char_cursor#10 print_byte::$3 ] ) -- vbuaa=vbuxx_band_vbuc1
|
||||
//SEG113 [52] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15 [ char_cursor#10 print_byte::$2 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 char_cursor#10 print_byte::$2 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 char_cursor#10 print_byte::$2 ] ) -- vbuaa=vbuxx_band_vbuc1
|
||||
txa
|
||||
and #$f
|
||||
//SEG114 [53] (byte) print_char::ch#1 ← (const byte[]) print_byte::hextab#0 *idx (byte~) print_byte::$3 [ char_cursor#10 print_char::ch#1 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 char_cursor#10 print_char::ch#1 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 char_cursor#10 print_char::ch#1 ] ) -- vbuaa=pbuc1_derefidx_vbuaa
|
||||
//SEG114 [53] (byte) print_char::ch#1 ← *((const byte[]) print_byte::hextab#0 + (byte~) print_byte::$2) [ char_cursor#10 print_char::ch#1 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 char_cursor#10 print_char::ch#1 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 char_cursor#10 print_char::ch#1 ] ) -- vbuaa=pbuc1_derefidx_vbuaa
|
||||
tax
|
||||
lda hextab,x
|
||||
//SEG115 [54] call print_char param-assignment [ char_cursor#10 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 char_cursor#10 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 char_cursor#10 ] )
|
||||
@ -7289,7 +7271,7 @@ FINAL SYMBOL TABLE
|
||||
(byte*) prepareMEM::mem#5 mem zp ZP_WORD:7 3.333333333333333
|
||||
(void()) print_byte((byte) print_byte::b)
|
||||
(byte~) print_byte::$0 reg byte y 4.0
|
||||
(byte~) print_byte::$3 reg byte a 4.0
|
||||
(byte~) print_byte::$2 reg byte a 4.0
|
||||
(label) print_byte::@1
|
||||
(label) print_byte::@return
|
||||
(byte) print_byte::b
|
||||
@ -7333,7 +7315,7 @@ reg byte a [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ]
|
||||
zp ZP_WORD:5 [ char_cursor#23 char_cursor#31 char_cursor#32 char_cursor#48 char_cursor#10 ]
|
||||
zp ZP_WORD:7 [ prepareMEM::mem#5 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 mulFACbyMEM::mem#2 setFAC::w#3 setFAC::w#1 setMEMtoFAC::mem#2 getFAC::return#2 print_word::w#0 getFAC::return#0 ]
|
||||
reg byte y [ print_byte::$0 ]
|
||||
reg byte a [ print_byte::$3 ]
|
||||
reg byte a [ print_byte::$2 ]
|
||||
reg byte a [ prepareMEM::$0 ]
|
||||
reg byte a [ prepareMEM::$1 ]
|
||||
|
||||
@ -7561,7 +7543,7 @@ print_byte: {
|
||||
lsr
|
||||
lsr
|
||||
tay
|
||||
//SEG107 [50] (byte) print_char::ch#0 ← (const byte[]) print_byte::hextab#0 *idx (byte~) print_byte::$0 [ print_byte::b#2 char_cursor#31 print_char::ch#0 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 print_byte::b#2 char_cursor#31 print_char::ch#0 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 print_byte::b#2 char_cursor#31 print_char::ch#0 ] ) -- vbuaa=pbuc1_derefidx_vbuyy
|
||||
//SEG107 [50] (byte) print_char::ch#0 ← *((const byte[]) print_byte::hextab#0 + (byte~) print_byte::$0) [ print_byte::b#2 char_cursor#31 print_char::ch#0 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 print_byte::b#2 char_cursor#31 print_char::ch#0 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 print_byte::b#2 char_cursor#31 print_char::ch#0 ] ) -- vbuaa=pbuc1_derefidx_vbuyy
|
||||
lda hextab,y
|
||||
//SEG108 [51] call print_char param-assignment [ char_cursor#10 print_byte::b#2 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 char_cursor#10 print_byte::b#2 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 char_cursor#10 print_byte::b#2 ] )
|
||||
//SEG109 [56] phi from print_byte to print_char [phi:print_byte->print_char]
|
||||
@ -7569,10 +7551,10 @@ print_byte: {
|
||||
//SEG111 [56] phi (byte) print_char::ch#2 = (byte) print_char::ch#0 [phi:print_byte->print_char#1] -- register_copy
|
||||
jsr print_char
|
||||
//SEG112 print_byte::@1
|
||||
//SEG113 [52] (byte~) print_byte::$3 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15 [ char_cursor#10 print_byte::$3 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 char_cursor#10 print_byte::$3 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 char_cursor#10 print_byte::$3 ] ) -- vbuaa=vbuxx_band_vbuc1
|
||||
//SEG113 [52] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15 [ char_cursor#10 print_byte::$2 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 char_cursor#10 print_byte::$2 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 char_cursor#10 print_byte::$2 ] ) -- vbuaa=vbuxx_band_vbuc1
|
||||
txa
|
||||
and #$f
|
||||
//SEG114 [53] (byte) print_char::ch#1 ← (const byte[]) print_byte::hextab#0 *idx (byte~) print_byte::$3 [ char_cursor#10 print_char::ch#1 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 char_cursor#10 print_char::ch#1 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 char_cursor#10 print_char::ch#1 ] ) -- vbuaa=pbuc1_derefidx_vbuaa
|
||||
//SEG114 [53] (byte) print_char::ch#1 ← *((const byte[]) print_byte::hextab#0 + (byte~) print_byte::$2) [ char_cursor#10 print_char::ch#1 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 char_cursor#10 print_char::ch#1 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 char_cursor#10 print_char::ch#1 ] ) -- vbuaa=pbuc1_derefidx_vbuaa
|
||||
tax
|
||||
lda hextab,x
|
||||
//SEG115 [54] call print_char param-assignment [ char_cursor#10 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 char_cursor#10 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 char_cursor#10 ] )
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user