mirror of
https://gitlab.com/camelot/kickc.git
synced 2025-04-06 15:41:05 +00:00
Implemented pass1 removal of all unused variables - but keeping all calls & side-effects. Closes #31
This commit is contained in:
parent
deb1304ba6
commit
18c36a6ed9
@ -63,30 +63,24 @@ public class Compiler {
|
||||
pass1GenerateStatementSequence.generate(file);
|
||||
StatementSequence statementSequence = pass1GenerateStatementSequence.getSequence();
|
||||
ProgramScope programScope = pass1GenerateStatementSequence.getProgramScope();
|
||||
|
||||
statementSequence = (new Pass1FixLvalueLoHi(statementSequence, programScope, log)).fix();
|
||||
|
||||
statementSequence = new Pass1FixLvalueLoHi(statementSequence, programScope, log).fix();
|
||||
Pass1TypeInference pass1TypeInference = new Pass1TypeInference(programScope);
|
||||
pass1TypeInference.inferTypes(statementSequence);
|
||||
|
||||
Program program = new Program(programScope, log);
|
||||
|
||||
log.append("PROGRAM");
|
||||
log.append(statementSequence.toString(program));
|
||||
log.append("SYMBOLS");
|
||||
log.append(programScope.getSymbolTableContents(program));
|
||||
|
||||
Pass1GenerateControlFlowGraph pass1GenerateControlFlowGraph = new Pass1GenerateControlFlowGraph(programScope);
|
||||
ControlFlowGraph controlFlowGraph = pass1GenerateControlFlowGraph.generate(statementSequence);
|
||||
program.setGraph(controlFlowGraph);
|
||||
program.setGraph(new Pass1GenerateControlFlowGraph(programScope).generate(statementSequence));
|
||||
|
||||
new Pass1AddTypePromotions(program).execute();
|
||||
|
||||
log.append("INITIAL CONTROL FLOW GRAPH");
|
||||
log.append(program.getGraph().toString(program));
|
||||
|
||||
new Pass1ExtractInlineStrings(program).execute();
|
||||
new Pass1EliminateUncalledProcedures(program).execute();
|
||||
new Pass1EliminateUnusedVars(program).execute();
|
||||
new Pass1EliminateEmptyBlocks(program).execute();
|
||||
log.append("CONTROL FLOW GRAPH");
|
||||
log.append(program.getGraph().toString(program));
|
||||
|
@ -159,6 +159,10 @@ public class AsmFragment {
|
||||
} else {
|
||||
return "$ffff & " + getAsmConstant(program, operand, Operator.BOOL_AND.getPrecedence(), codeScope);
|
||||
}
|
||||
} else if (Operator.INCREMENT.equals(operator) ) {
|
||||
return getAsmConstant(program, operand, Operator.PLUS.getPrecedence(), codeScope)+"+1";
|
||||
} else if (Operator.DECREMENT.equals(operator) ) {
|
||||
return getAsmConstant(program, operand, Operator.PLUS.getPrecedence(), codeScope)+"-1";
|
||||
} else {
|
||||
return operator.getOperator() +
|
||||
getAsmConstant(program, operand, operator.getPrecedence(), codeScope);
|
||||
|
@ -0,0 +1,131 @@
|
||||
package dk.camelot64.kickc.passes;
|
||||
|
||||
import dk.camelot64.kickc.model.*;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* Eliminate unused variables
|
||||
*/
|
||||
public class Pass1EliminateUnusedVars extends Pass1Base {
|
||||
|
||||
public Pass1EliminateUnusedVars(Program program) {
|
||||
super(program);
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean executeStep() {
|
||||
Collection<RValue> allUsedVars = getAllVarUsage();
|
||||
|
||||
boolean modified = false;
|
||||
for (ControlFlowBlock block : getGraph().getAllBlocks()) {
|
||||
ListIterator<Statement> stmtIt = block.getStatements().listIterator();
|
||||
while (stmtIt.hasNext()) {
|
||||
Statement statement = stmtIt.next();
|
||||
if (statement instanceof StatementAssignment) {
|
||||
StatementAssignment assignment = (StatementAssignment) statement;
|
||||
LValue lValue = assignment.getlValue();
|
||||
if (lValue instanceof VariableRef && !allUsedVars.contains(lValue)) {
|
||||
getLog().append("Eliminating unused variable "+ lValue.toString(getProgram()) + " and assignment "+ assignment.toString(getProgram(), false));
|
||||
stmtIt.remove();
|
||||
Variable variable = getScope().getVariable((VariableRef) lValue);
|
||||
variable.getScope().remove(variable);
|
||||
modified = true;
|
||||
}
|
||||
} else if(statement instanceof StatementCall) {
|
||||
StatementCall call = (StatementCall) statement;
|
||||
LValue lValue = call.getlValue();
|
||||
if(lValue instanceof VariableRef && !allUsedVars.contains(lValue)) {
|
||||
getLog().append("Eliminating unused variable - keeping the call "+ lValue.toString(getProgram()));
|
||||
Variable variable = getScope().getVariable((VariableRef) lValue);
|
||||
variable.getScope().remove(variable);
|
||||
call.setlValue(null);
|
||||
modified = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return modified;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all Variable or Constant usage in RValues.
|
||||
*
|
||||
* @return Collection containing VariableRef and ConstantRef for all used vars/constants.
|
||||
*/
|
||||
private Collection<RValue> getAllVarUsage() {
|
||||
Collection<RValue> allRvalues = new LinkedHashSet<>();
|
||||
for (ControlFlowBlock block : getGraph().getAllBlocks()) {
|
||||
for (Statement statement : block.getStatements()) {
|
||||
if (statement instanceof StatementAssignment) {
|
||||
addLvalueUses(allRvalues, ((StatementAssignment) statement).getlValue());
|
||||
addRvalueUses(allRvalues, ((StatementAssignment) statement).getrValue1());
|
||||
addRvalueUses(allRvalues, ((StatementAssignment) statement).getrValue2());
|
||||
} else if (statement instanceof StatementCall) {
|
||||
addLvalueUses(allRvalues, ((StatementCall) statement).getlValue());
|
||||
for (RValue param : ((StatementCall) statement).getParameters()) {
|
||||
addRvalueUses(allRvalues, param);
|
||||
}
|
||||
} else if (statement instanceof StatementConditionalJump) {
|
||||
addRvalueUses(allRvalues, ((StatementConditionalJump) statement).getrValue1());
|
||||
addRvalueUses(allRvalues, ((StatementConditionalJump) statement).getrValue2());
|
||||
} else if (statement instanceof StatementReturn) {
|
||||
addRvalueUses(allRvalues, ((StatementReturn) statement).getValue());
|
||||
} else if (statement instanceof StatementPhiBlock) {
|
||||
for (StatementPhiBlock.PhiVariable phiVariable : ((StatementPhiBlock) statement).getPhiVariables()) {
|
||||
addLvalueUses(allRvalues, phiVariable.getVariable());
|
||||
for (StatementPhiBlock.PhiRValue phiRValue : phiVariable.getValues()) {
|
||||
addRvalueUses(allRvalues, phiRValue.getrValue());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return allRvalues;
|
||||
}
|
||||
|
||||
private void addLvalueUses(Collection<RValue> allUses, LValue lValue) {
|
||||
if (lValue == null) {
|
||||
return;
|
||||
} else if (lValue instanceof VariableRef) {
|
||||
return;
|
||||
} else if (lValue instanceof LvalueLoHiByte) {
|
||||
addRvalueUses(allUses, ((LvalueLoHiByte) lValue).getVariable());
|
||||
} else if (lValue instanceof PointerDereferenceSimple) {
|
||||
addRvalueUses(allUses, ((PointerDereference) lValue).getPointer());
|
||||
} else if (lValue instanceof PointerDereferenceIndexed) {
|
||||
addRvalueUses(allUses, ((PointerDereferenceIndexed) lValue).getPointer());
|
||||
addRvalueUses(allUses, ((PointerDereferenceIndexed) lValue).getIndex());
|
||||
} else {
|
||||
throw new RuntimeException("Unknown LValue type " + lValue);
|
||||
}
|
||||
}
|
||||
|
||||
private void addRvalueUses(Collection<RValue> allUses, RValue rValue) {
|
||||
if (rValue == null) {
|
||||
return;
|
||||
} else if (rValue instanceof VariableRef || rValue instanceof ConstantRef) {
|
||||
allUses.add(rValue);
|
||||
} else if (rValue instanceof LValue) {
|
||||
addLvalueUses(allUses, (LValue) rValue);
|
||||
} else if (rValue instanceof ConstantString || rValue instanceof ConstantInteger || rValue instanceof ConstantBool || rValue instanceof ConstantChar || rValue instanceof ConstantDouble) {
|
||||
return;
|
||||
} else if (rValue instanceof ConstantArray) {
|
||||
for (ConstantValue constantValue : ((ConstantArray) rValue).getElements()) {
|
||||
addRvalueUses(allUses, constantValue);
|
||||
}
|
||||
} else if (rValue instanceof ValueArray) {
|
||||
for (RValue value : ((ValueArray) rValue).getList()) {
|
||||
addRvalueUses(allUses, value);
|
||||
}
|
||||
} else if (rValue instanceof ConstantUnary) {
|
||||
addRvalueUses(allUses, ((ConstantUnary) rValue).getOperand());
|
||||
} else if (rValue instanceof ConstantBinary) {
|
||||
addRvalueUses(allUses, ((ConstantBinary) rValue).getLeft());
|
||||
addRvalueUses(allUses, ((ConstantBinary) rValue).getRight());
|
||||
} else {
|
||||
throw new RuntimeException("Unknown RValue type " + rValue);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -55,7 +55,7 @@ public class Pass1ProcedureCallParameters extends ControlFlowGraphCopyVisitor {
|
||||
currentBlockScope = currentBlockSymbol.getScope();
|
||||
}
|
||||
splitCurrentBlock(currentBlockScope.addLabelIntermediate().getRef());
|
||||
if(!SymbolType.VOID.equals(procedure.getReturnType())) {
|
||||
if(!SymbolType.VOID.equals(procedure.getReturnType()) && origCall.getlValue()!=null) {
|
||||
addStatementToCurrentBlock(new StatementAssignment(origCall.getlValue(), procReturnVarRef));
|
||||
} else {
|
||||
// No return type. Remove variable receiving the result.
|
||||
|
@ -1,20 +1,13 @@
|
||||
.pc = $801 "Basic"
|
||||
:BasicUpstart(main)
|
||||
.pc = $80d "Program"
|
||||
.const COLS = $d800
|
||||
.const BGCOL = $d020
|
||||
.const FGCOL = $d021
|
||||
.const SCROLL = $d016
|
||||
.const D018 = $d018
|
||||
.const D011 = $d011
|
||||
.const RST8 = $80
|
||||
.const ECM = $40
|
||||
.const BMM = $20
|
||||
.const DEN = $10
|
||||
.const RSEL = 8
|
||||
.const D016 = $d016
|
||||
.const MCM = $10
|
||||
.const CSEL = 8
|
||||
.const SCREEN = $400
|
||||
.const BITMAP = $2000
|
||||
.const plot_xlo = $1000
|
||||
|
@ -1134,6 +1134,29 @@ init_screen::@return: scope:[init_screen] from init_screen::@4
|
||||
to:@end
|
||||
@end: scope:[] from @10
|
||||
|
||||
Eliminating unused variable (byte*) COLS and assignment (byte*) COLS ← ((byte*)) (word) 55296
|
||||
Eliminating unused variable (byte*) SCROLL and assignment (byte*) SCROLL ← ((byte*)) (word) 53270
|
||||
Eliminating unused variable (byte) RST8 and assignment (byte) RST8 ← (byte/word/signed word) 128
|
||||
Eliminating unused variable (byte) ECM and assignment (byte) ECM ← (byte/signed byte/word/signed word) 64
|
||||
Eliminating unused variable (byte*) D016 and assignment (byte*) D016 ← ((byte*)) (word) 53270
|
||||
Eliminating unused variable (byte) MCM and assignment (byte) MCM ← (byte/signed byte/word/signed word) 16
|
||||
Eliminating unused variable (byte) CSEL and assignment (byte) CSEL ← (byte/signed byte/word/signed word) 8
|
||||
Eliminating unused variable - keeping the call (void~) main::$3
|
||||
Eliminating unused variable - keeping the call (void~) main::$4
|
||||
Eliminating unused variable - keeping the call (void~) main::$5
|
||||
Eliminating unused variable - keeping the call (void~) lines::$6
|
||||
Eliminating unused variable - keeping the call (void~) line::$9
|
||||
Eliminating unused variable - keeping the call (void~) line::$8
|
||||
Eliminating unused variable - keeping the call (void~) line::$14
|
||||
Eliminating unused variable - keeping the call (void~) line::$13
|
||||
Eliminating unused variable - keeping the call (void~) line::$22
|
||||
Eliminating unused variable - keeping the call (void~) line::$21
|
||||
Eliminating unused variable - keeping the call (void~) line::$27
|
||||
Eliminating unused variable - keeping the call (void~) line::$26
|
||||
Eliminating unused variable - keeping the call (void~) line_xdyi::$1
|
||||
Eliminating unused variable - keeping the call (void~) line_xdyd::$1
|
||||
Eliminating unused variable - keeping the call (void~) line_ydxi::$1
|
||||
Eliminating unused variable - keeping the call (void~) line_ydxd::$1
|
||||
Removing empty block main::@2
|
||||
Removing empty block @1
|
||||
Removing empty block lines::@2
|
||||
@ -1167,20 +1190,13 @@ Removing empty block @9
|
||||
Removing empty block init_screen::@4
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) COLS ← ((byte*)) (word) 55296
|
||||
(byte*) BGCOL ← ((byte*)) (word) 53280
|
||||
(byte*) FGCOL ← ((byte*)) (word) 53281
|
||||
(byte*) SCROLL ← ((byte*)) (word) 53270
|
||||
(byte*) D018 ← ((byte*)) (word) 53272
|
||||
(byte*) D011 ← ((byte*)) (word) 53265
|
||||
(byte) RST8 ← (byte/word/signed word) 128
|
||||
(byte) ECM ← (byte/signed byte/word/signed word) 64
|
||||
(byte) BMM ← (byte/signed byte/word/signed word) 32
|
||||
(byte) DEN ← (byte/signed byte/word/signed word) 16
|
||||
(byte) RSEL ← (byte/signed byte/word/signed word) 8
|
||||
(byte*) D016 ← ((byte*)) (word) 53270
|
||||
(byte) MCM ← (byte/signed byte/word/signed word) 16
|
||||
(byte) CSEL ← (byte/signed byte/word/signed word) 8
|
||||
(byte*) SCREEN ← ((byte*)) (word/signed word) 1024
|
||||
(byte*) BITMAP ← ((byte*)) (word/signed word) 8192
|
||||
(byte[]) plot_xlo ← ((byte*)) (word/signed word) 4096
|
||||
@ -1200,11 +1216,11 @@ main: scope:[main] from
|
||||
(byte~) main::$2 ← (byte~) main::$1 | (byte/signed byte/word/signed word) 3
|
||||
*((byte*) D011) ← (byte~) main::$2
|
||||
*((byte*) D018) ← (byte/signed byte/word/signed word) 24
|
||||
(void~) main::$3 ← call init_screen
|
||||
(void~) main::$4 ← call init_plot_tables
|
||||
call init_screen
|
||||
call init_plot_tables
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(void~) main::$5 ← call lines
|
||||
call lines
|
||||
if(true) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
@ -1220,7 +1236,7 @@ lines::@1: scope:[lines] from lines lines::@1
|
||||
(byte~) lines::$3 ← (byte[]) lines_y *idx (byte) lines::l
|
||||
(byte~) lines::$4 ← (byte) lines::l + (byte/signed byte/word/signed word) 1
|
||||
(byte~) lines::$5 ← (byte[]) lines_y *idx (byte~) lines::$4
|
||||
(void~) lines::$6 ← call line (byte~) lines::$0 (byte~) lines::$2 (byte~) lines::$3 (byte~) lines::$5
|
||||
call line (byte~) lines::$0 (byte~) lines::$2 (byte~) lines::$3 (byte~) lines::$5
|
||||
(byte) lines::l ← ++ (byte) lines::l
|
||||
(boolean~) lines::$7 ← (byte) lines::l < (byte) lines_cnt
|
||||
if((boolean~) lines::$7) goto lines::@1
|
||||
@ -1262,16 +1278,16 @@ line::@16: scope:[line] from line::@15
|
||||
if((boolean~) line::$7) goto line::@3
|
||||
to:line::@17
|
||||
line::@3: scope:[line] from line::@16
|
||||
(void~) line::$9 ← call line_ydxi (byte) line::y0 (byte) line::x0 (byte) line::y1 (byte) line::yd (byte) line::xd
|
||||
call line_ydxi (byte) line::y0 (byte) line::x0 (byte) line::y1 (byte) line::yd (byte) line::xd
|
||||
to:line::@return
|
||||
line::@17: scope:[line] from line::@16
|
||||
(void~) line::$8 ← call line_xdyi (byte) line::x0 (byte) line::y0 (byte) line::x1 (byte) line::xd (byte) line::yd
|
||||
call line_xdyi (byte) line::x0 (byte) line::y0 (byte) line::x1 (byte) line::xd (byte) line::yd
|
||||
to:line::@return
|
||||
line::@6: scope:[line] from line::@2
|
||||
(void~) line::$14 ← call line_ydxd (byte) line::y1 (byte) line::x1 (byte) line::y0 (byte) line::yd (byte) line::xd
|
||||
call line_ydxd (byte) line::y1 (byte) line::x1 (byte) line::y0 (byte) line::yd (byte) line::xd
|
||||
to:line::@return
|
||||
line::@20: scope:[line] from line::@2
|
||||
(void~) line::$13 ← call line_xdyd (byte) line::x0 (byte) line::y0 (byte) line::x1 (byte) line::xd (byte) line::yd
|
||||
call line_xdyd (byte) line::x0 (byte) line::y0 (byte) line::x1 (byte) line::xd (byte) line::yd
|
||||
to:line::@return
|
||||
line::@9: scope:[line] from line::@1
|
||||
(byte~) line::$23 ← (byte) line::y0 - (byte) line::y1
|
||||
@ -1288,16 +1304,16 @@ line::@23: scope:[line] from line::@1
|
||||
if((boolean~) line::$20) goto line::@10
|
||||
to:line::@24
|
||||
line::@10: scope:[line] from line::@23
|
||||
(void~) line::$22 ← call line_ydxd (byte) line::y0 (byte) line::x0 (byte) line::y1 (byte) line::yd (byte) line::xd
|
||||
call line_ydxd (byte) line::y0 (byte) line::x0 (byte) line::y1 (byte) line::yd (byte) line::xd
|
||||
to:line::@return
|
||||
line::@24: scope:[line] from line::@23
|
||||
(void~) line::$21 ← call line_xdyd (byte) line::x1 (byte) line::y1 (byte) line::x0 (byte) line::xd (byte) line::yd
|
||||
call line_xdyd (byte) line::x1 (byte) line::y1 (byte) line::x0 (byte) line::xd (byte) line::yd
|
||||
to:line::@return
|
||||
line::@13: scope:[line] from line::@9
|
||||
(void~) line::$27 ← call line_ydxi (byte) line::y1 (byte) line::x1 (byte) line::y0 (byte) line::yd (byte) line::xd
|
||||
call line_ydxi (byte) line::y1 (byte) line::x1 (byte) line::y0 (byte) line::yd (byte) line::xd
|
||||
to:line::@return
|
||||
line::@27: scope:[line] from line::@9
|
||||
(void~) line::$26 ← call line_xdyi (byte) line::x1 (byte) line::y1 (byte) line::x0 (byte) line::xd (byte) line::yd
|
||||
call line_xdyi (byte) line::x1 (byte) line::y1 (byte) line::x0 (byte) line::xd (byte) line::yd
|
||||
to:line::@return
|
||||
line::@return: scope:[line] from line::@10 line::@13 line::@17 line::@20 line::@24 line::@27 line::@3 line::@6
|
||||
return
|
||||
@ -1307,7 +1323,7 @@ line_xdyi: scope:[line_xdyi] from
|
||||
(byte) line_xdyi::e ← (byte~) line_xdyi::$0
|
||||
to:line_xdyi::@1
|
||||
line_xdyi::@1: scope:[line_xdyi] from line_xdyi line_xdyi::@2
|
||||
(void~) line_xdyi::$1 ← call plot (byte) line_xdyi::x (byte) line_xdyi::y
|
||||
call plot (byte) line_xdyi::x (byte) line_xdyi::y
|
||||
(byte~) line_xdyi::$2 ← (byte) line_xdyi::x + (byte/signed byte/word/signed word) 1
|
||||
(byte) line_xdyi::x ← (byte~) line_xdyi::$2
|
||||
(byte~) line_xdyi::$3 ← (byte) line_xdyi::e + (byte) line_xdyi::yd
|
||||
@ -1335,7 +1351,7 @@ line_xdyd: scope:[line_xdyd] from
|
||||
(byte) line_xdyd::e ← (byte~) line_xdyd::$0
|
||||
to:line_xdyd::@1
|
||||
line_xdyd::@1: scope:[line_xdyd] from line_xdyd line_xdyd::@2
|
||||
(void~) line_xdyd::$1 ← call plot (byte) line_xdyd::x (byte) line_xdyd::y
|
||||
call plot (byte) line_xdyd::x (byte) line_xdyd::y
|
||||
(byte~) line_xdyd::$2 ← (byte) line_xdyd::x + (byte/signed byte/word/signed word) 1
|
||||
(byte) line_xdyd::x ← (byte~) line_xdyd::$2
|
||||
(byte~) line_xdyd::$3 ← (byte) line_xdyd::e + (byte) line_xdyd::yd
|
||||
@ -1363,7 +1379,7 @@ line_ydxi: scope:[line_ydxi] from
|
||||
(byte) line_ydxi::e ← (byte~) line_ydxi::$0
|
||||
to:line_ydxi::@1
|
||||
line_ydxi::@1: scope:[line_ydxi] from line_ydxi line_ydxi::@2
|
||||
(void~) line_ydxi::$1 ← call plot (byte) line_ydxi::x (byte) line_ydxi::y
|
||||
call plot (byte) line_ydxi::x (byte) line_ydxi::y
|
||||
(byte~) line_ydxi::$2 ← (byte) line_ydxi::y + (byte/signed byte/word/signed word) 1
|
||||
(byte) line_ydxi::y ← (byte~) line_ydxi::$2
|
||||
(byte~) line_ydxi::$3 ← (byte) line_ydxi::e + (byte) line_ydxi::xd
|
||||
@ -1391,7 +1407,7 @@ line_ydxd: scope:[line_ydxd] from
|
||||
(byte) line_ydxd::e ← (byte~) line_ydxd::$0
|
||||
to:line_ydxd::@1
|
||||
line_ydxd::@1: scope:[line_ydxd] from line_ydxd line_ydxd::@2
|
||||
(void~) line_ydxd::$1 ← call plot (byte) line_ydxd::x (byte) line_ydxd::y
|
||||
call plot (byte) line_ydxd::x (byte) line_ydxd::y
|
||||
(byte~) line_ydxd::$2 ← (byte) line_ydxd::y + (byte/signed byte/word/signed word) 1
|
||||
(byte) line_ydxd::y ← (byte~) line_ydxd::$2
|
||||
(byte~) line_ydxd::$3 ← (byte) line_ydxd::e + (byte) line_ydxd::xd
|
||||
@ -1518,20 +1534,13 @@ PROCEDURE MODIFY VARIABLE ANALYSIS
|
||||
|
||||
CONTROL FLOW GRAPH WITH ASSIGNMENT CALL
|
||||
@begin: scope:[] from
|
||||
(byte*) COLS ← ((byte*)) (word) 55296
|
||||
(byte*) BGCOL ← ((byte*)) (word) 53280
|
||||
(byte*) FGCOL ← ((byte*)) (word) 53281
|
||||
(byte*) SCROLL ← ((byte*)) (word) 53270
|
||||
(byte*) D018 ← ((byte*)) (word) 53272
|
||||
(byte*) D011 ← ((byte*)) (word) 53265
|
||||
(byte) RST8 ← (byte/word/signed word) 128
|
||||
(byte) ECM ← (byte/signed byte/word/signed word) 64
|
||||
(byte) BMM ← (byte/signed byte/word/signed word) 32
|
||||
(byte) DEN ← (byte/signed byte/word/signed word) 16
|
||||
(byte) RSEL ← (byte/signed byte/word/signed word) 8
|
||||
(byte*) D016 ← ((byte*)) (word) 53270
|
||||
(byte) MCM ← (byte/signed byte/word/signed word) 16
|
||||
(byte) CSEL ← (byte/signed byte/word/signed word) 8
|
||||
(byte*) SCREEN ← ((byte*)) (word/signed word) 1024
|
||||
(byte*) BITMAP ← ((byte*)) (word/signed word) 8192
|
||||
(byte[]) plot_xlo ← ((byte*)) (word/signed word) 4096
|
||||
@ -1964,20 +1973,13 @@ Completing Phi functions...
|
||||
Completing Phi functions...
|
||||
CONTROL FLOW GRAPH SSA
|
||||
@begin: scope:[] from
|
||||
(byte*) COLS#0 ← ((byte*)) (word) 55296
|
||||
(byte*) BGCOL#0 ← ((byte*)) (word) 53280
|
||||
(byte*) FGCOL#0 ← ((byte*)) (word) 53281
|
||||
(byte*) SCROLL#0 ← ((byte*)) (word) 53270
|
||||
(byte*) D018#0 ← ((byte*)) (word) 53272
|
||||
(byte*) D011#0 ← ((byte*)) (word) 53265
|
||||
(byte) RST8#0 ← (byte/word/signed word) 128
|
||||
(byte) ECM#0 ← (byte/signed byte/word/signed word) 64
|
||||
(byte) BMM#0 ← (byte/signed byte/word/signed word) 32
|
||||
(byte) DEN#0 ← (byte/signed byte/word/signed word) 16
|
||||
(byte) RSEL#0 ← (byte/signed byte/word/signed word) 8
|
||||
(byte*) D016#0 ← ((byte*)) (word) 53270
|
||||
(byte) MCM#0 ← (byte/signed byte/word/signed word) 16
|
||||
(byte) CSEL#0 ← (byte/signed byte/word/signed word) 8
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte*) BITMAP#0 ← ((byte*)) (word/signed word) 8192
|
||||
(byte[]) plot_xlo#0 ← ((byte*)) (word/signed word) 4096
|
||||
@ -2913,20 +2915,13 @@ init_screen::@return: scope:[init_screen] from init_screen::@2
|
||||
|
||||
CONTROL FLOW GRAPH WITH ASSIGNMENT CALL & RETURN
|
||||
@begin: scope:[] from
|
||||
(byte*) COLS#0 ← ((byte*)) (word) 55296
|
||||
(byte*) BGCOL#0 ← ((byte*)) (word) 53280
|
||||
(byte*) FGCOL#0 ← ((byte*)) (word) 53281
|
||||
(byte*) SCROLL#0 ← ((byte*)) (word) 53270
|
||||
(byte*) D018#0 ← ((byte*)) (word) 53272
|
||||
(byte*) D011#0 ← ((byte*)) (word) 53265
|
||||
(byte) RST8#0 ← (byte/word/signed word) 128
|
||||
(byte) ECM#0 ← (byte/signed byte/word/signed word) 64
|
||||
(byte) BMM#0 ← (byte/signed byte/word/signed word) 32
|
||||
(byte) DEN#0 ← (byte/signed byte/word/signed word) 16
|
||||
(byte) RSEL#0 ← (byte/signed byte/word/signed word) 8
|
||||
(byte*) D016#0 ← ((byte*)) (word) 53270
|
||||
(byte) MCM#0 ← (byte/signed byte/word/signed word) 16
|
||||
(byte) CSEL#0 ← (byte/signed byte/word/signed word) 8
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte*) BITMAP#0 ← ((byte*)) (word/signed word) 8192
|
||||
(byte[]) plot_xlo#0 ← ((byte*)) (word/signed word) 4096
|
||||
@ -3884,16 +3879,10 @@ INITIAL SSA SYMBOL TABLE
|
||||
(byte) BMM#0
|
||||
(byte) BMM#1
|
||||
(byte) BMM#2
|
||||
(byte*) COLS
|
||||
(byte*) COLS#0
|
||||
(byte) CSEL
|
||||
(byte) CSEL#0
|
||||
(byte*) D011
|
||||
(byte*) D011#0
|
||||
(byte*) D011#1
|
||||
(byte*) D011#2
|
||||
(byte*) D016
|
||||
(byte*) D016#0
|
||||
(byte*) D018
|
||||
(byte*) D018#0
|
||||
(byte*) D018#1
|
||||
@ -3902,20 +3891,14 @@ INITIAL SSA SYMBOL TABLE
|
||||
(byte) DEN#0
|
||||
(byte) DEN#1
|
||||
(byte) DEN#2
|
||||
(byte) ECM
|
||||
(byte) ECM#0
|
||||
(byte*) FGCOL
|
||||
(byte*) FGCOL#0
|
||||
(byte*) FGCOL#1
|
||||
(byte*) FGCOL#2
|
||||
(byte) MCM
|
||||
(byte) MCM#0
|
||||
(byte) RSEL
|
||||
(byte) RSEL#0
|
||||
(byte) RSEL#1
|
||||
(byte) RSEL#2
|
||||
(byte) RST8
|
||||
(byte) RST8#0
|
||||
(byte*) SCREEN
|
||||
(byte*) SCREEN#0
|
||||
(byte*) SCREEN#1
|
||||
@ -3924,8 +3907,6 @@ INITIAL SSA SYMBOL TABLE
|
||||
(byte*) SCREEN#4
|
||||
(byte*) SCREEN#5
|
||||
(byte*) SCREEN#6
|
||||
(byte*) SCROLL
|
||||
(byte*) SCROLL#0
|
||||
(void()) init_plot_tables()
|
||||
(byte~) init_plot_tables::$0
|
||||
(byte~) init_plot_tables::$1
|
||||
@ -4748,20 +4729,13 @@ Culled Empty Block (label) @11
|
||||
Succesful SSA optimization Pass2CullEmptyBlocks
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) COLS#0 ← ((byte*)) (word) 55296
|
||||
(byte*) BGCOL#0 ← ((byte*)) (word) 53280
|
||||
(byte*) FGCOL#0 ← ((byte*)) (word) 53281
|
||||
(byte*) SCROLL#0 ← ((byte*)) (word) 53270
|
||||
(byte*) D018#0 ← ((byte*)) (word) 53272
|
||||
(byte*) D011#0 ← ((byte*)) (word) 53265
|
||||
(byte) RST8#0 ← (byte/word/signed word) 128
|
||||
(byte) ECM#0 ← (byte/signed byte/word/signed word) 64
|
||||
(byte) BMM#0 ← (byte/signed byte/word/signed word) 32
|
||||
(byte) DEN#0 ← (byte/signed byte/word/signed word) 16
|
||||
(byte) RSEL#0 ← (byte/signed byte/word/signed word) 8
|
||||
(byte*) D016#0 ← ((byte*)) (word) 53270
|
||||
(byte) MCM#0 ← (byte/signed byte/word/signed word) 16
|
||||
(byte) CSEL#0 ← (byte/signed byte/word/signed word) 8
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte*) BITMAP#0 ← ((byte*)) (word/signed word) 8192
|
||||
(byte[]) plot_xlo#0 ← ((byte*)) (word/signed word) 4096
|
||||
@ -5693,20 +5667,13 @@ Inversing boolean not (boolean~) init_plot_tables::$12 ← (byte~) init_plot_tab
|
||||
Succesful SSA optimization Pass2UnaryNotSimplification
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) COLS#0 ← ((byte*)) (word) 55296
|
||||
(byte*) BGCOL#0 ← ((byte*)) (word) 53280
|
||||
(byte*) FGCOL#0 ← ((byte*)) (word) 53281
|
||||
(byte*) SCROLL#0 ← ((byte*)) (word) 53270
|
||||
(byte*) D018#0 ← ((byte*)) (word) 53272
|
||||
(byte*) D011#0 ← ((byte*)) (word) 53265
|
||||
(byte) RST8#0 ← (byte/word/signed word) 128
|
||||
(byte) ECM#0 ← (byte/signed byte/word/signed word) 64
|
||||
(byte) BMM#0 ← (byte/signed byte/word/signed word) 32
|
||||
(byte) DEN#0 ← (byte/signed byte/word/signed word) 16
|
||||
(byte) RSEL#0 ← (byte/signed byte/word/signed word) 8
|
||||
(byte*) D016#0 ← ((byte*)) (word) 53270
|
||||
(byte) MCM#0 ← (byte/signed byte/word/signed word) 16
|
||||
(byte) CSEL#0 ← (byte/signed byte/word/signed word) 8
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte*) BITMAP#0 ← ((byte*)) (word/signed word) 8192
|
||||
(byte[]) plot_xlo#0 ← ((byte*)) (word/signed word) 4096
|
||||
@ -6895,20 +6862,13 @@ Alias (byte[]) plot_yhi#0 = (byte[]) plot_yhi#47
|
||||
Succesful SSA optimization Pass2AliasElimination
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) COLS#0 ← ((byte*)) (word) 55296
|
||||
(byte*) BGCOL#0 ← ((byte*)) (word) 53280
|
||||
(byte*) FGCOL#0 ← ((byte*)) (word) 53281
|
||||
(byte*) SCROLL#0 ← ((byte*)) (word) 53270
|
||||
(byte*) D018#0 ← ((byte*)) (word) 53272
|
||||
(byte*) D011#0 ← ((byte*)) (word) 53265
|
||||
(byte) RST8#0 ← (byte/word/signed word) 128
|
||||
(byte) ECM#0 ← (byte/signed byte/word/signed word) 64
|
||||
(byte) BMM#0 ← (byte/signed byte/word/signed word) 32
|
||||
(byte) DEN#0 ← (byte/signed byte/word/signed word) 16
|
||||
(byte) RSEL#0 ← (byte/signed byte/word/signed word) 8
|
||||
(byte*) D016#0 ← ((byte*)) (word) 53270
|
||||
(byte) MCM#0 ← (byte/signed byte/word/signed word) 16
|
||||
(byte) CSEL#0 ← (byte/signed byte/word/signed word) 8
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte*) BITMAP#0 ← ((byte*)) (word/signed word) 8192
|
||||
(byte[]) plot_xlo#0 ← ((byte*)) (word/signed word) 4096
|
||||
@ -7684,20 +7644,13 @@ Alias (byte[]) plot_yhi#18 = (byte[]) plot_yhi#7
|
||||
Succesful SSA optimization Pass2AliasElimination
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) COLS#0 ← ((byte*)) (word) 55296
|
||||
(byte*) BGCOL#0 ← ((byte*)) (word) 53280
|
||||
(byte*) FGCOL#0 ← ((byte*)) (word) 53281
|
||||
(byte*) SCROLL#0 ← ((byte*)) (word) 53270
|
||||
(byte*) D018#0 ← ((byte*)) (word) 53272
|
||||
(byte*) D011#0 ← ((byte*)) (word) 53265
|
||||
(byte) RST8#0 ← (byte/word/signed word) 128
|
||||
(byte) ECM#0 ← (byte/signed byte/word/signed word) 64
|
||||
(byte) BMM#0 ← (byte/signed byte/word/signed word) 32
|
||||
(byte) DEN#0 ← (byte/signed byte/word/signed word) 16
|
||||
(byte) RSEL#0 ← (byte/signed byte/word/signed word) 8
|
||||
(byte*) D016#0 ← ((byte*)) (word) 53270
|
||||
(byte) MCM#0 ← (byte/signed byte/word/signed word) 16
|
||||
(byte) CSEL#0 ← (byte/signed byte/word/signed word) 8
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte*) BITMAP#0 ← ((byte*)) (word/signed word) 8192
|
||||
(byte[]) plot_xlo#0 ← ((byte*)) (word/signed word) 4096
|
||||
@ -8442,20 +8395,13 @@ Self Phi Eliminated (byte*) SCREEN#2
|
||||
Succesful SSA optimization Pass2SelfPhiElimination
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) COLS#0 ← ((byte*)) (word) 55296
|
||||
(byte*) BGCOL#0 ← ((byte*)) (word) 53280
|
||||
(byte*) FGCOL#0 ← ((byte*)) (word) 53281
|
||||
(byte*) SCROLL#0 ← ((byte*)) (word) 53270
|
||||
(byte*) D018#0 ← ((byte*)) (word) 53272
|
||||
(byte*) D011#0 ← ((byte*)) (word) 53265
|
||||
(byte) RST8#0 ← (byte/word/signed word) 128
|
||||
(byte) ECM#0 ← (byte/signed byte/word/signed word) 64
|
||||
(byte) BMM#0 ← (byte/signed byte/word/signed word) 32
|
||||
(byte) DEN#0 ← (byte/signed byte/word/signed word) 16
|
||||
(byte) RSEL#0 ← (byte/signed byte/word/signed word) 8
|
||||
(byte*) D016#0 ← ((byte*)) (word) 53270
|
||||
(byte) MCM#0 ← (byte/signed byte/word/signed word) 16
|
||||
(byte) CSEL#0 ← (byte/signed byte/word/signed word) 8
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte*) BITMAP#0 ← ((byte*)) (word/signed word) 8192
|
||||
(byte[]) plot_xlo#0 ← ((byte*)) (word/signed word) 4096
|
||||
@ -9116,20 +9062,13 @@ Redundant Phi (byte*) SCREEN#2 (byte*) SCREEN#1
|
||||
Succesful SSA optimization Pass2RedundantPhiElimination
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) COLS#0 ← ((byte*)) (word) 55296
|
||||
(byte*) BGCOL#0 ← ((byte*)) (word) 53280
|
||||
(byte*) FGCOL#0 ← ((byte*)) (word) 53281
|
||||
(byte*) SCROLL#0 ← ((byte*)) (word) 53270
|
||||
(byte*) D018#0 ← ((byte*)) (word) 53272
|
||||
(byte*) D011#0 ← ((byte*)) (word) 53265
|
||||
(byte) RST8#0 ← (byte/word/signed word) 128
|
||||
(byte) ECM#0 ← (byte/signed byte/word/signed word) 64
|
||||
(byte) BMM#0 ← (byte/signed byte/word/signed word) 32
|
||||
(byte) DEN#0 ← (byte/signed byte/word/signed word) 16
|
||||
(byte) RSEL#0 ← (byte/signed byte/word/signed word) 8
|
||||
(byte*) D016#0 ← ((byte*)) (word) 53270
|
||||
(byte) MCM#0 ← (byte/signed byte/word/signed word) 16
|
||||
(byte) CSEL#0 ← (byte/signed byte/word/signed word) 8
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte*) BITMAP#0 ← ((byte*)) (word/signed word) 8192
|
||||
(byte[]) plot_xlo#0 ← ((byte*)) (word/signed word) 4096
|
||||
@ -9553,20 +9492,13 @@ Redundant Phi (byte[]) plot_bit#1 (byte[]) plot_bit#0
|
||||
Succesful SSA optimization Pass2RedundantPhiElimination
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) COLS#0 ← ((byte*)) (word) 55296
|
||||
(byte*) BGCOL#0 ← ((byte*)) (word) 53280
|
||||
(byte*) FGCOL#0 ← ((byte*)) (word) 53281
|
||||
(byte*) SCROLL#0 ← ((byte*)) (word) 53270
|
||||
(byte*) D018#0 ← ((byte*)) (word) 53272
|
||||
(byte*) D011#0 ← ((byte*)) (word) 53265
|
||||
(byte) RST8#0 ← (byte/word/signed word) 128
|
||||
(byte) ECM#0 ← (byte/signed byte/word/signed word) 64
|
||||
(byte) BMM#0 ← (byte/signed byte/word/signed word) 32
|
||||
(byte) DEN#0 ← (byte/signed byte/word/signed word) 16
|
||||
(byte) RSEL#0 ← (byte/signed byte/word/signed word) 8
|
||||
(byte*) D016#0 ← ((byte*)) (word) 53270
|
||||
(byte) MCM#0 ← (byte/signed byte/word/signed word) 16
|
||||
(byte) CSEL#0 ← (byte/signed byte/word/signed word) 8
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte*) BITMAP#0 ← ((byte*)) (word/signed word) 8192
|
||||
(byte[]) plot_xlo#0 ← ((byte*)) (word/signed word) 4096
|
||||
@ -10002,20 +9934,13 @@ Simple Condition (boolean~) init_screen::$3 if((byte*) init_screen::c#1!=(byte*~
|
||||
Succesful SSA optimization Pass2ConditionalJumpSimplification
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) COLS#0 ← ((byte*)) (word) 55296
|
||||
(byte*) BGCOL#0 ← ((byte*)) (word) 53280
|
||||
(byte*) FGCOL#0 ← ((byte*)) (word) 53281
|
||||
(byte*) SCROLL#0 ← ((byte*)) (word) 53270
|
||||
(byte*) D018#0 ← ((byte*)) (word) 53272
|
||||
(byte*) D011#0 ← ((byte*)) (word) 53265
|
||||
(byte) RST8#0 ← (byte/word/signed word) 128
|
||||
(byte) ECM#0 ← (byte/signed byte/word/signed word) 64
|
||||
(byte) BMM#0 ← (byte/signed byte/word/signed word) 32
|
||||
(byte) DEN#0 ← (byte/signed byte/word/signed word) 16
|
||||
(byte) RSEL#0 ← (byte/signed byte/word/signed word) 8
|
||||
(byte*) D016#0 ← ((byte*)) (word) 53270
|
||||
(byte) MCM#0 ← (byte/signed byte/word/signed word) 16
|
||||
(byte) CSEL#0 ← (byte/signed byte/word/signed word) 8
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte*) BITMAP#0 ← ((byte*)) (word/signed word) 8192
|
||||
(byte[]) plot_xlo#0 ← ((byte*)) (word/signed word) 4096
|
||||
@ -10404,20 +10329,13 @@ init_screen::@return: scope:[init_screen] from init_screen::@2
|
||||
to:@end
|
||||
@end: scope:[] from @10
|
||||
|
||||
Constant (const byte*) COLS#0 = ((byte*))55296
|
||||
Constant (const byte*) BGCOL#0 = ((byte*))53280
|
||||
Constant (const byte*) FGCOL#0 = ((byte*))53281
|
||||
Constant (const byte*) SCROLL#0 = ((byte*))53270
|
||||
Constant (const byte*) D018#0 = ((byte*))53272
|
||||
Constant (const byte*) D011#0 = ((byte*))53265
|
||||
Constant (const byte) RST8#0 = 128
|
||||
Constant (const byte) ECM#0 = 64
|
||||
Constant (const byte) BMM#0 = 32
|
||||
Constant (const byte) DEN#0 = 16
|
||||
Constant (const byte) RSEL#0 = 8
|
||||
Constant (const byte*) D016#0 = ((byte*))53270
|
||||
Constant (const byte) MCM#0 = 16
|
||||
Constant (const byte) CSEL#0 = 8
|
||||
Constant (const byte*) SCREEN#0 = ((byte*))1024
|
||||
Constant (const byte*) BITMAP#0 = ((byte*))8192
|
||||
Constant (const byte[]) plot_xlo#0 = ((byte*))4096
|
||||
@ -13715,32 +13633,18 @@ FINAL SYMBOL TABLE
|
||||
(const byte*) BITMAP#0 = ((byte*))(word/signed word) 8192
|
||||
(byte) BMM
|
||||
(const byte) BMM#0 = (byte/signed byte/word/signed word) 32
|
||||
(byte*) COLS
|
||||
(const byte*) COLS#0 = ((byte*))(word) 55296
|
||||
(byte) CSEL
|
||||
(const byte) CSEL#0 = (byte/signed byte/word/signed word) 8
|
||||
(byte*) D011
|
||||
(const byte*) D011#0 = ((byte*))(word) 53265
|
||||
(byte*) D016
|
||||
(const byte*) D016#0 = ((byte*))(word) 53270
|
||||
(byte*) D018
|
||||
(const byte*) D018#0 = ((byte*))(word) 53272
|
||||
(byte) DEN
|
||||
(const byte) DEN#0 = (byte/signed byte/word/signed word) 16
|
||||
(byte) ECM
|
||||
(const byte) ECM#0 = (byte/signed byte/word/signed word) 64
|
||||
(byte*) FGCOL
|
||||
(const byte*) FGCOL#0 = ((byte*))(word) 53281
|
||||
(byte) MCM
|
||||
(const byte) MCM#0 = (byte/signed byte/word/signed word) 16
|
||||
(byte) RSEL
|
||||
(const byte) RSEL#0 = (byte/signed byte/word/signed word) 8
|
||||
(byte) RST8
|
||||
(const byte) RST8#0 = (byte/word/signed word) 128
|
||||
(byte*) SCREEN
|
||||
(const byte*) SCREEN#0 = ((byte*))(word/signed word) 1024
|
||||
(byte*) SCROLL
|
||||
(const byte*) SCROLL#0 = ((byte*))(word) 53270
|
||||
(void()) init_plot_tables()
|
||||
(byte~) init_plot_tables::$0
|
||||
(byte~) init_plot_tables::$10
|
||||
@ -16059,19 +15963,12 @@ VARIABLE REGISTER WEIGHTS
|
||||
(byte*) BGCOL
|
||||
(byte*) BITMAP
|
||||
(byte) BMM
|
||||
(byte*) COLS
|
||||
(byte) CSEL
|
||||
(byte*) D011
|
||||
(byte*) D016
|
||||
(byte*) D018
|
||||
(byte) DEN
|
||||
(byte) ECM
|
||||
(byte*) FGCOL
|
||||
(byte) MCM
|
||||
(byte) RSEL
|
||||
(byte) RST8
|
||||
(byte*) SCREEN
|
||||
(byte*) SCROLL
|
||||
(void()) init_plot_tables()
|
||||
(byte~) init_plot_tables::$0 22.0
|
||||
(byte~) init_plot_tables::$10 22.0
|
||||
@ -16506,20 +16403,13 @@ INITIAL ASM
|
||||
:BasicUpstart(main)
|
||||
.pc = $80d "Program"
|
||||
//SEG1 Global Constants & labels
|
||||
.const COLS = $d800
|
||||
.const BGCOL = $d020
|
||||
.const FGCOL = $d021
|
||||
.const SCROLL = $d016
|
||||
.const D018 = $d018
|
||||
.const D011 = $d011
|
||||
.const RST8 = $80
|
||||
.const ECM = $40
|
||||
.const BMM = $20
|
||||
.const DEN = $10
|
||||
.const RSEL = 8
|
||||
.const D016 = $d016
|
||||
.const MCM = $10
|
||||
.const CSEL = 8
|
||||
.const SCREEN = $400
|
||||
.const BITMAP = $2000
|
||||
.const plot_xlo = $1000
|
||||
@ -17996,20 +17886,13 @@ ASSEMBLER
|
||||
:BasicUpstart(main)
|
||||
.pc = $80d "Program"
|
||||
//SEG1 Global Constants & labels
|
||||
.const COLS = $d800
|
||||
.const BGCOL = $d020
|
||||
.const FGCOL = $d021
|
||||
.const SCROLL = $d016
|
||||
.const D018 = $d018
|
||||
.const D011 = $d011
|
||||
.const RST8 = $80
|
||||
.const ECM = $40
|
||||
.const BMM = $20
|
||||
.const DEN = $10
|
||||
.const RSEL = 8
|
||||
.const D016 = $d016
|
||||
.const MCM = $10
|
||||
.const CSEL = 8
|
||||
.const SCREEN = $400
|
||||
.const BITMAP = $2000
|
||||
.const plot_xlo = $1000
|
||||
@ -18942,20 +18825,13 @@ ASSEMBLER
|
||||
:BasicUpstart(main)
|
||||
.pc = $80d "Program"
|
||||
//SEG1 Global Constants & labels
|
||||
.const COLS = $d800
|
||||
.const BGCOL = $d020
|
||||
.const FGCOL = $d021
|
||||
.const SCROLL = $d016
|
||||
.const D018 = $d018
|
||||
.const D011 = $d011
|
||||
.const RST8 = $80
|
||||
.const ECM = $40
|
||||
.const BMM = $20
|
||||
.const DEN = $10
|
||||
.const RSEL = 8
|
||||
.const D016 = $d016
|
||||
.const MCM = $10
|
||||
.const CSEL = 8
|
||||
.const SCREEN = $400
|
||||
.const BITMAP = $2000
|
||||
.const plot_xlo = $1000
|
||||
@ -19923,20 +19799,13 @@ ASSEMBLER
|
||||
:BasicUpstart(main)
|
||||
.pc = $80d "Program"
|
||||
//SEG1 Global Constants & labels
|
||||
.const COLS = $d800
|
||||
.const BGCOL = $d020
|
||||
.const FGCOL = $d021
|
||||
.const SCROLL = $d016
|
||||
.const D018 = $d018
|
||||
.const D011 = $d011
|
||||
.const RST8 = $80
|
||||
.const ECM = $40
|
||||
.const BMM = $20
|
||||
.const DEN = $10
|
||||
.const RSEL = 8
|
||||
.const D016 = $d016
|
||||
.const MCM = $10
|
||||
.const CSEL = 8
|
||||
.const SCREEN = $400
|
||||
.const BITMAP = $2000
|
||||
.const plot_xlo = $1000
|
||||
@ -20869,20 +20738,13 @@ ASSEMBLER
|
||||
:BasicUpstart(main)
|
||||
.pc = $80d "Program"
|
||||
//SEG1 Global Constants & labels
|
||||
.const COLS = $d800
|
||||
.const BGCOL = $d020
|
||||
.const FGCOL = $d021
|
||||
.const SCROLL = $d016
|
||||
.const D018 = $d018
|
||||
.const D011 = $d011
|
||||
.const RST8 = $80
|
||||
.const ECM = $40
|
||||
.const BMM = $20
|
||||
.const DEN = $10
|
||||
.const RSEL = 8
|
||||
.const D016 = $d016
|
||||
.const MCM = $10
|
||||
.const CSEL = 8
|
||||
.const SCREEN = $400
|
||||
.const BITMAP = $2000
|
||||
.const plot_xlo = $1000
|
||||
@ -21718,20 +21580,13 @@ ASSEMBLER
|
||||
:BasicUpstart(main)
|
||||
.pc = $80d "Program"
|
||||
//SEG1 Global Constants & labels
|
||||
.const COLS = $d800
|
||||
.const BGCOL = $d020
|
||||
.const FGCOL = $d021
|
||||
.const SCROLL = $d016
|
||||
.const D018 = $d018
|
||||
.const D011 = $d011
|
||||
.const RST8 = $80
|
||||
.const ECM = $40
|
||||
.const BMM = $20
|
||||
.const DEN = $10
|
||||
.const RSEL = 8
|
||||
.const D016 = $d016
|
||||
.const MCM = $10
|
||||
.const CSEL = 8
|
||||
.const SCREEN = $400
|
||||
.const BITMAP = $2000
|
||||
.const plot_xlo = $1000
|
||||
@ -22567,20 +22422,13 @@ ASSEMBLER
|
||||
:BasicUpstart(main)
|
||||
.pc = $80d "Program"
|
||||
//SEG1 Global Constants & labels
|
||||
.const COLS = $d800
|
||||
.const BGCOL = $d020
|
||||
.const FGCOL = $d021
|
||||
.const SCROLL = $d016
|
||||
.const D018 = $d018
|
||||
.const D011 = $d011
|
||||
.const RST8 = $80
|
||||
.const ECM = $40
|
||||
.const BMM = $20
|
||||
.const DEN = $10
|
||||
.const RSEL = 8
|
||||
.const D016 = $d016
|
||||
.const MCM = $10
|
||||
.const CSEL = 8
|
||||
.const SCREEN = $400
|
||||
.const BITMAP = $2000
|
||||
.const plot_xlo = $1000
|
||||
@ -23419,20 +23267,13 @@ ASSEMBLER
|
||||
:BasicUpstart(main)
|
||||
.pc = $80d "Program"
|
||||
//SEG1 Global Constants & labels
|
||||
.const COLS = $d800
|
||||
.const BGCOL = $d020
|
||||
.const FGCOL = $d021
|
||||
.const SCROLL = $d016
|
||||
.const D018 = $d018
|
||||
.const D011 = $d011
|
||||
.const RST8 = $80
|
||||
.const ECM = $40
|
||||
.const BMM = $20
|
||||
.const DEN = $10
|
||||
.const RSEL = 8
|
||||
.const D016 = $d016
|
||||
.const MCM = $10
|
||||
.const CSEL = 8
|
||||
.const SCREEN = $400
|
||||
.const BITMAP = $2000
|
||||
.const plot_xlo = $1000
|
||||
@ -24262,20 +24103,13 @@ ASSEMBLER
|
||||
:BasicUpstart(main)
|
||||
.pc = $80d "Program"
|
||||
//SEG1 Global Constants & labels
|
||||
.const COLS = $d800
|
||||
.const BGCOL = $d020
|
||||
.const FGCOL = $d021
|
||||
.const SCROLL = $d016
|
||||
.const D018 = $d018
|
||||
.const D011 = $d011
|
||||
.const RST8 = $80
|
||||
.const ECM = $40
|
||||
.const BMM = $20
|
||||
.const DEN = $10
|
||||
.const RSEL = 8
|
||||
.const D016 = $d016
|
||||
.const MCM = $10
|
||||
.const CSEL = 8
|
||||
.const SCREEN = $400
|
||||
.const BITMAP = $2000
|
||||
.const plot_xlo = $1000
|
||||
@ -25104,20 +24938,13 @@ ASSEMBLER
|
||||
:BasicUpstart(main)
|
||||
.pc = $80d "Program"
|
||||
//SEG1 Global Constants & labels
|
||||
.const COLS = $d800
|
||||
.const BGCOL = $d020
|
||||
.const FGCOL = $d021
|
||||
.const SCROLL = $d016
|
||||
.const D018 = $d018
|
||||
.const D011 = $d011
|
||||
.const RST8 = $80
|
||||
.const ECM = $40
|
||||
.const BMM = $20
|
||||
.const DEN = $10
|
||||
.const RSEL = 8
|
||||
.const D016 = $d016
|
||||
.const MCM = $10
|
||||
.const CSEL = 8
|
||||
.const SCREEN = $400
|
||||
.const BITMAP = $2000
|
||||
.const plot_xlo = $1000
|
||||
@ -25947,32 +25774,18 @@ FINAL SYMBOL TABLE
|
||||
(const byte*) BITMAP#0 BITMAP = ((byte*))(word/signed word) 8192
|
||||
(byte) BMM
|
||||
(const byte) BMM#0 BMM = (byte/signed byte/word/signed word) 32
|
||||
(byte*) COLS
|
||||
(const byte*) COLS#0 COLS = ((byte*))(word) 55296
|
||||
(byte) CSEL
|
||||
(const byte) CSEL#0 CSEL = (byte/signed byte/word/signed word) 8
|
||||
(byte*) D011
|
||||
(const byte*) D011#0 D011 = ((byte*))(word) 53265
|
||||
(byte*) D016
|
||||
(const byte*) D016#0 D016 = ((byte*))(word) 53270
|
||||
(byte*) D018
|
||||
(const byte*) D018#0 D018 = ((byte*))(word) 53272
|
||||
(byte) DEN
|
||||
(const byte) DEN#0 DEN = (byte/signed byte/word/signed word) 16
|
||||
(byte) ECM
|
||||
(const byte) ECM#0 ECM = (byte/signed byte/word/signed word) 64
|
||||
(byte*) FGCOL
|
||||
(const byte*) FGCOL#0 FGCOL = ((byte*))(word) 53281
|
||||
(byte) MCM
|
||||
(const byte) MCM#0 MCM = (byte/signed byte/word/signed word) 16
|
||||
(byte) RSEL
|
||||
(const byte) RSEL#0 RSEL = (byte/signed byte/word/signed word) 8
|
||||
(byte) RST8
|
||||
(const byte) RST8#0 RST8 = (byte/word/signed word) 128
|
||||
(byte*) SCREEN
|
||||
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word) 1024
|
||||
(byte*) SCROLL
|
||||
(const byte*) SCROLL#0 SCROLL = ((byte*))(word) 53270
|
||||
(void()) init_plot_tables()
|
||||
(byte~) init_plot_tables::$0 reg byte a 22.0
|
||||
(byte~) init_plot_tables::$10 reg byte a 22.0
|
||||
@ -26297,20 +26110,13 @@ FINAL CODE
|
||||
:BasicUpstart(main)
|
||||
.pc = $80d "Program"
|
||||
//SEG1 Global Constants & labels
|
||||
.const COLS = $d800
|
||||
.const BGCOL = $d020
|
||||
.const FGCOL = $d021
|
||||
.const SCROLL = $d016
|
||||
.const D018 = $d018
|
||||
.const D011 = $d011
|
||||
.const RST8 = $80
|
||||
.const ECM = $40
|
||||
.const BMM = $20
|
||||
.const DEN = $10
|
||||
.const RSEL = 8
|
||||
.const D016 = $d016
|
||||
.const MCM = $10
|
||||
.const CSEL = 8
|
||||
.const SCREEN = $400
|
||||
.const BITMAP = $2000
|
||||
.const plot_xlo = $1000
|
||||
|
@ -7,32 +7,18 @@
|
||||
(const byte*) BITMAP#0 BITMAP = ((byte*))(word/signed word) 8192
|
||||
(byte) BMM
|
||||
(const byte) BMM#0 BMM = (byte/signed byte/word/signed word) 32
|
||||
(byte*) COLS
|
||||
(const byte*) COLS#0 COLS = ((byte*))(word) 55296
|
||||
(byte) CSEL
|
||||
(const byte) CSEL#0 CSEL = (byte/signed byte/word/signed word) 8
|
||||
(byte*) D011
|
||||
(const byte*) D011#0 D011 = ((byte*))(word) 53265
|
||||
(byte*) D016
|
||||
(const byte*) D016#0 D016 = ((byte*))(word) 53270
|
||||
(byte*) D018
|
||||
(const byte*) D018#0 D018 = ((byte*))(word) 53272
|
||||
(byte) DEN
|
||||
(const byte) DEN#0 DEN = (byte/signed byte/word/signed word) 16
|
||||
(byte) ECM
|
||||
(const byte) ECM#0 ECM = (byte/signed byte/word/signed word) 64
|
||||
(byte*) FGCOL
|
||||
(const byte*) FGCOL#0 FGCOL = ((byte*))(word) 53281
|
||||
(byte) MCM
|
||||
(const byte) MCM#0 MCM = (byte/signed byte/word/signed word) 16
|
||||
(byte) RSEL
|
||||
(const byte) RSEL#0 RSEL = (byte/signed byte/word/signed word) 8
|
||||
(byte) RST8
|
||||
(const byte) RST8#0 RST8 = (byte/word/signed word) 128
|
||||
(byte*) SCREEN
|
||||
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word) 1024
|
||||
(byte*) SCROLL
|
||||
(const byte*) SCROLL#0 SCROLL = ((byte*))(word) 53270
|
||||
(void()) init_plot_tables()
|
||||
(byte~) init_plot_tables::$0 reg byte a 22.0
|
||||
(byte~) init_plot_tables::$10 reg byte a 22.0
|
||||
|
@ -2,19 +2,13 @@
|
||||
:BasicUpstart(main)
|
||||
.pc = $80d "Program"
|
||||
.const D011 = $d011
|
||||
.const RST8 = $80
|
||||
.const ECM = $40
|
||||
.const BMM = $20
|
||||
.const DEN = $10
|
||||
.const RSEL = 8
|
||||
.const RASTER = $d012
|
||||
.const D016 = $d016
|
||||
.const MCM = $10
|
||||
.const CSEL = 8
|
||||
.const D018 = $d018
|
||||
.const BGCOL = $d020
|
||||
.const FGCOL = $d021
|
||||
.const COLS = $d800
|
||||
.const SCREEN = $400
|
||||
.const BITMAP = $2000
|
||||
.const plots_cnt = 8
|
||||
|
@ -530,6 +530,16 @@ init_screen::@return: scope:[init_screen] from init_screen::@4
|
||||
to:@end
|
||||
@end: scope:[] from @5
|
||||
|
||||
Eliminating unused variable (byte) RST8 and assignment (byte) RST8 ← (byte/word/signed word) 128
|
||||
Eliminating unused variable (byte) ECM and assignment (byte) ECM ← (byte/signed byte/word/signed word) 64
|
||||
Eliminating unused variable (byte*) D016 and assignment (byte*) D016 ← ((byte*)) (word) 53270
|
||||
Eliminating unused variable (byte) MCM and assignment (byte) MCM ← (byte/signed byte/word/signed word) 16
|
||||
Eliminating unused variable (byte) CSEL and assignment (byte) CSEL ← (byte/signed byte/word/signed word) 8
|
||||
Eliminating unused variable (byte*) COLS and assignment (byte*) COLS ← ((byte*)) (word) 55296
|
||||
Eliminating unused variable - keeping the call (void~) main::$3
|
||||
Eliminating unused variable - keeping the call (void~) main::$4
|
||||
Eliminating unused variable - keeping the call (void~) main::$6
|
||||
Eliminating unused variable - keeping the call (void~) plots::$2
|
||||
Removing empty block main::@4
|
||||
Removing empty block plots::@2
|
||||
Removing empty block @3
|
||||
@ -539,19 +549,13 @@ Removing empty block init_screen::@4
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) D011 ← ((byte*)) (word) 53265
|
||||
(byte) RST8 ← (byte/word/signed word) 128
|
||||
(byte) ECM ← (byte/signed byte/word/signed word) 64
|
||||
(byte) BMM ← (byte/signed byte/word/signed word) 32
|
||||
(byte) DEN ← (byte/signed byte/word/signed word) 16
|
||||
(byte) RSEL ← (byte/signed byte/word/signed word) 8
|
||||
(byte*) RASTER ← ((byte*)) (word) 53266
|
||||
(byte*) D016 ← ((byte*)) (word) 53270
|
||||
(byte) MCM ← (byte/signed byte/word/signed word) 16
|
||||
(byte) CSEL ← (byte/signed byte/word/signed word) 8
|
||||
(byte*) D018 ← ((byte*)) (word) 53272
|
||||
(byte*) BGCOL ← ((byte*)) (word) 53280
|
||||
(byte*) FGCOL ← ((byte*)) (word) 53281
|
||||
(byte*) COLS ← ((byte*)) (word) 55296
|
||||
(byte*) SCREEN ← ((byte*)) (word/signed word) 1024
|
||||
(byte*) BITMAP ← ((byte*)) (word/signed word) 8192
|
||||
to:@1
|
||||
@ -563,8 +567,8 @@ main: scope:[main] from
|
||||
(byte~) main::$2 ← (byte~) main::$1 | (byte/signed byte/word/signed word) 3
|
||||
*((byte*) D011) ← (byte~) main::$2
|
||||
*((byte*) D018) ← (byte/signed byte/word/signed word) 24
|
||||
(void~) main::$3 ← call init_screen
|
||||
(void~) main::$4 ← call init_plot_tables
|
||||
call init_screen
|
||||
call init_plot_tables
|
||||
to:main::@2
|
||||
main::@1: scope:[main] from main::@3
|
||||
to:main::@2
|
||||
@ -574,7 +578,7 @@ main::@2: scope:[main] from main main::@1 main::@2
|
||||
to:main::@3
|
||||
main::@3: scope:[main] from main::@2
|
||||
*((byte*) BGCOL) ← ++ *((byte*) BGCOL)
|
||||
(void~) main::$6 ← call plots
|
||||
call plots
|
||||
*((byte*) BGCOL) ← -- *((byte*) BGCOL)
|
||||
if(true) goto main::@1
|
||||
to:main::@return
|
||||
@ -592,7 +596,7 @@ plots: scope:[plots] from
|
||||
plots::@1: scope:[plots] from plots plots::@1
|
||||
(byte~) plots::$0 ← (byte[]) plots_x *idx (byte) plots::i
|
||||
(byte~) plots::$1 ← (byte[]) plots_y *idx (byte) plots::i
|
||||
(void~) plots::$2 ← call plot (byte~) plots::$0 (byte~) plots::$1
|
||||
call plot (byte~) plots::$0 (byte~) plots::$1
|
||||
(byte) plots::i ← ++ (byte) plots::i
|
||||
(boolean~) plots::$3 ← (byte) plots::i < (byte) plots_cnt
|
||||
if((boolean~) plots::$3) goto plots::@1
|
||||
@ -712,19 +716,13 @@ PROCEDURE MODIFY VARIABLE ANALYSIS
|
||||
CONTROL FLOW GRAPH WITH ASSIGNMENT CALL
|
||||
@begin: scope:[] from
|
||||
(byte*) D011 ← ((byte*)) (word) 53265
|
||||
(byte) RST8 ← (byte/word/signed word) 128
|
||||
(byte) ECM ← (byte/signed byte/word/signed word) 64
|
||||
(byte) BMM ← (byte/signed byte/word/signed word) 32
|
||||
(byte) DEN ← (byte/signed byte/word/signed word) 16
|
||||
(byte) RSEL ← (byte/signed byte/word/signed word) 8
|
||||
(byte*) RASTER ← ((byte*)) (word) 53266
|
||||
(byte*) D016 ← ((byte*)) (word) 53270
|
||||
(byte) MCM ← (byte/signed byte/word/signed word) 16
|
||||
(byte) CSEL ← (byte/signed byte/word/signed word) 8
|
||||
(byte*) D018 ← ((byte*)) (word) 53272
|
||||
(byte*) BGCOL ← ((byte*)) (word) 53280
|
||||
(byte*) FGCOL ← ((byte*)) (word) 53281
|
||||
(byte*) COLS ← ((byte*)) (word) 55296
|
||||
(byte*) SCREEN ← ((byte*)) (word/signed word) 1024
|
||||
(byte*) BITMAP ← ((byte*)) (word/signed word) 8192
|
||||
to:@1
|
||||
@ -905,19 +903,13 @@ Completing Phi functions...
|
||||
CONTROL FLOW GRAPH SSA
|
||||
@begin: scope:[] from
|
||||
(byte*) D011#0 ← ((byte*)) (word) 53265
|
||||
(byte) RST8#0 ← (byte/word/signed word) 128
|
||||
(byte) ECM#0 ← (byte/signed byte/word/signed word) 64
|
||||
(byte) BMM#0 ← (byte/signed byte/word/signed word) 32
|
||||
(byte) DEN#0 ← (byte/signed byte/word/signed word) 16
|
||||
(byte) RSEL#0 ← (byte/signed byte/word/signed word) 8
|
||||
(byte*) RASTER#0 ← ((byte*)) (word) 53266
|
||||
(byte*) D016#0 ← ((byte*)) (word) 53270
|
||||
(byte) MCM#0 ← (byte/signed byte/word/signed word) 16
|
||||
(byte) CSEL#0 ← (byte/signed byte/word/signed word) 8
|
||||
(byte*) D018#0 ← ((byte*)) (word) 53272
|
||||
(byte*) BGCOL#0 ← ((byte*)) (word) 53280
|
||||
(byte*) FGCOL#0 ← ((byte*)) (word) 53281
|
||||
(byte*) COLS#0 ← ((byte*)) (word) 55296
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte*) BITMAP#0 ← ((byte*)) (word/signed word) 8192
|
||||
to:@1
|
||||
@ -1292,19 +1284,13 @@ init_screen::@return: scope:[init_screen] from init_screen::@2
|
||||
CONTROL FLOW GRAPH WITH ASSIGNMENT CALL & RETURN
|
||||
@begin: scope:[] from
|
||||
(byte*) D011#0 ← ((byte*)) (word) 53265
|
||||
(byte) RST8#0 ← (byte/word/signed word) 128
|
||||
(byte) ECM#0 ← (byte/signed byte/word/signed word) 64
|
||||
(byte) BMM#0 ← (byte/signed byte/word/signed word) 32
|
||||
(byte) DEN#0 ← (byte/signed byte/word/signed word) 16
|
||||
(byte) RSEL#0 ← (byte/signed byte/word/signed word) 8
|
||||
(byte*) RASTER#0 ← ((byte*)) (word) 53266
|
||||
(byte*) D016#0 ← ((byte*)) (word) 53270
|
||||
(byte) MCM#0 ← (byte/signed byte/word/signed word) 16
|
||||
(byte) CSEL#0 ← (byte/signed byte/word/signed word) 8
|
||||
(byte*) D018#0 ← ((byte*)) (word) 53272
|
||||
(byte*) BGCOL#0 ← ((byte*)) (word) 53280
|
||||
(byte*) FGCOL#0 ← ((byte*)) (word) 53281
|
||||
(byte*) COLS#0 ← ((byte*)) (word) 55296
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte*) BITMAP#0 ← ((byte*)) (word/signed word) 8192
|
||||
to:@1
|
||||
@ -1714,18 +1700,12 @@ INITIAL SSA SYMBOL TABLE
|
||||
(byte) BMM#2
|
||||
(byte) BMM#3
|
||||
(byte) BMM#4
|
||||
(byte*) COLS
|
||||
(byte*) COLS#0
|
||||
(byte) CSEL
|
||||
(byte) CSEL#0
|
||||
(byte*) D011
|
||||
(byte*) D011#0
|
||||
(byte*) D011#1
|
||||
(byte*) D011#2
|
||||
(byte*) D011#3
|
||||
(byte*) D011#4
|
||||
(byte*) D016
|
||||
(byte*) D016#0
|
||||
(byte*) D018
|
||||
(byte*) D018#0
|
||||
(byte*) D018#1
|
||||
@ -1738,16 +1718,12 @@ INITIAL SSA SYMBOL TABLE
|
||||
(byte) DEN#2
|
||||
(byte) DEN#3
|
||||
(byte) DEN#4
|
||||
(byte) ECM
|
||||
(byte) ECM#0
|
||||
(byte*) FGCOL
|
||||
(byte*) FGCOL#0
|
||||
(byte*) FGCOL#1
|
||||
(byte*) FGCOL#2
|
||||
(byte*) FGCOL#3
|
||||
(byte*) FGCOL#4
|
||||
(byte) MCM
|
||||
(byte) MCM#0
|
||||
(byte*) RASTER
|
||||
(byte*) RASTER#0
|
||||
(byte*) RASTER#1
|
||||
@ -1766,8 +1742,6 @@ INITIAL SSA SYMBOL TABLE
|
||||
(byte) RSEL#2
|
||||
(byte) RSEL#3
|
||||
(byte) RSEL#4
|
||||
(byte) RST8
|
||||
(byte) RST8#0
|
||||
(byte*) SCREEN
|
||||
(byte*) SCREEN#0
|
||||
(byte*) SCREEN#1
|
||||
@ -2038,19 +2012,13 @@ Succesful SSA optimization Pass2CullEmptyBlocks
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) D011#0 ← ((byte*)) (word) 53265
|
||||
(byte) RST8#0 ← (byte/word/signed word) 128
|
||||
(byte) ECM#0 ← (byte/signed byte/word/signed word) 64
|
||||
(byte) BMM#0 ← (byte/signed byte/word/signed word) 32
|
||||
(byte) DEN#0 ← (byte/signed byte/word/signed word) 16
|
||||
(byte) RSEL#0 ← (byte/signed byte/word/signed word) 8
|
||||
(byte*) RASTER#0 ← ((byte*)) (word) 53266
|
||||
(byte*) D016#0 ← ((byte*)) (word) 53270
|
||||
(byte) MCM#0 ← (byte/signed byte/word/signed word) 16
|
||||
(byte) CSEL#0 ← (byte/signed byte/word/signed word) 8
|
||||
(byte*) D018#0 ← ((byte*)) (word) 53272
|
||||
(byte*) BGCOL#0 ← ((byte*)) (word) 53280
|
||||
(byte*) FGCOL#0 ← ((byte*)) (word) 53281
|
||||
(byte*) COLS#0 ← ((byte*)) (word) 55296
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte*) BITMAP#0 ← ((byte*)) (word/signed word) 8192
|
||||
to:@1
|
||||
@ -2426,19 +2394,13 @@ Succesful SSA optimization Pass2UnaryNotSimplification
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) D011#0 ← ((byte*)) (word) 53265
|
||||
(byte) RST8#0 ← (byte/word/signed word) 128
|
||||
(byte) ECM#0 ← (byte/signed byte/word/signed word) 64
|
||||
(byte) BMM#0 ← (byte/signed byte/word/signed word) 32
|
||||
(byte) DEN#0 ← (byte/signed byte/word/signed word) 16
|
||||
(byte) RSEL#0 ← (byte/signed byte/word/signed word) 8
|
||||
(byte*) RASTER#0 ← ((byte*)) (word) 53266
|
||||
(byte*) D016#0 ← ((byte*)) (word) 53270
|
||||
(byte) MCM#0 ← (byte/signed byte/word/signed word) 16
|
||||
(byte) CSEL#0 ← (byte/signed byte/word/signed word) 8
|
||||
(byte*) D018#0 ← ((byte*)) (word) 53272
|
||||
(byte*) BGCOL#0 ← ((byte*)) (word) 53280
|
||||
(byte*) FGCOL#0 ← ((byte*)) (word) 53281
|
||||
(byte*) COLS#0 ← ((byte*)) (word) 55296
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte*) BITMAP#0 ← ((byte*)) (word/signed word) 8192
|
||||
to:@1
|
||||
@ -2921,19 +2883,13 @@ Succesful SSA optimization Pass2AliasElimination
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) D011#0 ← ((byte*)) (word) 53265
|
||||
(byte) RST8#0 ← (byte/word/signed word) 128
|
||||
(byte) ECM#0 ← (byte/signed byte/word/signed word) 64
|
||||
(byte) BMM#0 ← (byte/signed byte/word/signed word) 32
|
||||
(byte) DEN#0 ← (byte/signed byte/word/signed word) 16
|
||||
(byte) RSEL#0 ← (byte/signed byte/word/signed word) 8
|
||||
(byte*) RASTER#0 ← ((byte*)) (word) 53266
|
||||
(byte*) D016#0 ← ((byte*)) (word) 53270
|
||||
(byte) MCM#0 ← (byte/signed byte/word/signed word) 16
|
||||
(byte) CSEL#0 ← (byte/signed byte/word/signed word) 8
|
||||
(byte*) D018#0 ← ((byte*)) (word) 53272
|
||||
(byte*) BGCOL#0 ← ((byte*)) (word) 53280
|
||||
(byte*) FGCOL#0 ← ((byte*)) (word) 53281
|
||||
(byte*) COLS#0 ← ((byte*)) (word) 55296
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte*) BITMAP#0 ← ((byte*)) (word/signed word) 8192
|
||||
to:@1
|
||||
@ -3253,19 +3209,13 @@ Succesful SSA optimization Pass2AliasElimination
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) D011#0 ← ((byte*)) (word) 53265
|
||||
(byte) RST8#0 ← (byte/word/signed word) 128
|
||||
(byte) ECM#0 ← (byte/signed byte/word/signed word) 64
|
||||
(byte) BMM#0 ← (byte/signed byte/word/signed word) 32
|
||||
(byte) DEN#0 ← (byte/signed byte/word/signed word) 16
|
||||
(byte) RSEL#0 ← (byte/signed byte/word/signed word) 8
|
||||
(byte*) RASTER#0 ← ((byte*)) (word) 53266
|
||||
(byte*) D016#0 ← ((byte*)) (word) 53270
|
||||
(byte) MCM#0 ← (byte/signed byte/word/signed word) 16
|
||||
(byte) CSEL#0 ← (byte/signed byte/word/signed word) 8
|
||||
(byte*) D018#0 ← ((byte*)) (word) 53272
|
||||
(byte*) BGCOL#0 ← ((byte*)) (word) 53280
|
||||
(byte*) FGCOL#0 ← ((byte*)) (word) 53281
|
||||
(byte*) COLS#0 ← ((byte*)) (word) 55296
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte*) BITMAP#0 ← ((byte*)) (word/signed word) 8192
|
||||
to:@1
|
||||
@ -3606,19 +3556,13 @@ Succesful SSA optimization Pass2SelfPhiElimination
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) D011#0 ← ((byte*)) (word) 53265
|
||||
(byte) RST8#0 ← (byte/word/signed word) 128
|
||||
(byte) ECM#0 ← (byte/signed byte/word/signed word) 64
|
||||
(byte) BMM#0 ← (byte/signed byte/word/signed word) 32
|
||||
(byte) DEN#0 ← (byte/signed byte/word/signed word) 16
|
||||
(byte) RSEL#0 ← (byte/signed byte/word/signed word) 8
|
||||
(byte*) RASTER#0 ← ((byte*)) (word) 53266
|
||||
(byte*) D016#0 ← ((byte*)) (word) 53270
|
||||
(byte) MCM#0 ← (byte/signed byte/word/signed word) 16
|
||||
(byte) CSEL#0 ← (byte/signed byte/word/signed word) 8
|
||||
(byte*) D018#0 ← ((byte*)) (word) 53272
|
||||
(byte*) BGCOL#0 ← ((byte*)) (word) 53280
|
||||
(byte*) FGCOL#0 ← ((byte*)) (word) 53281
|
||||
(byte*) COLS#0 ← ((byte*)) (word) 55296
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte*) BITMAP#0 ← ((byte*)) (word/signed word) 8192
|
||||
to:@1
|
||||
@ -3932,19 +3876,13 @@ Succesful SSA optimization Pass2RedundantPhiElimination
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) D011#0 ← ((byte*)) (word) 53265
|
||||
(byte) RST8#0 ← (byte/word/signed word) 128
|
||||
(byte) ECM#0 ← (byte/signed byte/word/signed word) 64
|
||||
(byte) BMM#0 ← (byte/signed byte/word/signed word) 32
|
||||
(byte) DEN#0 ← (byte/signed byte/word/signed word) 16
|
||||
(byte) RSEL#0 ← (byte/signed byte/word/signed word) 8
|
||||
(byte*) RASTER#0 ← ((byte*)) (word) 53266
|
||||
(byte*) D016#0 ← ((byte*)) (word) 53270
|
||||
(byte) MCM#0 ← (byte/signed byte/word/signed word) 16
|
||||
(byte) CSEL#0 ← (byte/signed byte/word/signed word) 8
|
||||
(byte*) D018#0 ← ((byte*)) (word) 53272
|
||||
(byte*) BGCOL#0 ← ((byte*)) (word) 53280
|
||||
(byte*) FGCOL#0 ← ((byte*)) (word) 53281
|
||||
(byte*) COLS#0 ← ((byte*)) (word) 55296
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte*) BITMAP#0 ← ((byte*)) (word/signed word) 8192
|
||||
to:@1
|
||||
@ -4126,19 +4064,13 @@ Succesful SSA optimization Pass2ConditionalJumpSimplification
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) D011#0 ← ((byte*)) (word) 53265
|
||||
(byte) RST8#0 ← (byte/word/signed word) 128
|
||||
(byte) ECM#0 ← (byte/signed byte/word/signed word) 64
|
||||
(byte) BMM#0 ← (byte/signed byte/word/signed word) 32
|
||||
(byte) DEN#0 ← (byte/signed byte/word/signed word) 16
|
||||
(byte) RSEL#0 ← (byte/signed byte/word/signed word) 8
|
||||
(byte*) RASTER#0 ← ((byte*)) (word) 53266
|
||||
(byte*) D016#0 ← ((byte*)) (word) 53270
|
||||
(byte) MCM#0 ← (byte/signed byte/word/signed word) 16
|
||||
(byte) CSEL#0 ← (byte/signed byte/word/signed word) 8
|
||||
(byte*) D018#0 ← ((byte*)) (word) 53272
|
||||
(byte*) BGCOL#0 ← ((byte*)) (word) 53280
|
||||
(byte*) FGCOL#0 ← ((byte*)) (word) 53281
|
||||
(byte*) COLS#0 ← ((byte*)) (word) 55296
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte*) BITMAP#0 ← ((byte*)) (word/signed word) 8192
|
||||
to:@1
|
||||
@ -4301,19 +4233,13 @@ init_screen::@return: scope:[init_screen] from init_screen::@2
|
||||
@end: scope:[] from @5
|
||||
|
||||
Constant (const byte*) D011#0 = ((byte*))53265
|
||||
Constant (const byte) RST8#0 = 128
|
||||
Constant (const byte) ECM#0 = 64
|
||||
Constant (const byte) BMM#0 = 32
|
||||
Constant (const byte) DEN#0 = 16
|
||||
Constant (const byte) RSEL#0 = 8
|
||||
Constant (const byte*) RASTER#0 = ((byte*))53266
|
||||
Constant (const byte*) D016#0 = ((byte*))53270
|
||||
Constant (const byte) MCM#0 = 16
|
||||
Constant (const byte) CSEL#0 = 8
|
||||
Constant (const byte*) D018#0 = ((byte*))53272
|
||||
Constant (const byte*) BGCOL#0 = ((byte*))53280
|
||||
Constant (const byte*) FGCOL#0 = ((byte*))53281
|
||||
Constant (const byte*) COLS#0 = ((byte*))55296
|
||||
Constant (const byte*) SCREEN#0 = ((byte*))1024
|
||||
Constant (const byte*) BITMAP#0 = ((byte*))8192
|
||||
Constant (const byte[]) plots_x#0 = { 60, 80, 110, 80, 60, 40, 10, 40 }
|
||||
@ -5256,30 +5182,18 @@ FINAL SYMBOL TABLE
|
||||
(const byte*) BITMAP#0 = ((byte*))(word/signed word) 8192
|
||||
(byte) BMM
|
||||
(const byte) BMM#0 = (byte/signed byte/word/signed word) 32
|
||||
(byte*) COLS
|
||||
(const byte*) COLS#0 = ((byte*))(word) 55296
|
||||
(byte) CSEL
|
||||
(const byte) CSEL#0 = (byte/signed byte/word/signed word) 8
|
||||
(byte*) D011
|
||||
(const byte*) D011#0 = ((byte*))(word) 53265
|
||||
(byte*) D016
|
||||
(const byte*) D016#0 = ((byte*))(word) 53270
|
||||
(byte*) D018
|
||||
(const byte*) D018#0 = ((byte*))(word) 53272
|
||||
(byte) DEN
|
||||
(const byte) DEN#0 = (byte/signed byte/word/signed word) 16
|
||||
(byte) ECM
|
||||
(const byte) ECM#0 = (byte/signed byte/word/signed word) 64
|
||||
(byte*) FGCOL
|
||||
(const byte*) FGCOL#0 = ((byte*))(word) 53281
|
||||
(byte) MCM
|
||||
(const byte) MCM#0 = (byte/signed byte/word/signed word) 16
|
||||
(byte*) RASTER
|
||||
(const byte*) RASTER#0 = ((byte*))(word) 53266
|
||||
(byte) RSEL
|
||||
(const byte) RSEL#0 = (byte/signed byte/word/signed word) 8
|
||||
(byte) RST8
|
||||
(const byte) RST8#0 = (byte/word/signed word) 128
|
||||
(byte*) SCREEN
|
||||
(const byte*) SCREEN#0 = ((byte*))(word/signed word) 1024
|
||||
(void()) init_plot_tables()
|
||||
@ -6090,18 +6004,12 @@ VARIABLE REGISTER WEIGHTS
|
||||
(byte*) BGCOL
|
||||
(byte*) BITMAP
|
||||
(byte) BMM
|
||||
(byte*) COLS
|
||||
(byte) CSEL
|
||||
(byte*) D011
|
||||
(byte*) D016
|
||||
(byte*) D018
|
||||
(byte) DEN
|
||||
(byte) ECM
|
||||
(byte*) FGCOL
|
||||
(byte) MCM
|
||||
(byte*) RASTER
|
||||
(byte) RSEL
|
||||
(byte) RST8
|
||||
(byte*) SCREEN
|
||||
(void()) init_plot_tables()
|
||||
(byte~) init_plot_tables::$0 22.0
|
||||
@ -6259,19 +6167,13 @@ INITIAL ASM
|
||||
.pc = $80d "Program"
|
||||
//SEG1 Global Constants & labels
|
||||
.const D011 = $d011
|
||||
.const RST8 = $80
|
||||
.const ECM = $40
|
||||
.const BMM = $20
|
||||
.const DEN = $10
|
||||
.const RSEL = 8
|
||||
.const RASTER = $d012
|
||||
.const D016 = $d016
|
||||
.const MCM = $10
|
||||
.const CSEL = 8
|
||||
.const D018 = $d018
|
||||
.const BGCOL = $d020
|
||||
.const FGCOL = $d021
|
||||
.const COLS = $d800
|
||||
.const SCREEN = $400
|
||||
.const BITMAP = $2000
|
||||
.const plots_cnt = 8
|
||||
@ -6846,19 +6748,13 @@ ASSEMBLER
|
||||
.pc = $80d "Program"
|
||||
//SEG1 Global Constants & labels
|
||||
.const D011 = $d011
|
||||
.const RST8 = $80
|
||||
.const ECM = $40
|
||||
.const BMM = $20
|
||||
.const DEN = $10
|
||||
.const RSEL = 8
|
||||
.const RASTER = $d012
|
||||
.const D016 = $d016
|
||||
.const MCM = $10
|
||||
.const CSEL = 8
|
||||
.const D018 = $d018
|
||||
.const BGCOL = $d020
|
||||
.const FGCOL = $d021
|
||||
.const COLS = $d800
|
||||
.const SCREEN = $400
|
||||
.const BITMAP = $2000
|
||||
.const plots_cnt = 8
|
||||
@ -7215,19 +7111,13 @@ ASSEMBLER
|
||||
.pc = $80d "Program"
|
||||
//SEG1 Global Constants & labels
|
||||
.const D011 = $d011
|
||||
.const RST8 = $80
|
||||
.const ECM = $40
|
||||
.const BMM = $20
|
||||
.const DEN = $10
|
||||
.const RSEL = 8
|
||||
.const RASTER = $d012
|
||||
.const D016 = $d016
|
||||
.const MCM = $10
|
||||
.const CSEL = 8
|
||||
.const D018 = $d018
|
||||
.const BGCOL = $d020
|
||||
.const FGCOL = $d021
|
||||
.const COLS = $d800
|
||||
.const SCREEN = $400
|
||||
.const BITMAP = $2000
|
||||
.const plots_cnt = 8
|
||||
@ -7599,19 +7489,13 @@ ASSEMBLER
|
||||
.pc = $80d "Program"
|
||||
//SEG1 Global Constants & labels
|
||||
.const D011 = $d011
|
||||
.const RST8 = $80
|
||||
.const ECM = $40
|
||||
.const BMM = $20
|
||||
.const DEN = $10
|
||||
.const RSEL = 8
|
||||
.const RASTER = $d012
|
||||
.const D016 = $d016
|
||||
.const MCM = $10
|
||||
.const CSEL = 8
|
||||
.const D018 = $d018
|
||||
.const BGCOL = $d020
|
||||
.const FGCOL = $d021
|
||||
.const COLS = $d800
|
||||
.const SCREEN = $400
|
||||
.const BITMAP = $2000
|
||||
.const plots_cnt = 8
|
||||
@ -7966,19 +7850,13 @@ ASSEMBLER
|
||||
.pc = $80d "Program"
|
||||
//SEG1 Global Constants & labels
|
||||
.const D011 = $d011
|
||||
.const RST8 = $80
|
||||
.const ECM = $40
|
||||
.const BMM = $20
|
||||
.const DEN = $10
|
||||
.const RSEL = 8
|
||||
.const RASTER = $d012
|
||||
.const D016 = $d016
|
||||
.const MCM = $10
|
||||
.const CSEL = 8
|
||||
.const D018 = $d018
|
||||
.const BGCOL = $d020
|
||||
.const FGCOL = $d021
|
||||
.const COLS = $d800
|
||||
.const SCREEN = $400
|
||||
.const BITMAP = $2000
|
||||
.const plots_cnt = 8
|
||||
@ -8294,19 +8172,13 @@ ASSEMBLER
|
||||
.pc = $80d "Program"
|
||||
//SEG1 Global Constants & labels
|
||||
.const D011 = $d011
|
||||
.const RST8 = $80
|
||||
.const ECM = $40
|
||||
.const BMM = $20
|
||||
.const DEN = $10
|
||||
.const RSEL = 8
|
||||
.const RASTER = $d012
|
||||
.const D016 = $d016
|
||||
.const MCM = $10
|
||||
.const CSEL = 8
|
||||
.const D018 = $d018
|
||||
.const BGCOL = $d020
|
||||
.const FGCOL = $d021
|
||||
.const COLS = $d800
|
||||
.const SCREEN = $400
|
||||
.const BITMAP = $2000
|
||||
.const plots_cnt = 8
|
||||
@ -8622,19 +8494,13 @@ ASSEMBLER
|
||||
.pc = $80d "Program"
|
||||
//SEG1 Global Constants & labels
|
||||
.const D011 = $d011
|
||||
.const RST8 = $80
|
||||
.const ECM = $40
|
||||
.const BMM = $20
|
||||
.const DEN = $10
|
||||
.const RSEL = 8
|
||||
.const RASTER = $d012
|
||||
.const D016 = $d016
|
||||
.const MCM = $10
|
||||
.const CSEL = 8
|
||||
.const D018 = $d018
|
||||
.const BGCOL = $d020
|
||||
.const FGCOL = $d021
|
||||
.const COLS = $d800
|
||||
.const SCREEN = $400
|
||||
.const BITMAP = $2000
|
||||
.const plots_cnt = 8
|
||||
@ -8953,19 +8819,13 @@ ASSEMBLER
|
||||
.pc = $80d "Program"
|
||||
//SEG1 Global Constants & labels
|
||||
.const D011 = $d011
|
||||
.const RST8 = $80
|
||||
.const ECM = $40
|
||||
.const BMM = $20
|
||||
.const DEN = $10
|
||||
.const RSEL = 8
|
||||
.const RASTER = $d012
|
||||
.const D016 = $d016
|
||||
.const MCM = $10
|
||||
.const CSEL = 8
|
||||
.const D018 = $d018
|
||||
.const BGCOL = $d020
|
||||
.const FGCOL = $d021
|
||||
.const COLS = $d800
|
||||
.const SCREEN = $400
|
||||
.const BITMAP = $2000
|
||||
.const plots_cnt = 8
|
||||
@ -9275,19 +9135,13 @@ ASSEMBLER
|
||||
.pc = $80d "Program"
|
||||
//SEG1 Global Constants & labels
|
||||
.const D011 = $d011
|
||||
.const RST8 = $80
|
||||
.const ECM = $40
|
||||
.const BMM = $20
|
||||
.const DEN = $10
|
||||
.const RSEL = 8
|
||||
.const RASTER = $d012
|
||||
.const D016 = $d016
|
||||
.const MCM = $10
|
||||
.const CSEL = 8
|
||||
.const D018 = $d018
|
||||
.const BGCOL = $d020
|
||||
.const FGCOL = $d021
|
||||
.const COLS = $d800
|
||||
.const SCREEN = $400
|
||||
.const BITMAP = $2000
|
||||
.const plots_cnt = 8
|
||||
@ -9596,19 +9450,13 @@ ASSEMBLER
|
||||
.pc = $80d "Program"
|
||||
//SEG1 Global Constants & labels
|
||||
.const D011 = $d011
|
||||
.const RST8 = $80
|
||||
.const ECM = $40
|
||||
.const BMM = $20
|
||||
.const DEN = $10
|
||||
.const RSEL = 8
|
||||
.const RASTER = $d012
|
||||
.const D016 = $d016
|
||||
.const MCM = $10
|
||||
.const CSEL = 8
|
||||
.const D018 = $d018
|
||||
.const BGCOL = $d020
|
||||
.const FGCOL = $d021
|
||||
.const COLS = $d800
|
||||
.const SCREEN = $400
|
||||
.const BITMAP = $2000
|
||||
.const plots_cnt = 8
|
||||
@ -9917,30 +9765,18 @@ FINAL SYMBOL TABLE
|
||||
(const byte*) BITMAP#0 BITMAP = ((byte*))(word/signed word) 8192
|
||||
(byte) BMM
|
||||
(const byte) BMM#0 BMM = (byte/signed byte/word/signed word) 32
|
||||
(byte*) COLS
|
||||
(const byte*) COLS#0 COLS = ((byte*))(word) 55296
|
||||
(byte) CSEL
|
||||
(const byte) CSEL#0 CSEL = (byte/signed byte/word/signed word) 8
|
||||
(byte*) D011
|
||||
(const byte*) D011#0 D011 = ((byte*))(word) 53265
|
||||
(byte*) D016
|
||||
(const byte*) D016#0 D016 = ((byte*))(word) 53270
|
||||
(byte*) D018
|
||||
(const byte*) D018#0 D018 = ((byte*))(word) 53272
|
||||
(byte) DEN
|
||||
(const byte) DEN#0 DEN = (byte/signed byte/word/signed word) 16
|
||||
(byte) ECM
|
||||
(const byte) ECM#0 ECM = (byte/signed byte/word/signed word) 64
|
||||
(byte*) FGCOL
|
||||
(const byte*) FGCOL#0 FGCOL = ((byte*))(word) 53281
|
||||
(byte) MCM
|
||||
(const byte) MCM#0 MCM = (byte/signed byte/word/signed word) 16
|
||||
(byte*) RASTER
|
||||
(const byte*) RASTER#0 RASTER = ((byte*))(word) 53266
|
||||
(byte) RSEL
|
||||
(const byte) RSEL#0 RSEL = (byte/signed byte/word/signed word) 8
|
||||
(byte) RST8
|
||||
(const byte) RST8#0 RST8 = (byte/word/signed word) 128
|
||||
(byte*) SCREEN
|
||||
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word) 1024
|
||||
(void()) init_plot_tables()
|
||||
@ -10062,19 +9898,13 @@ FINAL CODE
|
||||
.pc = $80d "Program"
|
||||
//SEG1 Global Constants & labels
|
||||
.const D011 = $d011
|
||||
.const RST8 = $80
|
||||
.const ECM = $40
|
||||
.const BMM = $20
|
||||
.const DEN = $10
|
||||
.const RSEL = 8
|
||||
.const RASTER = $d012
|
||||
.const D016 = $d016
|
||||
.const MCM = $10
|
||||
.const CSEL = 8
|
||||
.const D018 = $d018
|
||||
.const BGCOL = $d020
|
||||
.const FGCOL = $d021
|
||||
.const COLS = $d800
|
||||
.const SCREEN = $400
|
||||
.const BITMAP = $2000
|
||||
.const plots_cnt = 8
|
||||
|
@ -7,30 +7,18 @@
|
||||
(const byte*) BITMAP#0 BITMAP = ((byte*))(word/signed word) 8192
|
||||
(byte) BMM
|
||||
(const byte) BMM#0 BMM = (byte/signed byte/word/signed word) 32
|
||||
(byte*) COLS
|
||||
(const byte*) COLS#0 COLS = ((byte*))(word) 55296
|
||||
(byte) CSEL
|
||||
(const byte) CSEL#0 CSEL = (byte/signed byte/word/signed word) 8
|
||||
(byte*) D011
|
||||
(const byte*) D011#0 D011 = ((byte*))(word) 53265
|
||||
(byte*) D016
|
||||
(const byte*) D016#0 D016 = ((byte*))(word) 53270
|
||||
(byte*) D018
|
||||
(const byte*) D018#0 D018 = ((byte*))(word) 53272
|
||||
(byte) DEN
|
||||
(const byte) DEN#0 DEN = (byte/signed byte/word/signed word) 16
|
||||
(byte) ECM
|
||||
(const byte) ECM#0 ECM = (byte/signed byte/word/signed word) 64
|
||||
(byte*) FGCOL
|
||||
(const byte*) FGCOL#0 FGCOL = ((byte*))(word) 53281
|
||||
(byte) MCM
|
||||
(const byte) MCM#0 MCM = (byte/signed byte/word/signed word) 16
|
||||
(byte*) RASTER
|
||||
(const byte*) RASTER#0 RASTER = ((byte*))(word) 53266
|
||||
(byte) RSEL
|
||||
(const byte) RSEL#0 RSEL = (byte/signed byte/word/signed word) 8
|
||||
(byte) RST8
|
||||
(const byte) RST8#0 RST8 = (byte/word/signed word) 128
|
||||
(byte*) SCREEN
|
||||
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word) 1024
|
||||
(void()) init_plot_tables()
|
||||
|
@ -87,6 +87,8 @@ line::@return: scope:[line] from line::@2
|
||||
to:@end
|
||||
@end: scope:[] from @2
|
||||
|
||||
Eliminating unused variable - keeping the call (void~) main::$0
|
||||
Eliminating unused variable - keeping the call (void~) main::$1
|
||||
Removing empty block @1
|
||||
Removing empty block line::@2
|
||||
CONTROL FLOW GRAPH
|
||||
@ -94,8 +96,8 @@ CONTROL FLOW GRAPH
|
||||
(byte*) screen ← ((byte*)) (word/signed word) 1024
|
||||
to:@2
|
||||
main: scope:[main] from
|
||||
(void~) main::$0 ← call line (byte/signed byte/word/signed word) 1 (byte/signed byte/word/signed word) 2
|
||||
(void~) main::$1 ← call line (byte/signed byte/word/signed word) 3 (byte/signed byte/word/signed word) 5
|
||||
call line (byte/signed byte/word/signed word) 1 (byte/signed byte/word/signed word) 2
|
||||
call line (byte/signed byte/word/signed word) 3 (byte/signed byte/word/signed word) 5
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main
|
||||
return
|
||||
|
@ -180,6 +180,7 @@ w::@return: scope:[w] from w::@2
|
||||
to:@end
|
||||
@end: scope:[] from @2
|
||||
|
||||
Eliminating unused variable - keeping the call (void~) main::$5
|
||||
Removing empty block @1
|
||||
Removing empty block w::@2
|
||||
CONTROL FLOW GRAPH
|
||||
@ -212,7 +213,7 @@ main::@1: scope:[main] from main main::@1
|
||||
if((boolean~) main::$4) goto main::@1
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1
|
||||
(void~) main::$5 ← call w
|
||||
call w
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@2
|
||||
return
|
||||
|
@ -176,6 +176,9 @@ plot::@return: scope:[plot] from plot
|
||||
to:@end
|
||||
@end: scope:[] from @3
|
||||
|
||||
Eliminating unused variable - keeping the call (void~) main::$1
|
||||
Eliminating unused variable - keeping the call (void~) line::$4
|
||||
Eliminating unused variable - keeping the call (void~) line::$2
|
||||
Removing empty block main::@3
|
||||
Removing empty block main::@4
|
||||
Removing empty block @1
|
||||
@ -199,7 +202,7 @@ main::@1: scope:[main] from main main::@1
|
||||
if((boolean~) main::$0) goto main::@1
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1 main::@2
|
||||
(void~) main::$1 ← call line (byte/signed byte/word/signed word) 0 (byte/signed byte/word/signed word) 10
|
||||
call line (byte/signed byte/word/signed word) 0 (byte/signed byte/word/signed word) 10
|
||||
if(true) goto main::@2
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@2
|
||||
@ -211,13 +214,13 @@ line: scope:[line] from
|
||||
if((boolean~) line::$1) goto line::@1
|
||||
to:line::@4
|
||||
line::@1: scope:[line] from line
|
||||
(void~) line::$4 ← call plot (byte) line::x0
|
||||
call plot (byte) line::x0
|
||||
to:line::@return
|
||||
line::@4: scope:[line] from line
|
||||
(byte) line::x ← (byte) line::x0
|
||||
to:line::@2
|
||||
line::@2: scope:[line] from line::@2 line::@4
|
||||
(void~) line::$2 ← call plot (byte) line::x
|
||||
call plot (byte) line::x
|
||||
(byte) line::x ← ++ (byte) line::x
|
||||
(boolean~) line::$3 ← (byte) line::x <= (byte) line::x1
|
||||
if((boolean~) line::$3) goto line::@2
|
||||
|
@ -108,6 +108,7 @@ fillscreen::@return: scope:[fillscreen] from fillscreen::@2
|
||||
to:@end
|
||||
@end: scope:[] from @2
|
||||
|
||||
Eliminating unused variable - keeping the call (void~) main::$0
|
||||
Removing empty block @1
|
||||
Removing empty block fillscreen::@2
|
||||
CONTROL FLOW GRAPH
|
||||
@ -116,7 +117,7 @@ CONTROL FLOW GRAPH
|
||||
to:@2
|
||||
main: scope:[main] from
|
||||
(byte) main::c ← *((byte*) SCREEN)
|
||||
(void~) main::$0 ← call fillscreen (byte) main::c
|
||||
call fillscreen (byte) main::c
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main
|
||||
return
|
||||
|
@ -337,6 +337,9 @@ plot::@return: scope:[plot] from plot::@4
|
||||
to:@end
|
||||
@end: scope:[] from @4
|
||||
|
||||
Eliminating unused variable - keeping the call (void~) main::$0
|
||||
Eliminating unused variable - keeping the call (void~) main::$4
|
||||
Eliminating unused variable - keeping the call (void~) main::$5
|
||||
Removing empty block main::@5
|
||||
Removing empty block main::@8
|
||||
Removing empty block @1
|
||||
@ -353,7 +356,7 @@ CONTROL FLOW GRAPH
|
||||
(byte*) RASTER ← ((byte*)) (word) 53266
|
||||
to:@4
|
||||
main: scope:[main] from
|
||||
(void~) main::$0 ← call prepare
|
||||
call prepare
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@7
|
||||
(byte) main::c ← (byte/signed byte/word/signed word) 25
|
||||
@ -374,8 +377,8 @@ main::@6: scope:[main] from main::@4
|
||||
if((boolean~) main::$3) goto main::@2
|
||||
to:main::@7
|
||||
main::@7: scope:[main] from main::@6
|
||||
(void~) main::$4 ← call flip
|
||||
(void~) main::$5 ← call plot
|
||||
call flip
|
||||
call plot
|
||||
if(true) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@7
|
||||
|
@ -2,7 +2,6 @@
|
||||
:BasicUpstart(main)
|
||||
.pc = $80d "Program"
|
||||
.const SCREEN = $400
|
||||
.const CHARSET = $2000
|
||||
.const CHARGEN = $d000
|
||||
.const PROCPORT = 1
|
||||
.const D018 = $d018
|
||||
|
@ -336,10 +336,10 @@ main::@return: scope:[main] from main::@12
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
|
||||
Eliminating unused variable (byte*) CHARSET and assignment (byte*) CHARSET ← ((byte*)) (word/signed word) 8192
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) SCREEN ← ((byte*)) (word/signed word) 1024
|
||||
(byte*) CHARSET ← ((byte*)) (word/signed word) 8192
|
||||
(byte*) CHARGEN ← ((byte*)) (word) 53248
|
||||
(byte*) PROCPORT ← ((byte*)) (byte/signed byte/word/signed word) 1
|
||||
(byte*) D018 ← ((byte*)) (word) 53272
|
||||
@ -463,7 +463,6 @@ PROCEDURE MODIFY VARIABLE ANALYSIS
|
||||
CONTROL FLOW GRAPH WITH ASSIGNMENT CALL
|
||||
@begin: scope:[] from
|
||||
(byte*) SCREEN ← ((byte*)) (word/signed word) 1024
|
||||
(byte*) CHARSET ← ((byte*)) (word/signed word) 8192
|
||||
(byte*) CHARGEN ← ((byte*)) (word) 53248
|
||||
(byte*) PROCPORT ← ((byte*)) (byte/signed byte/word/signed word) 1
|
||||
(byte*) D018 ← ((byte*)) (word) 53272
|
||||
@ -597,7 +596,6 @@ Completing Phi functions...
|
||||
CONTROL FLOW GRAPH SSA
|
||||
@begin: scope:[] from
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte*) CHARSET#0 ← ((byte*)) (word/signed word) 8192
|
||||
(byte*) CHARGEN#0 ← ((byte*)) (word) 53248
|
||||
(byte*) PROCPORT#0 ← ((byte*)) (byte/signed byte/word/signed word) 1
|
||||
(byte*) D018#0 ← ((byte*)) (word) 53272
|
||||
@ -817,7 +815,6 @@ main::@return: scope:[main] from main::@12
|
||||
CONTROL FLOW GRAPH WITH ASSIGNMENT CALL & RETURN
|
||||
@begin: scope:[] from
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte*) CHARSET#0 ← ((byte*)) (word/signed word) 8192
|
||||
(byte*) CHARGEN#0 ← ((byte*)) (word) 53248
|
||||
(byte*) PROCPORT#0 ← ((byte*)) (byte/signed byte/word/signed word) 1
|
||||
(byte*) D018#0 ← ((byte*)) (word) 53272
|
||||
@ -1052,8 +1049,6 @@ INITIAL SSA SYMBOL TABLE
|
||||
(byte*) CHARGEN#7
|
||||
(byte*) CHARGEN#8
|
||||
(byte*) CHARGEN#9
|
||||
(byte*) CHARSET
|
||||
(byte*) CHARSET#0
|
||||
(byte*) CHARSET4
|
||||
(byte*) CHARSET4#0
|
||||
(byte*) CHARSET4#1
|
||||
@ -1240,7 +1235,6 @@ Succesful SSA optimization Pass2CullEmptyBlocks
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte*) CHARSET#0 ← ((byte*)) (word/signed word) 8192
|
||||
(byte*) CHARGEN#0 ← ((byte*)) (word) 53248
|
||||
(byte*) PROCPORT#0 ← ((byte*)) (byte/signed byte/word/signed word) 1
|
||||
(byte*) D018#0 ← ((byte*)) (word) 53272
|
||||
@ -1463,7 +1457,6 @@ Succesful SSA optimization Pass2UnaryNotSimplification
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte*) CHARSET#0 ← ((byte*)) (word/signed word) 8192
|
||||
(byte*) CHARGEN#0 ← ((byte*)) (word) 53248
|
||||
(byte*) PROCPORT#0 ← ((byte*)) (byte/signed byte/word/signed word) 1
|
||||
(byte*) D018#0 ← ((byte*)) (word) 53272
|
||||
@ -1741,7 +1734,6 @@ Succesful SSA optimization Pass2AliasElimination
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte*) CHARSET#0 ← ((byte*)) (word/signed word) 8192
|
||||
(byte*) CHARGEN#0 ← ((byte*)) (word) 53248
|
||||
(byte*) PROCPORT#0 ← ((byte*)) (byte/signed byte/word/signed word) 1
|
||||
(byte*) D018#0 ← ((byte*)) (word) 53272
|
||||
@ -1913,7 +1905,6 @@ Succesful SSA optimization Pass2AliasElimination
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte*) CHARSET#0 ← ((byte*)) (word/signed word) 8192
|
||||
(byte*) CHARGEN#0 ← ((byte*)) (word) 53248
|
||||
(byte*) PROCPORT#0 ← ((byte*)) (byte/signed byte/word/signed word) 1
|
||||
(byte*) D018#0 ← ((byte*)) (word) 53272
|
||||
@ -2053,7 +2044,6 @@ Succesful SSA optimization Pass2SelfPhiElimination
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte*) CHARSET#0 ← ((byte*)) (word/signed word) 8192
|
||||
(byte*) CHARGEN#0 ← ((byte*)) (word) 53248
|
||||
(byte*) PROCPORT#0 ← ((byte*)) (byte/signed byte/word/signed word) 1
|
||||
(byte*) D018#0 ← ((byte*)) (word) 53272
|
||||
@ -2191,7 +2181,6 @@ Succesful SSA optimization Pass2RedundantPhiElimination
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte*) CHARSET#0 ← ((byte*)) (word/signed word) 8192
|
||||
(byte*) CHARGEN#0 ← ((byte*)) (word) 53248
|
||||
(byte*) PROCPORT#0 ← ((byte*)) (byte/signed byte/word/signed word) 1
|
||||
(byte*) D018#0 ← ((byte*)) (word) 53272
|
||||
@ -2309,7 +2298,6 @@ Succesful SSA optimization Pass2ConditionalJumpSimplification
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte*) CHARSET#0 ← ((byte*)) (word/signed word) 8192
|
||||
(byte*) CHARGEN#0 ← ((byte*)) (word) 53248
|
||||
(byte*) PROCPORT#0 ← ((byte*)) (byte/signed byte/word/signed word) 1
|
||||
(byte*) D018#0 ← ((byte*)) (word) 53272
|
||||
@ -2412,7 +2400,6 @@ main::@return: scope:[main] from main::@12
|
||||
@end: scope:[] from @1
|
||||
|
||||
Constant (const byte*) SCREEN#0 = ((byte*))1024
|
||||
Constant (const byte*) CHARSET#0 = ((byte*))8192
|
||||
Constant (const byte*) CHARGEN#0 = ((byte*))53248
|
||||
Constant (const byte*) PROCPORT#0 = ((byte*))1
|
||||
Constant (const byte*) D018#0 = ((byte*))53272
|
||||
@ -2762,8 +2749,6 @@ FINAL SYMBOL TABLE
|
||||
(label) @end
|
||||
(byte*) CHARGEN
|
||||
(const byte*) CHARGEN#0 = ((byte*))(word) 53248
|
||||
(byte*) CHARSET
|
||||
(const byte*) CHARSET#0 = ((byte*))(word/signed word) 8192
|
||||
(byte*) CHARSET4
|
||||
(const byte*) CHARSET4#0 = ((byte*))(word/signed word) 10240
|
||||
(byte*) D018
|
||||
@ -3407,7 +3392,6 @@ Loop head: main::@6 tails: main::@6 blocks: main::@6 depth: 1
|
||||
|
||||
VARIABLE REGISTER WEIGHTS
|
||||
(byte*) CHARGEN
|
||||
(byte*) CHARSET
|
||||
(byte*) CHARSET4
|
||||
(byte*) D018
|
||||
(byte*) PROCPORT
|
||||
@ -3571,7 +3555,6 @@ INITIAL ASM
|
||||
.pc = $80d "Program"
|
||||
//SEG1 Global Constants & labels
|
||||
.const SCREEN = $400
|
||||
.const CHARSET = $2000
|
||||
.const CHARGEN = $d000
|
||||
.const PROCPORT = 1
|
||||
.const D018 = $d018
|
||||
@ -4115,7 +4098,6 @@ ASSEMBLER
|
||||
.pc = $80d "Program"
|
||||
//SEG1 Global Constants & labels
|
||||
.const SCREEN = $400
|
||||
.const CHARSET = $2000
|
||||
.const CHARGEN = $d000
|
||||
.const PROCPORT = 1
|
||||
.const D018 = $d018
|
||||
@ -4391,7 +4373,6 @@ ASSEMBLER
|
||||
.pc = $80d "Program"
|
||||
//SEG1 Global Constants & labels
|
||||
.const SCREEN = $400
|
||||
.const CHARSET = $2000
|
||||
.const CHARGEN = $d000
|
||||
.const PROCPORT = 1
|
||||
.const D018 = $d018
|
||||
@ -4678,7 +4659,6 @@ ASSEMBLER
|
||||
.pc = $80d "Program"
|
||||
//SEG1 Global Constants & labels
|
||||
.const SCREEN = $400
|
||||
.const CHARSET = $2000
|
||||
.const CHARGEN = $d000
|
||||
.const PROCPORT = 1
|
||||
.const D018 = $d018
|
||||
@ -4944,7 +4924,6 @@ ASSEMBLER
|
||||
.pc = $80d "Program"
|
||||
//SEG1 Global Constants & labels
|
||||
.const SCREEN = $400
|
||||
.const CHARSET = $2000
|
||||
.const CHARGEN = $d000
|
||||
.const PROCPORT = 1
|
||||
.const D018 = $d018
|
||||
@ -5190,7 +5169,6 @@ ASSEMBLER
|
||||
.pc = $80d "Program"
|
||||
//SEG1 Global Constants & labels
|
||||
.const SCREEN = $400
|
||||
.const CHARSET = $2000
|
||||
.const CHARGEN = $d000
|
||||
.const PROCPORT = 1
|
||||
.const D018 = $d018
|
||||
@ -5430,8 +5408,6 @@ FINAL SYMBOL TABLE
|
||||
(label) @end
|
||||
(byte*) CHARGEN
|
||||
(const byte*) CHARGEN#0 CHARGEN = ((byte*))(word) 53248
|
||||
(byte*) CHARSET
|
||||
(const byte*) CHARSET#0 CHARSET = ((byte*))(word/signed word) 8192
|
||||
(byte*) CHARSET4
|
||||
(const byte*) CHARSET4#0 CHARSET4 = ((byte*))(word/signed word) 10240
|
||||
(byte*) D018
|
||||
@ -5541,7 +5517,6 @@ FINAL CODE
|
||||
.pc = $80d "Program"
|
||||
//SEG1 Global Constants & labels
|
||||
.const SCREEN = $400
|
||||
.const CHARSET = $2000
|
||||
.const CHARGEN = $d000
|
||||
.const PROCPORT = 1
|
||||
.const D018 = $d018
|
||||
|
@ -3,8 +3,6 @@
|
||||
(label) @end
|
||||
(byte*) CHARGEN
|
||||
(const byte*) CHARGEN#0 CHARGEN = ((byte*))(word) 53248
|
||||
(byte*) CHARSET
|
||||
(const byte*) CHARSET#0 CHARSET = ((byte*))(word/signed word) 8192
|
||||
(byte*) CHARSET4
|
||||
(const byte*) CHARSET4#0 CHARSET4 = ((byte*))(word/signed word) 10240
|
||||
(byte*) D018
|
||||
|
@ -106,6 +106,9 @@ print::@return: scope:[print] from print::@3
|
||||
@end: scope:[] from @2
|
||||
|
||||
Creating constant string variable for inline (const byte[]) main::msg "message 3 @"
|
||||
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
|
||||
Removing empty block print::@4
|
||||
Removing empty block print::@3
|
||||
Removing empty block print::@5
|
||||
@ -116,9 +119,9 @@ CONTROL FLOW GRAPH
|
||||
to:@1
|
||||
main: scope:[main] from
|
||||
(byte[]) main::msg2 ← (string) "message 2 @"
|
||||
(void~) main::$0 ← call print (byte[]) msg1
|
||||
(void~) main::$1 ← call print (byte[]) main::msg2
|
||||
(void~) main::$2 ← call print (const byte[]) main::msg
|
||||
call print (byte[]) msg1
|
||||
call print (byte[]) main::msg2
|
||||
call print (const byte[]) main::msg
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main
|
||||
return
|
||||
|
@ -93,6 +93,10 @@ incw2::@return: scope:[incw2] from incw2
|
||||
to:@end
|
||||
@end: scope:[] from @3
|
||||
|
||||
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
|
||||
Removing empty block @1
|
||||
Removing empty block @2
|
||||
CONTROL FLOW GRAPH
|
||||
@ -101,10 +105,10 @@ CONTROL FLOW GRAPH
|
||||
(word) w2 ← (byte/signed byte/word/signed word) 0
|
||||
to:@3
|
||||
main: scope:[main] from
|
||||
(void~) main::$0 ← call incw1
|
||||
(void~) main::$1 ← call incw2
|
||||
(void~) main::$2 ← call incw1
|
||||
(void~) main::$3 ← call incw2
|
||||
call incw1
|
||||
call incw2
|
||||
call incw1
|
||||
call incw2
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main
|
||||
return
|
||||
|
@ -94,6 +94,7 @@ nest::@return: scope:[nest] from nest::@2
|
||||
to:@end
|
||||
@end: scope:[] from @2
|
||||
|
||||
Eliminating unused variable - keeping the call (void~) main::$0
|
||||
Removing empty block main::@2
|
||||
Removing empty block @1
|
||||
Removing empty block nest::@2
|
||||
@ -105,7 +106,7 @@ main: scope:[main] from
|
||||
(byte) main::i ← (byte/signed byte/word/signed word) 100
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(void~) main::$0 ← call nest
|
||||
call nest
|
||||
(byte) main::i ← -- (byte) main::i
|
||||
(boolean~) main::$1 ← (byte) main::i > (byte/signed byte/word/signed word) 0
|
||||
if((boolean~) main::$1) goto main::@1
|
||||
|
@ -194,6 +194,8 @@ nest2::@return: scope:[nest2] from nest2::@4
|
||||
to:@end
|
||||
@end: scope:[] from @3
|
||||
|
||||
Eliminating unused variable - keeping the call (void~) main::$0
|
||||
Eliminating unused variable - keeping the call (void~) nest1::$0
|
||||
Removing empty block main::@4
|
||||
Removing empty block @1
|
||||
Removing empty block nest1::@4
|
||||
@ -210,7 +212,7 @@ main::@1: scope:[main] from main main::@3
|
||||
(byte) main::j ← (byte/signed byte/word/signed word) 100
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1 main::@2
|
||||
(void~) main::$0 ← call nest1
|
||||
call nest1
|
||||
(byte) main::j ← -- (byte) main::j
|
||||
(boolean~) main::$1 ← (byte) main::j > (byte/signed byte/word/signed word) 0
|
||||
if((boolean~) main::$1) goto main::@2
|
||||
@ -230,7 +232,7 @@ nest1::@1: scope:[nest1] from nest1 nest1::@3
|
||||
(byte) nest1::j ← (byte/signed byte/word/signed word) 100
|
||||
to:nest1::@2
|
||||
nest1::@2: scope:[nest1] from nest1::@1 nest1::@2
|
||||
(void~) nest1::$0 ← call nest2
|
||||
call nest2
|
||||
(byte) nest1::j ← -- (byte) nest1::j
|
||||
(boolean~) nest1::$1 ← (byte) nest1::j > (byte/signed byte/word/signed word) 0
|
||||
if((boolean~) nest1::$1) goto nest1::@2
|
||||
|
@ -78,6 +78,8 @@ inccnt::@return: scope:[inccnt] from inccnt
|
||||
to:@end
|
||||
@end: scope:[] from @2
|
||||
|
||||
Eliminating unused variable - keeping the call (void~) main::$0
|
||||
Eliminating unused variable - keeping the call (void~) main::$1
|
||||
Removing empty block @1
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
@ -85,10 +87,10 @@ CONTROL FLOW GRAPH
|
||||
(byte[256]) SCREEN ← ((byte*)) (word/signed word) 1024
|
||||
to:@2
|
||||
main: scope:[main] from
|
||||
(void~) main::$0 ← call inccnt
|
||||
call inccnt
|
||||
*((byte[256]) SCREEN + (byte/signed byte/word/signed word) 0) ← (byte) cnt
|
||||
(byte) cnt ← ++ (byte) cnt
|
||||
(void~) main::$1 ← call inccnt
|
||||
call inccnt
|
||||
(byte) cnt ← ++ (byte) cnt
|
||||
*((byte[256]) SCREEN + (byte/signed byte/word/signed word) 1) ← (byte) cnt
|
||||
to:main::@return
|
||||
|
@ -124,6 +124,10 @@ plot::@return: scope:[plot] from plot
|
||||
to:@end
|
||||
@end: scope:[] from @3
|
||||
|
||||
Eliminating unused variable - keeping the call (void~) main::$0
|
||||
Eliminating unused variable - keeping the call (void~) main::$2
|
||||
Eliminating unused variable - keeping the call (void~) line::$0
|
||||
Eliminating unused variable - keeping the call (void~) line::$2
|
||||
Removing empty block main::@4
|
||||
Removing empty block @1
|
||||
Removing empty block @2
|
||||
@ -135,7 +139,7 @@ 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
|
||||
(void~) main::$0 ← call line (byte) main::i
|
||||
call line (byte) main::i
|
||||
(byte) main::i ← ++ (byte) main::i
|
||||
(boolean~) main::$1 ← (byte) main::i != (byte/signed byte/word/signed word) 9
|
||||
if((boolean~) main::$1) goto main::@1
|
||||
@ -144,7 +148,7 @@ main::@3: scope:[main] from main::@1
|
||||
(byte) main::j ← (byte/signed byte/word/signed word) 10
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@2 main::@3
|
||||
(void~) main::$2 ← call line (byte) main::j
|
||||
call line (byte) main::j
|
||||
(byte) main::j ← ++ (byte) main::j
|
||||
(boolean~) main::$3 ← (byte) main::j != (byte/signed byte/word/signed word) 19
|
||||
if((boolean~) main::$3) goto main::@2
|
||||
@ -153,9 +157,9 @@ main::@return: scope:[main] from main::@2
|
||||
return
|
||||
to:@return
|
||||
line: scope:[line] from
|
||||
(void~) line::$0 ← call plot (byte) line::l
|
||||
call plot (byte) line::l
|
||||
(byte~) line::$1 ← (byte) line::l + (byte/signed byte/word/signed word) 20
|
||||
(void~) line::$2 ← call plot (byte~) line::$1
|
||||
call plot (byte~) line::$1
|
||||
to:line::@return
|
||||
line::@return: scope:[line] from line
|
||||
return
|
||||
|
@ -119,6 +119,9 @@ plot::@return: scope:[plot] from plot
|
||||
to:@end
|
||||
@end: scope:[] from @2
|
||||
|
||||
Eliminating unused variable - keeping the call (void~) main::$0
|
||||
Eliminating unused variable - keeping the call (void~) main::$2
|
||||
Eliminating unused variable - keeping the call (void~) main::$4
|
||||
Removing empty block main::@6
|
||||
Removing empty block @1
|
||||
CONTROL FLOW GRAPH
|
||||
@ -129,7 +132,7 @@ 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
|
||||
(void~) main::$0 ← call plot (byte) main::i
|
||||
call plot (byte) main::i
|
||||
(byte) main::i ← ++ (byte) main::i
|
||||
(boolean~) main::$1 ← (byte) main::i != (byte/signed byte/word/signed word) 11
|
||||
if((boolean~) main::$1) goto main::@1
|
||||
@ -138,7 +141,7 @@ main::@4: scope:[main] from main::@1
|
||||
(byte) main::j ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@2 main::@4
|
||||
(void~) main::$2 ← call plot (byte) main::j
|
||||
call plot (byte) main::j
|
||||
(byte) main::j ← ++ (byte) main::j
|
||||
(boolean~) main::$3 ← (byte) main::j != (byte/signed byte/word/signed word) 11
|
||||
if((boolean~) main::$3) goto main::@2
|
||||
@ -147,7 +150,7 @@ main::@5: scope:[main] from main::@2
|
||||
(byte) main::k ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@3
|
||||
main::@3: scope:[main] from main::@3 main::@5
|
||||
(void~) main::$4 ← call plot (byte) main::k
|
||||
call plot (byte) main::k
|
||||
(byte) main::k ← ++ (byte) main::k
|
||||
(boolean~) main::$5 ← (byte) main::k != (byte/signed byte/word/signed word) 11
|
||||
if((boolean~) main::$5) goto main::@3
|
||||
|
@ -85,6 +85,9 @@ ln::@return: scope:[ln] from ln
|
||||
to:@end
|
||||
@end: scope:[] from @2
|
||||
|
||||
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
|
||||
Removing empty block @1
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
@ -92,11 +95,11 @@ CONTROL FLOW GRAPH
|
||||
(byte) char ← (byte) line
|
||||
to:@2
|
||||
main: scope:[main] from
|
||||
(void~) main::$0 ← call ln
|
||||
call ln
|
||||
(byte) char ← ++ (byte) char
|
||||
(void~) main::$1 ← call ln
|
||||
call ln
|
||||
(byte) char ← ++ (byte) char
|
||||
(void~) main::$2 ← call ln
|
||||
call ln
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main
|
||||
return
|
||||
|
@ -166,6 +166,12 @@ print_ln::@return: scope:[print_ln] from print_ln::@2
|
||||
to:@end
|
||||
@end: scope:[] from @3
|
||||
|
||||
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 - keeping the call (void~) main::$4
|
||||
Eliminating unused variable - keeping the call (void~) main::$5
|
||||
Removing empty block print_str::@4
|
||||
Removing empty block print_str::@3
|
||||
Removing empty block print_str::@5
|
||||
@ -178,12 +184,12 @@ CONTROL FLOW GRAPH
|
||||
(byte[]) msg3 ← (string) "hello 2017! @"
|
||||
to:@1
|
||||
main: scope:[main] from
|
||||
(void~) main::$0 ← call print_str (byte[]) msg
|
||||
(void~) main::$1 ← call print_ln
|
||||
(void~) main::$2 ← call print_str (byte[]) msg2
|
||||
(void~) main::$3 ← call print_ln
|
||||
(void~) main::$4 ← call print_str (byte[]) msg3
|
||||
(void~) main::$5 ← call print_ln
|
||||
call print_str (byte[]) msg
|
||||
call print_ln
|
||||
call print_str (byte[]) msg2
|
||||
call print_ln
|
||||
call print_str (byte[]) msg3
|
||||
call print_ln
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main
|
||||
return
|
||||
|
@ -9,7 +9,6 @@ main: {
|
||||
.label _2 = 2
|
||||
.label _9 = 2
|
||||
.label _11 = 4
|
||||
lda screen+$50
|
||||
ldx #0
|
||||
b1:
|
||||
txa
|
||||
|
@ -8,7 +8,7 @@
|
||||
@end: scope:[] from @1
|
||||
[3] phi() [ ] ( )
|
||||
main: scope:[main] from @1
|
||||
[4] (byte) main::a#0 ← *((const byte*) main::screen#0+(byte/signed byte/word/signed word) 80) [ ] ( main:2 [ ] )
|
||||
[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 ] )
|
||||
|
@ -180,13 +180,19 @@ main::@return: scope:[main] from main::@4
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
|
||||
Eliminating unused variable (byte) main::a and assignment (byte) main::a ← *((byte*~) main::$0)
|
||||
Eliminating unused variable (byte*~) main::$14 and assignment (byte*~) main::$14 ← ((byte*)) (word) 53280
|
||||
Eliminating unused variable (byte*~) main::$15 and assignment (byte*~) main::$15 ← ((byte*)) (word) 53280
|
||||
Eliminating unused variable (byte*~) main::$19 and assignment (byte*~) main::$19 ← ((byte*)) (word~) main::$18
|
||||
Eliminating unused variable (byte*~) main::$21 and assignment (byte*~) main::$21 ← ((byte*)) (word~) main::$20
|
||||
Eliminating unused variable (byte*~) main::$0 and assignment (byte*~) main::$0 ← (byte*) main::screen + (byte/signed byte/word/signed word) 80
|
||||
Eliminating unused variable (word~) main::$18 and assignment (word~) main::$18 ← (word) 53248 + (byte/signed byte/word/signed word) 33
|
||||
Eliminating unused variable (word~) main::$20 and assignment (word~) main::$20 ← (word) 53248 + (byte/signed byte/word/signed word) 33
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
to:@1
|
||||
main: scope:[main] from
|
||||
(byte*) main::screen ← ((byte*)) (word/signed word) 1024
|
||||
(byte*~) main::$0 ← (byte*) main::screen + (byte/signed byte/word/signed word) 80
|
||||
(byte) main::a ← *((byte*~) main::$0)
|
||||
(byte) main::i ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
@ -220,15 +226,9 @@ main::@2: scope:[main] from main::@2 main::@3
|
||||
main::@4: scope:[main] from main::@2
|
||||
(byte*~) main::$13 ← ((byte*)) (word) 53280
|
||||
*((byte*~) main::$13) ← ++ *((byte*~) main::$13)
|
||||
(byte*~) main::$14 ← ((byte*)) (word) 53280
|
||||
(byte*~) main::$15 ← ((byte*)) (word) 53280
|
||||
(word~) main::$16 ← (word) 53248 + (byte/signed byte/word/signed word) 33
|
||||
(byte*~) main::$17 ← ((byte*)) (word~) main::$16
|
||||
*((byte*~) main::$17) ← -- *((byte*~) main::$17)
|
||||
(word~) main::$18 ← (word) 53248 + (byte/signed byte/word/signed word) 33
|
||||
(byte*~) main::$19 ← ((byte*)) (word~) main::$18
|
||||
(word~) main::$20 ← (word) 53248 + (byte/signed byte/word/signed word) 33
|
||||
(byte*~) main::$21 ← ((byte*)) (word~) main::$20
|
||||
(byte*) main::BGCOL ← ((byte*)) (word) 53280
|
||||
*((byte*) main::BGCOL) ← ++ *((byte*) main::BGCOL)
|
||||
to:main::@return
|
||||
@ -247,8 +247,6 @@ CONTROL FLOW GRAPH WITH ASSIGNMENT CALL
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
(byte*) main::screen ← ((byte*)) (word/signed word) 1024
|
||||
(byte*~) main::$0 ← (byte*) main::screen + (byte/signed byte/word/signed word) 80
|
||||
(byte) main::a ← *((byte*~) main::$0)
|
||||
(byte) main::i ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
@ -282,15 +280,9 @@ main::@2: scope:[main] from main::@2 main::@3
|
||||
main::@4: scope:[main] from main::@2
|
||||
(byte*~) main::$13 ← ((byte*)) (word) 53280
|
||||
*((byte*~) main::$13) ← ++ *((byte*~) main::$13)
|
||||
(byte*~) main::$14 ← ((byte*)) (word) 53280
|
||||
(byte*~) main::$15 ← ((byte*)) (word) 53280
|
||||
(word~) main::$16 ← (word) 53248 + (byte/signed byte/word/signed word) 33
|
||||
(byte*~) main::$17 ← ((byte*)) (word~) main::$16
|
||||
*((byte*~) main::$17) ← -- *((byte*~) main::$17)
|
||||
(word~) main::$18 ← (word) 53248 + (byte/signed byte/word/signed word) 33
|
||||
(byte*~) main::$19 ← ((byte*)) (word~) main::$18
|
||||
(word~) main::$20 ← (word) 53248 + (byte/signed byte/word/signed word) 33
|
||||
(byte*~) main::$21 ← ((byte*)) (word~) main::$20
|
||||
(byte*) main::BGCOL ← ((byte*)) (word) 53280
|
||||
*((byte*) main::BGCOL) ← ++ *((byte*) main::BGCOL)
|
||||
to:main::@return
|
||||
@ -310,8 +302,6 @@ CONTROL FLOW GRAPH SSA
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
(byte*) main::screen#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte*~) main::$0 ← (byte*) main::screen#0 + (byte/signed byte/word/signed word) 80
|
||||
(byte) main::a#0 ← *((byte*~) main::$0)
|
||||
(byte) main::i#0 ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
@ -350,15 +340,9 @@ main::@2: scope:[main] from main::@2 main::@3
|
||||
main::@4: scope:[main] from main::@2
|
||||
(byte*~) main::$13 ← ((byte*)) (word) 53280
|
||||
*((byte*~) main::$13) ← ++ *((byte*~) main::$13)
|
||||
(byte*~) main::$14 ← ((byte*)) (word) 53280
|
||||
(byte*~) main::$15 ← ((byte*)) (word) 53280
|
||||
(word~) main::$16 ← (word) 53248 + (byte/signed byte/word/signed word) 33
|
||||
(byte*~) main::$17 ← ((byte*)) (word~) main::$16
|
||||
*((byte*~) main::$17) ← -- *((byte*~) main::$17)
|
||||
(word~) main::$18 ← (word) 53248 + (byte/signed byte/word/signed word) 33
|
||||
(byte*~) main::$19 ← ((byte*)) (word~) main::$18
|
||||
(word~) main::$20 ← (word) 53248 + (byte/signed byte/word/signed word) 33
|
||||
(byte*~) main::$21 ← ((byte*)) (word~) main::$20
|
||||
(byte*) main::BGCOL#0 ← ((byte*)) (word) 53280
|
||||
*((byte*) main::BGCOL#0) ← ++ *((byte*) main::BGCOL#0)
|
||||
to:main::@return
|
||||
@ -377,8 +361,6 @@ CONTROL FLOW GRAPH WITH ASSIGNMENT CALL & RETURN
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
(byte*) main::screen#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte*~) main::$0 ← (byte*) main::screen#0 + (byte/signed byte/word/signed word) 80
|
||||
(byte) main::a#0 ← *((byte*~) main::$0)
|
||||
(byte) main::i#0 ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
@ -417,15 +399,9 @@ main::@2: scope:[main] from main::@2 main::@3
|
||||
main::@4: scope:[main] from main::@2
|
||||
(byte*~) main::$13 ← ((byte*)) (word) 53280
|
||||
*((byte*~) main::$13) ← ++ *((byte*~) main::$13)
|
||||
(byte*~) main::$14 ← ((byte*)) (word) 53280
|
||||
(byte*~) main::$15 ← ((byte*)) (word) 53280
|
||||
(word~) main::$16 ← (word) 53248 + (byte/signed byte/word/signed word) 33
|
||||
(byte*~) main::$17 ← ((byte*)) (word~) main::$16
|
||||
*((byte*~) main::$17) ← -- *((byte*~) main::$17)
|
||||
(word~) main::$18 ← (word) 53248 + (byte/signed byte/word/signed word) 33
|
||||
(byte*~) main::$19 ← ((byte*)) (word~) main::$18
|
||||
(word~) main::$20 ← (word) 53248 + (byte/signed byte/word/signed word) 33
|
||||
(byte*~) main::$21 ← ((byte*)) (word~) main::$20
|
||||
(byte*) main::BGCOL#0 ← ((byte*)) (word) 53280
|
||||
*((byte*) main::BGCOL#0) ← ++ *((byte*) main::BGCOL#0)
|
||||
to:main::@return
|
||||
@ -445,21 +421,14 @@ INITIAL SSA SYMBOL TABLE
|
||||
(label) @begin
|
||||
(label) @end
|
||||
(void()) main()
|
||||
(byte*~) main::$0
|
||||
(byte*~) main::$1
|
||||
(byte*~) main::$10
|
||||
(byte*~) main::$11
|
||||
(boolean~) main::$12
|
||||
(byte*~) main::$13
|
||||
(byte*~) main::$14
|
||||
(byte*~) main::$15
|
||||
(word~) main::$16
|
||||
(byte*~) main::$17
|
||||
(word~) main::$18
|
||||
(byte*~) main::$19
|
||||
(byte*~) main::$2
|
||||
(word~) main::$20
|
||||
(byte*~) main::$21
|
||||
(boolean~) main::$3
|
||||
(byte*~) main::$4
|
||||
(byte*~) main::$5
|
||||
@ -474,8 +443,6 @@ INITIAL SSA SYMBOL TABLE
|
||||
(label) main::@return
|
||||
(byte*) main::BGCOL
|
||||
(byte*) main::BGCOL#0
|
||||
(byte) main::a
|
||||
(byte) main::a#0
|
||||
(byte) main::i
|
||||
(byte) main::i#0
|
||||
(byte) main::i#1
|
||||
@ -499,8 +466,6 @@ CONTROL FLOW GRAPH
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
(byte*) main::screen#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte*~) main::$0 ← (byte*) main::screen#0 + (byte/signed byte/word/signed word) 80
|
||||
(byte) main::a#0 ← *((byte*~) main::$0)
|
||||
(byte) main::i#0 ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
@ -539,15 +504,9 @@ main::@2: scope:[main] from main::@2 main::@3
|
||||
main::@4: scope:[main] from main::@2
|
||||
(byte*~) main::$13 ← ((byte*)) (word) 53280
|
||||
*((byte*~) main::$13) ← ++ *((byte*~) main::$13)
|
||||
(byte*~) main::$14 ← ((byte*)) (word) 53280
|
||||
(byte*~) main::$15 ← ((byte*)) (word) 53280
|
||||
(word~) main::$16 ← (word) 53248 + (byte/signed byte/word/signed word) 33
|
||||
(byte*~) main::$17 ← ((byte*)) (word~) main::$16
|
||||
*((byte*~) main::$17) ← -- *((byte*~) main::$17)
|
||||
(word~) main::$18 ← (word) 53248 + (byte/signed byte/word/signed word) 33
|
||||
(byte*~) main::$19 ← ((byte*)) (word~) main::$18
|
||||
(word~) main::$20 ← (word) 53248 + (byte/signed byte/word/signed word) 33
|
||||
(byte*~) main::$21 ← ((byte*)) (word~) main::$20
|
||||
(byte*) main::BGCOL#0 ← ((byte*)) (word) 53280
|
||||
*((byte*) main::BGCOL#0) ← ++ *((byte*) main::BGCOL#0)
|
||||
to:main::@return
|
||||
@ -568,8 +527,6 @@ CONTROL FLOW GRAPH
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
(byte*) main::screen#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte*~) main::$0 ← (byte*) main::screen#0 + (byte/signed byte/word/signed word) 80
|
||||
(byte) main::a#0 ← *((byte*~) main::$0)
|
||||
(byte) main::i#0 ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
@ -606,15 +563,9 @@ main::@2: scope:[main] from main::@2 main::@3
|
||||
main::@4: scope:[main] from main::@2
|
||||
(byte*~) main::$13 ← ((byte*)) (word) 53280
|
||||
*((byte*~) main::$13) ← ++ *((byte*~) main::$13)
|
||||
(byte*~) main::$14 ← ((byte*)) (word) 53280
|
||||
(byte*~) main::$15 ← ((byte*)) (word) 53280
|
||||
(word~) main::$16 ← (word) 53248 + (byte/signed byte/word/signed word) 33
|
||||
(byte*~) main::$17 ← ((byte*)) (word~) main::$16
|
||||
*((byte*~) main::$17) ← -- *((byte*~) main::$17)
|
||||
(word~) main::$18 ← (word) 53248 + (byte/signed byte/word/signed word) 33
|
||||
(byte*~) main::$19 ← ((byte*)) (word~) main::$18
|
||||
(word~) main::$20 ← (word) 53248 + (byte/signed byte/word/signed word) 33
|
||||
(byte*~) main::$21 ← ((byte*)) (word~) main::$20
|
||||
(byte*) main::BGCOL#0 ← ((byte*)) (word) 53280
|
||||
*((byte*) main::BGCOL#0) ← ++ *((byte*) main::BGCOL#0)
|
||||
to:main::@return
|
||||
@ -635,8 +586,6 @@ CONTROL FLOW GRAPH
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
(byte*) main::screen#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte*~) main::$0 ← (byte*) main::screen#0 + (byte/signed byte/word/signed word) 80
|
||||
(byte) main::a#0 ← *((byte*~) main::$0)
|
||||
(byte) main::i#0 ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
@ -673,15 +622,9 @@ main::@2: scope:[main] from main::@2 main::@3
|
||||
main::@4: scope:[main] from main::@2
|
||||
(byte*~) main::$13 ← ((byte*)) (word) 53280
|
||||
*((byte*~) main::$13) ← ++ *((byte*~) main::$13)
|
||||
(byte*~) main::$14 ← ((byte*)) (word) 53280
|
||||
(byte*~) main::$15 ← ((byte*)) (word) 53280
|
||||
(word~) main::$16 ← (word) 53248 + (byte/signed byte/word/signed word) 33
|
||||
(byte*~) main::$17 ← ((byte*)) (word~) main::$16
|
||||
*((byte*~) main::$17) ← -- *((byte*~) main::$17)
|
||||
(word~) main::$18 ← (word) 53248 + (byte/signed byte/word/signed word) 33
|
||||
(byte*~) main::$19 ← ((byte*)) (word~) main::$18
|
||||
(word~) main::$20 ← (word) 53248 + (byte/signed byte/word/signed word) 33
|
||||
(byte*~) main::$21 ← ((byte*)) (word~) main::$20
|
||||
(byte*) main::BGCOL#0 ← ((byte*)) (word) 53280
|
||||
*((byte*) main::BGCOL#0) ← ++ *((byte*) main::BGCOL#0)
|
||||
to:main::@return
|
||||
@ -701,8 +644,6 @@ CONTROL FLOW GRAPH
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
(byte*) main::screen#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte*~) main::$0 ← (byte*) main::screen#0 + (byte/signed byte/word/signed word) 80
|
||||
(byte) main::a#0 ← *((byte*~) main::$0)
|
||||
(byte) main::i#0 ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
@ -737,15 +678,9 @@ main::@2: scope:[main] from main::@2 main::@3
|
||||
main::@4: scope:[main] from main::@2
|
||||
(byte*~) main::$13 ← ((byte*)) (word) 53280
|
||||
*((byte*~) main::$13) ← ++ *((byte*~) main::$13)
|
||||
(byte*~) main::$14 ← ((byte*)) (word) 53280
|
||||
(byte*~) main::$15 ← ((byte*)) (word) 53280
|
||||
(word~) main::$16 ← (word) 53248 + (byte/signed byte/word/signed word) 33
|
||||
(byte*~) main::$17 ← ((byte*)) (word~) main::$16
|
||||
*((byte*~) main::$17) ← -- *((byte*~) main::$17)
|
||||
(word~) main::$18 ← (word) 53248 + (byte/signed byte/word/signed word) 33
|
||||
(byte*~) main::$19 ← ((byte*)) (word~) main::$18
|
||||
(word~) main::$20 ← (word) 53248 + (byte/signed byte/word/signed word) 33
|
||||
(byte*~) main::$21 ← ((byte*)) (word~) main::$20
|
||||
(byte*) main::BGCOL#0 ← ((byte*)) (word) 53280
|
||||
*((byte*) main::BGCOL#0) ← ++ *((byte*) main::BGCOL#0)
|
||||
to:main::@return
|
||||
@ -765,8 +700,6 @@ CONTROL FLOW GRAPH
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
(byte*) main::screen#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte*~) main::$0 ← (byte*) main::screen#0 + (byte/signed byte/word/signed word) 80
|
||||
(byte) main::a#0 ← *((byte*~) main::$0)
|
||||
(byte) main::i#0 ← (byte/signed byte/word/signed word) 0
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
@ -799,15 +732,9 @@ main::@2: scope:[main] from main::@2 main::@3
|
||||
main::@4: scope:[main] from main::@2
|
||||
(byte*~) main::$13 ← ((byte*)) (word) 53280
|
||||
*((byte*~) main::$13) ← ++ *((byte*~) main::$13)
|
||||
(byte*~) main::$14 ← ((byte*)) (word) 53280
|
||||
(byte*~) main::$15 ← ((byte*)) (word) 53280
|
||||
(word~) main::$16 ← (word) 53248 + (byte/signed byte/word/signed word) 33
|
||||
(byte*~) main::$17 ← ((byte*)) (word~) main::$16
|
||||
*((byte*~) main::$17) ← -- *((byte*~) main::$17)
|
||||
(word~) main::$18 ← (word) 53248 + (byte/signed byte/word/signed word) 33
|
||||
(byte*~) main::$19 ← ((byte*)) (word~) main::$18
|
||||
(word~) main::$20 ← (word) 53248 + (byte/signed byte/word/signed word) 33
|
||||
(byte*~) main::$21 ← ((byte*)) (word~) main::$20
|
||||
(byte*) main::BGCOL#0 ← ((byte*)) (word) 53280
|
||||
*((byte*) main::BGCOL#0) ← ++ *((byte*) main::BGCOL#0)
|
||||
to:main::@return
|
||||
@ -823,19 +750,13 @@ Constant (const byte*) main::screen#0 = ((byte*))1024
|
||||
Constant (const byte) main::i#0 = 0
|
||||
Constant (const byte) main::j#0 = 0
|
||||
Constant (const byte*) main::$13 = ((byte*))53280
|
||||
Constant (const byte*) main::$14 = ((byte*))53280
|
||||
Constant (const byte*) main::$15 = ((byte*))53280
|
||||
Constant (const word) main::$16 = 53248+33
|
||||
Constant (const word) main::$18 = 53248+33
|
||||
Constant (const word) main::$20 = 53248+33
|
||||
Constant (const byte*) main::BGCOL#0 = ((byte*))53280
|
||||
Succesful SSA optimization Pass2ConstantIdentification
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
(byte*~) main::$0 ← (const byte*) main::screen#0 + (byte/signed byte/word/signed word) 80
|
||||
(byte) main::a#0 ← *((byte*~) main::$0)
|
||||
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 )
|
||||
@ -867,8 +788,6 @@ main::@4: scope:[main] from main::@2
|
||||
*((const byte*) main::$13) ← ++ *((const byte*) main::$13)
|
||||
(byte*~) main::$17 ← ((byte*)) (const word) main::$16
|
||||
*((byte*~) main::$17) ← -- *((byte*~) main::$17)
|
||||
(byte*~) main::$19 ← ((byte*)) (const word) main::$18
|
||||
(byte*~) main::$21 ← ((byte*)) (const word) main::$20
|
||||
*((const byte*) main::BGCOL#0) ← ++ *((const byte*) main::BGCOL#0)
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@4
|
||||
@ -879,7 +798,6 @@ main::@return: scope:[main] from main::@4
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
|
||||
Constant (const byte*) main::$0 = main::screen#0+80
|
||||
Constant (const byte*) main::$1 = main::screen#0+40
|
||||
Constant (const byte*) main::sc2#0 = main::screen#0+81
|
||||
Constant (const byte*) main::$5 = main::screen#0+121
|
||||
@ -888,14 +806,11 @@ Constant (const byte*) main::$7 = main::screen#0+122
|
||||
Constant (const byte*) main::$8 = main::screen#0+160
|
||||
Constant (const byte*) main::$10 = main::screen#0+200
|
||||
Constant (const byte*) main::$17 = ((byte*))main::$16
|
||||
Constant (const byte*) main::$19 = ((byte*))main::$18
|
||||
Constant (const byte*) main::$21 = ((byte*))main::$20
|
||||
Succesful SSA optimization Pass2ConstantIdentification
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
(byte) main::a#0 ← *((const byte*) main::$0)
|
||||
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 )
|
||||
@ -941,30 +856,22 @@ 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::j#0
|
||||
Inlining constant with var siblings (const byte) main::j#0
|
||||
Constant inlined main::$13 = ((byte*))(word) 53280
|
||||
Constant inlined main::$14 = ((byte*))(word) 53280
|
||||
Constant inlined main::$15 = ((byte*))(word) 53280
|
||||
Constant inlined main::$20 = (word) 53248+(byte/signed byte/word/signed word) 33
|
||||
Constant inlined main::$10 = (const byte*) main::screen#0+(byte/word/signed word) 200
|
||||
Constant inlined main::$21 = ((byte*))(word) 53248+(byte/signed byte/word/signed word) 33
|
||||
Constant inlined main::$16 = (word) 53248+(byte/signed byte/word/signed word) 33
|
||||
Constant inlined main::$1 = (const byte*) main::screen#0+(byte/signed byte/word/signed word) 40
|
||||
Constant inlined main::$17 = ((byte*))(word) 53248+(byte/signed byte/word/signed word) 33
|
||||
Constant inlined main::$18 = (word) 53248+(byte/signed byte/word/signed word) 33
|
||||
Constant inlined main::$0 = (const byte*) main::screen#0+(byte/signed byte/word/signed word) 80
|
||||
Constant inlined main::$19 = ((byte*))(word) 53248+(byte/signed byte/word/signed word) 33
|
||||
Constant inlined main::$5 = (const byte*) main::screen#0+(byte/signed byte/word/signed word) 121
|
||||
Constant inlined main::i#0 = (byte/signed byte/word/signed word) 0
|
||||
Constant inlined main::$13 = ((byte*))(word) 53280
|
||||
Constant inlined main::$6 = (const byte*) main::screen#0+(byte/signed byte/word/signed word) 82
|
||||
Constant inlined main::j#0 = (byte/signed byte/word/signed word) 0
|
||||
Constant inlined main::$7 = (const byte*) main::screen#0+(byte/signed byte/word/signed word) 122
|
||||
Constant inlined main::$10 = (const byte*) main::screen#0+(byte/word/signed word) 200
|
||||
Constant inlined main::$8 = (const byte*) main::screen#0+(byte/word/signed word) 160
|
||||
Succesful SSA optimization Pass2ConstantInlining
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
(byte) main::a#0 ← *((const byte*) main::screen#0+(byte/signed byte/word/signed word) 80)
|
||||
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 )
|
||||
@ -1013,8 +920,6 @@ FINAL SYMBOL TABLE
|
||||
(label) main::@return
|
||||
(byte*) main::BGCOL
|
||||
(const byte*) main::BGCOL#0 = ((byte*))(word) 53280
|
||||
(byte) main::a
|
||||
(byte) main::a#0
|
||||
(byte) main::i
|
||||
(byte) main::i#1
|
||||
(byte) main::i#2
|
||||
@ -1038,7 +943,6 @@ CONTROL FLOW GRAPH - PHI LIFTED
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
main: scope:[main] from @1
|
||||
(byte) main::a#0 ← *((const byte*) main::screen#0+(byte/signed byte/word/signed word) 80)
|
||||
to:main::@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#3 )
|
||||
@ -1077,6 +981,7 @@ main::@5: scope:[main] from 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
|
||||
|
||||
@ -1094,7 +999,7 @@ CONTROL FLOW GRAPH - LIVE RANGES FOUND
|
||||
@end: scope:[] from @1
|
||||
[3] phi() [ ]
|
||||
main: scope:[main] from @1
|
||||
[4] (byte) main::a#0 ← *((const byte*) main::screen#0+(byte/signed byte/word/signed word) 80) [ ]
|
||||
[4] phi() [ ]
|
||||
to:main::@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#3 ) [ main::i#2 ]
|
||||
@ -1140,6 +1045,7 @@ Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@2 main::@4 m
|
||||
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...
|
||||
Propagating live ranges...
|
||||
@ -1154,7 +1060,7 @@ CONTROL FLOW GRAPH - BEFORE EFFECTIVE LIVE RANGES
|
||||
@end: scope:[] from @1
|
||||
[3] phi() [ ]
|
||||
main: scope:[main] from @1
|
||||
[4] (byte) main::a#0 ← *((const byte*) main::screen#0+(byte/signed byte/word/signed word) 80) [ ]
|
||||
[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 ]
|
||||
@ -1195,7 +1101,7 @@ CONTROL FLOW GRAPH - PHI MEM COALESCED
|
||||
@end: scope:[] from @1
|
||||
[3] phi() [ ] ( )
|
||||
main: scope:[main] from @1
|
||||
[4] (byte) main::a#0 ← *((const byte*) main::screen#0+(byte/signed byte/word/signed word) 80) [ ] ( main:2 [ ] )
|
||||
[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 ] )
|
||||
@ -1259,8 +1165,6 @@ VARIABLE REGISTER WEIGHTS
|
||||
(byte*~) main::$2 22.0
|
||||
(byte*~) main::$9 11.0
|
||||
(byte*) main::BGCOL
|
||||
(byte) main::a
|
||||
(byte) main::a#0 20.0
|
||||
(byte) main::i
|
||||
(byte) main::i#1 16.5
|
||||
(byte) main::i#2 14.666666666666666
|
||||
@ -1273,23 +1177,20 @@ VARIABLE REGISTER WEIGHTS
|
||||
Initial phi equivalence classes
|
||||
[ main::i#2 main::i#1 ]
|
||||
[ main::j#2 main::j#1 ]
|
||||
Added variable main::a#0 to zero page equivalence class [ main::a#0 ]
|
||||
Added variable main::$2 to zero page equivalence class [ main::$2 ]
|
||||
Added variable main::$9 to zero page equivalence class [ main::$9 ]
|
||||
Added variable main::$11 to zero page equivalence class [ main::$11 ]
|
||||
Complete equivalence classes
|
||||
[ main::i#2 main::i#1 ]
|
||||
[ main::j#2 main::j#1 ]
|
||||
[ main::a#0 ]
|
||||
[ main::$2 ]
|
||||
[ main::$9 ]
|
||||
[ main::$11 ]
|
||||
Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
|
||||
Allocated zp ZP_BYTE:3 [ main::j#2 main::j#1 ]
|
||||
Allocated zp ZP_BYTE:4 [ main::a#0 ]
|
||||
Allocated zp ZP_PTR_BYTE:5 [ main::$2 ]
|
||||
Allocated zp ZP_PTR_BYTE:7 [ main::$9 ]
|
||||
Allocated zp ZP_PTR_BYTE:9 [ main::$11 ]
|
||||
Allocated zp ZP_PTR_BYTE:4 [ main::$2 ]
|
||||
Allocated zp ZP_PTR_BYTE:6 [ main::$9 ]
|
||||
Allocated zp ZP_PTR_BYTE:8 [ main::$11 ]
|
||||
INITIAL ASM
|
||||
//SEG0 Basic Upstart
|
||||
.pc = $801 "Basic"
|
||||
@ -1304,26 +1205,24 @@ b1_from_bbegin:
|
||||
//SEG4 @1
|
||||
b1:
|
||||
//SEG5 [2] call main param-assignment [ ] ( )
|
||||
//SEG6 [4] phi from @1 to main [phi:@1->main]
|
||||
main_from_b1:
|
||||
jsr main
|
||||
//SEG6 [3] phi from @1 to @end [phi:@1->@end]
|
||||
//SEG7 [3] phi from @1 to @end [phi:@1->@end]
|
||||
bend_from_b1:
|
||||
jmp bend
|
||||
//SEG7 @end
|
||||
//SEG8 @end
|
||||
bend:
|
||||
//SEG8 main
|
||||
//SEG9 main
|
||||
main: {
|
||||
.const screen = $400
|
||||
.const BGCOL = $d020
|
||||
.const sc2 = screen+$51
|
||||
.label _2 = 5
|
||||
.label _9 = 7
|
||||
.label _11 = 9
|
||||
.label a = 4
|
||||
.label _2 = 4
|
||||
.label _9 = 6
|
||||
.label _11 = 8
|
||||
.label i = 2
|
||||
.label j = 3
|
||||
//SEG9 [4] (byte) main::a#0 ← *((const byte*) main::screen#0+(byte/signed byte/word/signed word) 80) [ ] ( main:2 [ ] ) -- zpby1=_deref_cowo1
|
||||
lda screen+$50
|
||||
sta a
|
||||
//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] -- zpby1=coby1
|
||||
@ -1440,20 +1339,19 @@ Statement [14] (byte*~) main::$11 ← (const byte*) main::screen#0+(byte/word/si
|
||||
Statement [15] *((byte*~) main::$9) ← *((byte*~) main::$11) [ main::j#2 ] ( main:2 [ main::j#2 ] ) always clobbers reg byte a reg byte y
|
||||
Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x ,
|
||||
Potential registers zp ZP_BYTE:3 [ main::j#2 main::j#1 ] : zp ZP_BYTE:3 , reg byte x ,
|
||||
Potential registers zp ZP_BYTE:4 [ main::a#0 ] : zp ZP_BYTE:4 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_PTR_BYTE:5 [ main::$2 ] : zp ZP_PTR_BYTE:5 ,
|
||||
Potential registers zp ZP_PTR_BYTE:7 [ main::$9 ] : zp ZP_PTR_BYTE:7 ,
|
||||
Potential registers zp ZP_PTR_BYTE:9 [ main::$11 ] : zp ZP_PTR_BYTE:9 ,
|
||||
Potential registers zp ZP_PTR_BYTE:4 [ main::$2 ] : zp ZP_PTR_BYTE:4 ,
|
||||
Potential registers zp ZP_PTR_BYTE:6 [ main::$9 ] : zp ZP_PTR_BYTE:6 ,
|
||||
Potential registers zp ZP_PTR_BYTE:8 [ main::$11 ] : zp ZP_PTR_BYTE:8 ,
|
||||
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [main] 31.17: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] 27.5: zp ZP_BYTE:3 [ main::j#2 main::j#1 ] 22: zp ZP_PTR_BYTE:5 [ main::$2 ] 22: zp ZP_PTR_BYTE:9 [ main::$11 ] 20: zp ZP_BYTE:4 [ main::a#0 ] 11: zp ZP_PTR_BYTE:7 [ main::$9 ]
|
||||
Uplift Scope [main] 31.17: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] 27.5: zp ZP_BYTE:3 [ main::j#2 main::j#1 ] 22: zp ZP_PTR_BYTE:4 [ main::$2 ] 22: zp ZP_PTR_BYTE:8 [ main::$11 ] 11: zp ZP_PTR_BYTE:6 [ main::$9 ]
|
||||
Uplift Scope []
|
||||
|
||||
Uplifting [main] best 1199 combination reg byte x [ main::i#2 main::i#1 ] reg byte x [ main::j#2 main::j#1 ] zp ZP_PTR_BYTE:5 [ main::$2 ] zp ZP_PTR_BYTE:9 [ main::$11 ] reg byte a [ main::a#0 ] zp ZP_PTR_BYTE:7 [ main::$9 ]
|
||||
Uplifting [] best 1199 combination
|
||||
Coalescing zero page register [ zp ZP_PTR_BYTE:5 [ main::$2 ] ] with [ zp ZP_PTR_BYTE:7 [ main::$9 ] ]
|
||||
Allocated (was zp ZP_PTR_BYTE:5) zp ZP_PTR_BYTE:2 [ main::$2 main::$9 ]
|
||||
Allocated (was zp ZP_PTR_BYTE:9) zp ZP_PTR_BYTE:4 [ main::$11 ]
|
||||
Uplifting [main] best 1195 combination reg byte x [ main::i#2 main::i#1 ] reg byte x [ main::j#2 main::j#1 ] zp ZP_PTR_BYTE:4 [ main::$2 ] zp ZP_PTR_BYTE:8 [ main::$11 ] zp ZP_PTR_BYTE:6 [ main::$9 ]
|
||||
Uplifting [] best 1195 combination
|
||||
Coalescing zero page register [ zp ZP_PTR_BYTE:4 [ main::$2 ] ] with [ zp ZP_PTR_BYTE:6 [ main::$9 ] ]
|
||||
Allocated (was zp ZP_PTR_BYTE:4) zp ZP_PTR_BYTE:2 [ main::$2 main::$9 ]
|
||||
Allocated (was zp ZP_PTR_BYTE:8) zp ZP_PTR_BYTE:4 [ main::$11 ]
|
||||
Removing instruction jmp b1
|
||||
Removing instruction jmp bend
|
||||
Removing instruction jmp b1
|
||||
@ -1475,12 +1373,14 @@ b1_from_bbegin:
|
||||
//SEG4 @1
|
||||
b1:
|
||||
//SEG5 [2] call main param-assignment [ ] ( )
|
||||
//SEG6 [4] phi from @1 to main [phi:@1->main]
|
||||
main_from_b1:
|
||||
jsr main
|
||||
//SEG6 [3] phi from @1 to @end [phi:@1->@end]
|
||||
//SEG7 [3] phi from @1 to @end [phi:@1->@end]
|
||||
bend_from_b1:
|
||||
//SEG7 @end
|
||||
//SEG8 @end
|
||||
bend:
|
||||
//SEG8 main
|
||||
//SEG9 main
|
||||
main: {
|
||||
.const screen = $400
|
||||
.const BGCOL = $d020
|
||||
@ -1488,8 +1388,6 @@ main: {
|
||||
.label _2 = 2
|
||||
.label _9 = 2
|
||||
.label _11 = 4
|
||||
//SEG9 [4] (byte) main::a#0 ← *((const byte*) main::screen#0+(byte/signed byte/word/signed word) 80) [ ] ( main:2 [ ] ) -- aby=_deref_cowo1
|
||||
lda screen+$50
|
||||
//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] -- xby=coby1
|
||||
@ -1590,12 +1488,14 @@ b1_from_bbegin:
|
||||
//SEG4 @1
|
||||
b1:
|
||||
//SEG5 [2] call main param-assignment [ ] ( )
|
||||
//SEG6 [4] phi from @1 to main [phi:@1->main]
|
||||
main_from_b1:
|
||||
jsr main
|
||||
//SEG6 [3] phi from @1 to @end [phi:@1->@end]
|
||||
//SEG7 [3] phi from @1 to @end [phi:@1->@end]
|
||||
bend_from_b1:
|
||||
//SEG7 @end
|
||||
//SEG8 @end
|
||||
bend:
|
||||
//SEG8 main
|
||||
//SEG9 main
|
||||
main: {
|
||||
.const screen = $400
|
||||
.const BGCOL = $d020
|
||||
@ -1603,8 +1503,6 @@ main: {
|
||||
.label _2 = 2
|
||||
.label _9 = 2
|
||||
.label _11 = 4
|
||||
//SEG9 [4] (byte) main::a#0 ← *((const byte*) main::screen#0+(byte/signed byte/word/signed word) 80) [ ] ( main:2 [ ] ) -- aby=_deref_cowo1
|
||||
lda screen+$50
|
||||
//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] -- xby=coby1
|
||||
@ -1693,6 +1591,7 @@ Replacing label b1_from_b1 with b1
|
||||
Replacing label b2_from_b2 with b2
|
||||
Removing instruction bbegin:
|
||||
Removing instruction b1_from_bbegin:
|
||||
Removing instruction main_from_b1:
|
||||
Removing instruction bend_from_b1:
|
||||
Removing instruction b1_from_b1:
|
||||
Removing instruction b2_from_b2:
|
||||
@ -1708,11 +1607,12 @@ ASSEMBLER
|
||||
//SEG4 @1
|
||||
b1:
|
||||
//SEG5 [2] call main param-assignment [ ] ( )
|
||||
//SEG6 [4] phi from @1 to main [phi:@1->main]
|
||||
jsr main
|
||||
//SEG6 [3] phi from @1 to @end [phi:@1->@end]
|
||||
//SEG7 @end
|
||||
//SEG7 [3] phi from @1 to @end [phi:@1->@end]
|
||||
//SEG8 @end
|
||||
bend:
|
||||
//SEG8 main
|
||||
//SEG9 main
|
||||
main: {
|
||||
.const screen = $400
|
||||
.const BGCOL = $d020
|
||||
@ -1720,8 +1620,6 @@ main: {
|
||||
.label _2 = 2
|
||||
.label _9 = 2
|
||||
.label _11 = 4
|
||||
//SEG9 [4] (byte) main::a#0 ← *((const byte*) main::screen#0+(byte/signed byte/word/signed word) 80) [ ] ( main:2 [ ] ) -- aby=_deref_cowo1
|
||||
lda screen+$50
|
||||
//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] -- xby=coby1
|
||||
@ -1822,10 +1720,11 @@ ASSEMBLER
|
||||
//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
|
||||
//SEG6 [3] phi from @1 to @end [phi:@1->@end]
|
||||
//SEG7 @end
|
||||
//SEG8 main
|
||||
//SEG7 [3] phi from @1 to @end [phi:@1->@end]
|
||||
//SEG8 @end
|
||||
//SEG9 main
|
||||
main: {
|
||||
.const screen = $400
|
||||
.const BGCOL = $d020
|
||||
@ -1833,8 +1732,6 @@ main: {
|
||||
.label _2 = 2
|
||||
.label _9 = 2
|
||||
.label _11 = 4
|
||||
//SEG9 [4] (byte) main::a#0 ← *((const byte*) main::screen#0+(byte/signed byte/word/signed word) 80) [ ] ( main:2 [ ] ) -- aby=_deref_cowo1
|
||||
lda screen+$50
|
||||
//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] -- xby=coby1
|
||||
ldx #0
|
||||
@ -1925,10 +1822,11 @@ ASSEMBLER
|
||||
//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
|
||||
//SEG6 [3] phi from @1 to @end [phi:@1->@end]
|
||||
//SEG7 @end
|
||||
//SEG8 main
|
||||
//SEG7 [3] phi from @1 to @end [phi:@1->@end]
|
||||
//SEG8 @end
|
||||
//SEG9 main
|
||||
main: {
|
||||
.const screen = $400
|
||||
.const BGCOL = $d020
|
||||
@ -1936,8 +1834,6 @@ main: {
|
||||
.label _2 = 2
|
||||
.label _9 = 2
|
||||
.label _11 = 4
|
||||
//SEG9 [4] (byte) main::a#0 ← *((const byte*) main::screen#0+(byte/signed byte/word/signed word) 80) [ ] ( main:2 [ ] ) -- aby=_deref_cowo1
|
||||
lda screen+$50
|
||||
//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] -- xby=coby1
|
||||
ldx #0
|
||||
@ -2028,8 +1924,6 @@ FINAL SYMBOL TABLE
|
||||
(label) main::@return
|
||||
(byte*) main::BGCOL
|
||||
(const byte*) main::BGCOL#0 BGCOL = ((byte*))(word) 53280
|
||||
(byte) main::a
|
||||
(byte) main::a#0 reg byte a 20.0
|
||||
(byte) main::i
|
||||
(byte) main::i#1 reg byte x 16.5
|
||||
(byte) main::i#2 reg byte x 14.666666666666666
|
||||
@ -2043,7 +1937,6 @@ FINAL SYMBOL TABLE
|
||||
|
||||
reg byte x [ main::i#2 main::i#1 ]
|
||||
reg byte x [ main::j#2 main::j#1 ]
|
||||
reg byte a [ main::a#0 ]
|
||||
zp ZP_PTR_BYTE:2 [ main::$2 main::$9 ]
|
||||
zp ZP_PTR_BYTE:4 [ main::$11 ]
|
||||
|
||||
@ -2057,10 +1950,11 @@ FINAL CODE
|
||||
//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
|
||||
//SEG6 [3] phi from @1 to @end [phi:@1->@end]
|
||||
//SEG7 @end
|
||||
//SEG8 main
|
||||
//SEG7 [3] phi from @1 to @end [phi:@1->@end]
|
||||
//SEG8 @end
|
||||
//SEG9 main
|
||||
main: {
|
||||
.const screen = $400
|
||||
.const BGCOL = $d020
|
||||
@ -2068,8 +1962,6 @@ main: {
|
||||
.label _2 = 2
|
||||
.label _9 = 2
|
||||
.label _11 = 4
|
||||
//SEG9 [4] (byte) main::a#0 ← *((const byte*) main::screen#0+(byte/signed byte/word/signed word) 80) [ ] ( main:2 [ ] ) -- aby=_deref_cowo1
|
||||
lda screen+$50
|
||||
//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] -- xby=coby1
|
||||
ldx #0
|
||||
|
@ -12,8 +12,6 @@
|
||||
(label) main::@return
|
||||
(byte*) main::BGCOL
|
||||
(const byte*) main::BGCOL#0 BGCOL = ((byte*))(word) 53280
|
||||
(byte) main::a
|
||||
(byte) main::a#0 reg byte a 20.0
|
||||
(byte) main::i
|
||||
(byte) main::i#1 reg byte x 16.5
|
||||
(byte) main::i#2 reg byte x 14.666666666666666
|
||||
@ -27,6 +25,5 @@
|
||||
|
||||
reg byte x [ main::i#2 main::i#1 ]
|
||||
reg byte x [ main::j#2 main::j#1 ]
|
||||
reg byte a [ main::a#0 ]
|
||||
zp ZP_PTR_BYTE:2 [ main::$2 main::$9 ]
|
||||
zp ZP_PTR_BYTE:4 [ main::$11 ]
|
||||
|
@ -3,14 +3,12 @@
|
||||
.pc = $80d "Program"
|
||||
jsr main
|
||||
main: {
|
||||
.const SCREEN = $400
|
||||
ldx #2
|
||||
b1:
|
||||
cpx #$a
|
||||
bcc b2
|
||||
rts
|
||||
b2:
|
||||
lda SCREEN,x
|
||||
inx
|
||||
jmp b1
|
||||
}
|
||||
|
@ -18,6 +18,5 @@ main::@return: scope:[main] from main::@1
|
||||
[7] return [ ] ( main:2 [ ] )
|
||||
to:@return
|
||||
main::@2: scope:[main] from main::@1
|
||||
[8] (byte) main::b#0 ← (const byte[1024]) main::SCREEN#0 *idx (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 ] )
|
||||
[8] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] )
|
||||
to:main::@1
|
||||
|
@ -80,6 +80,9 @@ main::@return: scope:[main] from main::@3
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
|
||||
Eliminating unused variable (byte) main::b and assignment (byte) main::b ← (byte~) main::$1
|
||||
Eliminating unused variable (byte~) main::$1 and assignment (byte~) main::$1 ← (byte[1024]) main::SCREEN *idx (byte) main::i
|
||||
Eliminating unused variable (byte[1024]) main::SCREEN and assignment (byte[1024]) main::SCREEN ← ((byte*)) (word/signed word) 1024
|
||||
Removing empty block main::@4
|
||||
Removing empty block main::@3
|
||||
Removing empty block main::@5
|
||||
@ -88,7 +91,6 @@ CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
to:@1
|
||||
main: scope:[main] from
|
||||
(byte[1024]) main::SCREEN ← ((byte*)) (word/signed word) 1024
|
||||
(byte) main::i ← (byte/signed byte/word/signed word) 2
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
@ -96,8 +98,6 @@ main::@1: scope:[main] from main main::@2
|
||||
if((boolean~) main::$0) goto main::@2
|
||||
to:main::@return
|
||||
main::@2: scope:[main] from main::@1
|
||||
(byte~) main::$1 ← (byte[1024]) main::SCREEN *idx (byte) main::i
|
||||
(byte) main::b ← (byte~) main::$1
|
||||
(byte) main::i ← ++ (byte) main::i
|
||||
to:main::@1
|
||||
main::@return: scope:[main] from main::@1
|
||||
@ -114,7 +114,6 @@ CONTROL FLOW GRAPH WITH ASSIGNMENT CALL
|
||||
@begin: scope:[] from
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
(byte[1024]) main::SCREEN ← ((byte*)) (word/signed word) 1024
|
||||
(byte) main::i ← (byte/signed byte/word/signed word) 2
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
@ -122,8 +121,6 @@ main::@1: scope:[main] from main main::@2
|
||||
if((boolean~) main::$0) goto main::@2
|
||||
to:main::@return
|
||||
main::@2: scope:[main] from main::@1
|
||||
(byte~) main::$1 ← (byte[1024]) main::SCREEN *idx (byte) main::i
|
||||
(byte) main::b ← (byte~) main::$1
|
||||
(byte) main::i ← ++ (byte) main::i
|
||||
to:main::@1
|
||||
main::@return: scope:[main] from main::@1
|
||||
@ -136,26 +133,20 @@ main::@return: scope:[main] from main::@1
|
||||
to:@end
|
||||
@end: scope:[] from @2
|
||||
|
||||
Completing Phi functions...
|
||||
Completing Phi functions...
|
||||
CONTROL FLOW GRAPH SSA
|
||||
@begin: scope:[] from
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
(byte[1024]) main::SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte) main::i#0 ← (byte/signed byte/word/signed word) 2
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
(byte[1024]) main::SCREEN#2 ← phi( main/(byte[1024]) main::SCREEN#0 main::@2/(byte[1024]) main::SCREEN#1 )
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 )
|
||||
(boolean~) main::$0 ← (byte) main::i#2 < (byte/signed byte/word/signed word) 10
|
||||
if((boolean~) main::$0) goto main::@2
|
||||
to:main::@return
|
||||
main::@2: scope:[main] from main::@1
|
||||
(byte) main::i#3 ← phi( main::@1/(byte) main::i#2 )
|
||||
(byte[1024]) main::SCREEN#1 ← phi( main::@1/(byte[1024]) main::SCREEN#2 )
|
||||
(byte~) main::$1 ← (byte[1024]) main::SCREEN#1 *idx (byte) main::i#3
|
||||
(byte) main::b#0 ← (byte~) main::$1
|
||||
(byte) main::i#1 ← ++ (byte) main::i#3
|
||||
to:main::@1
|
||||
main::@return: scope:[main] from main::@1
|
||||
@ -172,20 +163,15 @@ CONTROL FLOW GRAPH WITH ASSIGNMENT CALL & RETURN
|
||||
@begin: scope:[] from
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
(byte[1024]) main::SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte) main::i#0 ← (byte/signed byte/word/signed word) 2
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
(byte[1024]) main::SCREEN#2 ← phi( main/(byte[1024]) main::SCREEN#0 main::@2/(byte[1024]) main::SCREEN#1 )
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 )
|
||||
(boolean~) main::$0 ← (byte) main::i#2 < (byte/signed byte/word/signed word) 10
|
||||
if((boolean~) main::$0) goto main::@2
|
||||
to:main::@return
|
||||
main::@2: scope:[main] from main::@1
|
||||
(byte) main::i#3 ← phi( main::@1/(byte) main::i#2 )
|
||||
(byte[1024]) main::SCREEN#1 ← phi( main::@1/(byte[1024]) main::SCREEN#2 )
|
||||
(byte~) main::$1 ← (byte[1024]) main::SCREEN#1 *idx (byte) main::i#3
|
||||
(byte) main::b#0 ← (byte~) main::$1
|
||||
(byte) main::i#1 ← ++ (byte) main::i#3
|
||||
to:main::@1
|
||||
main::@return: scope:[main] from main::@1
|
||||
@ -205,16 +191,9 @@ INITIAL SSA SYMBOL TABLE
|
||||
(label) @end
|
||||
(void()) main()
|
||||
(boolean~) main::$0
|
||||
(byte~) main::$1
|
||||
(label) main::@1
|
||||
(label) main::@2
|
||||
(label) main::@return
|
||||
(byte[1024]) main::SCREEN
|
||||
(byte[1024]) main::SCREEN#0
|
||||
(byte[1024]) main::SCREEN#1
|
||||
(byte[1024]) main::SCREEN#2
|
||||
(byte) main::b
|
||||
(byte) main::b#0
|
||||
(byte) main::i
|
||||
(byte) main::i#0
|
||||
(byte) main::i#1
|
||||
@ -227,20 +206,15 @@ CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
(byte[1024]) main::SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte) main::i#0 ← (byte/signed byte/word/signed word) 2
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
(byte[1024]) main::SCREEN#2 ← phi( main/(byte[1024]) main::SCREEN#0 main::@2/(byte[1024]) main::SCREEN#1 )
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 )
|
||||
(boolean~) main::$0 ← (byte) main::i#2 < (byte/signed byte/word/signed word) 10
|
||||
if((boolean~) main::$0) goto main::@2
|
||||
to:main::@return
|
||||
main::@2: scope:[main] from main::@1
|
||||
(byte) main::i#3 ← phi( main::@1/(byte) main::i#2 )
|
||||
(byte[1024]) main::SCREEN#1 ← phi( main::@1/(byte[1024]) main::SCREEN#2 )
|
||||
(byte~) main::$1 ← (byte[1024]) main::SCREEN#1 *idx (byte) main::i#3
|
||||
(byte) main::b#0 ← (byte~) main::$1
|
||||
(byte) main::i#1 ← ++ (byte) main::i#3
|
||||
to:main::@1
|
||||
main::@return: scope:[main] from main::@1
|
||||
@ -251,69 +225,12 @@ main::@return: scope:[main] from main::@1
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
|
||||
Alias (byte[1024]) main::SCREEN#1 = (byte[1024]) main::SCREEN#2
|
||||
Alias (byte) main::i#2 = (byte) main::i#3
|
||||
Alias (byte) main::b#0 = (byte~) main::$1
|
||||
Succesful SSA optimization Pass2AliasElimination
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
(byte[1024]) main::SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte) main::i#0 ← (byte/signed byte/word/signed word) 2
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
(byte[1024]) main::SCREEN#1 ← phi( main/(byte[1024]) main::SCREEN#0 main::@2/(byte[1024]) main::SCREEN#1 )
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 )
|
||||
(boolean~) main::$0 ← (byte) main::i#2 < (byte/signed byte/word/signed word) 10
|
||||
if((boolean~) main::$0) goto main::@2
|
||||
to:main::@return
|
||||
main::@2: scope:[main] from main::@1
|
||||
(byte) main::b#0 ← (byte[1024]) main::SCREEN#1 *idx (byte) main::i#2
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
to:main::@1
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
to:@return
|
||||
@1: scope:[] from @begin
|
||||
call main param-assignment
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
|
||||
Self Phi Eliminated (byte[1024]) main::SCREEN#1
|
||||
Succesful SSA optimization Pass2SelfPhiElimination
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
(byte[1024]) main::SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte) main::i#0 ← (byte/signed byte/word/signed word) 2
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
(byte[1024]) main::SCREEN#1 ← phi( main/(byte[1024]) main::SCREEN#0 )
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 )
|
||||
(boolean~) main::$0 ← (byte) main::i#2 < (byte/signed byte/word/signed word) 10
|
||||
if((boolean~) main::$0) goto main::@2
|
||||
to:main::@return
|
||||
main::@2: scope:[main] from main::@1
|
||||
(byte) main::b#0 ← (byte[1024]) main::SCREEN#1 *idx (byte) main::i#2
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
to:main::@1
|
||||
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[1024]) main::SCREEN#1 (byte[1024]) main::SCREEN#0
|
||||
Succesful SSA optimization Pass2RedundantPhiElimination
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
(byte[1024]) main::SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte) main::i#0 ← (byte/signed byte/word/signed word) 2
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
@ -322,7 +239,6 @@ main::@1: scope:[main] from main main::@2
|
||||
if((boolean~) main::$0) goto main::@2
|
||||
to:main::@return
|
||||
main::@2: scope:[main] from main::@1
|
||||
(byte) main::b#0 ← (byte[1024]) main::SCREEN#0 *idx (byte) main::i#2
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
to:main::@1
|
||||
main::@return: scope:[main] from main::@1
|
||||
@ -339,7 +255,6 @@ CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
(byte[1024]) main::SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte) main::i#0 ← (byte/signed byte/word/signed word) 2
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
@ -347,7 +262,6 @@ main::@1: scope:[main] from main main::@2
|
||||
if((byte) main::i#2<(byte/signed byte/word/signed word) 10) goto main::@2
|
||||
to:main::@return
|
||||
main::@2: scope:[main] from main::@1
|
||||
(byte) main::b#0 ← (byte[1024]) main::SCREEN#0 *idx (byte) main::i#2
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
to:main::@1
|
||||
main::@return: scope:[main] from main::@1
|
||||
@ -358,7 +272,6 @@ main::@return: scope:[main] from main::@1
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
|
||||
Constant (const byte[1024]) main::SCREEN#0 = ((byte*))1024
|
||||
Constant (const byte) main::i#0 = 2
|
||||
Succesful SSA optimization Pass2ConstantIdentification
|
||||
CONTROL FLOW GRAPH
|
||||
@ -371,7 +284,6 @@ main::@1: scope:[main] from main main::@2
|
||||
if((byte) main::i#2<(byte/signed byte/word/signed word) 10) goto main::@2
|
||||
to:main::@return
|
||||
main::@2: scope:[main] from main::@1
|
||||
(byte) main::b#0 ← (const byte[1024]) main::SCREEN#0 *idx (byte) main::i#2
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
to:main::@1
|
||||
main::@return: scope:[main] from main::@1
|
||||
@ -382,8 +294,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
|
||||
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) 2
|
||||
@ -398,7 +308,6 @@ main::@1: scope:[main] from main main::@2
|
||||
if((byte) main::i#2<(byte/signed byte/word/signed word) 10) goto main::@2
|
||||
to:main::@return
|
||||
main::@2: scope:[main] from main::@1
|
||||
(byte) main::b#0 ← (const byte[1024]) main::SCREEN#0 *idx (byte) main::i#2
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
to:main::@1
|
||||
main::@return: scope:[main] from main::@1
|
||||
@ -417,10 +326,6 @@ FINAL SYMBOL TABLE
|
||||
(label) main::@1
|
||||
(label) main::@2
|
||||
(label) main::@return
|
||||
(byte[1024]) main::SCREEN
|
||||
(const byte[1024]) main::SCREEN#0 = ((byte*))(word/signed word) 1024
|
||||
(byte) main::b
|
||||
(byte) main::b#0
|
||||
(byte) main::i
|
||||
(byte) main::i#1
|
||||
(byte) main::i#2
|
||||
@ -444,7 +349,6 @@ main::@return: scope:[main] from main::@1
|
||||
return
|
||||
to:@return
|
||||
main::@2: scope:[main] from main::@1
|
||||
(byte) main::b#0 ← (const byte[1024]) main::SCREEN#0 *idx (byte) main::i#2
|
||||
(byte) main::i#1 ← ++ (byte) main::i#2
|
||||
(byte~) main::i#4 ← (byte) main::i#1
|
||||
to:main::@1
|
||||
@ -479,13 +383,12 @@ main::@return: scope:[main] from main::@1
|
||||
[7] return [ ]
|
||||
to:@return
|
||||
main::@2: scope:[main] from main::@1
|
||||
[8] (byte) main::b#0 ← (const byte[1024]) main::SCREEN#0 *idx (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 ]
|
||||
[8] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ]
|
||||
[9] (byte~) main::i#4 ← (byte) main::i#1 [ main::i#4 ]
|
||||
to:main::@1
|
||||
|
||||
Created 1 initial phi equivalence classes
|
||||
Coalesced [10] main::i#4 ← main::i#1
|
||||
Coalesced [9] 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
|
||||
@ -515,8 +418,7 @@ main::@return: scope:[main] from main::@1
|
||||
[7] return [ ]
|
||||
to:@return
|
||||
main::@2: scope:[main] from main::@1
|
||||
[8] (byte) main::b#0 ← (const byte[1024]) main::SCREEN#0 *idx (byte) main::i#2 [ main::i#2 ]
|
||||
[9] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ]
|
||||
[8] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ]
|
||||
to:main::@1
|
||||
|
||||
CONTROL FLOW GRAPH - PHI MEM COALESCED
|
||||
@ -540,8 +442,7 @@ main::@return: scope:[main] from main::@1
|
||||
[7] return [ ] ( main:2 [ ] )
|
||||
to:@return
|
||||
main::@2: scope:[main] from main::@1
|
||||
[8] (byte) main::b#0 ← (const byte[1024]) main::SCREEN#0 *idx (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 ] )
|
||||
[8] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] )
|
||||
to:main::@1
|
||||
|
||||
DOMINATORS
|
||||
@ -567,21 +468,15 @@ Loop head: main::@1 tails: main::@2 blocks: main::@2 main::@1 depth: 1
|
||||
|
||||
VARIABLE REGISTER WEIGHTS
|
||||
(void()) main()
|
||||
(byte[1024]) main::SCREEN
|
||||
(byte) main::b
|
||||
(byte) main::b#0 110.0
|
||||
(byte) main::i
|
||||
(byte) main::i#1 22.0
|
||||
(byte) main::i#2 14.666666666666666
|
||||
(byte) main::i#2 16.5
|
||||
|
||||
Initial phi equivalence classes
|
||||
[ main::i#2 main::i#1 ]
|
||||
Added variable main::b#0 to zero page equivalence class [ main::b#0 ]
|
||||
Complete equivalence classes
|
||||
[ main::i#2 main::i#1 ]
|
||||
[ main::b#0 ]
|
||||
Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
|
||||
Allocated zp ZP_BYTE:3 [ main::b#0 ]
|
||||
INITIAL ASM
|
||||
//SEG0 Basic Upstart
|
||||
.pc = $801 "Basic"
|
||||
@ -606,8 +501,6 @@ bend_from_b1:
|
||||
bend:
|
||||
//SEG9 main
|
||||
main: {
|
||||
.const SCREEN = $400
|
||||
.label b = 3
|
||||
.label i = 2
|
||||
//SEG10 [5] phi from main to main::@1 [phi:main->main::@1]
|
||||
b1_from_main:
|
||||
@ -628,28 +521,23 @@ main: {
|
||||
rts
|
||||
//SEG16 main::@2
|
||||
b2:
|
||||
//SEG17 [8] (byte) main::b#0 ← (const byte[1024]) main::SCREEN#0 *idx (byte) main::i#2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- zpby1=cowo1_derefidx_zpby2
|
||||
ldx i
|
||||
lda SCREEN,x
|
||||
sta b
|
||||
//SEG18 [9] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- zpby1=_inc_zpby1
|
||||
//SEG17 [8] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- zpby1=_inc_zpby1
|
||||
inc i
|
||||
//SEG19 [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1]
|
||||
//SEG18 [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1]
|
||||
b1_from_b2:
|
||||
//SEG20 [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy
|
||||
//SEG19 [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy
|
||||
jmp b1
|
||||
}
|
||||
|
||||
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::b#0 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y ,
|
||||
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [main] 110: zp ZP_BYTE:3 [ main::b#0 ] 36.67: zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
|
||||
Uplift Scope [main] 38.5: zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
|
||||
Uplift Scope []
|
||||
|
||||
Uplifting [main] best 238 combination reg byte a [ main::b#0 ] reg byte x [ main::i#2 main::i#1 ]
|
||||
Uplifting [] best 238 combination
|
||||
Uplifting [main] best 193 combination reg byte x [ main::i#2 main::i#1 ]
|
||||
Uplifting [] best 193 combination
|
||||
Removing instruction jmp b1
|
||||
Removing instruction jmp bend
|
||||
Removing instruction jmp b1
|
||||
@ -677,7 +565,6 @@ bend_from_b1:
|
||||
bend:
|
||||
//SEG9 main
|
||||
main: {
|
||||
.const SCREEN = $400
|
||||
//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) 2 [phi:main->main::@1#0] -- xby=coby1
|
||||
@ -693,13 +580,11 @@ main: {
|
||||
rts
|
||||
//SEG16 main::@2
|
||||
b2:
|
||||
//SEG17 [8] (byte) main::b#0 ← (const byte[1024]) main::SCREEN#0 *idx (byte) main::i#2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- aby=cowo1_derefidx_xby
|
||||
lda SCREEN,x
|
||||
//SEG18 [9] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- xby=_inc_xby
|
||||
//SEG17 [8] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- xby=_inc_xby
|
||||
inx
|
||||
//SEG19 [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1]
|
||||
//SEG18 [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1]
|
||||
b1_from_b2:
|
||||
//SEG20 [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy
|
||||
//SEG19 [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy
|
||||
jmp b1
|
||||
}
|
||||
|
||||
@ -726,7 +611,6 @@ b1:
|
||||
bend:
|
||||
//SEG9 main
|
||||
main: {
|
||||
.const SCREEN = $400
|
||||
//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) 2 [phi:main->main::@1#0] -- xby=coby1
|
||||
@ -742,13 +626,11 @@ main: {
|
||||
rts
|
||||
//SEG16 main::@2
|
||||
b2:
|
||||
//SEG17 [8] (byte) main::b#0 ← (const byte[1024]) main::SCREEN#0 *idx (byte) main::i#2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- aby=cowo1_derefidx_xby
|
||||
lda SCREEN,x
|
||||
//SEG18 [9] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- xby=_inc_xby
|
||||
//SEG17 [8] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- xby=_inc_xby
|
||||
inx
|
||||
//SEG19 [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1]
|
||||
//SEG18 [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1]
|
||||
b1_from_b2:
|
||||
//SEG20 [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy
|
||||
//SEG19 [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy
|
||||
jmp b1
|
||||
}
|
||||
|
||||
@ -774,7 +656,6 @@ ASSEMBLER
|
||||
//SEG8 @end
|
||||
//SEG9 main
|
||||
main: {
|
||||
.const SCREEN = $400
|
||||
//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) 2 [phi:main->main::@1#0] -- xby=coby1
|
||||
ldx #2
|
||||
@ -788,12 +669,10 @@ main: {
|
||||
rts
|
||||
//SEG16 main::@2
|
||||
b2:
|
||||
//SEG17 [8] (byte) main::b#0 ← (const byte[1024]) main::SCREEN#0 *idx (byte) main::i#2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- aby=cowo1_derefidx_xby
|
||||
lda SCREEN,x
|
||||
//SEG18 [9] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- xby=_inc_xby
|
||||
//SEG17 [8] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- xby=_inc_xby
|
||||
inx
|
||||
//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
|
||||
//SEG18 [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1]
|
||||
//SEG19 [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy
|
||||
jmp b1
|
||||
}
|
||||
|
||||
@ -805,16 +684,11 @@ FINAL SYMBOL TABLE
|
||||
(label) main::@1
|
||||
(label) main::@2
|
||||
(label) main::@return
|
||||
(byte[1024]) main::SCREEN
|
||||
(const byte[1024]) main::SCREEN#0 SCREEN = ((byte*))(word/signed word) 1024
|
||||
(byte) main::b
|
||||
(byte) main::b#0 reg byte a 110.0
|
||||
(byte) main::i
|
||||
(byte) main::i#1 reg byte x 22.0
|
||||
(byte) main::i#2 reg byte x 14.666666666666666
|
||||
(byte) main::i#2 reg byte x 16.5
|
||||
|
||||
reg byte x [ main::i#2 main::i#1 ]
|
||||
reg byte a [ main::b#0 ]
|
||||
|
||||
FINAL CODE
|
||||
//SEG0 Basic Upstart
|
||||
@ -832,7 +706,6 @@ FINAL CODE
|
||||
//SEG8 @end
|
||||
//SEG9 main
|
||||
main: {
|
||||
.const SCREEN = $400
|
||||
//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) 2 [phi:main->main::@1#0] -- xby=coby1
|
||||
ldx #2
|
||||
@ -846,12 +719,10 @@ main: {
|
||||
rts
|
||||
//SEG16 main::@2
|
||||
b2:
|
||||
//SEG17 [8] (byte) main::b#0 ← (const byte[1024]) main::SCREEN#0 *idx (byte) main::i#2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- aby=cowo1_derefidx_xby
|
||||
lda SCREEN,x
|
||||
//SEG18 [9] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- xby=_inc_xby
|
||||
//SEG17 [8] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- xby=_inc_xby
|
||||
inx
|
||||
//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
|
||||
//SEG18 [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1]
|
||||
//SEG19 [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy
|
||||
jmp b1
|
||||
}
|
||||
|
||||
|
@ -5,13 +5,8 @@
|
||||
(label) main::@1
|
||||
(label) main::@2
|
||||
(label) main::@return
|
||||
(byte[1024]) main::SCREEN
|
||||
(const byte[1024]) main::SCREEN#0 SCREEN = ((byte*))(word/signed word) 1024
|
||||
(byte) main::b
|
||||
(byte) main::b#0 reg byte a 110.0
|
||||
(byte) main::i
|
||||
(byte) main::i#1 reg byte x 22.0
|
||||
(byte) main::i#2 reg byte x 14.666666666666666
|
||||
(byte) main::i#2 reg byte x 16.5
|
||||
|
||||
reg byte x [ main::i#2 main::i#1 ]
|
||||
reg byte a [ main::b#0 ]
|
||||
|
@ -2,7 +2,6 @@
|
||||
:BasicUpstart(main)
|
||||
.pc = $80d "Program"
|
||||
.const SCREEN = $400
|
||||
.const SCROLL = $d016
|
||||
TEXT: .text "01234567@"
|
||||
jsr main
|
||||
main: {
|
||||
|
@ -94,11 +94,11 @@ main::@return: scope:[main] from main::@4
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
|
||||
Eliminating unused variable (byte*) SCROLL and assignment (byte*) SCROLL ← ((byte*)) (word) 53270
|
||||
Removing empty block main::@4
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) SCREEN ← ((byte*)) (word/signed word) 1024
|
||||
(byte*) SCROLL ← ((byte*)) (word) 53270
|
||||
(byte[]) TEXT ← (string) "01234567@"
|
||||
to:@1
|
||||
main: scope:[main] from
|
||||
@ -134,7 +134,6 @@ PROCEDURE MODIFY VARIABLE ANALYSIS
|
||||
CONTROL FLOW GRAPH WITH ASSIGNMENT CALL
|
||||
@begin: scope:[] from
|
||||
(byte*) SCREEN ← ((byte*)) (word/signed word) 1024
|
||||
(byte*) SCROLL ← ((byte*)) (word) 53270
|
||||
(byte[]) TEXT ← (string) "01234567@"
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
@ -174,7 +173,6 @@ Completing Phi functions...
|
||||
CONTROL FLOW GRAPH SSA
|
||||
@begin: scope:[] from
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte*) SCROLL#0 ← ((byte*)) (word) 53270
|
||||
(byte[]) TEXT#0 ← (string) "01234567@"
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
@ -226,7 +224,6 @@ main::@return: scope:[main] from main::@2
|
||||
CONTROL FLOW GRAPH WITH ASSIGNMENT CALL & RETURN
|
||||
@begin: scope:[] from
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte*) SCROLL#0 ← ((byte*)) (word) 53270
|
||||
(byte[]) TEXT#0 ← (string) "01234567@"
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
@ -287,8 +284,6 @@ INITIAL SSA SYMBOL TABLE
|
||||
(byte*) SCREEN#3
|
||||
(byte*) SCREEN#4
|
||||
(byte*) SCREEN#5
|
||||
(byte*) SCROLL
|
||||
(byte*) SCROLL#0
|
||||
(byte[]) TEXT
|
||||
(byte[]) TEXT#0
|
||||
(byte[]) TEXT#1
|
||||
@ -325,7 +320,6 @@ Succesful SSA optimization Pass2CullEmptyBlocks
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte*) SCROLL#0 ← ((byte*)) (word) 53270
|
||||
(byte[]) TEXT#0 ← (string) "01234567@"
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
@ -377,7 +371,6 @@ Succesful SSA optimization Pass2UnaryNotSimplification
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte*) SCROLL#0 ← ((byte*)) (word) 53270
|
||||
(byte[]) TEXT#0 ← (string) "01234567@"
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
@ -436,7 +429,6 @@ Succesful SSA optimization Pass2AliasElimination
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte*) SCROLL#0 ← ((byte*)) (word) 53270
|
||||
(byte[]) TEXT#0 ← (string) "01234567@"
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
@ -488,7 +480,6 @@ Succesful SSA optimization Pass2AliasElimination
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte*) SCROLL#0 ← ((byte*)) (word) 53270
|
||||
(byte[]) TEXT#0 ← (string) "01234567@"
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
@ -536,7 +527,6 @@ Succesful SSA optimization Pass2SelfPhiElimination
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte*) SCROLL#0 ← ((byte*)) (word) 53270
|
||||
(byte[]) TEXT#0 ← (string) "01234567@"
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
@ -582,7 +572,6 @@ Succesful SSA optimization Pass2RedundantPhiElimination
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte*) SCROLL#0 ← ((byte*)) (word) 53270
|
||||
(byte[]) TEXT#0 ← (string) "01234567@"
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
@ -621,7 +610,6 @@ Succesful SSA optimization Pass2ConditionalJumpSimplification
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word) 1024
|
||||
(byte*) SCROLL#0 ← ((byte*)) (word) 53270
|
||||
(byte[]) TEXT#0 ← (string) "01234567@"
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
@ -655,7 +643,6 @@ main::@return: scope:[main] from main::@2
|
||||
@end: scope:[] from @1
|
||||
|
||||
Constant (const byte*) SCREEN#0 = ((byte*))1024
|
||||
Constant (const byte*) SCROLL#0 = ((byte*))53270
|
||||
Constant (const byte[]) TEXT#0 = "01234567@"
|
||||
Constant (const byte) main::i#0 = 0
|
||||
Succesful SSA optimization Pass2ConstantIdentification
|
||||
@ -772,8 +759,6 @@ FINAL SYMBOL TABLE
|
||||
(label) @end
|
||||
(byte*) SCREEN
|
||||
(const byte*) SCREEN#0 = ((byte*))(word/signed word) 1024
|
||||
(byte*) SCROLL
|
||||
(const byte*) SCROLL#0 = ((byte*))(word) 53270
|
||||
(byte[]) TEXT
|
||||
(const byte[]) TEXT#0 = (string) "01234567@"
|
||||
(void()) main()
|
||||
@ -1003,7 +988,6 @@ Loop head: main::@1 tails: main::@2 blocks: main::@2 main::@1 main::@3 depth: 1
|
||||
|
||||
VARIABLE REGISTER WEIGHTS
|
||||
(byte*) SCREEN
|
||||
(byte*) SCROLL
|
||||
(byte[]) TEXT
|
||||
(void()) main()
|
||||
(byte) main::c
|
||||
@ -1036,7 +1020,6 @@ INITIAL ASM
|
||||
.pc = $80d "Program"
|
||||
//SEG1 Global Constants & labels
|
||||
.const SCREEN = $400
|
||||
.const SCROLL = $d016
|
||||
TEXT: .text "01234567@"
|
||||
//SEG2 @begin
|
||||
bbegin:
|
||||
@ -1157,7 +1140,6 @@ ASSEMBLER
|
||||
.pc = $80d "Program"
|
||||
//SEG1 Global Constants & labels
|
||||
.const SCREEN = $400
|
||||
.const SCROLL = $d016
|
||||
TEXT: .text "01234567@"
|
||||
//SEG2 @begin
|
||||
bbegin:
|
||||
@ -1252,7 +1234,6 @@ ASSEMBLER
|
||||
.pc = $80d "Program"
|
||||
//SEG1 Global Constants & labels
|
||||
.const SCREEN = $400
|
||||
.const SCROLL = $d016
|
||||
TEXT: .text "01234567@"
|
||||
//SEG2 @begin
|
||||
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
|
||||
@ -1339,7 +1320,6 @@ ASSEMBLER
|
||||
.pc = $80d "Program"
|
||||
//SEG1 Global Constants & labels
|
||||
.const SCREEN = $400
|
||||
.const SCROLL = $d016
|
||||
TEXT: .text "01234567@"
|
||||
//SEG2 @begin
|
||||
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
|
||||
@ -1415,7 +1395,6 @@ ASSEMBLER
|
||||
.pc = $80d "Program"
|
||||
//SEG1 Global Constants & labels
|
||||
.const SCREEN = $400
|
||||
.const SCROLL = $d016
|
||||
TEXT: .text "01234567@"
|
||||
//SEG2 @begin
|
||||
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
|
||||
@ -1491,7 +1470,6 @@ ASSEMBLER
|
||||
.pc = $80d "Program"
|
||||
//SEG1 Global Constants & labels
|
||||
.const SCREEN = $400
|
||||
.const SCROLL = $d016
|
||||
TEXT: .text "01234567@"
|
||||
//SEG2 @begin
|
||||
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
|
||||
@ -1561,8 +1539,6 @@ FINAL SYMBOL TABLE
|
||||
(label) @end
|
||||
(byte*) SCREEN
|
||||
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word) 1024
|
||||
(byte*) SCROLL
|
||||
(const byte*) SCROLL#0 SCROLL = ((byte*))(word) 53270
|
||||
(byte[]) TEXT
|
||||
(const byte[]) TEXT#0 TEXT = (string) "01234567@"
|
||||
(void()) main()
|
||||
@ -1593,7 +1569,6 @@ FINAL CODE
|
||||
.pc = $80d "Program"
|
||||
//SEG1 Global Constants & labels
|
||||
.const SCREEN = $400
|
||||
.const SCROLL = $d016
|
||||
TEXT: .text "01234567@"
|
||||
//SEG2 @begin
|
||||
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
|
||||
|
@ -3,8 +3,6 @@
|
||||
(label) @end
|
||||
(byte*) SCREEN
|
||||
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word) 1024
|
||||
(byte*) SCROLL
|
||||
(const byte*) SCROLL#0 SCROLL = ((byte*))(word) 53270
|
||||
(byte[]) TEXT
|
||||
(const byte[]) TEXT#0 TEXT = (string) "01234567@"
|
||||
(void()) main()
|
||||
|
@ -243,6 +243,7 @@ fillscreen::@return: scope:[fillscreen] from fillscreen::@2
|
||||
to:@end
|
||||
@end: scope:[] from @2
|
||||
|
||||
Eliminating unused variable - keeping the call (void~) main::$0
|
||||
Removing empty block main::@7
|
||||
Removing empty block main::@12
|
||||
Removing empty block @1
|
||||
@ -256,7 +257,7 @@ CONTROL FLOW GRAPH
|
||||
(byte*) TEXT ← (string) "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @"
|
||||
to:@2
|
||||
main: scope:[main] from
|
||||
(void~) main::$0 ← call fillscreen (byte*) SCREEN (byte/signed byte/word/signed word) 32
|
||||
call fillscreen (byte*) SCREEN (byte/signed byte/word/signed word) 32
|
||||
(byte) main::scroll ← (byte/signed byte/word/signed word) 7
|
||||
(byte*) main::nxt ← (byte*) TEXT
|
||||
(byte*~) main::$1 ← (byte*) SCREEN + (byte/signed byte/word/signed word) 40
|
||||
|
@ -611,6 +611,10 @@ fillscreen::@return: scope:[fillscreen] from fillscreen::@2
|
||||
to:@end
|
||||
@end: scope:[] from @6
|
||||
|
||||
Eliminating unused variable - keeping the call (void~) main::$0
|
||||
Eliminating unused variable - keeping the call (void~) main::$3
|
||||
Eliminating unused variable - keeping the call (void~) scroll_soft::$2
|
||||
Eliminating unused variable - keeping the call (void~) scroll_bit::$6
|
||||
Removing empty block main::@4
|
||||
Removing empty block main::@6
|
||||
Removing empty block next_char::@3
|
||||
@ -629,7 +633,7 @@ CONTROL FLOW GRAPH
|
||||
(byte*) TEXT ← (string) "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @"
|
||||
to:@1
|
||||
main: scope:[main] from
|
||||
(void~) main::$0 ← call fillscreen (byte*) SCREEN (byte/signed byte/word/signed word) 32
|
||||
call fillscreen (byte*) SCREEN (byte/signed byte/word/signed word) 32
|
||||
to:main::@2
|
||||
main::@1: scope:[main] from main::@5
|
||||
to:main::@2
|
||||
@ -643,7 +647,7 @@ main::@3: scope:[main] from main::@2 main::@3
|
||||
to:main::@5
|
||||
main::@5: scope:[main] from main::@3
|
||||
*((byte*) BGCOL) ← ++ *((byte*) BGCOL)
|
||||
(void~) main::$3 ← call scroll_soft
|
||||
call scroll_soft
|
||||
*((byte*) BGCOL) ← -- *((byte*) BGCOL)
|
||||
if(true) goto main::@1
|
||||
to:main::@return
|
||||
@ -664,7 +668,7 @@ scroll_soft::@1: scope:[scroll_soft] from scroll_soft scroll_soft::@2
|
||||
to:scroll_soft::@return
|
||||
scroll_soft::@2: scope:[scroll_soft] from scroll_soft
|
||||
(byte) scroll ← (byte/signed byte/word/signed word) 7
|
||||
(void~) scroll_soft::$2 ← call scroll_bit
|
||||
call scroll_bit
|
||||
to:scroll_soft::@1
|
||||
scroll_soft::@return: scope:[scroll_soft] from scroll_soft::@1
|
||||
return
|
||||
@ -681,7 +685,7 @@ scroll_bit: scope:[scroll_bit] from
|
||||
if((boolean~) scroll_bit::$2) goto scroll_bit::@1
|
||||
to:scroll_bit::@4
|
||||
scroll_bit::@1: scope:[scroll_bit] from scroll_bit scroll_bit::@4
|
||||
(void~) scroll_bit::$6 ← call scroll_hard
|
||||
call scroll_hard
|
||||
asm { sei }
|
||||
*((byte*) PROCPORT) ← (byte/signed byte/word/signed word) 50
|
||||
(byte*~) scroll_bit::$7 ← (byte*) SCREEN + (byte/signed byte/word/signed word) 40
|
||||
|
@ -1,31 +1,33 @@
|
||||
.pc = $801 "Basic"
|
||||
:BasicUpstart(main)
|
||||
.pc = $80d "Program"
|
||||
.const screen = $400
|
||||
jsr main
|
||||
main: {
|
||||
.label s1 = 2
|
||||
.label s3 = 3
|
||||
lda #2
|
||||
ldy #1
|
||||
ldx #1
|
||||
jsr sum
|
||||
sta s1
|
||||
lda #4
|
||||
ldy #3
|
||||
ldx #3
|
||||
jsr sum
|
||||
tax
|
||||
tay
|
||||
lda #$d
|
||||
ldy #9
|
||||
ldx #9
|
||||
jsr sum
|
||||
sta s3
|
||||
txa
|
||||
tya
|
||||
clc
|
||||
adc s1
|
||||
clc
|
||||
adc s3
|
||||
sta screen
|
||||
rts
|
||||
}
|
||||
sum: {
|
||||
sty $ff
|
||||
stx $ff
|
||||
clc
|
||||
adc $ff
|
||||
rts
|
||||
|
@ -25,16 +25,17 @@ main::@2: scope:[main] from main::@1
|
||||
main::@3: scope:[main] from main::@2
|
||||
[13] (byte) main::s3#0 ← (byte) sum::return#2 [ main::s1#0 main::s2#0 main::s3#0 ] ( main:2 [ main::s1#0 main::s2#0 main::s3#0 ] )
|
||||
[14] (byte~) main::$3 ← (byte) main::s1#0 + (byte) main::s2#0 [ main::s3#0 main::$3 ] ( main:2 [ main::s3#0 main::$3 ] )
|
||||
[15] (byte) main::s4#0 ← (byte~) main::$3 + (byte) main::s3#0 [ ] ( main:2 [ ] )
|
||||
[15] (byte) main::s4#0 ← (byte~) main::$3 + (byte) main::s3#0 [ main::s4#0 ] ( main:2 [ main::s4#0 ] )
|
||||
[16] *((const byte*) screen#0) ← (byte) main::s4#0 [ ] ( main:2 [ ] )
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@3
|
||||
[16] return [ ] ( main:2 [ ] )
|
||||
[17] return [ ] ( main:2 [ ] )
|
||||
to:@return
|
||||
sum: scope:[sum] from main main::@1 main::@2
|
||||
[17] (byte) sum::b#3 ← phi( main/(byte/signed byte/word/signed word) 2 main::@1/(byte/signed byte/word/signed word) 4 main::@2/(byte/signed byte/word/signed word) 13 ) [ sum::a#3 sum::b#3 ] ( main:2::sum:5 [ sum::a#3 sum::b#3 ] main:2::sum:8 [ main::s1#0 sum::a#3 sum::b#3 ] main:2::sum:11 [ main::s1#0 main::s2#0 sum::a#3 sum::b#3 ] )
|
||||
[17] (byte) sum::a#3 ← phi( main/(byte/signed byte/word/signed word) 1 main::@1/(byte/signed byte/word/signed word) 3 main::@2/(byte/signed byte/word/signed word) 9 ) [ sum::a#3 sum::b#3 ] ( main:2::sum:5 [ sum::a#3 sum::b#3 ] main:2::sum:8 [ main::s1#0 sum::a#3 sum::b#3 ] main:2::sum:11 [ main::s1#0 main::s2#0 sum::a#3 sum::b#3 ] )
|
||||
[18] (byte) sum::return#3 ← (byte) sum::a#3 + (byte) sum::b#3 [ sum::return#3 ] ( main:2::sum:5 [ sum::return#3 ] main:2::sum:8 [ main::s1#0 sum::return#3 ] main:2::sum:11 [ main::s1#0 main::s2#0 sum::return#3 ] )
|
||||
[18] (byte) sum::b#3 ← phi( main/(byte/signed byte/word/signed word) 2 main::@1/(byte/signed byte/word/signed word) 4 main::@2/(byte/signed byte/word/signed word) 13 ) [ sum::a#3 sum::b#3 ] ( main:2::sum:5 [ sum::a#3 sum::b#3 ] main:2::sum:8 [ main::s1#0 sum::a#3 sum::b#3 ] main:2::sum:11 [ main::s1#0 main::s2#0 sum::a#3 sum::b#3 ] )
|
||||
[18] (byte) sum::a#3 ← phi( main/(byte/signed byte/word/signed word) 1 main::@1/(byte/signed byte/word/signed word) 3 main::@2/(byte/signed byte/word/signed word) 9 ) [ sum::a#3 sum::b#3 ] ( main:2::sum:5 [ sum::a#3 sum::b#3 ] main:2::sum:8 [ main::s1#0 sum::a#3 sum::b#3 ] main:2::sum:11 [ main::s1#0 main::s2#0 sum::a#3 sum::b#3 ] )
|
||||
[19] (byte) sum::return#3 ← (byte) sum::a#3 + (byte) sum::b#3 [ sum::return#3 ] ( main:2::sum:5 [ sum::return#3 ] main:2::sum:8 [ main::s1#0 sum::return#3 ] main:2::sum:11 [ main::s1#0 main::s2#0 sum::return#3 ] )
|
||||
to:sum::@return
|
||||
sum::@return: scope:[sum] from sum
|
||||
[19] return [ sum::return#3 ] ( main:2::sum:5 [ sum::return#3 ] main:2::sum:8 [ main::s1#0 sum::return#3 ] main:2::sum:11 [ main::s1#0 main::s2#0 sum::return#3 ] )
|
||||
[20] return [ sum::return#3 ] ( main:2::sum:5 [ sum::return#3 ] main:2::sum:8 [ main::s1#0 sum::return#3 ] main:2::sum:11 [ main::s1#0 main::s2#0 sum::return#3 ] )
|
||||
to:@return
|
||||
|
@ -1,8 +1,11 @@
|
||||
byte* screen = $0400;
|
||||
|
||||
void main() {
|
||||
byte s1=sum(1,2);
|
||||
byte s2=sum(3,4);
|
||||
byte s3=sum(9,13);
|
||||
byte s4=s1+s2+s3;
|
||||
*screen = s4;
|
||||
}
|
||||
|
||||
byte sum(byte a, byte b) {
|
||||
@ -10,6 +13,7 @@ byte sum(byte a, byte b) {
|
||||
}
|
||||
|
||||
PROGRAM
|
||||
(byte*) screen ← (word/signed word) 1024
|
||||
proc (void()) main()
|
||||
(byte~) main::$0 ← call sum (byte/signed byte/word/signed word) 1 (byte/signed byte/word/signed word) 2
|
||||
(byte) main::s1 ← (byte~) main::$0
|
||||
@ -20,6 +24,7 @@ proc (void()) main()
|
||||
(byte~) main::$3 ← (byte) main::s1 + (byte) main::s2
|
||||
(byte~) main::$4 ← (byte~) main::$3 + (byte) main::s3
|
||||
(byte) main::s4 ← (byte~) main::$4
|
||||
*((byte*) screen) ← (byte) main::s4
|
||||
main::@return:
|
||||
return
|
||||
endproc // main()
|
||||
@ -45,6 +50,7 @@ SYMBOLS
|
||||
(byte) main::s2
|
||||
(byte) main::s3
|
||||
(byte) main::s4
|
||||
(byte*) screen
|
||||
(byte()) sum((byte) sum::a , (byte) sum::b)
|
||||
(byte~) sum::$0
|
||||
(label) sum::@return
|
||||
@ -52,8 +58,10 @@ SYMBOLS
|
||||
(byte) sum::b
|
||||
(byte) sum::return
|
||||
|
||||
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::$0 ← call sum (byte/signed byte/word/signed word) 1 (byte/signed byte/word/signed word) 2
|
||||
@ -65,6 +73,7 @@ main: scope:[main] from
|
||||
(byte~) main::$3 ← (byte) main::s1 + (byte) main::s2
|
||||
(byte~) main::$4 ← (byte~) main::$3 + (byte) main::s3
|
||||
(byte) main::s4 ← (byte~) main::$4
|
||||
*((byte*) screen) ← (byte) main::s4
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main
|
||||
return
|
||||
@ -90,6 +99,7 @@ Removing empty block @1
|
||||
Removing empty block sum::@1
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) screen ← ((byte*)) (word/signed word) 1024
|
||||
to:@2
|
||||
main: scope:[main] from
|
||||
(byte~) main::$0 ← call sum (byte/signed byte/word/signed word) 1 (byte/signed byte/word/signed word) 2
|
||||
@ -101,6 +111,7 @@ main: scope:[main] from
|
||||
(byte~) main::$3 ← (byte) main::s1 + (byte) main::s2
|
||||
(byte~) main::$4 ← (byte~) main::$3 + (byte) main::s3
|
||||
(byte) main::s4 ← (byte~) main::$4
|
||||
*((byte*) screen) ← (byte) main::s4
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main
|
||||
return
|
||||
@ -122,6 +133,7 @@ PROCEDURE MODIFY VARIABLE ANALYSIS
|
||||
|
||||
CONTROL FLOW GRAPH WITH ASSIGNMENT CALL
|
||||
@begin: scope:[] from
|
||||
(byte*) screen ← ((byte*)) (word/signed word) 1024
|
||||
to:@2
|
||||
main: scope:[main] from @2
|
||||
(byte) sum::a ← (byte/signed byte/word/signed word) 1
|
||||
@ -148,6 +160,7 @@ main::@3: scope:[main] from main::@2
|
||||
(byte~) main::$3 ← (byte) main::s1 + (byte) main::s2
|
||||
(byte~) main::$4 ← (byte~) main::$3 + (byte) main::s3
|
||||
(byte) main::s4 ← (byte~) main::$4
|
||||
*((byte*) screen) ← (byte) main::s4
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@3
|
||||
return
|
||||
@ -167,17 +180,23 @@ sum::@return: scope:[sum] from sum
|
||||
to:@end
|
||||
@end: scope:[] from @3
|
||||
|
||||
Completing Phi functions...
|
||||
Completing Phi functions...
|
||||
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:@2
|
||||
main: scope:[main] from @2
|
||||
(byte*) screen#4 ← phi( @2/(byte*) screen#5 )
|
||||
(byte) sum::a#0 ← (byte/signed byte/word/signed word) 1
|
||||
(byte) sum::b#0 ← (byte/signed byte/word/signed word) 2
|
||||
(byte) sum::return#0 ← call sum param-assignment
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main
|
||||
(byte*) screen#3 ← phi( main/(byte*) screen#4 )
|
||||
(byte) sum::return#5 ← phi( main/(byte) sum::return#0 )
|
||||
(byte~) main::$0 ← (byte) sum::return#5
|
||||
(byte) main::s1#0 ← (byte~) main::$0
|
||||
@ -186,6 +205,7 @@ main::@1: scope:[main] from main
|
||||
(byte) sum::return#1 ← call sum param-assignment
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1
|
||||
(byte*) screen#2 ← phi( main::@1/(byte*) screen#3 )
|
||||
(byte) main::s1#2 ← phi( main::@1/(byte) main::s1#0 )
|
||||
(byte) sum::return#6 ← phi( main::@1/(byte) sum::return#1 )
|
||||
(byte~) main::$1 ← (byte) sum::return#6
|
||||
@ -195,6 +215,7 @@ main::@2: scope:[main] from main::@1
|
||||
(byte) sum::return#2 ← call sum param-assignment
|
||||
to:main::@3
|
||||
main::@3: scope:[main] from main::@2
|
||||
(byte*) screen#1 ← phi( main::@2/(byte*) screen#2 )
|
||||
(byte) main::s2#1 ← phi( main::@2/(byte) main::s2#0 )
|
||||
(byte) main::s1#1 ← phi( main::@2/(byte) main::s1#2 )
|
||||
(byte) sum::return#7 ← phi( main::@2/(byte) sum::return#2 )
|
||||
@ -203,6 +224,7 @@ main::@3: scope:[main] from main::@2
|
||||
(byte~) main::$3 ← (byte) main::s1#1 + (byte) main::s2#1
|
||||
(byte~) main::$4 ← (byte~) main::$3 + (byte) main::s3#0
|
||||
(byte) main::s4#0 ← (byte~) main::$4
|
||||
*((byte*) screen#1) ← (byte) main::s4#0
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@3
|
||||
return
|
||||
@ -219,6 +241,7 @@ sum::@return: scope:[sum] from sum
|
||||
return (byte) sum::return#4
|
||||
to:@return
|
||||
@2: scope:[] from @begin
|
||||
(byte*) screen#5 ← phi( @begin/(byte*) screen#0 )
|
||||
call main param-assignment
|
||||
to:@3
|
||||
@3: scope:[] from @2
|
||||
@ -227,14 +250,17 @@ sum::@return: scope:[sum] from sum
|
||||
|
||||
CONTROL FLOW GRAPH WITH ASSIGNMENT CALL & RETURN
|
||||
@begin: scope:[] from
|
||||
(byte*) screen#0 ← ((byte*)) (word/signed word) 1024
|
||||
to:@2
|
||||
main: scope:[main] from @2
|
||||
(byte*) screen#4 ← phi( @2/(byte*) screen#5 )
|
||||
(byte) sum::a#0 ← (byte/signed byte/word/signed word) 1
|
||||
(byte) sum::b#0 ← (byte/signed byte/word/signed word) 2
|
||||
call sum param-assignment
|
||||
(byte) sum::return#0 ← (byte) sum::return#4
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main
|
||||
(byte*) screen#3 ← phi( main/(byte*) screen#4 )
|
||||
(byte) sum::return#5 ← phi( main/(byte) sum::return#0 )
|
||||
(byte~) main::$0 ← (byte) sum::return#5
|
||||
(byte) main::s1#0 ← (byte~) main::$0
|
||||
@ -244,6 +270,7 @@ main::@1: scope:[main] from main
|
||||
(byte) sum::return#1 ← (byte) sum::return#4
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1
|
||||
(byte*) screen#2 ← phi( main::@1/(byte*) screen#3 )
|
||||
(byte) main::s1#2 ← phi( main::@1/(byte) main::s1#0 )
|
||||
(byte) sum::return#6 ← phi( main::@1/(byte) sum::return#1 )
|
||||
(byte~) main::$1 ← (byte) sum::return#6
|
||||
@ -254,6 +281,7 @@ main::@2: scope:[main] from main::@1
|
||||
(byte) sum::return#2 ← (byte) sum::return#4
|
||||
to:main::@3
|
||||
main::@3: scope:[main] from main::@2
|
||||
(byte*) screen#1 ← phi( main::@2/(byte*) screen#2 )
|
||||
(byte) main::s2#1 ← phi( main::@2/(byte) main::s2#0 )
|
||||
(byte) main::s1#1 ← phi( main::@2/(byte) main::s1#2 )
|
||||
(byte) sum::return#7 ← phi( main::@2/(byte) sum::return#2 )
|
||||
@ -262,6 +290,7 @@ main::@3: scope:[main] from main::@2
|
||||
(byte~) main::$3 ← (byte) main::s1#1 + (byte) main::s2#1
|
||||
(byte~) main::$4 ← (byte~) main::$3 + (byte) main::s3#0
|
||||
(byte) main::s4#0 ← (byte~) main::$4
|
||||
*((byte*) screen#1) ← (byte) main::s4#0
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@3
|
||||
return
|
||||
@ -278,6 +307,7 @@ sum::@return: scope:[sum] from sum
|
||||
return
|
||||
to:@return
|
||||
@2: scope:[] from @begin
|
||||
(byte*) screen#5 ← phi( @begin/(byte*) screen#0 )
|
||||
call main param-assignment
|
||||
to:@3
|
||||
@3: scope:[] from @2
|
||||
@ -310,6 +340,13 @@ INITIAL SSA SYMBOL TABLE
|
||||
(byte) main::s3#0
|
||||
(byte) main::s4
|
||||
(byte) main::s4#0
|
||||
(byte*) screen
|
||||
(byte*) screen#0
|
||||
(byte*) screen#1
|
||||
(byte*) screen#2
|
||||
(byte*) screen#3
|
||||
(byte*) screen#4
|
||||
(byte*) screen#5
|
||||
(byte()) sum((byte) sum::a , (byte) sum::b)
|
||||
(byte~) sum::$0
|
||||
(label) sum::@return
|
||||
@ -338,14 +375,17 @@ Culled Empty Block (label) @3
|
||||
Succesful SSA optimization Pass2CullEmptyBlocks
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) screen#0 ← ((byte*)) (word/signed word) 1024
|
||||
to:@2
|
||||
main: scope:[main] from @2
|
||||
(byte*) screen#4 ← phi( @2/(byte*) screen#5 )
|
||||
(byte) sum::a#0 ← (byte/signed byte/word/signed word) 1
|
||||
(byte) sum::b#0 ← (byte/signed byte/word/signed word) 2
|
||||
call sum param-assignment
|
||||
(byte) sum::return#0 ← (byte) sum::return#4
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main
|
||||
(byte*) screen#3 ← phi( main/(byte*) screen#4 )
|
||||
(byte) sum::return#5 ← phi( main/(byte) sum::return#0 )
|
||||
(byte~) main::$0 ← (byte) sum::return#5
|
||||
(byte) main::s1#0 ← (byte~) main::$0
|
||||
@ -355,6 +395,7 @@ main::@1: scope:[main] from main
|
||||
(byte) sum::return#1 ← (byte) sum::return#4
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1
|
||||
(byte*) screen#2 ← phi( main::@1/(byte*) screen#3 )
|
||||
(byte) main::s1#2 ← phi( main::@1/(byte) main::s1#0 )
|
||||
(byte) sum::return#6 ← phi( main::@1/(byte) sum::return#1 )
|
||||
(byte~) main::$1 ← (byte) sum::return#6
|
||||
@ -365,6 +406,7 @@ main::@2: scope:[main] from main::@1
|
||||
(byte) sum::return#2 ← (byte) sum::return#4
|
||||
to:main::@3
|
||||
main::@3: scope:[main] from main::@2
|
||||
(byte*) screen#1 ← phi( main::@2/(byte*) screen#2 )
|
||||
(byte) main::s2#1 ← phi( main::@2/(byte) main::s2#0 )
|
||||
(byte) main::s1#1 ← phi( main::@2/(byte) main::s1#2 )
|
||||
(byte) sum::return#7 ← phi( main::@2/(byte) sum::return#2 )
|
||||
@ -373,6 +415,7 @@ main::@3: scope:[main] from main::@2
|
||||
(byte~) main::$3 ← (byte) main::s1#1 + (byte) main::s2#1
|
||||
(byte~) main::$4 ← (byte~) main::$3 + (byte) main::s3#0
|
||||
(byte) main::s4#0 ← (byte~) main::$4
|
||||
*((byte*) screen#1) ← (byte) main::s4#0
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@3
|
||||
return
|
||||
@ -389,10 +432,12 @@ sum::@return: scope:[sum] from sum
|
||||
return
|
||||
to:@return
|
||||
@2: scope:[] from @begin
|
||||
(byte*) screen#5 ← phi( @begin/(byte*) screen#0 )
|
||||
call main param-assignment
|
||||
to:@end
|
||||
@end: scope:[] from @2
|
||||
|
||||
Not aliassing across scopes: screen#4 screen#5
|
||||
Not aliassing across scopes: sum::return#0 sum::return#4
|
||||
Not aliassing across scopes: main::$0 sum::return#5
|
||||
Not aliassing across scopes: sum::return#1 sum::return#4
|
||||
@ -402,6 +447,7 @@ Not aliassing across scopes: main::$2 sum::return#7
|
||||
Not aliassing across scopes: sum::a#3 sum::a#0
|
||||
Not aliassing across scopes: sum::b#3 sum::b#0
|
||||
Alias (byte) sum::return#0 = (byte) sum::return#5
|
||||
Alias (byte*) screen#1 = (byte*) screen#3 (byte*) screen#4 (byte*) screen#2
|
||||
Alias (byte) main::s1#0 = (byte~) main::$0 (byte) main::s1#2 (byte) main::s1#1
|
||||
Alias (byte) sum::return#1 = (byte) sum::return#6
|
||||
Alias (byte) main::s2#0 = (byte~) main::$1 (byte) main::s2#1
|
||||
@ -409,9 +455,69 @@ Alias (byte) sum::return#2 = (byte) sum::return#7
|
||||
Alias (byte) main::s3#0 = (byte~) main::$2
|
||||
Alias (byte) main::s4#0 = (byte~) main::$4
|
||||
Alias (byte) sum::return#3 = (byte~) sum::$0 (byte) sum::return#8 (byte) sum::return#4
|
||||
Alias (byte*) screen#0 = (byte*) screen#5
|
||||
Succesful SSA optimization Pass2AliasElimination
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) screen#0 ← ((byte*)) (word/signed word) 1024
|
||||
to:@2
|
||||
main: scope:[main] from @2
|
||||
(byte*) screen#1 ← phi( @2/(byte*) screen#0 )
|
||||
(byte) sum::a#0 ← (byte/signed byte/word/signed word) 1
|
||||
(byte) sum::b#0 ← (byte/signed byte/word/signed word) 2
|
||||
call sum param-assignment
|
||||
(byte) sum::return#0 ← (byte) sum::return#3
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main
|
||||
(byte) main::s1#0 ← (byte) sum::return#0
|
||||
(byte) sum::a#1 ← (byte/signed byte/word/signed word) 3
|
||||
(byte) sum::b#1 ← (byte/signed byte/word/signed word) 4
|
||||
call sum param-assignment
|
||||
(byte) sum::return#1 ← (byte) sum::return#3
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1
|
||||
(byte) main::s2#0 ← (byte) sum::return#1
|
||||
(byte) sum::a#2 ← (byte/signed byte/word/signed word) 9
|
||||
(byte) sum::b#2 ← (byte/signed byte/word/signed word) 13
|
||||
call sum param-assignment
|
||||
(byte) sum::return#2 ← (byte) sum::return#3
|
||||
to:main::@3
|
||||
main::@3: scope:[main] from main::@2
|
||||
(byte) main::s3#0 ← (byte) sum::return#2
|
||||
(byte~) main::$3 ← (byte) main::s1#0 + (byte) main::s2#0
|
||||
(byte) main::s4#0 ← (byte~) main::$3 + (byte) main::s3#0
|
||||
*((byte*) screen#1) ← (byte) main::s4#0
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@3
|
||||
return
|
||||
to:@return
|
||||
sum: scope:[sum] from main main::@1 main::@2
|
||||
(byte) sum::b#3 ← phi( main/(byte) sum::b#0 main::@1/(byte) sum::b#1 main::@2/(byte) sum::b#2 )
|
||||
(byte) sum::a#3 ← phi( main/(byte) sum::a#0 main::@1/(byte) sum::a#1 main::@2/(byte) sum::a#2 )
|
||||
(byte) sum::return#3 ← (byte) sum::a#3 + (byte) sum::b#3
|
||||
to:sum::@return
|
||||
sum::@return: scope:[sum] from sum
|
||||
return
|
||||
to:@return
|
||||
@2: scope:[] from @begin
|
||||
call main param-assignment
|
||||
to:@end
|
||||
@end: scope:[] from @2
|
||||
|
||||
Not aliassing across scopes: screen#1 screen#0
|
||||
Not aliassing across scopes: sum::return#0 sum::return#3
|
||||
Not aliassing across scopes: main::s1#0 sum::return#0
|
||||
Not aliassing across scopes: sum::return#1 sum::return#3
|
||||
Not aliassing across scopes: main::s2#0 sum::return#1
|
||||
Not aliassing across scopes: sum::return#2 sum::return#3
|
||||
Not aliassing across scopes: main::s3#0 sum::return#2
|
||||
Not aliassing across scopes: sum::a#3 sum::a#0
|
||||
Not aliassing across scopes: sum::b#3 sum::b#0
|
||||
Redundant Phi (byte*) screen#1 (byte*) screen#0
|
||||
Succesful SSA optimization Pass2RedundantPhiElimination
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
(byte*) screen#0 ← ((byte*)) (word/signed word) 1024
|
||||
to:@2
|
||||
main: scope:[main] from @2
|
||||
(byte) sum::a#0 ← (byte/signed byte/word/signed word) 1
|
||||
@ -437,6 +543,7 @@ main::@3: scope:[main] from main::@2
|
||||
(byte) main::s3#0 ← (byte) sum::return#2
|
||||
(byte~) main::$3 ← (byte) main::s1#0 + (byte) main::s2#0
|
||||
(byte) main::s4#0 ← (byte~) main::$3 + (byte) main::s3#0
|
||||
*((byte*) screen#0) ← (byte) main::s4#0
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@3
|
||||
return
|
||||
@ -454,14 +561,7 @@ sum::@return: scope:[sum] from sum
|
||||
to:@end
|
||||
@end: scope:[] from @2
|
||||
|
||||
Not aliassing across scopes: sum::return#0 sum::return#3
|
||||
Not aliassing across scopes: main::s1#0 sum::return#0
|
||||
Not aliassing across scopes: sum::return#1 sum::return#3
|
||||
Not aliassing across scopes: main::s2#0 sum::return#1
|
||||
Not aliassing across scopes: sum::return#2 sum::return#3
|
||||
Not aliassing across scopes: main::s3#0 sum::return#2
|
||||
Not aliassing across scopes: sum::a#3 sum::a#0
|
||||
Not aliassing across scopes: sum::b#3 sum::b#0
|
||||
Constant (const byte*) screen#0 = ((byte*))1024
|
||||
Constant (const byte) sum::a#0 = 1
|
||||
Constant (const byte) sum::b#0 = 2
|
||||
Constant (const byte) sum::a#1 = 3
|
||||
@ -490,6 +590,7 @@ main::@3: scope:[main] from main::@2
|
||||
(byte) main::s3#0 ← (byte) sum::return#2
|
||||
(byte~) main::$3 ← (byte) main::s1#0 + (byte) main::s2#0
|
||||
(byte) main::s4#0 ← (byte~) main::$3 + (byte) main::s3#0
|
||||
*((const byte*) screen#0) ← (byte) main::s4#0
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@3
|
||||
return
|
||||
@ -559,6 +660,7 @@ main::@3: scope:[main] from main::@2
|
||||
(byte) main::s3#0 ← (byte) sum::return#2
|
||||
(byte~) main::$3 ← (byte) main::s1#0 + (byte) main::s2#0
|
||||
(byte) main::s4#0 ← (byte~) main::$3 + (byte) main::s3#0
|
||||
*((const byte*) screen#0) ← (byte) main::s4#0
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@3
|
||||
return
|
||||
@ -594,6 +696,8 @@ FINAL SYMBOL TABLE
|
||||
(byte) main::s3#0
|
||||
(byte) main::s4
|
||||
(byte) main::s4#0
|
||||
(byte*) screen
|
||||
(const byte*) screen#0 = ((byte*))(word/signed word) 1024
|
||||
(byte()) sum((byte) sum::a , (byte) sum::b)
|
||||
(label) sum::@return
|
||||
(byte) sum::a
|
||||
@ -633,6 +737,7 @@ main::@3: scope:[main] from main::@2
|
||||
(byte) main::s3#0 ← (byte) sum::return#2
|
||||
(byte~) main::$3 ← (byte) main::s1#0 + (byte) main::s2#0
|
||||
(byte) main::s4#0 ← (byte~) main::$3 + (byte) main::s3#0
|
||||
*((const byte*) screen#0) ← (byte) main::s4#0
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@3
|
||||
return
|
||||
@ -690,18 +795,19 @@ main::@2: scope:[main] from main::@1
|
||||
main::@3: scope:[main] from main::@2
|
||||
[13] (byte) main::s3#0 ← (byte) sum::return#2 [ main::s1#0 main::s2#0 main::s3#0 ]
|
||||
[14] (byte~) main::$3 ← (byte) main::s1#0 + (byte) main::s2#0 [ main::s3#0 main::$3 ]
|
||||
[15] (byte) main::s4#0 ← (byte~) main::$3 + (byte) main::s3#0 [ ]
|
||||
[15] (byte) main::s4#0 ← (byte~) main::$3 + (byte) main::s3#0 [ main::s4#0 ]
|
||||
[16] *((const byte*) screen#0) ← (byte) main::s4#0 [ ]
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@3
|
||||
[16] return [ ]
|
||||
[17] return [ ]
|
||||
to:@return
|
||||
sum: scope:[sum] from main main::@1 main::@2
|
||||
[17] (byte) sum::b#3 ← phi( main/(byte/signed byte/word/signed word) 2 main::@1/(byte/signed byte/word/signed word) 4 main::@2/(byte/signed byte/word/signed word) 13 ) [ sum::a#3 sum::b#3 ]
|
||||
[17] (byte) sum::a#3 ← phi( main/(byte/signed byte/word/signed word) 1 main::@1/(byte/signed byte/word/signed word) 3 main::@2/(byte/signed byte/word/signed word) 9 ) [ sum::a#3 sum::b#3 ]
|
||||
[18] (byte) sum::return#3 ← (byte) sum::a#3 + (byte) sum::b#3 [ sum::return#3 ]
|
||||
[18] (byte) sum::b#3 ← phi( main/(byte/signed byte/word/signed word) 2 main::@1/(byte/signed byte/word/signed word) 4 main::@2/(byte/signed byte/word/signed word) 13 ) [ sum::a#3 sum::b#3 ]
|
||||
[18] (byte) sum::a#3 ← phi( main/(byte/signed byte/word/signed word) 1 main::@1/(byte/signed byte/word/signed word) 3 main::@2/(byte/signed byte/word/signed word) 9 ) [ sum::a#3 sum::b#3 ]
|
||||
[19] (byte) sum::return#3 ← (byte) sum::a#3 + (byte) sum::b#3 [ sum::return#3 ]
|
||||
to:sum::@return
|
||||
sum::@return: scope:[sum] from sum
|
||||
[19] return [ sum::return#3 ]
|
||||
[20] return [ sum::return#3 ]
|
||||
to:@return
|
||||
|
||||
Created 2 initial phi equivalence classes
|
||||
@ -747,18 +853,19 @@ main::@2: scope:[main] from main::@1
|
||||
main::@3: scope:[main] from main::@2
|
||||
[13] (byte) main::s3#0 ← (byte) sum::return#2 [ main::s1#0 main::s2#0 main::s3#0 ]
|
||||
[14] (byte~) main::$3 ← (byte) main::s1#0 + (byte) main::s2#0 [ main::s3#0 main::$3 ]
|
||||
[15] (byte) main::s4#0 ← (byte~) main::$3 + (byte) main::s3#0 [ ]
|
||||
[15] (byte) main::s4#0 ← (byte~) main::$3 + (byte) main::s3#0 [ main::s4#0 ]
|
||||
[16] *((const byte*) screen#0) ← (byte) main::s4#0 [ ]
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@3
|
||||
[16] return [ ]
|
||||
[17] return [ ]
|
||||
to:@return
|
||||
sum: scope:[sum] from main main::@1 main::@2
|
||||
[17] (byte) sum::b#3 ← phi( main/(byte/signed byte/word/signed word) 2 main::@1/(byte/signed byte/word/signed word) 4 main::@2/(byte/signed byte/word/signed word) 13 ) [ sum::a#3 sum::b#3 ]
|
||||
[17] (byte) sum::a#3 ← phi( main/(byte/signed byte/word/signed word) 1 main::@1/(byte/signed byte/word/signed word) 3 main::@2/(byte/signed byte/word/signed word) 9 ) [ sum::a#3 sum::b#3 ]
|
||||
[18] (byte) sum::return#3 ← (byte) sum::a#3 + (byte) sum::b#3 [ sum::return#3 ]
|
||||
[18] (byte) sum::b#3 ← phi( main/(byte/signed byte/word/signed word) 2 main::@1/(byte/signed byte/word/signed word) 4 main::@2/(byte/signed byte/word/signed word) 13 ) [ sum::a#3 sum::b#3 ]
|
||||
[18] (byte) sum::a#3 ← phi( main/(byte/signed byte/word/signed word) 1 main::@1/(byte/signed byte/word/signed word) 3 main::@2/(byte/signed byte/word/signed word) 9 ) [ sum::a#3 sum::b#3 ]
|
||||
[19] (byte) sum::return#3 ← (byte) sum::a#3 + (byte) sum::b#3 [ sum::return#3 ]
|
||||
to:sum::@return
|
||||
sum::@return: scope:[sum] from sum
|
||||
[19] return [ sum::return#3 ]
|
||||
[20] return [ sum::return#3 ]
|
||||
to:@return
|
||||
|
||||
CONTROL FLOW GRAPH - PHI MEM COALESCED
|
||||
@ -789,18 +896,19 @@ main::@2: scope:[main] from main::@1
|
||||
main::@3: scope:[main] from main::@2
|
||||
[13] (byte) main::s3#0 ← (byte) sum::return#2 [ main::s1#0 main::s2#0 main::s3#0 ] ( main:2 [ main::s1#0 main::s2#0 main::s3#0 ] )
|
||||
[14] (byte~) main::$3 ← (byte) main::s1#0 + (byte) main::s2#0 [ main::s3#0 main::$3 ] ( main:2 [ main::s3#0 main::$3 ] )
|
||||
[15] (byte) main::s4#0 ← (byte~) main::$3 + (byte) main::s3#0 [ ] ( main:2 [ ] )
|
||||
[15] (byte) main::s4#0 ← (byte~) main::$3 + (byte) main::s3#0 [ main::s4#0 ] ( main:2 [ main::s4#0 ] )
|
||||
[16] *((const byte*) screen#0) ← (byte) main::s4#0 [ ] ( main:2 [ ] )
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@3
|
||||
[16] return [ ] ( main:2 [ ] )
|
||||
[17] return [ ] ( main:2 [ ] )
|
||||
to:@return
|
||||
sum: scope:[sum] from main main::@1 main::@2
|
||||
[17] (byte) sum::b#3 ← phi( main/(byte/signed byte/word/signed word) 2 main::@1/(byte/signed byte/word/signed word) 4 main::@2/(byte/signed byte/word/signed word) 13 ) [ sum::a#3 sum::b#3 ] ( main:2::sum:5 [ sum::a#3 sum::b#3 ] main:2::sum:8 [ main::s1#0 sum::a#3 sum::b#3 ] main:2::sum:11 [ main::s1#0 main::s2#0 sum::a#3 sum::b#3 ] )
|
||||
[17] (byte) sum::a#3 ← phi( main/(byte/signed byte/word/signed word) 1 main::@1/(byte/signed byte/word/signed word) 3 main::@2/(byte/signed byte/word/signed word) 9 ) [ sum::a#3 sum::b#3 ] ( main:2::sum:5 [ sum::a#3 sum::b#3 ] main:2::sum:8 [ main::s1#0 sum::a#3 sum::b#3 ] main:2::sum:11 [ main::s1#0 main::s2#0 sum::a#3 sum::b#3 ] )
|
||||
[18] (byte) sum::return#3 ← (byte) sum::a#3 + (byte) sum::b#3 [ sum::return#3 ] ( main:2::sum:5 [ sum::return#3 ] main:2::sum:8 [ main::s1#0 sum::return#3 ] main:2::sum:11 [ main::s1#0 main::s2#0 sum::return#3 ] )
|
||||
[18] (byte) sum::b#3 ← phi( main/(byte/signed byte/word/signed word) 2 main::@1/(byte/signed byte/word/signed word) 4 main::@2/(byte/signed byte/word/signed word) 13 ) [ sum::a#3 sum::b#3 ] ( main:2::sum:5 [ sum::a#3 sum::b#3 ] main:2::sum:8 [ main::s1#0 sum::a#3 sum::b#3 ] main:2::sum:11 [ main::s1#0 main::s2#0 sum::a#3 sum::b#3 ] )
|
||||
[18] (byte) sum::a#3 ← phi( main/(byte/signed byte/word/signed word) 1 main::@1/(byte/signed byte/word/signed word) 3 main::@2/(byte/signed byte/word/signed word) 9 ) [ sum::a#3 sum::b#3 ] ( main:2::sum:5 [ sum::a#3 sum::b#3 ] main:2::sum:8 [ main::s1#0 sum::a#3 sum::b#3 ] main:2::sum:11 [ main::s1#0 main::s2#0 sum::a#3 sum::b#3 ] )
|
||||
[19] (byte) sum::return#3 ← (byte) sum::a#3 + (byte) sum::b#3 [ sum::return#3 ] ( main:2::sum:5 [ sum::return#3 ] main:2::sum:8 [ main::s1#0 sum::return#3 ] main:2::sum:11 [ main::s1#0 main::s2#0 sum::return#3 ] )
|
||||
to:sum::@return
|
||||
sum::@return: scope:[sum] from sum
|
||||
[19] return [ sum::return#3 ] ( main:2::sum:5 [ sum::return#3 ] main:2::sum:8 [ main::s1#0 sum::return#3 ] main:2::sum:11 [ main::s1#0 main::s2#0 sum::return#3 ] )
|
||||
[20] return [ sum::return#3 ] ( main:2::sum:5 [ sum::return#3 ] main:2::sum:8 [ main::s1#0 sum::return#3 ] main:2::sum:11 [ main::s1#0 main::s2#0 sum::return#3 ] )
|
||||
to:@return
|
||||
|
||||
DOMINATORS
|
||||
@ -833,7 +941,8 @@ VARIABLE REGISTER WEIGHTS
|
||||
(byte) main::s3
|
||||
(byte) main::s3#0 2.0
|
||||
(byte) main::s4
|
||||
(byte) main::s4#0 20.0
|
||||
(byte) main::s4#0 4.0
|
||||
(byte*) screen
|
||||
(byte()) sum((byte) sum::a , (byte) sum::b)
|
||||
(byte) sum::a
|
||||
(byte) sum::a#3 2.0
|
||||
@ -886,6 +995,7 @@ INITIAL ASM
|
||||
:BasicUpstart(main)
|
||||
.pc = $80d "Program"
|
||||
//SEG1 Global Constants & labels
|
||||
.const screen = $400
|
||||
//SEG2 @begin
|
||||
bbegin:
|
||||
//SEG3 [1] phi from @begin to @2 [phi:@begin->@2]
|
||||
@ -910,12 +1020,12 @@ main: {
|
||||
.label s3 = 9
|
||||
.label s4 = $b
|
||||
//SEG10 [5] call sum param-assignment [ sum::return#3 ] ( main:2 [ sum::return#3 ] )
|
||||
//SEG11 [17] phi from main to sum [phi:main->sum]
|
||||
//SEG11 [18] phi from main to sum [phi:main->sum]
|
||||
sum_from_main:
|
||||
//SEG12 [17] phi (byte) sum::b#3 = (byte/signed byte/word/signed word) 2 [phi:main->sum#0] -- zpby1=coby1
|
||||
//SEG12 [18] phi (byte) sum::b#3 = (byte/signed byte/word/signed word) 2 [phi:main->sum#0] -- zpby1=coby1
|
||||
lda #2
|
||||
sta sum.b
|
||||
//SEG13 [17] phi (byte) sum::a#3 = (byte/signed byte/word/signed word) 1 [phi:main->sum#1] -- zpby1=coby1
|
||||
//SEG13 [18] phi (byte) sum::a#3 = (byte/signed byte/word/signed word) 1 [phi:main->sum#1] -- zpby1=coby1
|
||||
lda #1
|
||||
sta sum.a
|
||||
jsr sum
|
||||
@ -929,12 +1039,12 @@ main: {
|
||||
lda sum.return
|
||||
sta s1
|
||||
//SEG17 [8] call sum param-assignment [ sum::return#3 main::s1#0 ] ( main:2 [ sum::return#3 main::s1#0 ] )
|
||||
//SEG18 [17] phi from main::@1 to sum [phi:main::@1->sum]
|
||||
//SEG18 [18] phi from main::@1 to sum [phi:main::@1->sum]
|
||||
sum_from_b1:
|
||||
//SEG19 [17] phi (byte) sum::b#3 = (byte/signed byte/word/signed word) 4 [phi:main::@1->sum#0] -- zpby1=coby1
|
||||
//SEG19 [18] phi (byte) sum::b#3 = (byte/signed byte/word/signed word) 4 [phi:main::@1->sum#0] -- zpby1=coby1
|
||||
lda #4
|
||||
sta sum.b
|
||||
//SEG20 [17] phi (byte) sum::a#3 = (byte/signed byte/word/signed word) 3 [phi:main::@1->sum#1] -- zpby1=coby1
|
||||
//SEG20 [18] phi (byte) sum::a#3 = (byte/signed byte/word/signed word) 3 [phi:main::@1->sum#1] -- zpby1=coby1
|
||||
lda #3
|
||||
sta sum.a
|
||||
jsr sum
|
||||
@ -948,12 +1058,12 @@ main: {
|
||||
lda sum.return_1
|
||||
sta s2
|
||||
//SEG24 [11] call sum param-assignment [ sum::return#3 main::s1#0 main::s2#0 ] ( main:2 [ sum::return#3 main::s1#0 main::s2#0 ] )
|
||||
//SEG25 [17] phi from main::@2 to sum [phi:main::@2->sum]
|
||||
//SEG25 [18] phi from main::@2 to sum [phi:main::@2->sum]
|
||||
sum_from_b2:
|
||||
//SEG26 [17] phi (byte) sum::b#3 = (byte/signed byte/word/signed word) 13 [phi:main::@2->sum#0] -- zpby1=coby1
|
||||
//SEG26 [18] phi (byte) sum::b#3 = (byte/signed byte/word/signed word) 13 [phi:main::@2->sum#0] -- zpby1=coby1
|
||||
lda #$d
|
||||
sta sum.b
|
||||
//SEG27 [17] phi (byte) sum::a#3 = (byte/signed byte/word/signed word) 9 [phi:main::@2->sum#1] -- zpby1=coby1
|
||||
//SEG27 [18] phi (byte) sum::a#3 = (byte/signed byte/word/signed word) 9 [phi:main::@2->sum#1] -- zpby1=coby1
|
||||
lda #9
|
||||
sta sum.a
|
||||
jsr sum
|
||||
@ -971,18 +1081,21 @@ main: {
|
||||
clc
|
||||
adc s2
|
||||
sta _3
|
||||
//SEG32 [15] (byte) main::s4#0 ← (byte~) main::$3 + (byte) main::s3#0 [ ] ( main:2 [ ] ) -- zpby1=zpby2_plus_zpby3
|
||||
//SEG32 [15] (byte) main::s4#0 ← (byte~) main::$3 + (byte) main::s3#0 [ main::s4#0 ] ( main:2 [ main::s4#0 ] ) -- zpby1=zpby2_plus_zpby3
|
||||
lda _3
|
||||
clc
|
||||
adc s3
|
||||
sta s4
|
||||
//SEG33 [16] *((const byte*) screen#0) ← (byte) main::s4#0 [ ] ( main:2 [ ] ) -- _deref_cowo1=zpby1
|
||||
lda s4
|
||||
sta screen
|
||||
jmp breturn
|
||||
//SEG33 main::@return
|
||||
//SEG34 main::@return
|
||||
breturn:
|
||||
//SEG34 [16] return [ ] ( main:2 [ ] )
|
||||
//SEG35 [17] return [ ] ( main:2 [ ] )
|
||||
rts
|
||||
}
|
||||
//SEG35 sum
|
||||
//SEG36 sum
|
||||
sum: {
|
||||
.label return = 4
|
||||
.label return_1 = 6
|
||||
@ -990,15 +1103,15 @@ sum: {
|
||||
.label return_3 = $c
|
||||
.label a = 2
|
||||
.label b = 3
|
||||
//SEG36 [18] (byte) sum::return#3 ← (byte) sum::a#3 + (byte) sum::b#3 [ sum::return#3 ] ( main:2::sum:5 [ sum::return#3 ] main:2::sum:8 [ main::s1#0 sum::return#3 ] main:2::sum:11 [ main::s1#0 main::s2#0 sum::return#3 ] ) -- zpby1=zpby2_plus_zpby3
|
||||
//SEG37 [19] (byte) sum::return#3 ← (byte) sum::a#3 + (byte) sum::b#3 [ sum::return#3 ] ( main:2::sum:5 [ sum::return#3 ] main:2::sum:8 [ main::s1#0 sum::return#3 ] main:2::sum:11 [ main::s1#0 main::s2#0 sum::return#3 ] ) -- zpby1=zpby2_plus_zpby3
|
||||
lda a
|
||||
clc
|
||||
adc b
|
||||
sta return_3
|
||||
jmp breturn
|
||||
//SEG37 sum::@return
|
||||
//SEG38 sum::@return
|
||||
breturn:
|
||||
//SEG38 [19] return [ sum::return#3 ] ( main:2::sum:5 [ sum::return#3 ] main:2::sum:8 [ main::s1#0 sum::return#3 ] main:2::sum:11 [ main::s1#0 main::s2#0 sum::return#3 ] )
|
||||
//SEG39 [20] return [ sum::return#3 ] ( main:2::sum:5 [ sum::return#3 ] main:2::sum:8 [ main::s1#0 sum::return#3 ] main:2::sum:11 [ main::s1#0 main::s2#0 sum::return#3 ] )
|
||||
rts
|
||||
}
|
||||
|
||||
@ -1016,17 +1129,17 @@ Potential registers zp ZP_BYTE:11 [ main::s4#0 ] : zp ZP_BYTE:11 , reg byte a ,
|
||||
Potential registers zp ZP_BYTE:12 [ sum::return#3 ] : zp ZP_BYTE:12 , reg byte a , reg byte x , reg byte y ,
|
||||
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [main] 20: zp ZP_BYTE:11 [ main::s4#0 ] 4: zp ZP_BYTE:10 [ main::$3 ] 2: zp ZP_BYTE:9 [ main::s3#0 ] 1: zp ZP_BYTE:7 [ main::s2#0 ] 0.57: zp ZP_BYTE:5 [ main::s1#0 ]
|
||||
Uplift Scope [sum] 4: zp ZP_BYTE:4 [ sum::return#0 ] 4: zp ZP_BYTE:6 [ sum::return#1 ] 4: zp ZP_BYTE:8 [ sum::return#2 ] 2: zp ZP_BYTE:2 [ sum::a#3 ] 2: zp ZP_BYTE:3 [ sum::b#3 ] 1.6: zp ZP_BYTE:12 [ sum::return#3 ]
|
||||
Uplift Scope [main] 4: zp ZP_BYTE:10 [ main::$3 ] 4: zp ZP_BYTE:11 [ main::s4#0 ] 2: zp ZP_BYTE:9 [ main::s3#0 ] 1: zp ZP_BYTE:7 [ main::s2#0 ] 0.57: zp ZP_BYTE:5 [ main::s1#0 ]
|
||||
Uplift Scope []
|
||||
|
||||
Uplifting [main] best 143 combination reg byte a [ main::s4#0 ] reg byte a [ main::$3 ] zp ZP_BYTE:9 [ main::s3#0 ] reg byte x [ main::s2#0 ] zp ZP_BYTE:5 [ main::s1#0 ]
|
||||
Uplifting [sum] best 99 combination reg byte a [ sum::return#0 ] reg byte a [ sum::return#1 ] reg byte a [ sum::return#2 ] reg byte y [ sum::a#3 ] reg byte a [ sum::b#3 ] reg byte a [ sum::return#3 ]
|
||||
Uplifting [] best 99 combination
|
||||
Uplifting [sum] best 117 combination reg byte a [ sum::return#0 ] reg byte a [ sum::return#1 ] reg byte a [ sum::return#2 ] reg byte x [ sum::a#3 ] reg byte a [ sum::b#3 ] reg byte a [ sum::return#3 ]
|
||||
Uplifting [main] best 103 combination reg byte a [ main::$3 ] reg byte a [ main::s4#0 ] zp ZP_BYTE:9 [ main::s3#0 ] reg byte y [ main::s2#0 ] zp ZP_BYTE:5 [ main::s1#0 ]
|
||||
Uplifting [] best 103 combination
|
||||
Attempting to uplift remaining variables inzp ZP_BYTE:9 [ main::s3#0 ]
|
||||
Uplifting [main] best 99 combination zp ZP_BYTE:9 [ main::s3#0 ]
|
||||
Uplifting [main] best 103 combination zp ZP_BYTE:9 [ main::s3#0 ]
|
||||
Attempting to uplift remaining variables inzp ZP_BYTE:5 [ main::s1#0 ]
|
||||
Uplifting [main] best 99 combination zp ZP_BYTE:5 [ main::s1#0 ]
|
||||
Uplifting [main] best 103 combination zp ZP_BYTE:5 [ main::s1#0 ]
|
||||
Allocated (was zp ZP_BYTE:5) zp ZP_BYTE:2 [ main::s1#0 ]
|
||||
Allocated (was zp ZP_BYTE:9) zp ZP_BYTE:3 [ main::s3#0 ]
|
||||
Removing instruction jmp b2
|
||||
@ -1043,6 +1156,7 @@ ASSEMBLER
|
||||
:BasicUpstart(main)
|
||||
.pc = $80d "Program"
|
||||
//SEG1 Global Constants & labels
|
||||
.const screen = $400
|
||||
//SEG2 @begin
|
||||
bbegin:
|
||||
//SEG3 [1] phi from @begin to @2 [phi:@begin->@2]
|
||||
@ -1062,12 +1176,12 @@ main: {
|
||||
.label s1 = 2
|
||||
.label s3 = 3
|
||||
//SEG10 [5] call sum param-assignment [ sum::return#3 ] ( main:2 [ sum::return#3 ] )
|
||||
//SEG11 [17] phi from main to sum [phi:main->sum]
|
||||
//SEG11 [18] phi from main to sum [phi:main->sum]
|
||||
sum_from_main:
|
||||
//SEG12 [17] phi (byte) sum::b#3 = (byte/signed byte/word/signed word) 2 [phi:main->sum#0] -- aby=coby1
|
||||
//SEG12 [18] phi (byte) sum::b#3 = (byte/signed byte/word/signed word) 2 [phi:main->sum#0] -- aby=coby1
|
||||
lda #2
|
||||
//SEG13 [17] phi (byte) sum::a#3 = (byte/signed byte/word/signed word) 1 [phi:main->sum#1] -- yby=coby1
|
||||
ldy #1
|
||||
//SEG13 [18] phi (byte) sum::a#3 = (byte/signed byte/word/signed word) 1 [phi:main->sum#1] -- xby=coby1
|
||||
ldx #1
|
||||
jsr sum
|
||||
//SEG14 [6] (byte) sum::return#0 ← (byte) sum::return#3 [ sum::return#0 ] ( main:2 [ sum::return#0 ] )
|
||||
// (byte) sum::return#0 = (byte) sum::return#3 // register copy reg byte a
|
||||
@ -1076,26 +1190,26 @@ main: {
|
||||
//SEG16 [7] (byte) main::s1#0 ← (byte) sum::return#0 [ main::s1#0 ] ( main:2 [ main::s1#0 ] ) -- zpby1=aby
|
||||
sta s1
|
||||
//SEG17 [8] call sum param-assignment [ sum::return#3 main::s1#0 ] ( main:2 [ sum::return#3 main::s1#0 ] )
|
||||
//SEG18 [17] phi from main::@1 to sum [phi:main::@1->sum]
|
||||
//SEG18 [18] phi from main::@1 to sum [phi:main::@1->sum]
|
||||
sum_from_b1:
|
||||
//SEG19 [17] phi (byte) sum::b#3 = (byte/signed byte/word/signed word) 4 [phi:main::@1->sum#0] -- aby=coby1
|
||||
//SEG19 [18] phi (byte) sum::b#3 = (byte/signed byte/word/signed word) 4 [phi:main::@1->sum#0] -- aby=coby1
|
||||
lda #4
|
||||
//SEG20 [17] phi (byte) sum::a#3 = (byte/signed byte/word/signed word) 3 [phi:main::@1->sum#1] -- yby=coby1
|
||||
ldy #3
|
||||
//SEG20 [18] phi (byte) sum::a#3 = (byte/signed byte/word/signed word) 3 [phi:main::@1->sum#1] -- xby=coby1
|
||||
ldx #3
|
||||
jsr sum
|
||||
//SEG21 [9] (byte) sum::return#1 ← (byte) sum::return#3 [ main::s1#0 sum::return#1 ] ( main:2 [ main::s1#0 sum::return#1 ] )
|
||||
// (byte) sum::return#1 = (byte) sum::return#3 // register copy reg byte a
|
||||
//SEG22 main::@2
|
||||
b2:
|
||||
//SEG23 [10] (byte) main::s2#0 ← (byte) sum::return#1 [ main::s1#0 main::s2#0 ] ( main:2 [ main::s1#0 main::s2#0 ] ) -- xby=aby
|
||||
tax
|
||||
//SEG23 [10] (byte) main::s2#0 ← (byte) sum::return#1 [ main::s1#0 main::s2#0 ] ( main:2 [ main::s1#0 main::s2#0 ] ) -- yby=aby
|
||||
tay
|
||||
//SEG24 [11] call sum param-assignment [ sum::return#3 main::s1#0 main::s2#0 ] ( main:2 [ sum::return#3 main::s1#0 main::s2#0 ] )
|
||||
//SEG25 [17] phi from main::@2 to sum [phi:main::@2->sum]
|
||||
//SEG25 [18] phi from main::@2 to sum [phi:main::@2->sum]
|
||||
sum_from_b2:
|
||||
//SEG26 [17] phi (byte) sum::b#3 = (byte/signed byte/word/signed word) 13 [phi:main::@2->sum#0] -- aby=coby1
|
||||
//SEG26 [18] phi (byte) sum::b#3 = (byte/signed byte/word/signed word) 13 [phi:main::@2->sum#0] -- aby=coby1
|
||||
lda #$d
|
||||
//SEG27 [17] phi (byte) sum::a#3 = (byte/signed byte/word/signed word) 9 [phi:main::@2->sum#1] -- yby=coby1
|
||||
ldy #9
|
||||
//SEG27 [18] phi (byte) sum::a#3 = (byte/signed byte/word/signed word) 9 [phi:main::@2->sum#1] -- xby=coby1
|
||||
ldx #9
|
||||
jsr sum
|
||||
//SEG28 [12] (byte) sum::return#2 ← (byte) sum::return#3 [ main::s1#0 main::s2#0 sum::return#2 ] ( main:2 [ main::s1#0 main::s2#0 sum::return#2 ] )
|
||||
// (byte) sum::return#2 = (byte) sum::return#3 // register copy reg byte a
|
||||
@ -1103,27 +1217,29 @@ main: {
|
||||
b3:
|
||||
//SEG30 [13] (byte) main::s3#0 ← (byte) sum::return#2 [ main::s1#0 main::s2#0 main::s3#0 ] ( main:2 [ main::s1#0 main::s2#0 main::s3#0 ] ) -- zpby1=aby
|
||||
sta s3
|
||||
//SEG31 [14] (byte~) main::$3 ← (byte) main::s1#0 + (byte) main::s2#0 [ main::s3#0 main::$3 ] ( main:2 [ main::s3#0 main::$3 ] ) -- aby=zpby1_plus_xby
|
||||
txa
|
||||
//SEG31 [14] (byte~) main::$3 ← (byte) main::s1#0 + (byte) main::s2#0 [ main::s3#0 main::$3 ] ( main:2 [ main::s3#0 main::$3 ] ) -- aby=zpby1_plus_yby
|
||||
tya
|
||||
clc
|
||||
adc s1
|
||||
//SEG32 [15] (byte) main::s4#0 ← (byte~) main::$3 + (byte) main::s3#0 [ ] ( main:2 [ ] ) -- aby=aby_plus_zpby1
|
||||
//SEG32 [15] (byte) main::s4#0 ← (byte~) main::$3 + (byte) main::s3#0 [ main::s4#0 ] ( main:2 [ main::s4#0 ] ) -- aby=aby_plus_zpby1
|
||||
clc
|
||||
adc s3
|
||||
//SEG33 main::@return
|
||||
//SEG33 [16] *((const byte*) screen#0) ← (byte) main::s4#0 [ ] ( main:2 [ ] ) -- _deref_cowo1=aby
|
||||
sta screen
|
||||
//SEG34 main::@return
|
||||
breturn:
|
||||
//SEG34 [16] return [ ] ( main:2 [ ] )
|
||||
//SEG35 [17] return [ ] ( main:2 [ ] )
|
||||
rts
|
||||
}
|
||||
//SEG35 sum
|
||||
//SEG36 sum
|
||||
sum: {
|
||||
//SEG36 [18] (byte) sum::return#3 ← (byte) sum::a#3 + (byte) sum::b#3 [ sum::return#3 ] ( main:2::sum:5 [ sum::return#3 ] main:2::sum:8 [ main::s1#0 sum::return#3 ] main:2::sum:11 [ main::s1#0 main::s2#0 sum::return#3 ] ) -- aby=yby_plus_aby
|
||||
sty $ff
|
||||
//SEG37 [19] (byte) sum::return#3 ← (byte) sum::a#3 + (byte) sum::b#3 [ sum::return#3 ] ( main:2::sum:5 [ sum::return#3 ] main:2::sum:8 [ main::s1#0 sum::return#3 ] main:2::sum:11 [ main::s1#0 main::s2#0 sum::return#3 ] ) -- aby=xby_plus_aby
|
||||
stx $ff
|
||||
clc
|
||||
adc $ff
|
||||
//SEG37 sum::@return
|
||||
//SEG38 sum::@return
|
||||
breturn:
|
||||
//SEG38 [19] return [ sum::return#3 ] ( main:2::sum:5 [ sum::return#3 ] main:2::sum:8 [ main::s1#0 sum::return#3 ] main:2::sum:11 [ main::s1#0 main::s2#0 sum::return#3 ] )
|
||||
//SEG39 [20] return [ sum::return#3 ] ( main:2::sum:5 [ sum::return#3 ] main:2::sum:8 [ main::s1#0 sum::return#3 ] main:2::sum:11 [ main::s1#0 main::s2#0 sum::return#3 ] )
|
||||
rts
|
||||
}
|
||||
|
||||
@ -1138,6 +1254,7 @@ ASSEMBLER
|
||||
:BasicUpstart(main)
|
||||
.pc = $80d "Program"
|
||||
//SEG1 Global Constants & labels
|
||||
.const screen = $400
|
||||
//SEG2 @begin
|
||||
//SEG3 [1] phi from @begin to @2 [phi:@begin->@2]
|
||||
//SEG4 @2
|
||||
@ -1153,12 +1270,12 @@ main: {
|
||||
.label s1 = 2
|
||||
.label s3 = 3
|
||||
//SEG10 [5] call sum param-assignment [ sum::return#3 ] ( main:2 [ sum::return#3 ] )
|
||||
//SEG11 [17] phi from main to sum [phi:main->sum]
|
||||
//SEG11 [18] phi from main to sum [phi:main->sum]
|
||||
sum_from_main:
|
||||
//SEG12 [17] phi (byte) sum::b#3 = (byte/signed byte/word/signed word) 2 [phi:main->sum#0] -- aby=coby1
|
||||
//SEG12 [18] phi (byte) sum::b#3 = (byte/signed byte/word/signed word) 2 [phi:main->sum#0] -- aby=coby1
|
||||
lda #2
|
||||
//SEG13 [17] phi (byte) sum::a#3 = (byte/signed byte/word/signed word) 1 [phi:main->sum#1] -- yby=coby1
|
||||
ldy #1
|
||||
//SEG13 [18] phi (byte) sum::a#3 = (byte/signed byte/word/signed word) 1 [phi:main->sum#1] -- xby=coby1
|
||||
ldx #1
|
||||
jsr sum
|
||||
//SEG14 [6] (byte) sum::return#0 ← (byte) sum::return#3 [ sum::return#0 ] ( main:2 [ sum::return#0 ] )
|
||||
// (byte) sum::return#0 = (byte) sum::return#3 // register copy reg byte a
|
||||
@ -1167,26 +1284,26 @@ main: {
|
||||
//SEG16 [7] (byte) main::s1#0 ← (byte) sum::return#0 [ main::s1#0 ] ( main:2 [ main::s1#0 ] ) -- zpby1=aby
|
||||
sta s1
|
||||
//SEG17 [8] call sum param-assignment [ sum::return#3 main::s1#0 ] ( main:2 [ sum::return#3 main::s1#0 ] )
|
||||
//SEG18 [17] phi from main::@1 to sum [phi:main::@1->sum]
|
||||
//SEG18 [18] phi from main::@1 to sum [phi:main::@1->sum]
|
||||
sum_from_b1:
|
||||
//SEG19 [17] phi (byte) sum::b#3 = (byte/signed byte/word/signed word) 4 [phi:main::@1->sum#0] -- aby=coby1
|
||||
//SEG19 [18] phi (byte) sum::b#3 = (byte/signed byte/word/signed word) 4 [phi:main::@1->sum#0] -- aby=coby1
|
||||
lda #4
|
||||
//SEG20 [17] phi (byte) sum::a#3 = (byte/signed byte/word/signed word) 3 [phi:main::@1->sum#1] -- yby=coby1
|
||||
ldy #3
|
||||
//SEG20 [18] phi (byte) sum::a#3 = (byte/signed byte/word/signed word) 3 [phi:main::@1->sum#1] -- xby=coby1
|
||||
ldx #3
|
||||
jsr sum
|
||||
//SEG21 [9] (byte) sum::return#1 ← (byte) sum::return#3 [ main::s1#0 sum::return#1 ] ( main:2 [ main::s1#0 sum::return#1 ] )
|
||||
// (byte) sum::return#1 = (byte) sum::return#3 // register copy reg byte a
|
||||
//SEG22 main::@2
|
||||
b2:
|
||||
//SEG23 [10] (byte) main::s2#0 ← (byte) sum::return#1 [ main::s1#0 main::s2#0 ] ( main:2 [ main::s1#0 main::s2#0 ] ) -- xby=aby
|
||||
tax
|
||||
//SEG23 [10] (byte) main::s2#0 ← (byte) sum::return#1 [ main::s1#0 main::s2#0 ] ( main:2 [ main::s1#0 main::s2#0 ] ) -- yby=aby
|
||||
tay
|
||||
//SEG24 [11] call sum param-assignment [ sum::return#3 main::s1#0 main::s2#0 ] ( main:2 [ sum::return#3 main::s1#0 main::s2#0 ] )
|
||||
//SEG25 [17] phi from main::@2 to sum [phi:main::@2->sum]
|
||||
//SEG25 [18] phi from main::@2 to sum [phi:main::@2->sum]
|
||||
sum_from_b2:
|
||||
//SEG26 [17] phi (byte) sum::b#3 = (byte/signed byte/word/signed word) 13 [phi:main::@2->sum#0] -- aby=coby1
|
||||
//SEG26 [18] phi (byte) sum::b#3 = (byte/signed byte/word/signed word) 13 [phi:main::@2->sum#0] -- aby=coby1
|
||||
lda #$d
|
||||
//SEG27 [17] phi (byte) sum::a#3 = (byte/signed byte/word/signed word) 9 [phi:main::@2->sum#1] -- yby=coby1
|
||||
ldy #9
|
||||
//SEG27 [18] phi (byte) sum::a#3 = (byte/signed byte/word/signed word) 9 [phi:main::@2->sum#1] -- xby=coby1
|
||||
ldx #9
|
||||
jsr sum
|
||||
//SEG28 [12] (byte) sum::return#2 ← (byte) sum::return#3 [ main::s1#0 main::s2#0 sum::return#2 ] ( main:2 [ main::s1#0 main::s2#0 sum::return#2 ] )
|
||||
// (byte) sum::return#2 = (byte) sum::return#3 // register copy reg byte a
|
||||
@ -1194,27 +1311,29 @@ main: {
|
||||
b3:
|
||||
//SEG30 [13] (byte) main::s3#0 ← (byte) sum::return#2 [ main::s1#0 main::s2#0 main::s3#0 ] ( main:2 [ main::s1#0 main::s2#0 main::s3#0 ] ) -- zpby1=aby
|
||||
sta s3
|
||||
//SEG31 [14] (byte~) main::$3 ← (byte) main::s1#0 + (byte) main::s2#0 [ main::s3#0 main::$3 ] ( main:2 [ main::s3#0 main::$3 ] ) -- aby=zpby1_plus_xby
|
||||
txa
|
||||
//SEG31 [14] (byte~) main::$3 ← (byte) main::s1#0 + (byte) main::s2#0 [ main::s3#0 main::$3 ] ( main:2 [ main::s3#0 main::$3 ] ) -- aby=zpby1_plus_yby
|
||||
tya
|
||||
clc
|
||||
adc s1
|
||||
//SEG32 [15] (byte) main::s4#0 ← (byte~) main::$3 + (byte) main::s3#0 [ ] ( main:2 [ ] ) -- aby=aby_plus_zpby1
|
||||
//SEG32 [15] (byte) main::s4#0 ← (byte~) main::$3 + (byte) main::s3#0 [ main::s4#0 ] ( main:2 [ main::s4#0 ] ) -- aby=aby_plus_zpby1
|
||||
clc
|
||||
adc s3
|
||||
//SEG33 main::@return
|
||||
//SEG33 [16] *((const byte*) screen#0) ← (byte) main::s4#0 [ ] ( main:2 [ ] ) -- _deref_cowo1=aby
|
||||
sta screen
|
||||
//SEG34 main::@return
|
||||
breturn:
|
||||
//SEG34 [16] return [ ] ( main:2 [ ] )
|
||||
//SEG35 [17] return [ ] ( main:2 [ ] )
|
||||
rts
|
||||
}
|
||||
//SEG35 sum
|
||||
//SEG36 sum
|
||||
sum: {
|
||||
//SEG36 [18] (byte) sum::return#3 ← (byte) sum::a#3 + (byte) sum::b#3 [ sum::return#3 ] ( main:2::sum:5 [ sum::return#3 ] main:2::sum:8 [ main::s1#0 sum::return#3 ] main:2::sum:11 [ main::s1#0 main::s2#0 sum::return#3 ] ) -- aby=yby_plus_aby
|
||||
sty $ff
|
||||
//SEG37 [19] (byte) sum::return#3 ← (byte) sum::a#3 + (byte) sum::b#3 [ sum::return#3 ] ( main:2::sum:5 [ sum::return#3 ] main:2::sum:8 [ main::s1#0 sum::return#3 ] main:2::sum:11 [ main::s1#0 main::s2#0 sum::return#3 ] ) -- aby=xby_plus_aby
|
||||
stx $ff
|
||||
clc
|
||||
adc $ff
|
||||
//SEG37 sum::@return
|
||||
//SEG38 sum::@return
|
||||
breturn:
|
||||
//SEG38 [19] return [ sum::return#3 ] ( main:2::sum:5 [ sum::return#3 ] main:2::sum:8 [ main::s1#0 sum::return#3 ] main:2::sum:11 [ main::s1#0 main::s2#0 sum::return#3 ] )
|
||||
//SEG39 [20] return [ sum::return#3 ] ( main:2::sum:5 [ sum::return#3 ] main:2::sum:8 [ main::s1#0 sum::return#3 ] main:2::sum:11 [ main::s1#0 main::s2#0 sum::return#3 ] )
|
||||
rts
|
||||
}
|
||||
|
||||
@ -1235,6 +1354,7 @@ ASSEMBLER
|
||||
:BasicUpstart(main)
|
||||
.pc = $80d "Program"
|
||||
//SEG1 Global Constants & labels
|
||||
.const screen = $400
|
||||
//SEG2 @begin
|
||||
//SEG3 [1] phi from @begin to @2 [phi:@begin->@2]
|
||||
//SEG4 @2
|
||||
@ -1248,11 +1368,11 @@ main: {
|
||||
.label s1 = 2
|
||||
.label s3 = 3
|
||||
//SEG10 [5] call sum param-assignment [ sum::return#3 ] ( main:2 [ sum::return#3 ] )
|
||||
//SEG11 [17] phi from main to sum [phi:main->sum]
|
||||
//SEG12 [17] phi (byte) sum::b#3 = (byte/signed byte/word/signed word) 2 [phi:main->sum#0] -- aby=coby1
|
||||
//SEG11 [18] phi from main to sum [phi:main->sum]
|
||||
//SEG12 [18] phi (byte) sum::b#3 = (byte/signed byte/word/signed word) 2 [phi:main->sum#0] -- aby=coby1
|
||||
lda #2
|
||||
//SEG13 [17] phi (byte) sum::a#3 = (byte/signed byte/word/signed word) 1 [phi:main->sum#1] -- yby=coby1
|
||||
ldy #1
|
||||
//SEG13 [18] phi (byte) sum::a#3 = (byte/signed byte/word/signed word) 1 [phi:main->sum#1] -- xby=coby1
|
||||
ldx #1
|
||||
jsr sum
|
||||
//SEG14 [6] (byte) sum::return#0 ← (byte) sum::return#3 [ sum::return#0 ] ( main:2 [ sum::return#0 ] )
|
||||
// (byte) sum::return#0 = (byte) sum::return#3 // register copy reg byte a
|
||||
@ -1260,48 +1380,50 @@ main: {
|
||||
//SEG16 [7] (byte) main::s1#0 ← (byte) sum::return#0 [ main::s1#0 ] ( main:2 [ main::s1#0 ] ) -- zpby1=aby
|
||||
sta s1
|
||||
//SEG17 [8] call sum param-assignment [ sum::return#3 main::s1#0 ] ( main:2 [ sum::return#3 main::s1#0 ] )
|
||||
//SEG18 [17] phi from main::@1 to sum [phi:main::@1->sum]
|
||||
//SEG19 [17] phi (byte) sum::b#3 = (byte/signed byte/word/signed word) 4 [phi:main::@1->sum#0] -- aby=coby1
|
||||
//SEG18 [18] phi from main::@1 to sum [phi:main::@1->sum]
|
||||
//SEG19 [18] phi (byte) sum::b#3 = (byte/signed byte/word/signed word) 4 [phi:main::@1->sum#0] -- aby=coby1
|
||||
lda #4
|
||||
//SEG20 [17] phi (byte) sum::a#3 = (byte/signed byte/word/signed word) 3 [phi:main::@1->sum#1] -- yby=coby1
|
||||
ldy #3
|
||||
//SEG20 [18] phi (byte) sum::a#3 = (byte/signed byte/word/signed word) 3 [phi:main::@1->sum#1] -- xby=coby1
|
||||
ldx #3
|
||||
jsr sum
|
||||
//SEG21 [9] (byte) sum::return#1 ← (byte) sum::return#3 [ main::s1#0 sum::return#1 ] ( main:2 [ main::s1#0 sum::return#1 ] )
|
||||
// (byte) sum::return#1 = (byte) sum::return#3 // register copy reg byte a
|
||||
//SEG22 main::@2
|
||||
//SEG23 [10] (byte) main::s2#0 ← (byte) sum::return#1 [ main::s1#0 main::s2#0 ] ( main:2 [ main::s1#0 main::s2#0 ] ) -- xby=aby
|
||||
tax
|
||||
//SEG23 [10] (byte) main::s2#0 ← (byte) sum::return#1 [ main::s1#0 main::s2#0 ] ( main:2 [ main::s1#0 main::s2#0 ] ) -- yby=aby
|
||||
tay
|
||||
//SEG24 [11] call sum param-assignment [ sum::return#3 main::s1#0 main::s2#0 ] ( main:2 [ sum::return#3 main::s1#0 main::s2#0 ] )
|
||||
//SEG25 [17] phi from main::@2 to sum [phi:main::@2->sum]
|
||||
//SEG26 [17] phi (byte) sum::b#3 = (byte/signed byte/word/signed word) 13 [phi:main::@2->sum#0] -- aby=coby1
|
||||
//SEG25 [18] phi from main::@2 to sum [phi:main::@2->sum]
|
||||
//SEG26 [18] phi (byte) sum::b#3 = (byte/signed byte/word/signed word) 13 [phi:main::@2->sum#0] -- aby=coby1
|
||||
lda #$d
|
||||
//SEG27 [17] phi (byte) sum::a#3 = (byte/signed byte/word/signed word) 9 [phi:main::@2->sum#1] -- yby=coby1
|
||||
ldy #9
|
||||
//SEG27 [18] phi (byte) sum::a#3 = (byte/signed byte/word/signed word) 9 [phi:main::@2->sum#1] -- xby=coby1
|
||||
ldx #9
|
||||
jsr sum
|
||||
//SEG28 [12] (byte) sum::return#2 ← (byte) sum::return#3 [ main::s1#0 main::s2#0 sum::return#2 ] ( main:2 [ main::s1#0 main::s2#0 sum::return#2 ] )
|
||||
// (byte) sum::return#2 = (byte) sum::return#3 // register copy reg byte a
|
||||
//SEG29 main::@3
|
||||
//SEG30 [13] (byte) main::s3#0 ← (byte) sum::return#2 [ main::s1#0 main::s2#0 main::s3#0 ] ( main:2 [ main::s1#0 main::s2#0 main::s3#0 ] ) -- zpby1=aby
|
||||
sta s3
|
||||
//SEG31 [14] (byte~) main::$3 ← (byte) main::s1#0 + (byte) main::s2#0 [ main::s3#0 main::$3 ] ( main:2 [ main::s3#0 main::$3 ] ) -- aby=zpby1_plus_xby
|
||||
txa
|
||||
//SEG31 [14] (byte~) main::$3 ← (byte) main::s1#0 + (byte) main::s2#0 [ main::s3#0 main::$3 ] ( main:2 [ main::s3#0 main::$3 ] ) -- aby=zpby1_plus_yby
|
||||
tya
|
||||
clc
|
||||
adc s1
|
||||
//SEG32 [15] (byte) main::s4#0 ← (byte~) main::$3 + (byte) main::s3#0 [ ] ( main:2 [ ] ) -- aby=aby_plus_zpby1
|
||||
//SEG32 [15] (byte) main::s4#0 ← (byte~) main::$3 + (byte) main::s3#0 [ main::s4#0 ] ( main:2 [ main::s4#0 ] ) -- aby=aby_plus_zpby1
|
||||
clc
|
||||
adc s3
|
||||
//SEG33 main::@return
|
||||
//SEG34 [16] return [ ] ( main:2 [ ] )
|
||||
//SEG33 [16] *((const byte*) screen#0) ← (byte) main::s4#0 [ ] ( main:2 [ ] ) -- _deref_cowo1=aby
|
||||
sta screen
|
||||
//SEG34 main::@return
|
||||
//SEG35 [17] return [ ] ( main:2 [ ] )
|
||||
rts
|
||||
}
|
||||
//SEG35 sum
|
||||
//SEG36 sum
|
||||
sum: {
|
||||
//SEG36 [18] (byte) sum::return#3 ← (byte) sum::a#3 + (byte) sum::b#3 [ sum::return#3 ] ( main:2::sum:5 [ sum::return#3 ] main:2::sum:8 [ main::s1#0 sum::return#3 ] main:2::sum:11 [ main::s1#0 main::s2#0 sum::return#3 ] ) -- aby=yby_plus_aby
|
||||
sty $ff
|
||||
//SEG37 [19] (byte) sum::return#3 ← (byte) sum::a#3 + (byte) sum::b#3 [ sum::return#3 ] ( main:2::sum:5 [ sum::return#3 ] main:2::sum:8 [ main::s1#0 sum::return#3 ] main:2::sum:11 [ main::s1#0 main::s2#0 sum::return#3 ] ) -- aby=xby_plus_aby
|
||||
stx $ff
|
||||
clc
|
||||
adc $ff
|
||||
//SEG37 sum::@return
|
||||
//SEG38 [19] return [ sum::return#3 ] ( main:2::sum:5 [ sum::return#3 ] main:2::sum:8 [ main::s1#0 sum::return#3 ] main:2::sum:11 [ main::s1#0 main::s2#0 sum::return#3 ] )
|
||||
//SEG38 sum::@return
|
||||
//SEG39 [20] return [ sum::return#3 ] ( main:2::sum:5 [ sum::return#3 ] main:2::sum:8 [ main::s1#0 sum::return#3 ] main:2::sum:11 [ main::s1#0 main::s2#0 sum::return#3 ] )
|
||||
rts
|
||||
}
|
||||
|
||||
@ -1318,15 +1440,17 @@ FINAL SYMBOL TABLE
|
||||
(byte) main::s1
|
||||
(byte) main::s1#0 s1 zp ZP_BYTE:2 0.5714285714285714
|
||||
(byte) main::s2
|
||||
(byte) main::s2#0 reg byte x 1.0
|
||||
(byte) main::s2#0 reg byte y 1.0
|
||||
(byte) main::s3
|
||||
(byte) main::s3#0 s3 zp ZP_BYTE:3 2.0
|
||||
(byte) main::s4
|
||||
(byte) main::s4#0 reg byte a 20.0
|
||||
(byte) main::s4#0 reg byte a 4.0
|
||||
(byte*) screen
|
||||
(const byte*) screen#0 screen = ((byte*))(word/signed word) 1024
|
||||
(byte()) sum((byte) sum::a , (byte) sum::b)
|
||||
(label) sum::@return
|
||||
(byte) sum::a
|
||||
(byte) sum::a#3 reg byte y 2.0
|
||||
(byte) sum::a#3 reg byte x 2.0
|
||||
(byte) sum::b
|
||||
(byte) sum::b#3 reg byte a 2.0
|
||||
(byte) sum::return
|
||||
@ -1335,12 +1459,12 @@ FINAL SYMBOL TABLE
|
||||
(byte) sum::return#2 reg byte a 4.0
|
||||
(byte) sum::return#3 reg byte a 1.6
|
||||
|
||||
reg byte y [ sum::a#3 ]
|
||||
reg byte x [ sum::a#3 ]
|
||||
reg byte a [ sum::b#3 ]
|
||||
reg byte a [ sum::return#0 ]
|
||||
zp ZP_BYTE:2 [ main::s1#0 ]
|
||||
reg byte a [ sum::return#1 ]
|
||||
reg byte x [ main::s2#0 ]
|
||||
reg byte y [ main::s2#0 ]
|
||||
reg byte a [ sum::return#2 ]
|
||||
zp ZP_BYTE:3 [ main::s3#0 ]
|
||||
reg byte a [ main::$3 ]
|
||||
@ -1353,6 +1477,7 @@ FINAL CODE
|
||||
:BasicUpstart(main)
|
||||
.pc = $80d "Program"
|
||||
//SEG1 Global Constants & labels
|
||||
.const screen = $400
|
||||
//SEG2 @begin
|
||||
//SEG3 [1] phi from @begin to @2 [phi:@begin->@2]
|
||||
//SEG4 @2
|
||||
@ -1366,11 +1491,11 @@ main: {
|
||||
.label s1 = 2
|
||||
.label s3 = 3
|
||||
//SEG10 [5] call sum param-assignment [ sum::return#3 ] ( main:2 [ sum::return#3 ] )
|
||||
//SEG11 [17] phi from main to sum [phi:main->sum]
|
||||
//SEG12 [17] phi (byte) sum::b#3 = (byte/signed byte/word/signed word) 2 [phi:main->sum#0] -- aby=coby1
|
||||
//SEG11 [18] phi from main to sum [phi:main->sum]
|
||||
//SEG12 [18] phi (byte) sum::b#3 = (byte/signed byte/word/signed word) 2 [phi:main->sum#0] -- aby=coby1
|
||||
lda #2
|
||||
//SEG13 [17] phi (byte) sum::a#3 = (byte/signed byte/word/signed word) 1 [phi:main->sum#1] -- yby=coby1
|
||||
ldy #1
|
||||
//SEG13 [18] phi (byte) sum::a#3 = (byte/signed byte/word/signed word) 1 [phi:main->sum#1] -- xby=coby1
|
||||
ldx #1
|
||||
jsr sum
|
||||
//SEG14 [6] (byte) sum::return#0 ← (byte) sum::return#3 [ sum::return#0 ] ( main:2 [ sum::return#0 ] )
|
||||
// (byte) sum::return#0 = (byte) sum::return#3 // register copy reg byte a
|
||||
@ -1378,48 +1503,50 @@ main: {
|
||||
//SEG16 [7] (byte) main::s1#0 ← (byte) sum::return#0 [ main::s1#0 ] ( main:2 [ main::s1#0 ] ) -- zpby1=aby
|
||||
sta s1
|
||||
//SEG17 [8] call sum param-assignment [ sum::return#3 main::s1#0 ] ( main:2 [ sum::return#3 main::s1#0 ] )
|
||||
//SEG18 [17] phi from main::@1 to sum [phi:main::@1->sum]
|
||||
//SEG19 [17] phi (byte) sum::b#3 = (byte/signed byte/word/signed word) 4 [phi:main::@1->sum#0] -- aby=coby1
|
||||
//SEG18 [18] phi from main::@1 to sum [phi:main::@1->sum]
|
||||
//SEG19 [18] phi (byte) sum::b#3 = (byte/signed byte/word/signed word) 4 [phi:main::@1->sum#0] -- aby=coby1
|
||||
lda #4
|
||||
//SEG20 [17] phi (byte) sum::a#3 = (byte/signed byte/word/signed word) 3 [phi:main::@1->sum#1] -- yby=coby1
|
||||
ldy #3
|
||||
//SEG20 [18] phi (byte) sum::a#3 = (byte/signed byte/word/signed word) 3 [phi:main::@1->sum#1] -- xby=coby1
|
||||
ldx #3
|
||||
jsr sum
|
||||
//SEG21 [9] (byte) sum::return#1 ← (byte) sum::return#3 [ main::s1#0 sum::return#1 ] ( main:2 [ main::s1#0 sum::return#1 ] )
|
||||
// (byte) sum::return#1 = (byte) sum::return#3 // register copy reg byte a
|
||||
//SEG22 main::@2
|
||||
//SEG23 [10] (byte) main::s2#0 ← (byte) sum::return#1 [ main::s1#0 main::s2#0 ] ( main:2 [ main::s1#0 main::s2#0 ] ) -- xby=aby
|
||||
tax
|
||||
//SEG23 [10] (byte) main::s2#0 ← (byte) sum::return#1 [ main::s1#0 main::s2#0 ] ( main:2 [ main::s1#0 main::s2#0 ] ) -- yby=aby
|
||||
tay
|
||||
//SEG24 [11] call sum param-assignment [ sum::return#3 main::s1#0 main::s2#0 ] ( main:2 [ sum::return#3 main::s1#0 main::s2#0 ] )
|
||||
//SEG25 [17] phi from main::@2 to sum [phi:main::@2->sum]
|
||||
//SEG26 [17] phi (byte) sum::b#3 = (byte/signed byte/word/signed word) 13 [phi:main::@2->sum#0] -- aby=coby1
|
||||
//SEG25 [18] phi from main::@2 to sum [phi:main::@2->sum]
|
||||
//SEG26 [18] phi (byte) sum::b#3 = (byte/signed byte/word/signed word) 13 [phi:main::@2->sum#0] -- aby=coby1
|
||||
lda #$d
|
||||
//SEG27 [17] phi (byte) sum::a#3 = (byte/signed byte/word/signed word) 9 [phi:main::@2->sum#1] -- yby=coby1
|
||||
ldy #9
|
||||
//SEG27 [18] phi (byte) sum::a#3 = (byte/signed byte/word/signed word) 9 [phi:main::@2->sum#1] -- xby=coby1
|
||||
ldx #9
|
||||
jsr sum
|
||||
//SEG28 [12] (byte) sum::return#2 ← (byte) sum::return#3 [ main::s1#0 main::s2#0 sum::return#2 ] ( main:2 [ main::s1#0 main::s2#0 sum::return#2 ] )
|
||||
// (byte) sum::return#2 = (byte) sum::return#3 // register copy reg byte a
|
||||
//SEG29 main::@3
|
||||
//SEG30 [13] (byte) main::s3#0 ← (byte) sum::return#2 [ main::s1#0 main::s2#0 main::s3#0 ] ( main:2 [ main::s1#0 main::s2#0 main::s3#0 ] ) -- zpby1=aby
|
||||
sta s3
|
||||
//SEG31 [14] (byte~) main::$3 ← (byte) main::s1#0 + (byte) main::s2#0 [ main::s3#0 main::$3 ] ( main:2 [ main::s3#0 main::$3 ] ) -- aby=zpby1_plus_xby
|
||||
txa
|
||||
//SEG31 [14] (byte~) main::$3 ← (byte) main::s1#0 + (byte) main::s2#0 [ main::s3#0 main::$3 ] ( main:2 [ main::s3#0 main::$3 ] ) -- aby=zpby1_plus_yby
|
||||
tya
|
||||
clc
|
||||
adc s1
|
||||
//SEG32 [15] (byte) main::s4#0 ← (byte~) main::$3 + (byte) main::s3#0 [ ] ( main:2 [ ] ) -- aby=aby_plus_zpby1
|
||||
//SEG32 [15] (byte) main::s4#0 ← (byte~) main::$3 + (byte) main::s3#0 [ main::s4#0 ] ( main:2 [ main::s4#0 ] ) -- aby=aby_plus_zpby1
|
||||
clc
|
||||
adc s3
|
||||
//SEG33 main::@return
|
||||
//SEG34 [16] return [ ] ( main:2 [ ] )
|
||||
//SEG33 [16] *((const byte*) screen#0) ← (byte) main::s4#0 [ ] ( main:2 [ ] ) -- _deref_cowo1=aby
|
||||
sta screen
|
||||
//SEG34 main::@return
|
||||
//SEG35 [17] return [ ] ( main:2 [ ] )
|
||||
rts
|
||||
}
|
||||
//SEG35 sum
|
||||
//SEG36 sum
|
||||
sum: {
|
||||
//SEG36 [18] (byte) sum::return#3 ← (byte) sum::a#3 + (byte) sum::b#3 [ sum::return#3 ] ( main:2::sum:5 [ sum::return#3 ] main:2::sum:8 [ main::s1#0 sum::return#3 ] main:2::sum:11 [ main::s1#0 main::s2#0 sum::return#3 ] ) -- aby=yby_plus_aby
|
||||
sty $ff
|
||||
//SEG37 [19] (byte) sum::return#3 ← (byte) sum::a#3 + (byte) sum::b#3 [ sum::return#3 ] ( main:2::sum:5 [ sum::return#3 ] main:2::sum:8 [ main::s1#0 sum::return#3 ] main:2::sum:11 [ main::s1#0 main::s2#0 sum::return#3 ] ) -- aby=xby_plus_aby
|
||||
stx $ff
|
||||
clc
|
||||
adc $ff
|
||||
//SEG37 sum::@return
|
||||
//SEG38 [19] return [ sum::return#3 ] ( main:2::sum:5 [ sum::return#3 ] main:2::sum:8 [ main::s1#0 sum::return#3 ] main:2::sum:11 [ main::s1#0 main::s2#0 sum::return#3 ] )
|
||||
//SEG38 sum::@return
|
||||
//SEG39 [20] return [ sum::return#3 ] ( main:2::sum:5 [ sum::return#3 ] main:2::sum:8 [ main::s1#0 sum::return#3 ] main:2::sum:11 [ main::s1#0 main::s2#0 sum::return#3 ] )
|
||||
rts
|
||||
}
|
||||
|
||||
|
@ -10,15 +10,17 @@
|
||||
(byte) main::s1
|
||||
(byte) main::s1#0 s1 zp ZP_BYTE:2 0.5714285714285714
|
||||
(byte) main::s2
|
||||
(byte) main::s2#0 reg byte x 1.0
|
||||
(byte) main::s2#0 reg byte y 1.0
|
||||
(byte) main::s3
|
||||
(byte) main::s3#0 s3 zp ZP_BYTE:3 2.0
|
||||
(byte) main::s4
|
||||
(byte) main::s4#0 reg byte a 20.0
|
||||
(byte) main::s4#0 reg byte a 4.0
|
||||
(byte*) screen
|
||||
(const byte*) screen#0 screen = ((byte*))(word/signed word) 1024
|
||||
(byte()) sum((byte) sum::a , (byte) sum::b)
|
||||
(label) sum::@return
|
||||
(byte) sum::a
|
||||
(byte) sum::a#3 reg byte y 2.0
|
||||
(byte) sum::a#3 reg byte x 2.0
|
||||
(byte) sum::b
|
||||
(byte) sum::b#3 reg byte a 2.0
|
||||
(byte) sum::return
|
||||
@ -27,12 +29,12 @@
|
||||
(byte) sum::return#2 reg byte a 4.0
|
||||
(byte) sum::return#3 reg byte a 1.6
|
||||
|
||||
reg byte y [ sum::a#3 ]
|
||||
reg byte x [ sum::a#3 ]
|
||||
reg byte a [ sum::b#3 ]
|
||||
reg byte a [ sum::return#0 ]
|
||||
zp ZP_BYTE:2 [ main::s1#0 ]
|
||||
reg byte a [ sum::return#1 ]
|
||||
reg byte x [ main::s2#0 ]
|
||||
reg byte y [ main::s2#0 ]
|
||||
reg byte a [ sum::return#2 ]
|
||||
zp ZP_BYTE:3 [ main::s3#0 ]
|
||||
reg byte a [ main::$3 ]
|
||||
|
24
src/main/java/dk/camelot64/kickc/test/ref/unused-vars.asm
Normal file
24
src/main/java/dk/camelot64/kickc/test/ref/unused-vars.asm
Normal file
@ -0,0 +1,24 @@
|
||||
.pc = $801 "Basic"
|
||||
:BasicUpstart(main)
|
||||
.pc = $80d "Program"
|
||||
.const SCREEN = $400
|
||||
jsr main
|
||||
main: {
|
||||
.const col = 2
|
||||
.const COLS = $d800
|
||||
jsr s
|
||||
ldx #0
|
||||
b1:
|
||||
lda #col
|
||||
sta COLS,x
|
||||
lda #(2>>1)+1+1
|
||||
sta SCREEN,x
|
||||
inx
|
||||
cpx #$65
|
||||
bne b1
|
||||
rts
|
||||
}
|
||||
s: {
|
||||
.const return = 2
|
||||
rts
|
||||
}
|
29
src/main/java/dk/camelot64/kickc/test/ref/unused-vars.cfg
Normal file
29
src/main/java/dk/camelot64/kickc/test/ref/unused-vars.cfg
Normal file
@ -0,0 +1,29 @@
|
||||
@begin: scope:[] from
|
||||
[0] phi() [ ] ( )
|
||||
to:@2
|
||||
@2: scope:[] from @begin
|
||||
[1] phi() [ ] ( )
|
||||
[2] call main param-assignment [ ] ( )
|
||||
to:@end
|
||||
@end: scope:[] from @2
|
||||
[3] phi() [ ] ( )
|
||||
main: scope:[main] from @2
|
||||
[4] phi() [ ] ( main:2 [ ] )
|
||||
[5] call s param-assignment [ ] ( main:2 [ ] )
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
[6] (byte) main::i#2 ← phi( main::@1/(byte) main::i#1 main/(byte/signed byte/word/signed word) 0 ) [ main::i#2 ] ( main:2 [ main::i#2 ] )
|
||||
[7] *((const byte*) main::COLS#0 + (byte) main::i#2) ← (const byte) main::col#0 [ main::i#2 ] ( main:2 [ main::i#2 ] )
|
||||
[8] *((const byte*) SCREEN#0 + (byte) main::i#2) ← ++++(byte/signed byte/word/signed word) 2>>(byte/signed byte/word/signed word) 1 [ 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) 101) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] )
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
[11] return [ ] ( main:2 [ ] )
|
||||
to:@return
|
||||
s: scope:[s] from main
|
||||
[12] phi() [ ] ( main:2::s:5 [ ] )
|
||||
to:s::@return
|
||||
s::@return: scope:[s] from s
|
||||
[13] return [ ] ( main:2::s:5 [ ] )
|
||||
to:@return
|
1498
src/main/java/dk/camelot64/kickc/test/ref/unused-vars.log
Normal file
1498
src/main/java/dk/camelot64/kickc/test/ref/unused-vars.log
Normal file
File diff suppressed because it is too large
Load Diff
22
src/main/java/dk/camelot64/kickc/test/ref/unused-vars.sym
Normal file
22
src/main/java/dk/camelot64/kickc/test/ref/unused-vars.sym
Normal file
@ -0,0 +1,22 @@
|
||||
(label) @2
|
||||
(label) @begin
|
||||
(label) @end
|
||||
(byte*) SCREEN
|
||||
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word) 1024
|
||||
(byte) b
|
||||
(void()) main()
|
||||
(label) main::@1
|
||||
(label) main::@return
|
||||
(byte*) main::COLS
|
||||
(const byte*) main::COLS#0 COLS = ((byte*))(word) 55296
|
||||
(byte) main::col
|
||||
(const byte) main::col#0 col = (byte/signed byte/word/signed word) 2
|
||||
(byte) main::i
|
||||
(byte) main::i#1 reg byte x 16.5
|
||||
(byte) main::i#2 reg byte x 14.666666666666666
|
||||
(byte()) s()
|
||||
(label) s::@return
|
||||
(byte) s::return
|
||||
(const byte) s::return#1 return = (byte/signed byte/word/signed word) 2
|
||||
|
||||
reg byte x [ main::i#2 main::i#1 ]
|
@ -618,6 +618,9 @@ findcol::@18: scope:[findcol] from
|
||||
to:@end
|
||||
@end: scope:[] from @5
|
||||
|
||||
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
|
||||
Removing empty block main::@2
|
||||
Removing empty block @1
|
||||
Removing empty block @2
|
||||
@ -640,11 +643,11 @@ CONTROL FLOW GRAPH
|
||||
(byte[]) COLS ← { (byte/signed byte/word/signed word) 1, (byte/signed byte/word/signed word) 2, (byte/signed byte/word/signed word) 3, (byte/signed byte/word/signed word) 4, (byte/signed byte/word/signed word) 5, (byte/signed byte/word/signed word) 7 }
|
||||
to:@5
|
||||
main: scope:[main] from
|
||||
(void~) main::$0 ← call initscreen
|
||||
call initscreen
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(void~) main::$1 ← call render
|
||||
(void~) main::$2 ← call animate
|
||||
call render
|
||||
call animate
|
||||
if(true) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
|
@ -1,8 +1,11 @@
|
||||
byte* screen = $0400;
|
||||
|
||||
void main() {
|
||||
byte s1=sum(1,2);
|
||||
byte s2=sum(3,4);
|
||||
byte s3=sum(9,13);
|
||||
byte s4=s1+s2+s3;
|
||||
*screen = s4;
|
||||
}
|
||||
|
||||
byte sum(byte a, byte b) {
|
||||
|
@ -1,12 +1,13 @@
|
||||
// used vars
|
||||
const byte* SCREEN = $0400;
|
||||
byte b=0;
|
||||
byte b=2>>1;
|
||||
|
||||
// unused vars
|
||||
const byte* BGCOL = $d021;
|
||||
byte[] msg = "hello world@";
|
||||
byte[] arr = { 7, 8, 9};
|
||||
byte c=1;
|
||||
const byte c2=1;
|
||||
word d=1000;
|
||||
|
||||
void main() {
|
||||
@ -14,16 +15,19 @@ void main() {
|
||||
byte col=2;
|
||||
byte* COLS=$d800;
|
||||
// unused vars
|
||||
byte e=3+3+3;
|
||||
word f=2000+2000+d;
|
||||
byte e=3+3+3+s(); // The call to s() should survive even when e is eliminated
|
||||
word f=2000+2000+d+b++; // b++ should survive even when f is eliminated.
|
||||
byte[] g = {4, 5, 6};
|
||||
byte[] h = "goodbye sky ";
|
||||
|
||||
for(byte i : 0..100) {
|
||||
// the last unused var
|
||||
signed byte x = -13;
|
||||
COLS[i] = col;
|
||||
SCREEN[i] = b;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
byte s() {
|
||||
b++;
|
||||
return 2;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user