mirror of
https://gitlab.com/camelot/kickc.git
synced 2025-04-08 14:37:40 +00:00
Implemented default zero values for variables without ant initializer. Closes #140
This commit is contained in:
parent
ec863e5c43
commit
0362e12880
@ -7,10 +7,7 @@ import dk.camelot64.kickc.model.operators.Operator;
|
||||
import dk.camelot64.kickc.model.operators.Operators;
|
||||
import dk.camelot64.kickc.model.statements.*;
|
||||
import dk.camelot64.kickc.model.symbols.*;
|
||||
import dk.camelot64.kickc.model.types.SymbolType;
|
||||
import dk.camelot64.kickc.model.types.SymbolTypeArray;
|
||||
import dk.camelot64.kickc.model.types.SymbolTypePointer;
|
||||
import dk.camelot64.kickc.model.types.SymbolTypeProcedure;
|
||||
import dk.camelot64.kickc.model.types.*;
|
||||
import dk.camelot64.kickc.model.values.*;
|
||||
import dk.camelot64.kickc.parser.KickCBaseVisitor;
|
||||
import dk.camelot64.kickc.parser.KickCParser;
|
||||
@ -317,15 +314,31 @@ public class Pass0GenerateStatementSequence extends KickCBaseVisitor<Object> {
|
||||
KickCParser.ExprContext initializer = ctx.expr();
|
||||
if(initializer != null) {
|
||||
addInitialAssignment(initializer, lValue, comments);
|
||||
} else if(type instanceof SymbolTypeArray) {
|
||||
// Add an zero-array initializer
|
||||
SymbolTypeArray typeArray = (SymbolTypeArray) type;
|
||||
RValue size = typeArray.getSize();
|
||||
if(size == null) {
|
||||
throw new CompileError("Error! Array has no declared size. " + lValue.toString(program), new StatementSource(ctx));
|
||||
} else {
|
||||
if(type instanceof SymbolTypeInteger) {
|
||||
// Add an zero value initializer
|
||||
ConstantInteger zero = new ConstantInteger(0l);
|
||||
Statement stmt = new StatementAssignment(lValue.getRef(), zero, new StatementSource(ctx), ensureUnusedComments(comments));
|
||||
sequence.addStatement(stmt);
|
||||
} else if(type instanceof SymbolTypeArray) {
|
||||
// Add an zero-array initializer
|
||||
SymbolTypeArray typeArray = (SymbolTypeArray) type;
|
||||
RValue size = typeArray.getSize();
|
||||
if(size == null) {
|
||||
throw new CompileError("Error! Array has no declared size. " + lValue.toString(program), new StatementSource(ctx));
|
||||
}
|
||||
Statement stmt = new StatementAssignment(lValue.getRef(), new ArrayFilled(typeArray.getElementType(), size), new StatementSource(ctx), ensureUnusedComments(comments));
|
||||
sequence.addStatement(stmt);
|
||||
} else if(type instanceof SymbolTypePointer) {
|
||||
// Add an zero value initializer
|
||||
SymbolTypePointer typePointer = (SymbolTypePointer) type;
|
||||
ConstantValue zero = new ConstantPointer(0l, typePointer.getElementType());
|
||||
Statement stmt = new StatementAssignment(lValue.getRef(), zero, new StatementSource(ctx), ensureUnusedComments(comments));
|
||||
sequence.addStatement(stmt);
|
||||
} else {
|
||||
throw new CompileError("Default initializer not implemented for type "+type.getTypeName(), new StatementSource(ctx));
|
||||
}
|
||||
Statement stmt = new StatementAssignment(lValue.getRef(), new ArrayFilled(typeArray.getElementType(), size), new StatementSource(ctx), ensureUnusedComments(comments));
|
||||
sequence.addStatement(stmt);
|
||||
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
@ -44,6 +44,11 @@ public class TestPrograms {
|
||||
AsmFragmentTemplateUsages.logUsages(log, false, false, false, false, false, false);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUninitialized() throws IOException, URISyntaxException {
|
||||
compileAndCompare("uninitialized");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testStringConstConsolidationNoRoot() throws IOException, URISyntaxException {
|
||||
compileAndCompare("string-const-consolidation-noroot");
|
||||
|
233
src/test/kc/complex/travis/game-orig.kc
Normal file
233
src/test/kc/complex/travis/game-orig.kc
Normal file
@ -0,0 +1,233 @@
|
||||
import "c64.kc"
|
||||
import "print"
|
||||
|
||||
byte* SCREEN = $0400;
|
||||
|
||||
// joystick
|
||||
byte* JOY2 = $dc00;
|
||||
const byte JOY_UP = 1;
|
||||
const byte JOY_DOWN = 2;
|
||||
const byte JOY_LEFT = 4;
|
||||
const byte JOY_RIGHT = 8;
|
||||
const byte JOY_FIRE = 16;
|
||||
|
||||
// game states
|
||||
const byte TITLE_FADE_IN = 1;
|
||||
const byte TITLE_MAIN = 2;
|
||||
const byte TITLE_FADE_OUT = 3;
|
||||
|
||||
const byte GAME_FADE_IN = 10;
|
||||
const byte GAME_FADE_OUT = 11;
|
||||
|
||||
const byte GAME_LIVE_WAIT = 20;
|
||||
const byte GAME_LIVE_WEAPON_PLUS = 21;
|
||||
const byte GAME_LIVE_WEAPON_MINUS = 22;
|
||||
const byte GAME_LIVE_PATH_PLUS = 23;
|
||||
const byte GAME_LIVE_PATH_MINUS = 24;
|
||||
const byte GAME_LIVE_READY = 25;
|
||||
const byte GAME_LIVE_AIM = 26;
|
||||
const byte GAME_LIVE_FIRE = 27;
|
||||
|
||||
const byte GAME_DEAD_FALL = 100;
|
||||
const byte GAME_DEAD_WAIT = 101;
|
||||
|
||||
// control speeds
|
||||
const byte WEAPON_SWITCH_FRAMES = 4;
|
||||
const byte PATH_SWITCH_FRAMES = 8;
|
||||
const byte READY_FRAMES = 4;
|
||||
const byte DEAD_FALL_FRAMES = 20;
|
||||
const byte DEAD_WAIT_FRAMES = 10;
|
||||
|
||||
//
|
||||
byte main_state = TITLE_FADE_IN;
|
||||
byte action_count = 0;
|
||||
|
||||
byte fade_in_title() {
|
||||
fillscreen(SCREEN, $20);
|
||||
print_str("lone archer -- title");
|
||||
print_ln();
|
||||
return 1;
|
||||
}
|
||||
|
||||
byte fade_out_title() {
|
||||
fillscreen(SCREEN, $20);
|
||||
return 1;
|
||||
}
|
||||
|
||||
void title_main() {
|
||||
state1 = 0;
|
||||
do {
|
||||
do {} while (*RASTER!=$fe);
|
||||
if (main_state == TITLE_FADE_IN) {
|
||||
if (fade_in_title())
|
||||
main_state = TITLE_MAIN;
|
||||
} else if (main_state == TITLE_MAIN) {
|
||||
if (*JOY2 & JOY_FIRE == 0)
|
||||
main_state = TITLE_FADE_OUT;
|
||||
} else if (main_state == TITLE_FADE_OUT) {
|
||||
if (fade_out_title())
|
||||
main_state = GAME_FADE_IN;
|
||||
}
|
||||
} while (main_state <= TITLE_FADE_OUT);
|
||||
}
|
||||
|
||||
byte fade_in_game() {
|
||||
fillscreen(SCREEN, $20);
|
||||
print_str("lone archer -- game@");
|
||||
print_ln();
|
||||
return 1;
|
||||
}
|
||||
|
||||
byte fade_out_game() {
|
||||
fillscreen(SCREEN, $20);
|
||||
return 1;
|
||||
}
|
||||
|
||||
byte game_weapon_plus() {
|
||||
if (action_count == 0)
|
||||
action_count = WEAPON_SWITCH_FRAMES;
|
||||
print_str("weapon plus@");
|
||||
print_ln();
|
||||
action_count--;
|
||||
return (action_count==0);
|
||||
}
|
||||
|
||||
byte game_weapon_minus() {
|
||||
if (action_count == 0)
|
||||
action_count = WEAPON_SWITCH_FRAMES;
|
||||
print_str("weapon minus@");
|
||||
print_ln();
|
||||
action_count--;
|
||||
return (action_count==0);
|
||||
}
|
||||
|
||||
byte game_path_plus() {
|
||||
if (action_count == 0)
|
||||
action_count = PATH_SWITCH_FRAMES;
|
||||
print_str("path plus@");
|
||||
print_ln();
|
||||
action_count--;
|
||||
return (action_count==0);
|
||||
}
|
||||
|
||||
byte game_path_minus() {
|
||||
if (action_count == 0)
|
||||
action_count = PATH_SWITCH_FRAMES;
|
||||
print_str("path minus@");
|
||||
print_ln();
|
||||
action_count--;
|
||||
return (action_count==0);
|
||||
}
|
||||
|
||||
byte game_ready() {
|
||||
if (action_count == 0)
|
||||
action_count = READY_FRAMES;
|
||||
print_str("ready@");
|
||||
print_ln();
|
||||
action_count--;
|
||||
return (action_count==0);
|
||||
}
|
||||
|
||||
byte game_aim() {
|
||||
byte joy = *JOY2;
|
||||
if (joy & JOY_FIRE == 1)
|
||||
main_state = GAME_LIVE_FIRE;
|
||||
else if (joy & JOY_LEFT == 0)
|
||||
print_str("<");
|
||||
else if (joy & JOY_RIGHT == 0)
|
||||
print_str(">");
|
||||
else if (joy & JOY_UP == 0)
|
||||
print_str("u");
|
||||
else if (joy & JOY_DOWN == 0)
|
||||
print_str("d");
|
||||
}
|
||||
|
||||
byte game_fire() {
|
||||
print_str("fire!@");
|
||||
print_ln();
|
||||
return 1;
|
||||
}
|
||||
|
||||
byte game_dead_fall() {
|
||||
if (action_count == 0)
|
||||
action_count = DEAD_FALL_FRAMES;
|
||||
print_str("dead fall...@");
|
||||
print_ln();
|
||||
action_count--;
|
||||
return (action_count==0);
|
||||
}
|
||||
|
||||
byte game_dead_wait() {
|
||||
if (action_count == 0)
|
||||
action_count = DEAD_WAIT_FRAMES;
|
||||
print_str("dead wait...@");
|
||||
print_ln();
|
||||
action_count--;
|
||||
return (action_count==0);
|
||||
}
|
||||
|
||||
byte game_run_frame() {
|
||||
print_str("-");
|
||||
return 0;
|
||||
}
|
||||
|
||||
void game_main() {
|
||||
do {
|
||||
if (main_state == GAME_FADE_IN) {
|
||||
if (fade_in_game())
|
||||
main_state = GAME_LIVE_WAIT;
|
||||
} else if (main_state == GAME_FADE_OUT) {
|
||||
if (fade_out_game())
|
||||
main_state = TITLE_FADE_IN;
|
||||
} else if (main_state == GAME_LIVE_WAIT) {
|
||||
byte joy = *JOY2;
|
||||
if (joy & JOY_FIRE == 0)
|
||||
main_state = GAME_LIVE_DRAW;
|
||||
else if (joy & JOY_LEFT == 0)
|
||||
main_state = GAME_LIVE_WEAPON_MINUS;
|
||||
else if (joy & JOY_RIGHT == 0)
|
||||
main_state = GAME_LIVE_WEAPON_PLUS;
|
||||
else if (joy & JOY_UP == 0)
|
||||
main_state = GAME_LIVE_PATH_PLUS;
|
||||
else if (joy & JOY_DOWN == 0)
|
||||
main_state = GAME_LIVE_PATH_MINUS;
|
||||
} else if (main_state == GAME_LIVE_WEAPON_PLUS) {
|
||||
if (game_weapon_plus())
|
||||
main_state = GAME_LIVE_WAIT;
|
||||
} else if (main_state == GAME_LIVE_WEAPON_MINUS) {
|
||||
if (game_weapon_minus())
|
||||
main_state = GAME_LIVE_WAIT;
|
||||
} else if (main_state == GAME_LIVE_PATH_PLUS) {
|
||||
if (game_path_plus())
|
||||
main_state = GAME_LIVE_WAIT;
|
||||
} else if (main_state == GAME_LIVE_PATH_MINUS) {
|
||||
if (game_path_minus())
|
||||
main_state = GAME_LIVE_WAIT;
|
||||
} else if (main_state == GAME_LIVE_READY) {
|
||||
if (game_ready())
|
||||
main_state = GAME_LIVE_AIM;
|
||||
} else if (main_state == GAME_LIVE_AIM) {
|
||||
if (game_aim())
|
||||
main_state = GAME_LIVE_FIRE;
|
||||
} else if (main_state == GAME_LIVE_FIRE) {
|
||||
if (game_fire())
|
||||
main_state = GAME_LIVE_WAIT;
|
||||
} else if (main_state == GAME_DEAD_FALL) {
|
||||
if (game_dead_fall())
|
||||
main_state = GAME_DEAD_WAIT;
|
||||
} else if (main_state == GAME_DEAD_WAIT) {
|
||||
if (game_dead_wait())
|
||||
main_state = GAME_FADE_OUT;
|
||||
}
|
||||
if (game_run_frame())
|
||||
main_state = GAME_DEAD_FALL;
|
||||
} while (main_state >= GAME_FADE_IN);
|
||||
}
|
||||
|
||||
void main() {
|
||||
main_state = TITLE_FADE_IN;
|
||||
do {
|
||||
title_main();
|
||||
game_main();
|
||||
} while (true);
|
||||
}
|
15
src/test/kc/uninitialized.kc
Normal file
15
src/test/kc/uninitialized.kc
Normal file
@ -0,0 +1,15 @@
|
||||
// Tests uninitialized values of variables.
|
||||
|
||||
byte b;
|
||||
word w;
|
||||
byte* ptr;
|
||||
|
||||
const byte* SCREEN = $400;
|
||||
|
||||
void main() {
|
||||
SCREEN[0] = b;
|
||||
SCREEN[2] = <w;
|
||||
SCREEN[3] = >w;
|
||||
SCREEN[5] = (byte)<ptr;
|
||||
SCREEN[5] = (byte)>ptr;
|
||||
}
|
@ -11,8 +11,8 @@ main: scope:[main] from @1
|
||||
[4] *((const byte*) main::screen#0) ← (byte) 'c'
|
||||
[5] *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 40) ← (byte) 'c'
|
||||
[6] *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte) 'm'
|
||||
[7] (byte) main::a#1 ← *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 1)
|
||||
[8] *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 41) ← (byte) main::a#1
|
||||
[7] (byte) main::a#2 ← *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 1)
|
||||
[8] *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 41) ← (byte) main::a#2
|
||||
[9] *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte/signed byte/word/signed word/dword/signed dword) 1+(byte) 'l'
|
||||
[10] *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 42) ← (byte) 'l'
|
||||
to:main::@return
|
||||
|
@ -4,16 +4,17 @@ CONTROL FLOW GRAPH SSA
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
(byte*) main::screen#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
|
||||
(byte) main::a#0 ← (byte) 'c'
|
||||
*((byte*) main::screen#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte) main::a#0
|
||||
*((byte*) main::screen#0 + (byte/signed byte/word/signed word/dword/signed dword) 40) ← (byte) main::a#0
|
||||
(byte) main::a#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
(byte) main::a#1 ← (byte) 'c'
|
||||
*((byte*) main::screen#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte) main::a#1
|
||||
*((byte*) main::screen#0 + (byte/signed byte/word/signed word/dword/signed dword) 40) ← (byte) main::a#1
|
||||
*((byte*) main::screen#0 + (byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte) 'm'
|
||||
(byte) main::a#1 ← *((byte*) main::screen#0 + (byte/signed byte/word/signed word/dword/signed dword) 1)
|
||||
*((byte*) main::screen#0 + (byte/signed byte/word/signed word/dword/signed dword) 41) ← (byte) main::a#1
|
||||
(byte) main::a#2 ← (byte) 'l'
|
||||
(byte/signed word/word/dword/signed dword~) main::$0 ← (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::a#2
|
||||
(byte) main::a#2 ← *((byte*) main::screen#0 + (byte/signed byte/word/signed word/dword/signed dword) 1)
|
||||
*((byte*) main::screen#0 + (byte/signed byte/word/signed word/dword/signed dword) 41) ← (byte) main::a#2
|
||||
(byte) main::a#3 ← (byte) 'l'
|
||||
(byte/signed word/word/dword/signed dword~) main::$0 ← (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::a#3
|
||||
*((byte*) main::screen#0 + (byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte/signed word/word/dword/signed dword~) main::$0
|
||||
*((byte*) main::screen#0 + (byte/signed byte/word/signed word/dword/signed dword) 42) ← (byte) main::a#2
|
||||
*((byte*) main::screen#0 + (byte/signed byte/word/signed word/dword/signed dword) 42) ← (byte) main::a#3
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main
|
||||
return
|
||||
@ -37,16 +38,18 @@ SYMBOL TABLE SSA
|
||||
(byte) main::a#0
|
||||
(byte) main::a#1
|
||||
(byte) main::a#2
|
||||
(byte) main::a#3
|
||||
(byte*) main::screen
|
||||
(byte*) main::screen#0
|
||||
|
||||
Culled Empty Block (label) @2
|
||||
Successful SSA optimization Pass2CullEmptyBlocks
|
||||
Constant (const byte*) main::screen#0 = ((byte*))1024
|
||||
Constant (const byte) main::a#0 = 'c'
|
||||
Constant (const byte) main::a#2 = 'l'
|
||||
Constant (const byte) main::a#0 = 0
|
||||
Constant (const byte) main::a#1 = 'c'
|
||||
Constant (const byte) main::a#3 = 'l'
|
||||
Successful SSA optimization Pass2ConstantIdentification
|
||||
Constant (const byte/signed word/word/dword/signed dword) main::$0 = 1+main::a#2
|
||||
Constant (const byte/signed word/word/dword/signed dword) main::$0 = 1+main::a#3
|
||||
Successful SSA optimization Pass2ConstantIdentification
|
||||
Consolidated array index constant in *(main::screen#0+0)
|
||||
Consolidated array index constant in *(main::screen#0+40)
|
||||
@ -56,11 +59,12 @@ Consolidated array index constant in *(main::screen#0+41)
|
||||
Consolidated array index constant in *(main::screen#0+2)
|
||||
Consolidated array index constant in *(main::screen#0+42)
|
||||
Successful SSA optimization Pass2ConstantAdditionElimination
|
||||
Inlining constant with var siblings (const byte) main::a#0
|
||||
Inlining constant with var siblings (const byte) main::a#2
|
||||
Constant inlined main::a#0 = (byte) 'c'
|
||||
Constant inlined main::a#2 = (byte) 'l'
|
||||
Successful SSA optimization PassNEliminateUnusedVars
|
||||
Inlining constant with var siblings (const byte) main::a#1
|
||||
Inlining constant with var siblings (const byte) main::a#3
|
||||
Constant inlined main::a#3 = (byte) 'l'
|
||||
Constant inlined main::$0 = (byte/signed byte/word/signed word/dword/signed dword) 1+(byte) 'l'
|
||||
Constant inlined main::a#1 = (byte) 'c'
|
||||
Successful SSA optimization Pass2ConstantInlining
|
||||
Simplifying constant plus zero main::screen#0+0
|
||||
Adding NOP phi() at start of @begin
|
||||
@ -89,8 +93,8 @@ main: scope:[main] from @1
|
||||
[4] *((const byte*) main::screen#0) ← (byte) 'c'
|
||||
[5] *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 40) ← (byte) 'c'
|
||||
[6] *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte) 'm'
|
||||
[7] (byte) main::a#1 ← *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 1)
|
||||
[8] *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 41) ← (byte) main::a#1
|
||||
[7] (byte) main::a#2 ← *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 1)
|
||||
[8] *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 41) ← (byte) main::a#2
|
||||
[9] *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte/signed byte/word/signed word/dword/signed dword) 1+(byte) 'l'
|
||||
[10] *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 42) ← (byte) 'l'
|
||||
to:main::@return
|
||||
@ -102,14 +106,14 @@ main::@return: scope:[main] from main
|
||||
VARIABLE REGISTER WEIGHTS
|
||||
(void()) main()
|
||||
(byte) main::a
|
||||
(byte) main::a#1 4.0
|
||||
(byte) main::a#2 4.0
|
||||
(byte*) main::screen
|
||||
|
||||
Initial phi equivalence classes
|
||||
Added variable main::a#1 to zero page equivalence class [ main::a#1 ]
|
||||
Added variable main::a#2 to zero page equivalence class [ main::a#2 ]
|
||||
Complete equivalence classes
|
||||
[ main::a#1 ]
|
||||
Allocated zp ZP_BYTE:2 [ main::a#1 ]
|
||||
[ main::a#2 ]
|
||||
Allocated zp ZP_BYTE:2 [ main::a#2 ]
|
||||
|
||||
INITIAL ASM
|
||||
//SEG0 File Comments
|
||||
@ -146,10 +150,10 @@ main: {
|
||||
//SEG12 [6] *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte) 'm' -- _deref_pbuc1=vbuc2
|
||||
lda #'m'
|
||||
sta screen+1
|
||||
//SEG13 [7] (byte) main::a#1 ← *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 1) -- vbuz1=_deref_pbuc1
|
||||
//SEG13 [7] (byte) main::a#2 ← *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 1) -- vbuz1=_deref_pbuc1
|
||||
lda screen+1
|
||||
sta a
|
||||
//SEG14 [8] *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 41) ← (byte) main::a#1 -- _deref_pbuc1=vbuz1
|
||||
//SEG14 [8] *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 41) ← (byte) main::a#2 -- _deref_pbuc1=vbuz1
|
||||
lda a
|
||||
sta screen+$29
|
||||
//SEG15 [9] *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte/signed byte/word/signed word/dword/signed dword) 1+(byte) 'l' -- _deref_pbuc1=vbuc2
|
||||
@ -172,13 +176,13 @@ Statement [5] *((const byte*) main::screen#0+(byte/signed byte/word/signed word/
|
||||
Statement [6] *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte) 'm' [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
Statement [9] *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte/signed byte/word/signed word/dword/signed dword) 1+(byte) 'l' [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
Statement [10] *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 42) ← (byte) 'l' [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
Potential registers zp ZP_BYTE:2 [ main::a#1 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:2 [ main::a#2 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y ,
|
||||
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [main] 4: zp ZP_BYTE:2 [ main::a#1 ]
|
||||
Uplift Scope [main] 4: zp ZP_BYTE:2 [ main::a#2 ]
|
||||
Uplift Scope []
|
||||
|
||||
Uplifting [main] best 59 combination reg byte a [ main::a#1 ]
|
||||
Uplifting [main] best 59 combination reg byte a [ main::a#2 ]
|
||||
Uplifting [] best 59 combination
|
||||
|
||||
ASSEMBLER BEFORE OPTIMIZATION
|
||||
@ -215,9 +219,9 @@ main: {
|
||||
//SEG12 [6] *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte) 'm' -- _deref_pbuc1=vbuc2
|
||||
lda #'m'
|
||||
sta screen+1
|
||||
//SEG13 [7] (byte) main::a#1 ← *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 1) -- vbuaa=_deref_pbuc1
|
||||
//SEG13 [7] (byte) main::a#2 ← *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 1) -- vbuaa=_deref_pbuc1
|
||||
lda screen+1
|
||||
//SEG14 [8] *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 41) ← (byte) main::a#1 -- _deref_pbuc1=vbuaa
|
||||
//SEG14 [8] *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 41) ← (byte) main::a#2 -- _deref_pbuc1=vbuaa
|
||||
sta screen+$29
|
||||
//SEG15 [9] *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte/signed byte/word/signed word/dword/signed dword) 1+(byte) 'l' -- _deref_pbuc1=vbuc2
|
||||
lda #1+'l'
|
||||
@ -261,11 +265,11 @@ FINAL SYMBOL TABLE
|
||||
(void()) main()
|
||||
(label) main::@return
|
||||
(byte) main::a
|
||||
(byte) main::a#1 reg byte a 4.0
|
||||
(byte) main::a#2 reg byte a 4.0
|
||||
(byte*) main::screen
|
||||
(const byte*) main::screen#0 screen = ((byte*))(word/signed word/dword/signed dword) 1024
|
||||
|
||||
reg byte a [ main::a#1 ]
|
||||
reg byte a [ main::a#2 ]
|
||||
|
||||
|
||||
FINAL ASSEMBLER
|
||||
@ -295,8 +299,8 @@ main: {
|
||||
//SEG12 [6] *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte) 'm' -- _deref_pbuc1=vbuc2
|
||||
lda #'m'
|
||||
sta screen+1
|
||||
//SEG13 [7] (byte) main::a#1 ← *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 1) -- vbuaa=_deref_pbuc1
|
||||
//SEG14 [8] *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 41) ← (byte) main::a#1 -- _deref_pbuc1=vbuaa
|
||||
//SEG13 [7] (byte) main::a#2 ← *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 1) -- vbuaa=_deref_pbuc1
|
||||
//SEG14 [8] *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 41) ← (byte) main::a#2 -- _deref_pbuc1=vbuaa
|
||||
sta screen+$29
|
||||
//SEG15 [9] *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte/signed byte/word/signed word/dword/signed dword) 1+(byte) 'l' -- _deref_pbuc1=vbuc2
|
||||
lda #1+'l'
|
||||
|
@ -4,8 +4,8 @@
|
||||
(void()) main()
|
||||
(label) main::@return
|
||||
(byte) main::a
|
||||
(byte) main::a#1 reg byte a 4.0
|
||||
(byte) main::a#2 reg byte a 4.0
|
||||
(byte*) main::screen
|
||||
(const byte*) main::screen#0 screen = ((byte*))(word/signed word/dword/signed dword) 1024
|
||||
|
||||
reg byte a [ main::a#1 ]
|
||||
reg byte a [ main::a#2 ]
|
||||
|
@ -1073,84 +1073,84 @@ render_preset_name: {
|
||||
cmp #$a
|
||||
beq b10
|
||||
b33:
|
||||
lda #<name_0
|
||||
sta name
|
||||
lda #>name_0
|
||||
sta name+1
|
||||
jmp b22
|
||||
b1:
|
||||
lda #<name_1
|
||||
sta name
|
||||
lda #>name_1
|
||||
sta name+1
|
||||
jmp b22
|
||||
b2:
|
||||
b1:
|
||||
lda #<name_2
|
||||
sta name
|
||||
lda #>name_2
|
||||
sta name+1
|
||||
jmp b22
|
||||
b3:
|
||||
b2:
|
||||
lda #<name_3
|
||||
sta name
|
||||
lda #>name_3
|
||||
sta name+1
|
||||
jmp b22
|
||||
b4:
|
||||
b3:
|
||||
lda #<name_4
|
||||
sta name
|
||||
lda #>name_4
|
||||
sta name+1
|
||||
jmp b22
|
||||
b5:
|
||||
b4:
|
||||
lda #<name_5
|
||||
sta name
|
||||
lda #>name_5
|
||||
sta name+1
|
||||
jmp b22
|
||||
b6:
|
||||
b5:
|
||||
lda #<name_6
|
||||
sta name
|
||||
lda #>name_6
|
||||
sta name+1
|
||||
jmp b22
|
||||
b7:
|
||||
b6:
|
||||
lda #<name_7
|
||||
sta name
|
||||
lda #>name_7
|
||||
sta name+1
|
||||
jmp b22
|
||||
b8:
|
||||
b7:
|
||||
lda #<name_8
|
||||
sta name
|
||||
lda #>name_8
|
||||
sta name+1
|
||||
jmp b22
|
||||
b9:
|
||||
b8:
|
||||
lda #<name_9
|
||||
sta name
|
||||
lda #>name_9
|
||||
sta name+1
|
||||
jmp b22
|
||||
b10:
|
||||
b9:
|
||||
lda #<name_10
|
||||
sta name
|
||||
lda #>name_10
|
||||
sta name+1
|
||||
jmp b22
|
||||
b10:
|
||||
lda #<name_11
|
||||
sta name
|
||||
lda #>name_11
|
||||
sta name+1
|
||||
b22:
|
||||
jsr print_str_at
|
||||
rts
|
||||
name_0: .text "Standard Charset @"
|
||||
name_1: .text "Extended Color Charset @"
|
||||
name_2: .text "Standard Bitmap @"
|
||||
name_3: .text "Multicolor Bitmap @"
|
||||
name_4: .text "Hicolor Charset @"
|
||||
name_5: .text "Hicolor Extended Color Charset@"
|
||||
name_6: .text "Twoplane Bitmap @"
|
||||
name_7: .text "Chunky 8bpp @"
|
||||
name_8: .text "Sixs Fred @"
|
||||
name_9: .text "Sixs Fred 2 @"
|
||||
name_10: .text "8bpp Pixel Cell @"
|
||||
name_1: .text "Standard Charset @"
|
||||
name_2: .text "Extended Color Charset @"
|
||||
name_3: .text "Standard Bitmap @"
|
||||
name_4: .text "Multicolor Bitmap @"
|
||||
name_5: .text "Hicolor Charset @"
|
||||
name_6: .text "Hicolor Extended Color Charset@"
|
||||
name_7: .text "Twoplane Bitmap @"
|
||||
name_8: .text "Chunky 8bpp @"
|
||||
name_9: .text "Sixs Fred @"
|
||||
name_10: .text "Sixs Fred 2 @"
|
||||
name_11: .text "8bpp Pixel Cell @"
|
||||
}
|
||||
// Print a string at a specific screen position
|
||||
// print_str_at(byte* zeropage(3) str, byte* zeropage(5) at)
|
||||
|
@ -602,8 +602,8 @@ render_preset_name::@33: scope:[render_preset_name] from render_preset_name::@3
|
||||
[318] phi()
|
||||
to:render_preset_name::@22
|
||||
render_preset_name::@22: scope:[render_preset_name] from render_preset_name render_preset_name::@23 render_preset_name::@24 render_preset_name::@25 render_preset_name::@26 render_preset_name::@27 render_preset_name::@28 render_preset_name::@29 render_preset_name::@30 render_preset_name::@31 render_preset_name::@32 render_preset_name::@33
|
||||
[319] (byte*) render_preset_name::name#12 ← phi( render_preset_name/(const byte*) render_preset_name::name#0 render_preset_name::@31/(const byte*) render_preset_name::name#9 render_preset_name::@32/(const byte*) render_preset_name::name#10 render_preset_name::@23/(const byte*) render_preset_name::name#1 render_preset_name::@24/(const byte*) render_preset_name::name#2 render_preset_name::@33/(const byte*) render_preset_name::name#0 render_preset_name::@25/(const byte*) render_preset_name::name#3 render_preset_name::@26/(const byte*) render_preset_name::name#4 render_preset_name::@27/(const byte*) render_preset_name::name#5 render_preset_name::@28/(const byte*) render_preset_name::name#6 render_preset_name::@29/(const byte*) render_preset_name::name#7 render_preset_name::@30/(const byte*) render_preset_name::name#8 )
|
||||
[320] (byte*) print_str_at::str#1 ← (byte*) render_preset_name::name#12
|
||||
[319] (byte*) render_preset_name::name#13 ← phi( render_preset_name/(const byte*) render_preset_name::name#1 render_preset_name::@31/(const byte*) render_preset_name::name#10 render_preset_name::@32/(const byte*) render_preset_name::name#11 render_preset_name::@23/(const byte*) render_preset_name::name#2 render_preset_name::@24/(const byte*) render_preset_name::name#3 render_preset_name::@33/(const byte*) render_preset_name::name#1 render_preset_name::@25/(const byte*) render_preset_name::name#4 render_preset_name::@26/(const byte*) render_preset_name::name#5 render_preset_name::@27/(const byte*) render_preset_name::name#6 render_preset_name::@28/(const byte*) render_preset_name::name#7 render_preset_name::@29/(const byte*) render_preset_name::name#8 render_preset_name::@30/(const byte*) render_preset_name::name#9 )
|
||||
[320] (byte*) print_str_at::str#1 ← (byte*) render_preset_name::name#13
|
||||
[321] call print_str_at
|
||||
to:render_preset_name::@return
|
||||
render_preset_name::@return: scope:[render_preset_name] from render_preset_name::@22
|
||||
@ -690,11 +690,11 @@ apply_preset::@34: scope:[apply_preset] from apply_preset::@33
|
||||
[357] phi()
|
||||
to:apply_preset::@22
|
||||
apply_preset::@22: scope:[apply_preset] from apply_preset apply_preset::@24 apply_preset::@25 apply_preset::@26 apply_preset::@27 apply_preset::@28 apply_preset::@29 apply_preset::@30 apply_preset::@31 apply_preset::@32 apply_preset::@33 apply_preset::@34
|
||||
[358] (byte*) apply_preset::preset#13 ← phi( apply_preset/(const byte[]) preset_stdchar#0 apply_preset::@32/(const byte[]) preset_sixsfred2#0 apply_preset::@33/(const byte[]) preset_8bpppixelcell#0 apply_preset::@24/(const byte[]) preset_ecmchar#0 apply_preset::@25/(const byte[]) preset_stdbm#0 apply_preset::@34/(const byte[]) preset_stdchar#0 apply_preset::@26/(const byte[]) preset_mcbm#0 apply_preset::@27/(const byte[]) preset_hi_stdchar#0 apply_preset::@28/(const byte[]) preset_hi_ecmchar#0 apply_preset::@29/(const byte[]) preset_twoplane#0 apply_preset::@30/(const byte[]) preset_chunky#0 apply_preset::@31/(const byte[]) preset_sixsfred#0 )
|
||||
[358] (byte*) apply_preset::preset#14 ← phi( apply_preset/(const byte[]) preset_stdchar#0 apply_preset::@32/(const byte[]) preset_sixsfred2#0 apply_preset::@33/(const byte[]) preset_8bpppixelcell#0 apply_preset::@24/(const byte[]) preset_ecmchar#0 apply_preset::@25/(const byte[]) preset_stdbm#0 apply_preset::@34/(const byte[]) preset_stdchar#0 apply_preset::@26/(const byte[]) preset_mcbm#0 apply_preset::@27/(const byte[]) preset_hi_stdchar#0 apply_preset::@28/(const byte[]) preset_hi_ecmchar#0 apply_preset::@29/(const byte[]) preset_twoplane#0 apply_preset::@30/(const byte[]) preset_chunky#0 apply_preset::@31/(const byte[]) preset_sixsfred#0 )
|
||||
to:apply_preset::@23
|
||||
apply_preset::@23: scope:[apply_preset] from apply_preset::@22 apply_preset::@23
|
||||
[359] (byte) apply_preset::i#2 ← phi( apply_preset::@22/(byte/signed byte/word/signed word/dword/signed dword) 0 apply_preset::@23/(byte) apply_preset::i#1 )
|
||||
[360] *((const byte[]) form_fields_val#0 + (byte) apply_preset::i#2) ← *((byte*) apply_preset::preset#13 + (byte) apply_preset::i#2)
|
||||
[360] *((const byte[]) form_fields_val#0 + (byte) apply_preset::i#2) ← *((byte*) apply_preset::preset#14 + (byte) apply_preset::i#2)
|
||||
[361] (byte) apply_preset::i#1 ← ++ (byte) apply_preset::i#2
|
||||
[362] if((byte) apply_preset::i#1!=(const byte) form_fields_cnt#0) goto apply_preset::@23
|
||||
to:apply_preset::@return
|
||||
@ -1229,19 +1229,19 @@ bitmap_line: scope:[bitmap_line] from gfx_init_vic_bitmap::@1
|
||||
[619] if((byte) bitmap_line::x0#0<(byte) bitmap_line::x1#0) goto bitmap_line::@1
|
||||
to:bitmap_line::@15
|
||||
bitmap_line::@15: scope:[bitmap_line] from bitmap_line
|
||||
[620] (byte) bitmap_line::xd#1 ← (byte) bitmap_line::x0#0 - (byte) bitmap_line::x1#0
|
||||
[620] (byte) bitmap_line::xd#2 ← (byte) bitmap_line::x0#0 - (byte) bitmap_line::x1#0
|
||||
[621] if((byte) bitmap_line::y0#0<(byte) bitmap_line::y1#0) goto bitmap_line::@2
|
||||
to:bitmap_line::@16
|
||||
bitmap_line::@16: scope:[bitmap_line] from bitmap_line::@15
|
||||
[622] (byte) bitmap_line::yd#1 ← (byte) bitmap_line::y0#0 - (byte) bitmap_line::y1#0
|
||||
[623] if((byte) bitmap_line::yd#1<(byte) bitmap_line::xd#1) goto bitmap_line::@3
|
||||
[622] (byte) bitmap_line::yd#2 ← (byte) bitmap_line::y0#0 - (byte) bitmap_line::y1#0
|
||||
[623] if((byte) bitmap_line::yd#2<(byte) bitmap_line::xd#2) goto bitmap_line::@3
|
||||
to:bitmap_line::@17
|
||||
bitmap_line::@17: scope:[bitmap_line] from bitmap_line::@16
|
||||
[624] (byte) bitmap_line_ydxi::y#0 ← (byte) bitmap_line::y1#0
|
||||
[625] (byte) bitmap_line_ydxi::x#0 ← (byte) bitmap_line::x1#0
|
||||
[626] (byte) bitmap_line_ydxi::y1#0 ← (byte) bitmap_line::y0#0
|
||||
[627] (byte) bitmap_line_ydxi::yd#0 ← (byte) bitmap_line::yd#1
|
||||
[628] (byte) bitmap_line_ydxi::xd#0 ← (byte) bitmap_line::xd#1
|
||||
[627] (byte) bitmap_line_ydxi::yd#0 ← (byte) bitmap_line::yd#2
|
||||
[628] (byte) bitmap_line_ydxi::xd#0 ← (byte) bitmap_line::xd#2
|
||||
[629] call bitmap_line_ydxi
|
||||
to:bitmap_line::@return
|
||||
bitmap_line::@return: scope:[bitmap_line] from bitmap_line::@10 bitmap_line::@13 bitmap_line::@17 bitmap_line::@20 bitmap_line::@24 bitmap_line::@27 bitmap_line::@3 bitmap_line::@6
|
||||
@ -1251,72 +1251,72 @@ bitmap_line::@3: scope:[bitmap_line] from bitmap_line::@16
|
||||
[631] (byte) bitmap_line_xdyi::x#0 ← (byte) bitmap_line::x1#0
|
||||
[632] (byte) bitmap_line_xdyi::y#0 ← (byte) bitmap_line::y1#0
|
||||
[633] (byte) bitmap_line_xdyi::x1#0 ← (byte) bitmap_line::x0#0
|
||||
[634] (byte) bitmap_line_xdyi::xd#0 ← (byte) bitmap_line::xd#1
|
||||
[635] (byte) bitmap_line_xdyi::yd#0 ← (byte) bitmap_line::yd#1
|
||||
[634] (byte) bitmap_line_xdyi::xd#0 ← (byte) bitmap_line::xd#2
|
||||
[635] (byte) bitmap_line_xdyi::yd#0 ← (byte) bitmap_line::yd#2
|
||||
[636] call bitmap_line_xdyi
|
||||
to:bitmap_line::@return
|
||||
bitmap_line::@2: scope:[bitmap_line] from bitmap_line::@15
|
||||
[637] (byte) bitmap_line::yd#0 ← (byte) bitmap_line::y1#0 - (byte) bitmap_line::y0#0
|
||||
[638] if((byte) bitmap_line::yd#0<(byte) bitmap_line::xd#1) goto bitmap_line::@6
|
||||
[637] (byte) bitmap_line::yd#1 ← (byte) bitmap_line::y1#0 - (byte) bitmap_line::y0#0
|
||||
[638] if((byte) bitmap_line::yd#1<(byte) bitmap_line::xd#2) goto bitmap_line::@6
|
||||
to:bitmap_line::@20
|
||||
bitmap_line::@20: scope:[bitmap_line] from bitmap_line::@2
|
||||
[639] (byte) bitmap_line_ydxd::y#0 ← (byte) bitmap_line::y0#0
|
||||
[640] (byte) bitmap_line_ydxd::x#0 ← (byte) bitmap_line::x0#0
|
||||
[641] (byte) bitmap_line_ydxd::y1#0 ← (byte) bitmap_line::y1#0
|
||||
[642] (byte) bitmap_line_ydxd::yd#0 ← (byte) bitmap_line::yd#0
|
||||
[643] (byte) bitmap_line_ydxd::xd#0 ← (byte) bitmap_line::xd#1
|
||||
[642] (byte) bitmap_line_ydxd::yd#0 ← (byte) bitmap_line::yd#1
|
||||
[643] (byte) bitmap_line_ydxd::xd#0 ← (byte) bitmap_line::xd#2
|
||||
[644] call bitmap_line_ydxd
|
||||
to:bitmap_line::@return
|
||||
bitmap_line::@6: scope:[bitmap_line] from bitmap_line::@2
|
||||
[645] (byte) bitmap_line_xdyd::x#0 ← (byte) bitmap_line::x1#0
|
||||
[646] (byte) bitmap_line_xdyd::y#0 ← (byte) bitmap_line::y1#0
|
||||
[647] (byte) bitmap_line_xdyd::x1#0 ← (byte) bitmap_line::x0#0
|
||||
[648] (byte) bitmap_line_xdyd::xd#0 ← (byte) bitmap_line::xd#1
|
||||
[649] (byte) bitmap_line_xdyd::yd#0 ← (byte) bitmap_line::yd#0
|
||||
[648] (byte) bitmap_line_xdyd::xd#0 ← (byte) bitmap_line::xd#2
|
||||
[649] (byte) bitmap_line_xdyd::yd#0 ← (byte) bitmap_line::yd#1
|
||||
[650] call bitmap_line_xdyd
|
||||
to:bitmap_line::@return
|
||||
bitmap_line::@1: scope:[bitmap_line] from bitmap_line
|
||||
[651] (byte) bitmap_line::xd#0 ← (byte) bitmap_line::x1#0 - (byte) bitmap_line::x0#0
|
||||
[651] (byte) bitmap_line::xd#1 ← (byte) bitmap_line::x1#0 - (byte) bitmap_line::x0#0
|
||||
[652] if((byte) bitmap_line::y0#0<(byte) bitmap_line::y1#0) goto bitmap_line::@9
|
||||
to:bitmap_line::@23
|
||||
bitmap_line::@23: scope:[bitmap_line] from bitmap_line::@1
|
||||
[653] (byte) bitmap_line::yd#3 ← (byte) bitmap_line::y0#0 - (byte) bitmap_line::y1#0
|
||||
[654] if((byte) bitmap_line::yd#3<(byte) bitmap_line::xd#0) goto bitmap_line::@10
|
||||
[653] (byte) bitmap_line::yd#10 ← (byte) bitmap_line::y0#0 - (byte) bitmap_line::y1#0
|
||||
[654] if((byte) bitmap_line::yd#10<(byte) bitmap_line::xd#1) goto bitmap_line::@10
|
||||
to:bitmap_line::@24
|
||||
bitmap_line::@24: scope:[bitmap_line] from bitmap_line::@23
|
||||
[655] (byte) bitmap_line_ydxd::y#1 ← (byte) bitmap_line::y1#0
|
||||
[656] (byte) bitmap_line_ydxd::x#1 ← (byte) bitmap_line::x1#0
|
||||
[657] (byte) bitmap_line_ydxd::y1#1 ← (byte) bitmap_line::y0#0
|
||||
[658] (byte) bitmap_line_ydxd::yd#1 ← (byte) bitmap_line::yd#3
|
||||
[659] (byte) bitmap_line_ydxd::xd#1 ← (byte) bitmap_line::xd#0
|
||||
[658] (byte) bitmap_line_ydxd::yd#1 ← (byte) bitmap_line::yd#10
|
||||
[659] (byte) bitmap_line_ydxd::xd#1 ← (byte) bitmap_line::xd#1
|
||||
[660] call bitmap_line_ydxd
|
||||
to:bitmap_line::@return
|
||||
bitmap_line::@10: scope:[bitmap_line] from bitmap_line::@23
|
||||
[661] (byte) bitmap_line_xdyd::x#1 ← (byte) bitmap_line::x0#0
|
||||
[662] (byte) bitmap_line_xdyd::y#1 ← (byte) bitmap_line::y0#0
|
||||
[663] (byte) bitmap_line_xdyd::x1#1 ← (byte) bitmap_line::x1#0
|
||||
[664] (byte) bitmap_line_xdyd::xd#1 ← (byte) bitmap_line::xd#0
|
||||
[665] (byte) bitmap_line_xdyd::yd#1 ← (byte) bitmap_line::yd#3
|
||||
[664] (byte) bitmap_line_xdyd::xd#1 ← (byte) bitmap_line::xd#1
|
||||
[665] (byte) bitmap_line_xdyd::yd#1 ← (byte) bitmap_line::yd#10
|
||||
[666] call bitmap_line_xdyd
|
||||
to:bitmap_line::@return
|
||||
bitmap_line::@9: scope:[bitmap_line] from bitmap_line::@1
|
||||
[667] (byte) bitmap_line::yd#10 ← (byte) bitmap_line::y1#0 - (byte) bitmap_line::y0#0
|
||||
[668] if((byte) bitmap_line::yd#10<(byte) bitmap_line::xd#0) goto bitmap_line::@13
|
||||
[667] (byte) bitmap_line::yd#11 ← (byte) bitmap_line::y1#0 - (byte) bitmap_line::y0#0
|
||||
[668] if((byte) bitmap_line::yd#11<(byte) bitmap_line::xd#1) goto bitmap_line::@13
|
||||
to:bitmap_line::@27
|
||||
bitmap_line::@27: scope:[bitmap_line] from bitmap_line::@9
|
||||
[669] (byte) bitmap_line_ydxi::y#1 ← (byte) bitmap_line::y0#0
|
||||
[670] (byte) bitmap_line_ydxi::x#1 ← (byte) bitmap_line::x0#0
|
||||
[671] (byte) bitmap_line_ydxi::y1#1 ← (byte) bitmap_line::y1#0
|
||||
[672] (byte) bitmap_line_ydxi::yd#1 ← (byte) bitmap_line::yd#10
|
||||
[673] (byte) bitmap_line_ydxi::xd#1 ← (byte) bitmap_line::xd#0
|
||||
[672] (byte) bitmap_line_ydxi::yd#1 ← (byte) bitmap_line::yd#11
|
||||
[673] (byte) bitmap_line_ydxi::xd#1 ← (byte) bitmap_line::xd#1
|
||||
[674] call bitmap_line_ydxi
|
||||
to:bitmap_line::@return
|
||||
bitmap_line::@13: scope:[bitmap_line] from bitmap_line::@9
|
||||
[675] (byte) bitmap_line_xdyi::x#1 ← (byte) bitmap_line::x0#0
|
||||
[676] (byte) bitmap_line_xdyi::y#1 ← (byte) bitmap_line::y0#0
|
||||
[677] (byte) bitmap_line_xdyi::x1#1 ← (byte) bitmap_line::x1#0
|
||||
[678] (byte) bitmap_line_xdyi::xd#1 ← (byte) bitmap_line::xd#0
|
||||
[679] (byte) bitmap_line_xdyi::yd#1 ← (byte) bitmap_line::yd#10
|
||||
[678] (byte) bitmap_line_xdyi::xd#1 ← (byte) bitmap_line::xd#1
|
||||
[679] (byte) bitmap_line_xdyi::yd#1 ← (byte) bitmap_line::yd#11
|
||||
[680] call bitmap_line_xdyi
|
||||
to:bitmap_line::@return
|
||||
bitmap_line_xdyi: scope:[bitmap_line_xdyi] from bitmap_line::@13 bitmap_line::@3
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -373,7 +373,7 @@
|
||||
(byte) apply_preset::idx
|
||||
(byte) apply_preset::idx#0 reg byte a 11.18181818181818
|
||||
(byte*) apply_preset::preset
|
||||
(byte*) apply_preset::preset#13 preset zp ZP_WORD:3 200.2
|
||||
(byte*) apply_preset::preset#14 preset zp ZP_WORD:3 200.2
|
||||
(void()) bitmap_clear()
|
||||
(word~) bitmap_clear::$3 $3 zp ZP_WORD:3 2.0
|
||||
(label) bitmap_clear::@1
|
||||
@ -441,17 +441,17 @@
|
||||
(byte) bitmap_line::x1
|
||||
(byte) bitmap_line::x1#0 x1 zp ZP_BYTE:18 1.3181818181818181
|
||||
(byte) bitmap_line::xd
|
||||
(byte) bitmap_line::xd#0 xd zp ZP_BYTE:8 0.7
|
||||
(byte) bitmap_line::xd#1 xd zp ZP_BYTE:8 0.7
|
||||
(byte) bitmap_line::xd#2 xd zp ZP_BYTE:8 0.7
|
||||
(byte) bitmap_line::y0
|
||||
(byte) bitmap_line::y0#0 y0 zp ZP_BYTE:15 1.6666666666666674
|
||||
(byte) bitmap_line::y1
|
||||
(byte) bitmap_line::y1#0 reg byte y 1.7500000000000007
|
||||
(byte) bitmap_line::yd
|
||||
(byte) bitmap_line::yd#0 yd zp ZP_BYTE:7 0.8888888888888888
|
||||
(byte) bitmap_line::yd#1 yd zp ZP_BYTE:7 0.8888888888888888
|
||||
(byte) bitmap_line::yd#10 yd zp ZP_BYTE:7 0.8888888888888888
|
||||
(byte) bitmap_line::yd#3 yd zp ZP_BYTE:7 0.8888888888888888
|
||||
(byte) bitmap_line::yd#11 yd zp ZP_BYTE:7 0.8888888888888888
|
||||
(byte) bitmap_line::yd#2 yd zp ZP_BYTE:7 0.8888888888888888
|
||||
(void()) bitmap_line_xdyd((byte) bitmap_line_xdyd::x , (byte) bitmap_line_xdyd::y , (byte) bitmap_line_xdyd::x1 , (byte) bitmap_line_xdyd::xd , (byte) bitmap_line_xdyd::yd)
|
||||
(byte/signed word/word/dword/signed dword~) bitmap_line_xdyd::$6 reg byte x 202.0
|
||||
(label) bitmap_line_xdyd::@1
|
||||
@ -1542,30 +1542,30 @@
|
||||
(byte) render_preset_name::idx#1 reg byte a 202.0
|
||||
(byte) render_preset_name::idx#10 reg byte a 11.363636363636362
|
||||
(byte*) render_preset_name::name
|
||||
(const byte*) render_preset_name::name#0 name#0 = (string) "Standard Charset @"
|
||||
(const byte*) render_preset_name::name#1 name#1 = (string) "Extended Color Charset @"
|
||||
(const byte*) render_preset_name::name#10 name#10 = (string) "8bpp Pixel Cell @"
|
||||
(byte*) render_preset_name::name#12 name zp ZP_WORD:3 2.0
|
||||
(const byte*) render_preset_name::name#2 name#2 = (string) "Standard Bitmap @"
|
||||
(const byte*) render_preset_name::name#3 name#3 = (string) "Multicolor Bitmap @"
|
||||
(const byte*) render_preset_name::name#4 name#4 = (string) "Hicolor Charset @"
|
||||
(const byte*) render_preset_name::name#5 name#5 = (string) "Hicolor Extended Color Charset@"
|
||||
(const byte*) render_preset_name::name#6 name#6 = (string) "Twoplane Bitmap @"
|
||||
(const byte*) render_preset_name::name#7 name#7 = (string) "Chunky 8bpp @"
|
||||
(const byte*) render_preset_name::name#8 name#8 = (string) "Sixs Fred @"
|
||||
(const byte*) render_preset_name::name#9 name#9 = (string) "Sixs Fred 2 @"
|
||||
(const byte*) render_preset_name::name#1 name#1 = (string) "Standard Charset @"
|
||||
(const byte*) render_preset_name::name#10 name#10 = (string) "Sixs Fred 2 @"
|
||||
(const byte*) render_preset_name::name#11 name#11 = (string) "8bpp Pixel Cell @"
|
||||
(byte*) render_preset_name::name#13 name zp ZP_WORD:3 2.0
|
||||
(const byte*) render_preset_name::name#2 name#2 = (string) "Extended Color Charset @"
|
||||
(const byte*) render_preset_name::name#3 name#3 = (string) "Standard Bitmap @"
|
||||
(const byte*) render_preset_name::name#4 name#4 = (string) "Multicolor Bitmap @"
|
||||
(const byte*) render_preset_name::name#5 name#5 = (string) "Hicolor Charset @"
|
||||
(const byte*) render_preset_name::name#6 name#6 = (string) "Hicolor Extended Color Charset@"
|
||||
(const byte*) render_preset_name::name#7 name#7 = (string) "Twoplane Bitmap @"
|
||||
(const byte*) render_preset_name::name#8 name#8 = (string) "Chunky 8bpp @"
|
||||
(const byte*) render_preset_name::name#9 name#9 = (string) "Sixs Fred @"
|
||||
|
||||
reg byte y [ gfx_mode::dtv_control#12 gfx_mode::dtv_control#6 gfx_mode::dtv_control#13 gfx_mode::dtv_control#5 gfx_mode::dtv_control#11 gfx_mode::dtv_control#4 gfx_mode::dtv_control#10 gfx_mode::dtv_control#15 gfx_mode::dtv_control#14 gfx_mode::dtv_control#2 gfx_mode::dtv_control#3 ]
|
||||
reg byte y [ gfx_mode::vic_control#4 gfx_mode::vic_control#2 gfx_mode::vic_control#5 ]
|
||||
reg byte a [ gfx_mode::vic_control2#2 ]
|
||||
zp ZP_BYTE:2 [ gfx_mode::cy#4 gfx_mode::cy#1 keyboard_event_scan::row#2 keyboard_event_scan::row#1 keyboard_modifiers#21 keyboard_modifiers#20 keyboard_modifiers#4 keyboard_modifiers#19 keyboard_modifiers#3 keyboard_modifiers#18 keyboard_modifiers#5 form_render_values::idx#2 form_render_values::idx#1 form_field_ptr::field_idx#2 form_field_ptr::field_idx#1 form_field_ptr::field_idx#0 gfx_init_plane_fill::fill#6 gfx_init_plane_horisontal2::ay#4 gfx_init_plane_horisontal2::ay#1 gfx_init_plane_vertical::by#4 gfx_init_plane_vertical::by#1 gfx_init_plane_horisontal::ay#4 gfx_init_plane_horisontal::ay#1 gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::ch#1 gfx_init_plane_8bppchunky::y#6 gfx_init_plane_8bppchunky::y#1 gfx_init_vic_bitmap::l#2 gfx_init_vic_bitmap::l#1 bitmap_clear::y#4 bitmap_clear::y#1 gfx_init_charset::c#4 gfx_init_charset::c#1 gfx_init_screen4::cy#4 gfx_init_screen4::cy#1 gfx_init_screen3::cy#4 gfx_init_screen3::cy#1 gfx_init_screen2::cy#4 gfx_init_screen2::cy#1 gfx_init_screen1::cy#4 gfx_init_screen1::cy#1 gfx_init_screen0::cy#4 gfx_init_screen0::cy#1 gfx_mode::$65 bitmap_init::$6 ]
|
||||
zp ZP_WORD:3 [ gfx_mode::vic_colors#2 gfx_mode::vic_colors#3 gfx_mode::vic_colors#1 gfx_mode::vic_colors#0 get_vic_screen::return#11 get_vic_screen::return#5 get_vic_screen::return#10 gfx_mode::$61 gfx_mode::$63 gfx_mode::$64 get_vic_charset::return#2 get_vic_charset::return#4 gfx_mode::$66 gfx_mode::$68 render_preset_name::name#12 print_str_at::str#2 print_str_at::str#1 print_str_at::str#0 apply_preset::preset#13 form_set_screen::line#2 form_set_screen::line#1 print_str_lines::str#4 print_str_lines::str#3 print_str_lines::str#5 print_str_lines::str#0 print_cls::sc#2 print_cls::sc#0 print_cls::sc#1 gfx_init_plane_fill::gfxb#2 gfx_init_plane_fill::gfxb#3 gfx_init_plane_fill::gfxb#1 gfx_init_plane_fill::gfxb#6 gfx_init_plane_fill::$6 gfx_init_plane_fill::$4 gfx_init_plane_fill::$5 gfx_init_plane_horisontal2::gfxa#2 gfx_init_plane_horisontal2::gfxa#3 gfx_init_plane_horisontal2::gfxa#1 gfx_init_plane_vertical::gfxb#2 gfx_init_plane_vertical::gfxb#3 gfx_init_plane_vertical::gfxb#1 gfx_init_plane_horisontal::gfxa#3 gfx_init_plane_horisontal::gfxa#6 gfx_init_plane_horisontal::gfxa#7 gfx_init_plane_horisontal::gfxa#1 gfx_init_plane_horisontal::gfxa#2 gfx_init_plane_charset8::chargen#2 gfx_init_plane_charset8::chargen#3 gfx_init_plane_charset8::chargen#1 gfx_init_plane_8bppchunky::x#2 gfx_init_plane_8bppchunky::x#1 bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 bitmap_clear::$3 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 gfx_init_charset::chargen#2 gfx_init_charset::chargen#3 gfx_init_charset::chargen#1 gfx_init_screen4::ch#2 gfx_init_screen4::ch#3 gfx_init_screen4::ch#1 gfx_init_screen3::ch#2 gfx_init_screen3::ch#3 gfx_init_screen3::ch#1 gfx_init_screen2::ch#2 gfx_init_screen2::ch#3 gfx_init_screen2::ch#1 gfx_init_screen1::ch#2 gfx_init_screen1::ch#3 gfx_init_screen1::ch#1 gfx_init_screen0::ch#2 gfx_init_screen0::ch#3 gfx_init_screen0::ch#1 gfx_mode::$33 gfx_mode::$35 gfx_mode::$37 gfx_mode::$47 gfx_mode::$49 gfx_mode::$51 form_field_ptr::return#2 form_render_values::field#0 form_field_ptr::return#0 form_field_ptr::$2 form_field_ptr::return#3 form_control::field#0 gfx_init_plane_fill::$1 bitmap_plot::plotter_x#0 bitmap_plot::$0 ]
|
||||
zp ZP_WORD:3 [ gfx_mode::vic_colors#2 gfx_mode::vic_colors#3 gfx_mode::vic_colors#1 gfx_mode::vic_colors#0 get_vic_screen::return#11 get_vic_screen::return#5 get_vic_screen::return#10 gfx_mode::$61 gfx_mode::$63 gfx_mode::$64 get_vic_charset::return#2 get_vic_charset::return#4 gfx_mode::$66 gfx_mode::$68 render_preset_name::name#13 print_str_at::str#2 print_str_at::str#1 print_str_at::str#0 apply_preset::preset#14 form_set_screen::line#2 form_set_screen::line#1 print_str_lines::str#4 print_str_lines::str#3 print_str_lines::str#5 print_str_lines::str#0 print_cls::sc#2 print_cls::sc#0 print_cls::sc#1 gfx_init_plane_fill::gfxb#2 gfx_init_plane_fill::gfxb#3 gfx_init_plane_fill::gfxb#1 gfx_init_plane_fill::gfxb#6 gfx_init_plane_fill::$6 gfx_init_plane_fill::$4 gfx_init_plane_fill::$5 gfx_init_plane_horisontal2::gfxa#2 gfx_init_plane_horisontal2::gfxa#3 gfx_init_plane_horisontal2::gfxa#1 gfx_init_plane_vertical::gfxb#2 gfx_init_plane_vertical::gfxb#3 gfx_init_plane_vertical::gfxb#1 gfx_init_plane_horisontal::gfxa#3 gfx_init_plane_horisontal::gfxa#6 gfx_init_plane_horisontal::gfxa#7 gfx_init_plane_horisontal::gfxa#1 gfx_init_plane_horisontal::gfxa#2 gfx_init_plane_charset8::chargen#2 gfx_init_plane_charset8::chargen#3 gfx_init_plane_charset8::chargen#1 gfx_init_plane_8bppchunky::x#2 gfx_init_plane_8bppchunky::x#1 bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 bitmap_clear::$3 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 gfx_init_charset::chargen#2 gfx_init_charset::chargen#3 gfx_init_charset::chargen#1 gfx_init_screen4::ch#2 gfx_init_screen4::ch#3 gfx_init_screen4::ch#1 gfx_init_screen3::ch#2 gfx_init_screen3::ch#3 gfx_init_screen3::ch#1 gfx_init_screen2::ch#2 gfx_init_screen2::ch#3 gfx_init_screen2::ch#1 gfx_init_screen1::ch#2 gfx_init_screen1::ch#3 gfx_init_screen1::ch#1 gfx_init_screen0::ch#2 gfx_init_screen0::ch#3 gfx_init_screen0::ch#1 gfx_mode::$33 gfx_mode::$35 gfx_mode::$37 gfx_mode::$47 gfx_mode::$49 gfx_mode::$51 form_field_ptr::return#2 form_render_values::field#0 form_field_ptr::return#0 form_field_ptr::$2 form_field_ptr::return#3 form_control::field#0 gfx_init_plane_fill::$1 bitmap_plot::plotter_x#0 bitmap_plot::$0 ]
|
||||
zp ZP_WORD:5 [ gfx_mode::col#2 gfx_mode::col#3 gfx_mode::col#1 print_str_at::at#2 print_str_at::at#0 print_char_cursor#20 print_char_cursor#22 print_char_cursor#77 print_char_cursor#78 print_char_cursor#38 print_char_cursor#1 gfx_init_plane_charset8::gfxa#2 gfx_init_plane_charset8::gfxa#5 gfx_init_plane_charset8::gfxa#6 gfx_init_plane_charset8::gfxa#1 gfx_init_plane_8bppchunky::gfxb#4 gfx_init_plane_8bppchunky::gfxb#3 gfx_init_plane_8bppchunky::gfxb#5 gfx_init_plane_8bppchunky::gfxb#1 gfx_init_charset::charset#2 gfx_init_charset::charset#3 gfx_init_charset::charset#1 print_cls::$0 bitmap_plot::plotter_y#0 ]
|
||||
zp ZP_BYTE:7 [ gfx_mode::cx#2 gfx_mode::cx#1 keyboard_event_scan::col#2 keyboard_event_scan::col#1 keyboard_event_pressed::keycode#4 gfx_init_plane_fill::by#4 gfx_init_plane_fill::by#1 gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#1 bitmap_line_xdyi::yd#0 bitmap_line::yd#1 bitmap_line::yd#10 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#0 bitmap_line_ydxi::yd#1 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#1 bitmap_line_xdyd::yd#0 bitmap_line::yd#0 bitmap_line::yd#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 gfx_init_screen3::$1 gfx_init_screen2::col2#0 gfx_init_screen0::$1 ]
|
||||
zp ZP_BYTE:7 [ gfx_mode::cx#2 gfx_mode::cx#1 keyboard_event_scan::col#2 keyboard_event_scan::col#1 keyboard_event_pressed::keycode#4 gfx_init_plane_fill::by#4 gfx_init_plane_fill::by#1 gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#1 bitmap_line_xdyi::yd#0 bitmap_line::yd#2 bitmap_line::yd#11 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#0 bitmap_line_ydxi::yd#1 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#1 bitmap_line_xdyd::yd#0 bitmap_line::yd#1 bitmap_line::yd#10 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 gfx_init_screen3::$1 gfx_init_screen2::col2#0 gfx_init_screen0::$1 ]
|
||||
reg byte y [ gfx_mode::j#2 gfx_mode::j#1 ]
|
||||
reg byte y [ gfx_mode::i#2 gfx_mode::i#1 ]
|
||||
reg byte a [ keyboard_event_get::return#2 keyboard_event_get::return#1 ]
|
||||
zp ZP_BYTE:8 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 keyboard_event_scan::keycode#15 gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#1 bitmap_line_xdyi::xd#0 bitmap_line::xd#1 bitmap_line::xd#0 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#0 bitmap_line_ydxi::xd#1 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#1 bitmap_line_xdyd::xd#0 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 keyboard_event_pressed::row_bits#0 ]
|
||||
zp ZP_BYTE:8 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 keyboard_event_scan::keycode#15 gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#1 bitmap_line_xdyi::xd#0 bitmap_line::xd#2 bitmap_line::xd#1 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#0 bitmap_line_ydxi::xd#1 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#1 bitmap_line_xdyd::xd#0 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 keyboard_event_pressed::row_bits#0 ]
|
||||
zp ZP_BYTE:9 [ keyboard_events_size#18 keyboard_events_size#118 keyboard_events_size#110 keyboard_events_size#47 keyboard_events_size#27 keyboard_events_size#24 keyboard_events_size#100 keyboard_events_size#4 keyboard_events_size#119 keyboard_events_size#2 keyboard_events_size#1 gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::col#6 gfx_init_plane_charset8::col#1 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#1 bitmap_line_xdyi::x1#0 bitmap_line::x0#0 bitmap_line_ydxi::e#3 bitmap_line_ydxi::e#0 bitmap_line_ydxi::e#6 bitmap_line_ydxi::e#2 bitmap_line_ydxi::e#1 bitmap_line_xdyd::e#3 bitmap_line_xdyd::e#0 bitmap_line_xdyd::e#6 bitmap_line_xdyd::e#2 bitmap_line_xdyd::e#1 bitmap_line_ydxd::e#3 bitmap_line_ydxd::e#0 bitmap_line_ydxd::e#6 bitmap_line_ydxd::e#2 bitmap_line_ydxd::e#1 ]
|
||||
reg byte a [ get_vic_screen::idx#2 get_vic_screen::idx#0 get_vic_screen::idx#1 ]
|
||||
reg byte a [ get_plane::idx#10 get_plane::idx#1 get_plane::idx#0 ]
|
||||
|
@ -1025,19 +1025,19 @@ bitmap_line: scope:[bitmap_line] from mode_stdbitmap::@4
|
||||
[592] if((byte) bitmap_line::x0#0<(byte) bitmap_line::x1#0) goto bitmap_line::@1
|
||||
to:bitmap_line::@15
|
||||
bitmap_line::@15: scope:[bitmap_line] from bitmap_line
|
||||
[593] (byte) bitmap_line::xd#1 ← (byte) bitmap_line::x0#0 - (byte) bitmap_line::x1#0
|
||||
[593] (byte) bitmap_line::xd#2 ← (byte) bitmap_line::x0#0 - (byte) bitmap_line::x1#0
|
||||
[594] if((byte) bitmap_line::y0#0<(byte) bitmap_line::y1#0) goto bitmap_line::@2
|
||||
to:bitmap_line::@16
|
||||
bitmap_line::@16: scope:[bitmap_line] from bitmap_line::@15
|
||||
[595] (byte) bitmap_line::yd#1 ← (byte) bitmap_line::y0#0 - (byte) bitmap_line::y1#0
|
||||
[596] if((byte) bitmap_line::yd#1<(byte) bitmap_line::xd#1) goto bitmap_line::@3
|
||||
[595] (byte) bitmap_line::yd#2 ← (byte) bitmap_line::y0#0 - (byte) bitmap_line::y1#0
|
||||
[596] if((byte) bitmap_line::yd#2<(byte) bitmap_line::xd#2) goto bitmap_line::@3
|
||||
to:bitmap_line::@17
|
||||
bitmap_line::@17: scope:[bitmap_line] from bitmap_line::@16
|
||||
[597] (byte) bitmap_line_ydxi::y#0 ← (byte) bitmap_line::y1#0
|
||||
[598] (byte) bitmap_line_ydxi::x#0 ← (byte) bitmap_line::x1#0
|
||||
[599] (byte) bitmap_line_ydxi::y1#0 ← (byte) bitmap_line::y0#0
|
||||
[600] (byte) bitmap_line_ydxi::yd#0 ← (byte) bitmap_line::yd#1
|
||||
[601] (byte) bitmap_line_ydxi::xd#0 ← (byte) bitmap_line::xd#1
|
||||
[600] (byte) bitmap_line_ydxi::yd#0 ← (byte) bitmap_line::yd#2
|
||||
[601] (byte) bitmap_line_ydxi::xd#0 ← (byte) bitmap_line::xd#2
|
||||
[602] call bitmap_line_ydxi
|
||||
to:bitmap_line::@return
|
||||
bitmap_line::@return: scope:[bitmap_line] from bitmap_line::@10 bitmap_line::@13 bitmap_line::@17 bitmap_line::@20 bitmap_line::@24 bitmap_line::@27 bitmap_line::@3 bitmap_line::@6
|
||||
@ -1047,72 +1047,72 @@ bitmap_line::@3: scope:[bitmap_line] from bitmap_line::@16
|
||||
[604] (byte) bitmap_line_xdyi::x#0 ← (byte) bitmap_line::x1#0
|
||||
[605] (byte) bitmap_line_xdyi::y#0 ← (byte) bitmap_line::y1#0
|
||||
[606] (byte) bitmap_line_xdyi::x1#0 ← (byte) bitmap_line::x0#0
|
||||
[607] (byte) bitmap_line_xdyi::xd#0 ← (byte) bitmap_line::xd#1
|
||||
[608] (byte) bitmap_line_xdyi::yd#0 ← (byte) bitmap_line::yd#1
|
||||
[607] (byte) bitmap_line_xdyi::xd#0 ← (byte) bitmap_line::xd#2
|
||||
[608] (byte) bitmap_line_xdyi::yd#0 ← (byte) bitmap_line::yd#2
|
||||
[609] call bitmap_line_xdyi
|
||||
to:bitmap_line::@return
|
||||
bitmap_line::@2: scope:[bitmap_line] from bitmap_line::@15
|
||||
[610] (byte) bitmap_line::yd#0 ← (byte) bitmap_line::y1#0 - (byte) bitmap_line::y0#0
|
||||
[611] if((byte) bitmap_line::yd#0<(byte) bitmap_line::xd#1) goto bitmap_line::@6
|
||||
[610] (byte) bitmap_line::yd#1 ← (byte) bitmap_line::y1#0 - (byte) bitmap_line::y0#0
|
||||
[611] if((byte) bitmap_line::yd#1<(byte) bitmap_line::xd#2) goto bitmap_line::@6
|
||||
to:bitmap_line::@20
|
||||
bitmap_line::@20: scope:[bitmap_line] from bitmap_line::@2
|
||||
[612] (byte) bitmap_line_ydxd::y#0 ← (byte) bitmap_line::y0#0
|
||||
[613] (byte) bitmap_line_ydxd::x#0 ← (byte) bitmap_line::x0#0
|
||||
[614] (byte) bitmap_line_ydxd::y1#0 ← (byte) bitmap_line::y1#0
|
||||
[615] (byte) bitmap_line_ydxd::yd#0 ← (byte) bitmap_line::yd#0
|
||||
[616] (byte) bitmap_line_ydxd::xd#0 ← (byte) bitmap_line::xd#1
|
||||
[615] (byte) bitmap_line_ydxd::yd#0 ← (byte) bitmap_line::yd#1
|
||||
[616] (byte) bitmap_line_ydxd::xd#0 ← (byte) bitmap_line::xd#2
|
||||
[617] call bitmap_line_ydxd
|
||||
to:bitmap_line::@return
|
||||
bitmap_line::@6: scope:[bitmap_line] from bitmap_line::@2
|
||||
[618] (byte) bitmap_line_xdyd::x#0 ← (byte) bitmap_line::x1#0
|
||||
[619] (byte) bitmap_line_xdyd::y#0 ← (byte) bitmap_line::y1#0
|
||||
[620] (byte) bitmap_line_xdyd::x1#0 ← (byte) bitmap_line::x0#0
|
||||
[621] (byte) bitmap_line_xdyd::xd#0 ← (byte) bitmap_line::xd#1
|
||||
[622] (byte) bitmap_line_xdyd::yd#0 ← (byte) bitmap_line::yd#0
|
||||
[621] (byte) bitmap_line_xdyd::xd#0 ← (byte) bitmap_line::xd#2
|
||||
[622] (byte) bitmap_line_xdyd::yd#0 ← (byte) bitmap_line::yd#1
|
||||
[623] call bitmap_line_xdyd
|
||||
to:bitmap_line::@return
|
||||
bitmap_line::@1: scope:[bitmap_line] from bitmap_line
|
||||
[624] (byte) bitmap_line::xd#0 ← (byte) bitmap_line::x1#0 - (byte) bitmap_line::x0#0
|
||||
[624] (byte) bitmap_line::xd#1 ← (byte) bitmap_line::x1#0 - (byte) bitmap_line::x0#0
|
||||
[625] if((byte) bitmap_line::y0#0<(byte) bitmap_line::y1#0) goto bitmap_line::@9
|
||||
to:bitmap_line::@23
|
||||
bitmap_line::@23: scope:[bitmap_line] from bitmap_line::@1
|
||||
[626] (byte) bitmap_line::yd#3 ← (byte) bitmap_line::y0#0 - (byte) bitmap_line::y1#0
|
||||
[627] if((byte) bitmap_line::yd#3<(byte) bitmap_line::xd#0) goto bitmap_line::@10
|
||||
[626] (byte) bitmap_line::yd#10 ← (byte) bitmap_line::y0#0 - (byte) bitmap_line::y1#0
|
||||
[627] if((byte) bitmap_line::yd#10<(byte) bitmap_line::xd#1) goto bitmap_line::@10
|
||||
to:bitmap_line::@24
|
||||
bitmap_line::@24: scope:[bitmap_line] from bitmap_line::@23
|
||||
[628] (byte) bitmap_line_ydxd::y#1 ← (byte) bitmap_line::y1#0
|
||||
[629] (byte) bitmap_line_ydxd::x#1 ← (byte) bitmap_line::x1#0
|
||||
[630] (byte) bitmap_line_ydxd::y1#1 ← (byte) bitmap_line::y0#0
|
||||
[631] (byte) bitmap_line_ydxd::yd#1 ← (byte) bitmap_line::yd#3
|
||||
[632] (byte) bitmap_line_ydxd::xd#1 ← (byte) bitmap_line::xd#0
|
||||
[631] (byte) bitmap_line_ydxd::yd#1 ← (byte) bitmap_line::yd#10
|
||||
[632] (byte) bitmap_line_ydxd::xd#1 ← (byte) bitmap_line::xd#1
|
||||
[633] call bitmap_line_ydxd
|
||||
to:bitmap_line::@return
|
||||
bitmap_line::@10: scope:[bitmap_line] from bitmap_line::@23
|
||||
[634] (byte) bitmap_line_xdyd::x#1 ← (byte) bitmap_line::x0#0
|
||||
[635] (byte) bitmap_line_xdyd::y#1 ← (byte) bitmap_line::y0#0
|
||||
[636] (byte) bitmap_line_xdyd::x1#1 ← (byte) bitmap_line::x1#0
|
||||
[637] (byte) bitmap_line_xdyd::xd#1 ← (byte) bitmap_line::xd#0
|
||||
[638] (byte) bitmap_line_xdyd::yd#1 ← (byte) bitmap_line::yd#3
|
||||
[637] (byte) bitmap_line_xdyd::xd#1 ← (byte) bitmap_line::xd#1
|
||||
[638] (byte) bitmap_line_xdyd::yd#1 ← (byte) bitmap_line::yd#10
|
||||
[639] call bitmap_line_xdyd
|
||||
to:bitmap_line::@return
|
||||
bitmap_line::@9: scope:[bitmap_line] from bitmap_line::@1
|
||||
[640] (byte) bitmap_line::yd#10 ← (byte) bitmap_line::y1#0 - (byte) bitmap_line::y0#0
|
||||
[641] if((byte) bitmap_line::yd#10<(byte) bitmap_line::xd#0) goto bitmap_line::@13
|
||||
[640] (byte) bitmap_line::yd#11 ← (byte) bitmap_line::y1#0 - (byte) bitmap_line::y0#0
|
||||
[641] if((byte) bitmap_line::yd#11<(byte) bitmap_line::xd#1) goto bitmap_line::@13
|
||||
to:bitmap_line::@27
|
||||
bitmap_line::@27: scope:[bitmap_line] from bitmap_line::@9
|
||||
[642] (byte) bitmap_line_ydxi::y#1 ← (byte) bitmap_line::y0#0
|
||||
[643] (byte) bitmap_line_ydxi::x#1 ← (byte) bitmap_line::x0#0
|
||||
[644] (byte) bitmap_line_ydxi::y1#1 ← (byte) bitmap_line::y1#0
|
||||
[645] (byte) bitmap_line_ydxi::yd#1 ← (byte) bitmap_line::yd#10
|
||||
[646] (byte) bitmap_line_ydxi::xd#1 ← (byte) bitmap_line::xd#0
|
||||
[645] (byte) bitmap_line_ydxi::yd#1 ← (byte) bitmap_line::yd#11
|
||||
[646] (byte) bitmap_line_ydxi::xd#1 ← (byte) bitmap_line::xd#1
|
||||
[647] call bitmap_line_ydxi
|
||||
to:bitmap_line::@return
|
||||
bitmap_line::@13: scope:[bitmap_line] from bitmap_line::@9
|
||||
[648] (byte) bitmap_line_xdyi::x#1 ← (byte) bitmap_line::x0#0
|
||||
[649] (byte) bitmap_line_xdyi::y#1 ← (byte) bitmap_line::y0#0
|
||||
[650] (byte) bitmap_line_xdyi::x1#1 ← (byte) bitmap_line::x1#0
|
||||
[651] (byte) bitmap_line_xdyi::xd#1 ← (byte) bitmap_line::xd#0
|
||||
[652] (byte) bitmap_line_xdyi::yd#1 ← (byte) bitmap_line::yd#10
|
||||
[651] (byte) bitmap_line_xdyi::xd#1 ← (byte) bitmap_line::xd#1
|
||||
[652] (byte) bitmap_line_xdyi::yd#1 ← (byte) bitmap_line::yd#11
|
||||
[653] call bitmap_line_xdyi
|
||||
to:bitmap_line::@return
|
||||
bitmap_line_xdyi: scope:[bitmap_line_xdyi] from bitmap_line::@13 bitmap_line::@3
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -388,17 +388,17 @@
|
||||
(byte) bitmap_line::x1
|
||||
(byte) bitmap_line::x1#0 x1 zp ZP_BYTE:12 5.409090909090908
|
||||
(byte) bitmap_line::xd
|
||||
(byte) bitmap_line::xd#0 xd zp ZP_BYTE:8 0.7
|
||||
(byte) bitmap_line::xd#1 xd zp ZP_BYTE:8 0.7
|
||||
(byte) bitmap_line::xd#2 xd zp ZP_BYTE:8 0.7
|
||||
(byte) bitmap_line::y0
|
||||
(byte) bitmap_line::y0#0 y0 zp ZP_BYTE:11 5.952380952380948
|
||||
(byte) bitmap_line::y1
|
||||
(byte) bitmap_line::y1#0 reg byte y 6.249999999999996
|
||||
(byte) bitmap_line::yd
|
||||
(byte) bitmap_line::yd#0 yd zp ZP_BYTE:7 0.8888888888888888
|
||||
(byte) bitmap_line::yd#1 yd zp ZP_BYTE:7 0.8888888888888888
|
||||
(byte) bitmap_line::yd#10 yd zp ZP_BYTE:7 0.8888888888888888
|
||||
(byte) bitmap_line::yd#3 yd zp ZP_BYTE:7 0.8888888888888888
|
||||
(byte) bitmap_line::yd#11 yd zp ZP_BYTE:7 0.8888888888888888
|
||||
(byte) bitmap_line::yd#2 yd zp ZP_BYTE:7 0.8888888888888888
|
||||
(void()) bitmap_line_xdyd((byte) bitmap_line_xdyd::x , (byte) bitmap_line_xdyd::y , (byte) bitmap_line_xdyd::x1 , (byte) bitmap_line_xdyd::xd , (byte) bitmap_line_xdyd::yd)
|
||||
(byte/signed word/word/dword/signed dword~) bitmap_line_xdyd::$6 reg byte x 2002.0
|
||||
(label) bitmap_line_xdyd::@1
|
||||
@ -1363,8 +1363,8 @@ reg byte y [ keyboard_key_pressed::key#20 ]
|
||||
reg byte a [ dtvSetCpuBankSegment1::cpuBankIdx#3 dtvSetCpuBankSegment1::cpuBankIdx#1 ]
|
||||
reg byte x [ mode_8bpppixelcell::i#2 mode_8bpppixelcell::i#1 ]
|
||||
reg byte x [ mode_8bpppixelcell::ax#2 mode_8bpppixelcell::ax#1 ]
|
||||
zp ZP_BYTE:7 [ mode_8bpppixelcell::cr#6 mode_8bpppixelcell::cr#1 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#1 bitmap_line_xdyi::yd#0 bitmap_line::yd#1 bitmap_line::yd#10 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#0 bitmap_line_ydxi::yd#1 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#1 bitmap_line_xdyd::yd#0 bitmap_line::yd#0 bitmap_line::yd#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 keyboard_key_pressed::colidx#0 mode_8bpppixelcell::$14 mode_twoplanebitmap::$16 mode_sixsfred2::$15 mode_hicolmcchar::$26 mode_hicolecmchar::$26 mode_hicolstdchar::$25 mode_stdbitmap::col2#0 mode_mcchar::$28 mode_ecmchar::$28 mode_stdchar::$27 ]
|
||||
zp ZP_BYTE:8 [ mode_8bpppixelcell::bits#2 mode_8bpppixelcell::bits#0 mode_8bpppixelcell::bits#1 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#1 bitmap_line_xdyi::xd#0 bitmap_line::xd#1 bitmap_line::xd#0 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#0 bitmap_line_ydxi::xd#1 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#1 bitmap_line_xdyd::xd#0 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 ]
|
||||
zp ZP_BYTE:7 [ mode_8bpppixelcell::cr#6 mode_8bpppixelcell::cr#1 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#1 bitmap_line_xdyi::yd#0 bitmap_line::yd#2 bitmap_line::yd#11 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#0 bitmap_line_ydxi::yd#1 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#1 bitmap_line_xdyd::yd#0 bitmap_line::yd#1 bitmap_line::yd#10 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 keyboard_key_pressed::colidx#0 mode_8bpppixelcell::$14 mode_twoplanebitmap::$16 mode_sixsfred2::$15 mode_hicolmcchar::$26 mode_hicolecmchar::$26 mode_hicolstdchar::$25 mode_stdbitmap::col2#0 mode_mcchar::$28 mode_ecmchar::$28 mode_stdchar::$27 ]
|
||||
zp ZP_BYTE:8 [ mode_8bpppixelcell::bits#2 mode_8bpppixelcell::bits#0 mode_8bpppixelcell::bits#1 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#1 bitmap_line_xdyi::xd#0 bitmap_line::xd#2 bitmap_line::xd#1 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#0 bitmap_line_ydxi::xd#1 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#1 bitmap_line_xdyd::xd#0 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 ]
|
||||
zp ZP_BYTE:9 [ mode_8bpppixelcell::col#2 mode_8bpppixelcell::col#5 mode_8bpppixelcell::col#7 mode_8bpppixelcell::col#1 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#1 bitmap_line_xdyi::x1#0 bitmap_line::x0#0 bitmap_line_ydxi::e#3 bitmap_line_ydxi::e#0 bitmap_line_ydxi::e#6 bitmap_line_ydxi::e#2 bitmap_line_ydxi::e#1 bitmap_line_xdyd::e#3 bitmap_line_xdyd::e#0 bitmap_line_xdyd::e#6 bitmap_line_xdyd::e#2 bitmap_line_xdyd::e#1 bitmap_line_ydxd::e#3 bitmap_line_ydxd::e#0 bitmap_line_ydxd::e#6 bitmap_line_ydxd::e#2 bitmap_line_ydxd::e#1 ]
|
||||
reg byte x [ mode_8bpppixelcell::cp#2 mode_8bpppixelcell::cp#1 ]
|
||||
reg byte a [ mode_8bpppixelcell::c#2 mode_8bpppixelcell::c#3 ]
|
||||
|
@ -103,6 +103,10 @@ CONTROL FLOW GRAPH SSA
|
||||
(byte) PLAYFIELD_COLS#0 ← (byte/signed byte/word/signed word/dword/signed dword) 10
|
||||
(byte~) $2 ← (byte) PLAYFIELD_LINES#0 * (byte) PLAYFIELD_COLS#0
|
||||
(byte[$2]) playfield#0 ← { fill( $2, 0) }
|
||||
(byte*) current_piece_gfx#0 ← (byte*) 0
|
||||
(byte) current_piece_char#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
(byte) current_xpos#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
(byte) current_ypos#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
(byte) render_screen_render#0 ← (byte/signed byte/word/signed word/dword/signed dword) 64
|
||||
(byte) render_screen_show#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
(byte) render_screen_showing#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
@ -838,9 +842,13 @@ SYMBOL TABLE SSA
|
||||
(byte) YELLOW
|
||||
(byte) YELLOW#0
|
||||
(byte) current_piece_char
|
||||
(byte) current_piece_char#0
|
||||
(byte*) current_piece_gfx
|
||||
(byte*) current_piece_gfx#0
|
||||
(byte) current_xpos
|
||||
(byte) current_xpos#0
|
||||
(byte) current_ypos
|
||||
(byte) current_ypos#0
|
||||
(byte) game_over
|
||||
(byte) game_over#0
|
||||
(byte) irq_cnt
|
||||
@ -1337,14 +1345,14 @@ Redundant Phi (byte) irq_raster_next#10 (byte) irq_raster_next#17
|
||||
Redundant Phi (byte) irq_sprite_ptr#14 (byte) irq_sprite_ptr#17
|
||||
Redundant Phi (byte) sin_idx#11 (byte) sin_idx#1
|
||||
Successful SSA optimization Pass2RedundantPhiElimination
|
||||
Simple Condition (bool~) sprites_init::$4 [119] if((byte) sprites_init::s#1!=rangelast(0,3)) goto sprites_init::@1
|
||||
Simple Condition (bool~) sprites_irq::$1 [165] if(*((byte*) RASTER#0)<(byte) sprites_irq::raster_sprite_gfx_modify#0) goto sprites_irq::@1
|
||||
Simple Condition (bool~) sprites_irq::$2 [169] if((byte) render_screen_showing#0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto sprites_irq::@2
|
||||
Simple Condition (bool~) sprites_irq::$3 [187] if((byte) irq_cnt#1==(byte/signed byte/word/signed word/dword/signed dword) 9) goto sprites_irq::@4
|
||||
Simple Condition (bool~) sprites_irq::$4 [204] if((byte) irq_cnt#1==(byte/signed byte/word/signed word/dword/signed dword) 10) goto sprites_irq::@5
|
||||
Simple Condition (bool~) main::$6 [292] if((byte) main::s#1!=rangelast(4,7)) goto main::@1
|
||||
Simple Condition (bool~) loop::$0 [308] if(*((byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto loop::@4
|
||||
Simple Condition (bool~) loop::$2 [318] if((byte) loop::s#1!=rangelast(4,7)) goto loop::@5
|
||||
Simple Condition (bool~) sprites_init::$4 [123] if((byte) sprites_init::s#1!=rangelast(0,3)) goto sprites_init::@1
|
||||
Simple Condition (bool~) sprites_irq::$1 [169] if(*((byte*) RASTER#0)<(byte) sprites_irq::raster_sprite_gfx_modify#0) goto sprites_irq::@1
|
||||
Simple Condition (bool~) sprites_irq::$2 [173] if((byte) render_screen_showing#0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto sprites_irq::@2
|
||||
Simple Condition (bool~) sprites_irq::$3 [191] if((byte) irq_cnt#1==(byte/signed byte/word/signed word/dword/signed dword) 9) goto sprites_irq::@4
|
||||
Simple Condition (bool~) sprites_irq::$4 [208] if((byte) irq_cnt#1==(byte/signed byte/word/signed word/dword/signed dword) 10) goto sprites_irq::@5
|
||||
Simple Condition (bool~) main::$6 [296] if((byte) main::s#1!=rangelast(4,7)) goto main::@1
|
||||
Simple Condition (bool~) loop::$0 [312] if(*((byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto loop::@4
|
||||
Simple Condition (bool~) loop::$2 [322] if((byte) loop::s#1!=rangelast(4,7)) goto loop::@5
|
||||
Successful SSA optimization Pass2ConditionalJumpSimplification
|
||||
Constant (const byte*) PROCPORT_DDR#0 = ((byte*))0
|
||||
Constant (const byte) PROCPORT_DDR_MEMORY_MASK#0 = 7
|
||||
@ -1433,6 +1441,10 @@ Constant (const byte*) PLAYFIELD_SPRITES#0 = ((byte*))8192
|
||||
Constant (const byte*) PLAYFIELD_CHARSET#0 = ((byte*))10240
|
||||
Constant (const byte) PLAYFIELD_LINES#0 = 22
|
||||
Constant (const byte) PLAYFIELD_COLS#0 = 10
|
||||
Constant (const byte*) current_piece_gfx#0 = 0
|
||||
Constant (const byte) current_piece_char#0 = 0
|
||||
Constant (const byte) current_xpos#0 = 0
|
||||
Constant (const byte) current_ypos#0 = 0
|
||||
Constant (const byte) render_screen_render#0 = 64
|
||||
Constant (const byte) render_screen_show#0 = 0
|
||||
Constant (const dword) score_bcd#0 = 0
|
||||
|
@ -150,13 +150,13 @@
|
||||
.label score_bcd = $13
|
||||
.label current_piece_17 = 5
|
||||
.label render_screen_render_33 = 9
|
||||
.label current_xpos_58 = $a
|
||||
.label current_piece_gfx_63 = 5
|
||||
.label current_xpos_59 = $a
|
||||
.label current_piece_gfx_64 = 5
|
||||
.label render_screen_render_69 = 9
|
||||
.label current_xpos_132 = $a
|
||||
.label current_xpos_133 = $a
|
||||
.label current_piece_gfx_122 = 5
|
||||
.label current_piece_gfx_123 = 5
|
||||
.label current_xpos_128 = $a
|
||||
.label current_xpos_129 = $a
|
||||
.label current_piece_gfx_118 = 5
|
||||
.label current_piece_gfx_119 = 5
|
||||
.label current_piece_98 = 5
|
||||
.label current_piece_99 = 5
|
||||
.label current_piece_100 = 5
|
||||
@ -196,11 +196,11 @@ main: {
|
||||
jsr render_playfield
|
||||
ldy current_ypos
|
||||
lda current_xpos
|
||||
sta current_xpos_132
|
||||
sta current_xpos_128
|
||||
lda current_piece_gfx
|
||||
sta current_piece_gfx_122
|
||||
sta current_piece_gfx_118
|
||||
lda current_piece_gfx+1
|
||||
sta current_piece_gfx_122+1
|
||||
sta current_piece_gfx_118+1
|
||||
ldx current_piece_char
|
||||
lda #$40
|
||||
sta render_screen_render_33
|
||||
@ -256,11 +256,11 @@ main: {
|
||||
lda render_screen_render
|
||||
sta render_screen_render_69
|
||||
lda current_xpos
|
||||
sta current_xpos_133
|
||||
sta current_xpos_129
|
||||
lda current_piece_gfx
|
||||
sta current_piece_gfx_123
|
||||
sta current_piece_gfx_119
|
||||
lda current_piece_gfx+1
|
||||
sta current_piece_gfx_123+1
|
||||
sta current_piece_gfx_119+1
|
||||
ldx current_piece_char
|
||||
jsr render_moving
|
||||
lda render_screen_render
|
||||
@ -508,13 +508,13 @@ render_moving: {
|
||||
sta screen_line
|
||||
lda screen_lines_1+1,y
|
||||
sta screen_line+1
|
||||
lda current_xpos_58
|
||||
lda current_xpos_59
|
||||
sta xpos
|
||||
lda #0
|
||||
sta c
|
||||
b4:
|
||||
ldy i
|
||||
lda (current_piece_gfx_63),y
|
||||
lda (current_piece_gfx_64),y
|
||||
inc i
|
||||
cmp #0
|
||||
beq b5
|
||||
|
@ -85,10 +85,10 @@ main::@31: scope:[main] from main::@30
|
||||
[29] call render_playfield
|
||||
to:main::@32
|
||||
main::@32: scope:[main] from main::@31
|
||||
[30] (byte~) current_ypos#108 ← (byte) current_ypos#5
|
||||
[31] (byte~) current_xpos#132 ← (byte) current_xpos#102
|
||||
[32] (byte*~) current_piece_gfx#122 ← (byte*) current_piece_gfx#7
|
||||
[33] (byte~) current_piece_char#110 ← (byte) current_piece_char#4
|
||||
[30] (byte~) current_ypos#104 ← (byte) current_ypos#6
|
||||
[31] (byte~) current_xpos#128 ← (byte) current_xpos#103
|
||||
[32] (byte*~) current_piece_gfx#118 ← (byte*) current_piece_gfx#74
|
||||
[33] (byte~) current_piece_char#106 ← (byte) current_piece_char#5
|
||||
[34] call render_moving
|
||||
to:main::@33
|
||||
main::@33: scope:[main] from main::@32
|
||||
@ -105,11 +105,11 @@ main::@1: scope:[main] from main::@11 main::@33 main::@42
|
||||
[38] (byte) keyboard_events_size#19 ← phi( main::@11/(byte) keyboard_events_size#16 main::@33/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@42/(byte) keyboard_events_size#16 )
|
||||
[38] (byte) next_piece_idx#10 ← phi( main::@11/(byte) next_piece_idx#16 main::@33/(byte) play_spawn_current::piece_idx#2 main::@42/(byte) next_piece_idx#16 )
|
||||
[38] (byte) game_over#10 ← phi( main::@11/(byte) game_over#15 main::@33/(byte) game_over#52 main::@42/(byte) game_over#15 )
|
||||
[38] (byte) current_ypos#10 ← phi( main::@11/(byte) current_ypos#18 main::@33/(byte) current_ypos#5 main::@42/(byte) current_ypos#18 )
|
||||
[38] (byte) current_xpos#121 ← phi( main::@11/(byte) current_xpos#18 main::@33/(byte) current_xpos#102 main::@42/(byte) current_xpos#18 )
|
||||
[38] (byte*) current_piece_gfx#111 ← phi( main::@11/(byte*) current_piece_gfx#17 main::@33/(byte*) current_piece_gfx#7 main::@42/(byte*) current_piece_gfx#17 )
|
||||
[38] (byte) current_ypos#11 ← phi( main::@11/(byte) current_ypos#19 main::@33/(byte) current_ypos#6 main::@42/(byte) current_ypos#19 )
|
||||
[38] (byte) current_xpos#122 ← phi( main::@11/(byte) current_xpos#19 main::@33/(byte) current_xpos#103 main::@42/(byte) current_xpos#19 )
|
||||
[38] (byte*) current_piece_gfx#112 ← phi( main::@11/(byte*) current_piece_gfx#18 main::@33/(byte*) current_piece_gfx#74 main::@42/(byte*) current_piece_gfx#18 )
|
||||
[38] (byte) current_orientation#13 ← phi( main::@11/(byte) current_orientation#17 main::@33/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@42/(byte) current_orientation#17 )
|
||||
[38] (byte) current_piece_char#21 ← phi( main::@11/(byte) current_piece_char#15 main::@33/(byte) current_piece_char#4 main::@42/(byte) current_piece_char#15 )
|
||||
[38] (byte) current_piece_char#10 ← phi( main::@11/(byte) current_piece_char#16 main::@33/(byte) current_piece_char#5 main::@42/(byte) current_piece_char#16 )
|
||||
[38] (byte*) current_piece#10 ← phi( main::@11/(byte*) current_piece#15 main::@33/(byte*~) current_piece#96 main::@42/(byte*) current_piece#15 )
|
||||
[38] (byte) current_movedown_slow#14 ← phi( main::@11/(byte) current_movedown_slow#21 main::@33/(byte) current_movedown_slow#1 main::@42/(byte) current_movedown_slow#21 )
|
||||
[38] (byte) render_screen_render#18 ← phi( main::@33/(byte/signed byte/word/signed word/dword/signed dword) 64 main::@42/(byte) render_screen_render#11 )
|
||||
@ -154,11 +154,11 @@ main::@23: scope:[main] from main::@11
|
||||
[56] call render_playfield
|
||||
to:main::@39
|
||||
main::@39: scope:[main] from main::@23
|
||||
[57] (byte~) current_ypos#109 ← (byte) current_ypos#18
|
||||
[57] (byte~) current_ypos#105 ← (byte) current_ypos#19
|
||||
[58] (byte~) render_screen_render#69 ← (byte) render_screen_render#18
|
||||
[59] (byte~) current_xpos#133 ← (byte) current_xpos#18
|
||||
[60] (byte*~) current_piece_gfx#123 ← (byte*) current_piece_gfx#17
|
||||
[61] (byte~) current_piece_char#111 ← (byte) current_piece_char#15
|
||||
[59] (byte~) current_xpos#129 ← (byte) current_xpos#19
|
||||
[60] (byte*~) current_piece_gfx#119 ← (byte*) current_piece_gfx#18
|
||||
[61] (byte~) current_piece_char#107 ← (byte) current_piece_char#16
|
||||
[62] call render_moving
|
||||
to:main::@40
|
||||
main::@40: scope:[main] from main::@39
|
||||
@ -188,33 +188,33 @@ render_score::@3: scope:[render_score] from render_score
|
||||
[74] phi()
|
||||
to:render_score::@2
|
||||
render_score::@2: scope:[render_score] from render_score render_score::@3
|
||||
[75] (byte*) render_score::screen#2 ← phi( render_score/(const byte*) PLAYFIELD_SCREEN_1#0 render_score::@3/(const byte*) PLAYFIELD_SCREEN_2#0 )
|
||||
[76] (byte*) render_bcd::screen#0 ← (byte*) render_score::screen#2
|
||||
[75] (byte*) render_score::screen#3 ← phi( render_score/(const byte*) PLAYFIELD_SCREEN_1#0 render_score::@3/(const byte*) PLAYFIELD_SCREEN_2#0 )
|
||||
[76] (byte*) render_bcd::screen#0 ← (byte*) render_score::screen#3
|
||||
[77] (byte) render_bcd::bcd#0 ← *((const byte*) render_score::score_bytes#0+(byte/signed byte/word/signed word/dword/signed dword) 2)
|
||||
[78] call render_bcd
|
||||
to:render_score::@5
|
||||
render_score::@5: scope:[render_score] from render_score::@2
|
||||
[79] (byte*) render_bcd::screen#1 ← (byte*) render_score::screen#2
|
||||
[79] (byte*) render_bcd::screen#1 ← (byte*) render_score::screen#3
|
||||
[80] (byte) render_bcd::bcd#1 ← *((const byte*) render_score::score_bytes#0+(byte/signed byte/word/signed word/dword/signed dword) 1)
|
||||
[81] call render_bcd
|
||||
to:render_score::@6
|
||||
render_score::@6: scope:[render_score] from render_score::@5
|
||||
[82] (byte*) render_bcd::screen#2 ← (byte*) render_score::screen#2
|
||||
[82] (byte*) render_bcd::screen#2 ← (byte*) render_score::screen#3
|
||||
[83] (byte) render_bcd::bcd#2 ← *((const byte*) render_score::score_bytes#0)
|
||||
[84] call render_bcd
|
||||
to:render_score::@7
|
||||
render_score::@7: scope:[render_score] from render_score::@6
|
||||
[85] (byte) render_bcd::bcd#3 ← > (word) lines_bcd#15
|
||||
[86] (byte*) render_bcd::screen#3 ← (byte*) render_score::screen#2
|
||||
[86] (byte*) render_bcd::screen#3 ← (byte*) render_score::screen#3
|
||||
[87] call render_bcd
|
||||
to:render_score::@8
|
||||
render_score::@8: scope:[render_score] from render_score::@7
|
||||
[88] (byte) render_bcd::bcd#4 ← < (word) lines_bcd#15
|
||||
[89] (byte*) render_bcd::screen#4 ← (byte*) render_score::screen#2
|
||||
[89] (byte*) render_bcd::screen#4 ← (byte*) render_score::screen#3
|
||||
[90] call render_bcd
|
||||
to:render_score::@9
|
||||
render_score::@9: scope:[render_score] from render_score::@8
|
||||
[91] (byte*) render_bcd::screen#5 ← (byte*) render_score::screen#2
|
||||
[91] (byte*) render_bcd::screen#5 ← (byte*) render_score::screen#3
|
||||
[92] (byte) render_bcd::bcd#5 ← (byte) level_bcd#17
|
||||
[93] call render_bcd
|
||||
to:render_score::@return
|
||||
@ -254,34 +254,34 @@ render_next::@7: scope:[render_next] from render_next
|
||||
[110] phi()
|
||||
to:render_next::@2
|
||||
render_next::@2: scope:[render_next] from render_next render_next::@7
|
||||
[111] (byte*) render_next::screen_next_area#10 ← phi( render_next/(const byte*) PLAYFIELD_SCREEN_1#0+(const word) render_next::next_area_offset#0 render_next::@7/(const byte*) PLAYFIELD_SCREEN_2#0+(const word) render_next::next_area_offset#0 )
|
||||
[111] (byte*) render_next::screen_next_area#11 ← phi( render_next/(const byte*) PLAYFIELD_SCREEN_1#0+(const word) render_next::next_area_offset#0 render_next::@7/(const byte*) PLAYFIELD_SCREEN_2#0+(const word) render_next::next_area_offset#0 )
|
||||
[112] (byte~) render_next::$6 ← (byte) next_piece_idx#12 << (byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
[113] (byte) render_next::next_piece_char#0 ← *((const byte[]) PIECES_NEXT_CHARS#0 + (byte) next_piece_idx#12)
|
||||
[114] (byte*~) render_next::next_piece_gfx#9 ← (byte*)*((const word[]) PIECES#0 + (byte~) render_next::$6)
|
||||
to:render_next::@3
|
||||
render_next::@3: scope:[render_next] from render_next::@11 render_next::@2
|
||||
[115] (byte) render_next::l#7 ← phi( render_next::@11/(byte) render_next::l#1 render_next::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 )
|
||||
[115] (byte*) render_next::screen_next_area#9 ← phi( render_next::@11/(byte*) render_next::screen_next_area#3 render_next::@2/(byte*) render_next::screen_next_area#10 )
|
||||
[115] (byte*) render_next::screen_next_area#10 ← phi( render_next::@11/(byte*) render_next::screen_next_area#4 render_next::@2/(byte*) render_next::screen_next_area#11 )
|
||||
[115] (byte*) render_next::next_piece_gfx#3 ← phi( render_next::@11/(byte*) render_next::next_piece_gfx#1 render_next::@2/(byte*~) render_next::next_piece_gfx#9 )
|
||||
to:render_next::@4
|
||||
render_next::@4: scope:[render_next] from render_next::@3 render_next::@6
|
||||
[116] (byte) render_next::c#2 ← phi( render_next::@3/(byte/signed byte/word/signed word/dword/signed dword) 0 render_next::@6/(byte) render_next::c#1 )
|
||||
[116] (byte*) render_next::screen_next_area#4 ← phi( render_next::@3/(byte*) render_next::screen_next_area#9 render_next::@6/(byte*) render_next::screen_next_area#2 )
|
||||
[116] (byte*) render_next::screen_next_area#5 ← phi( render_next::@3/(byte*) render_next::screen_next_area#10 render_next::@6/(byte*) render_next::screen_next_area#3 )
|
||||
[116] (byte*) render_next::next_piece_gfx#2 ← phi( render_next::@3/(byte*) render_next::next_piece_gfx#3 render_next::@6/(byte*) render_next::next_piece_gfx#1 )
|
||||
[117] (byte) render_next::cell#0 ← *((byte*) render_next::next_piece_gfx#2)
|
||||
[118] (byte*) render_next::next_piece_gfx#1 ← ++ (byte*) render_next::next_piece_gfx#2
|
||||
[119] if((byte) render_next::cell#0!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_next::@5
|
||||
to:render_next::@9
|
||||
render_next::@9: scope:[render_next] from render_next::@4
|
||||
[120] *((byte*) render_next::screen_next_area#4) ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
[120] *((byte*) render_next::screen_next_area#5) ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
to:render_next::@6
|
||||
render_next::@6: scope:[render_next] from render_next::@5 render_next::@9
|
||||
[121] (byte*) render_next::screen_next_area#2 ← ++ (byte*) render_next::screen_next_area#4
|
||||
[121] (byte*) render_next::screen_next_area#3 ← ++ (byte*) render_next::screen_next_area#5
|
||||
[122] (byte) render_next::c#1 ← ++ (byte) render_next::c#2
|
||||
[123] if((byte) render_next::c#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto render_next::@4
|
||||
to:render_next::@11
|
||||
render_next::@11: scope:[render_next] from render_next::@6
|
||||
[124] (byte*) render_next::screen_next_area#3 ← (byte*) render_next::screen_next_area#2 + (byte/signed byte/word/signed word/dword/signed dword) 36
|
||||
[124] (byte*) render_next::screen_next_area#4 ← (byte*) render_next::screen_next_area#3 + (byte/signed byte/word/signed word/dword/signed dword) 36
|
||||
[125] (byte) render_next::l#1 ← ++ (byte) render_next::l#7
|
||||
[126] if((byte) render_next::l#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto render_next::@3
|
||||
to:render_next::@return
|
||||
@ -289,15 +289,15 @@ render_next::@return: scope:[render_next] from render_next::@11
|
||||
[127] return
|
||||
to:@return
|
||||
render_next::@5: scope:[render_next] from render_next::@4
|
||||
[128] *((byte*) render_next::screen_next_area#4) ← (byte) render_next::next_piece_char#0
|
||||
[128] *((byte*) render_next::screen_next_area#5) ← (byte) render_next::next_piece_char#0
|
||||
to:render_next::@6
|
||||
render_moving: scope:[render_moving] from main::@32 main::@39
|
||||
[129] (byte) current_piece_char#67 ← phi( main::@32/(byte~) current_piece_char#110 main::@39/(byte~) current_piece_char#111 )
|
||||
[129] (byte*) current_piece_gfx#63 ← phi( main::@32/(byte*~) current_piece_gfx#122 main::@39/(byte*~) current_piece_gfx#123 )
|
||||
[129] (byte) current_xpos#58 ← phi( main::@32/(byte~) current_xpos#132 main::@39/(byte~) current_xpos#133 )
|
||||
[129] (byte) current_piece_char#68 ← phi( main::@32/(byte~) current_piece_char#106 main::@39/(byte~) current_piece_char#107 )
|
||||
[129] (byte*) current_piece_gfx#64 ← phi( main::@32/(byte*~) current_piece_gfx#118 main::@39/(byte*~) current_piece_gfx#119 )
|
||||
[129] (byte) current_xpos#59 ← phi( main::@32/(byte~) current_xpos#128 main::@39/(byte~) current_xpos#129 )
|
||||
[129] (byte) render_screen_render#33 ← phi( main::@32/(byte/signed byte/word/signed word/dword/signed dword) 64 main::@39/(byte~) render_screen_render#69 )
|
||||
[129] (byte) current_ypos#12 ← phi( main::@32/(byte~) current_ypos#108 main::@39/(byte~) current_ypos#109 )
|
||||
[130] (byte) render_moving::ypos2#0 ← (byte) current_ypos#12 << (byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
[129] (byte) current_ypos#13 ← phi( main::@32/(byte~) current_ypos#104 main::@39/(byte~) current_ypos#105 )
|
||||
[130] (byte) render_moving::ypos2#0 ← (byte) current_ypos#13 << (byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
to:render_moving::@1
|
||||
render_moving::@1: scope:[render_moving] from render_moving render_moving::@3
|
||||
[131] (byte) render_moving::l#4 ← phi( render_moving/(byte/signed byte/word/signed word/dword/signed dword) 0 render_moving::@3/(byte) render_moving::l#1 )
|
||||
@ -320,18 +320,18 @@ render_moving::@return: scope:[render_moving] from render_moving::@3
|
||||
render_moving::@2: scope:[render_moving] from render_moving::@1
|
||||
[139] (byte~) render_moving::$2 ← (byte) render_screen_render#33 + (byte) render_moving::ypos2#2
|
||||
[140] (byte*) render_moving::screen_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_moving::$2)
|
||||
[141] (byte) render_moving::xpos#0 ← (byte) current_xpos#58
|
||||
[141] (byte) render_moving::xpos#0 ← (byte) current_xpos#59
|
||||
to:render_moving::@4
|
||||
render_moving::@4: scope:[render_moving] from render_moving::@2 render_moving::@5
|
||||
[142] (byte) render_moving::c#2 ← phi( render_moving::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 render_moving::@5/(byte) render_moving::c#1 )
|
||||
[142] (byte) render_moving::xpos#2 ← phi( render_moving::@2/(byte) render_moving::xpos#0 render_moving::@5/(byte) render_moving::xpos#1 )
|
||||
[142] (byte) render_moving::i#4 ← phi( render_moving::@2/(byte) render_moving::i#3 render_moving::@5/(byte) render_moving::i#2 )
|
||||
[143] (byte) render_moving::current_cell#0 ← *((byte*) current_piece_gfx#63 + (byte) render_moving::i#4)
|
||||
[143] (byte) render_moving::current_cell#0 ← *((byte*) current_piece_gfx#64 + (byte) render_moving::i#4)
|
||||
[144] (byte) render_moving::i#2 ← ++ (byte) render_moving::i#4
|
||||
[145] if((byte) render_moving::current_cell#0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_moving::@5
|
||||
to:render_moving::@8
|
||||
render_moving::@8: scope:[render_moving] from render_moving::@4
|
||||
[146] *((byte*) render_moving::screen_line#0 + (byte) render_moving::xpos#2) ← (byte) current_piece_char#67
|
||||
[146] *((byte*) render_moving::screen_line#0 + (byte) render_moving::xpos#2) ← (byte) current_piece_char#68
|
||||
to:render_moving::@5
|
||||
render_moving::@5: scope:[render_moving] from render_moving::@4 render_moving::@8
|
||||
[147] (byte) render_moving::xpos#1 ← ++ (byte) render_moving::xpos#2
|
||||
@ -376,8 +376,8 @@ play_movement::@5: scope:[play_movement] from play_movement
|
||||
[169] if((byte) game_over#15==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_movement::@1
|
||||
to:play_movement::@return
|
||||
play_movement::@return: scope:[play_movement] from play_movement::@5 play_movement::@7
|
||||
[170] (byte) current_xpos#18 ← phi( play_movement::@5/(byte) current_xpos#21 play_movement::@7/(byte) current_xpos#25 )
|
||||
[170] (byte*) current_piece_gfx#17 ← phi( play_movement::@5/(byte*) current_piece_gfx#19 play_movement::@7/(byte*) current_piece_gfx#20 )
|
||||
[170] (byte) current_xpos#19 ← phi( play_movement::@5/(byte) current_xpos#22 play_movement::@7/(byte) current_xpos#26 )
|
||||
[170] (byte*) current_piece_gfx#18 ← phi( play_movement::@5/(byte*) current_piece_gfx#20 play_movement::@7/(byte*) current_piece_gfx#21 )
|
||||
[170] (byte) current_orientation#17 ← phi( play_movement::@5/(byte) current_orientation#20 play_movement::@7/(byte) current_orientation#25 )
|
||||
[170] (byte) play_movement::return#2 ← phi( play_movement::@5/(byte) play_movement::render#1 play_movement::@7/(byte) play_movement::return#0 )
|
||||
[171] return
|
||||
@ -405,7 +405,7 @@ play_move_rotate::@6: scope:[play_move_rotate] from play_move_rotate
|
||||
[183] if((byte) play_move_rotate::key_event#0==(const byte) KEY_X#0) goto play_move_rotate::@2
|
||||
to:play_move_rotate::@return
|
||||
play_move_rotate::@return: scope:[play_move_rotate] from play_move_rotate::@11 play_move_rotate::@14 play_move_rotate::@6
|
||||
[184] (byte*) current_piece_gfx#20 ← phi( play_move_rotate::@11/(byte*) current_piece_gfx#6 play_move_rotate::@14/(byte*) current_piece_gfx#19 play_move_rotate::@6/(byte*) current_piece_gfx#19 )
|
||||
[184] (byte*) current_piece_gfx#21 ← phi( play_move_rotate::@11/(byte*) current_piece_gfx#7 play_move_rotate::@14/(byte*) current_piece_gfx#20 play_move_rotate::@6/(byte*) current_piece_gfx#20 )
|
||||
[184] (byte) current_orientation#25 ← phi( play_move_rotate::@11/(byte) current_orientation#7 play_move_rotate::@14/(byte) current_orientation#20 play_move_rotate::@6/(byte) current_orientation#20 )
|
||||
[184] (byte) play_move_rotate::return#2 ← phi( play_move_rotate::@11/(byte/signed byte/word/signed word/dword/signed dword) 1 play_move_rotate::@14/(byte/signed byte/word/signed word/dword/signed dword) 0 play_move_rotate::@6/(byte/signed byte/word/signed word/dword/signed dword) 0 )
|
||||
[185] return
|
||||
@ -416,8 +416,8 @@ play_move_rotate::@2: scope:[play_move_rotate] from play_move_rotate::@6
|
||||
to:play_move_rotate::@4
|
||||
play_move_rotate::@4: scope:[play_move_rotate] from play_move_rotate::@1 play_move_rotate::@2
|
||||
[188] (byte) play_move_rotate::orientation#3 ← phi( play_move_rotate::@1/(byte) play_move_rotate::orientation#1 play_move_rotate::@2/(byte) play_move_rotate::orientation#2 )
|
||||
[189] (byte) play_collision::xpos#3 ← (byte) current_xpos#25
|
||||
[190] (byte) play_collision::ypos#3 ← (byte) current_ypos#18
|
||||
[189] (byte) play_collision::xpos#3 ← (byte) current_xpos#26
|
||||
[190] (byte) play_collision::ypos#3 ← (byte) current_ypos#19
|
||||
[191] (byte) play_collision::orientation#3 ← (byte) play_move_rotate::orientation#3
|
||||
[192] (byte*~) current_piece#101 ← (byte*) current_piece#15
|
||||
[193] call play_collision
|
||||
@ -429,7 +429,7 @@ play_move_rotate::@14: scope:[play_move_rotate] from play_move_rotate::@4
|
||||
to:play_move_rotate::@11
|
||||
play_move_rotate::@11: scope:[play_move_rotate] from play_move_rotate::@14
|
||||
[197] (byte) current_orientation#7 ← (byte) play_move_rotate::orientation#3
|
||||
[198] (byte*) current_piece_gfx#6 ← (byte*) current_piece#15 + (byte) current_orientation#7
|
||||
[198] (byte*) current_piece_gfx#7 ← (byte*) current_piece#15 + (byte) current_orientation#7
|
||||
to:play_move_rotate::@return
|
||||
play_move_rotate::@1: scope:[play_move_rotate] from play_move_rotate
|
||||
[199] (byte/signed word/word/dword/signed dword~) play_move_rotate::$4 ← (byte) current_orientation#20 - (byte/signed byte/word/signed word/dword/signed dword) 16
|
||||
@ -497,8 +497,8 @@ play_move_leftright::@6: scope:[play_move_leftright] from play_move_leftright
|
||||
[226] if((byte) play_move_leftright::key_event#0!=(const byte) KEY_DOT#0) goto play_move_leftright::@return
|
||||
to:play_move_leftright::@7
|
||||
play_move_leftright::@7: scope:[play_move_leftright] from play_move_leftright::@6
|
||||
[227] (byte) play_collision::xpos#2 ← (byte) current_xpos#21 + (byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
[228] (byte) play_collision::ypos#2 ← (byte) current_ypos#18
|
||||
[227] (byte) play_collision::xpos#2 ← (byte) current_xpos#22 + (byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
[228] (byte) play_collision::ypos#2 ← (byte) current_ypos#19
|
||||
[229] (byte) play_collision::orientation#2 ← (byte) current_orientation#20
|
||||
[230] (byte*~) current_piece#100 ← (byte*) current_piece#15
|
||||
[231] call play_collision
|
||||
@ -509,16 +509,16 @@ play_move_leftright::@15: scope:[play_move_leftright] from play_move_leftright:
|
||||
[234] if((byte~) play_move_leftright::$4!=(const byte) COLLISION_NONE#0) goto play_move_leftright::@return
|
||||
to:play_move_leftright::@8
|
||||
play_move_leftright::@8: scope:[play_move_leftright] from play_move_leftright::@15
|
||||
[235] (byte) current_xpos#5 ← ++ (byte) current_xpos#21
|
||||
[235] (byte) current_xpos#6 ← ++ (byte) current_xpos#22
|
||||
to:play_move_leftright::@return
|
||||
play_move_leftright::@return: scope:[play_move_leftright] from play_move_leftright::@11 play_move_leftright::@14 play_move_leftright::@15 play_move_leftright::@6 play_move_leftright::@8
|
||||
[236] (byte) current_xpos#25 ← phi( play_move_leftright::@11/(byte) current_xpos#7 play_move_leftright::@15/(byte) current_xpos#21 play_move_leftright::@8/(byte) current_xpos#5 play_move_leftright::@14/(byte) current_xpos#21 play_move_leftright::@6/(byte) current_xpos#21 )
|
||||
[236] (byte) current_xpos#26 ← phi( play_move_leftright::@11/(byte) current_xpos#8 play_move_leftright::@15/(byte) current_xpos#22 play_move_leftright::@8/(byte) current_xpos#6 play_move_leftright::@14/(byte) current_xpos#22 play_move_leftright::@6/(byte) current_xpos#22 )
|
||||
[236] (byte) play_move_leftright::return#2 ← phi( play_move_leftright::@11/(byte/signed byte/word/signed word/dword/signed dword) 1 play_move_leftright::@15/(byte/signed byte/word/signed word/dword/signed dword) 0 play_move_leftright::@8/(byte/signed byte/word/signed word/dword/signed dword) 1 play_move_leftright::@14/(byte/signed byte/word/signed word/dword/signed dword) 0 play_move_leftright::@6/(byte/signed byte/word/signed word/dword/signed dword) 0 )
|
||||
[237] return
|
||||
to:@return
|
||||
play_move_leftright::@1: scope:[play_move_leftright] from play_move_leftright
|
||||
[238] (byte) play_collision::xpos#1 ← (byte) current_xpos#21 - (byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
[239] (byte) play_collision::ypos#1 ← (byte) current_ypos#18
|
||||
[238] (byte) play_collision::xpos#1 ← (byte) current_xpos#22 - (byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
[239] (byte) play_collision::ypos#1 ← (byte) current_ypos#19
|
||||
[240] (byte) play_collision::orientation#1 ← (byte) current_orientation#20
|
||||
[241] (byte*~) current_piece#99 ← (byte*) current_piece#15
|
||||
[242] call play_collision
|
||||
@ -529,7 +529,7 @@ play_move_leftright::@14: scope:[play_move_leftright] from play_move_leftright:
|
||||
[245] if((byte~) play_move_leftright::$8!=(const byte) COLLISION_NONE#0) goto play_move_leftright::@return
|
||||
to:play_move_leftright::@11
|
||||
play_move_leftright::@11: scope:[play_move_leftright] from play_move_leftright::@14
|
||||
[246] (byte) current_xpos#7 ← -- (byte) current_xpos#21
|
||||
[246] (byte) current_xpos#8 ← -- (byte) current_xpos#22
|
||||
to:play_move_leftright::@return
|
||||
play_move_down: scope:[play_move_down] from play_movement
|
||||
[247] (byte) current_movedown_counter#12 ← ++ (byte) current_movedown_counter#16
|
||||
@ -565,8 +565,8 @@ play_move_down::@4: scope:[play_move_down] from play_move_down::@11 play_move_d
|
||||
[261] if((byte) play_move_down::movedown#6==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_move_down::@return
|
||||
to:play_move_down::@12
|
||||
play_move_down::@12: scope:[play_move_down] from play_move_down::@4
|
||||
[262] (byte) play_collision::ypos#0 ← (byte) current_ypos#10 + (byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
[263] (byte) play_collision::xpos#0 ← (byte) current_xpos#121
|
||||
[262] (byte) play_collision::ypos#0 ← (byte) current_ypos#11 + (byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
[263] (byte) play_collision::xpos#0 ← (byte) current_xpos#122
|
||||
[264] (byte) play_collision::orientation#0 ← (byte) current_orientation#13
|
||||
[265] (byte*~) current_piece#98 ← (byte*) current_piece#10
|
||||
[266] call play_collision
|
||||
@ -598,50 +598,50 @@ play_move_down::@21: scope:[play_move_down] from play_move_down::@20
|
||||
play_move_down::@7: scope:[play_move_down] from play_move_down::@21 play_move_down::@6
|
||||
[281] (byte) next_piece_idx#31 ← phi( play_move_down::@21/(byte) play_spawn_current::piece_idx#2 play_move_down::@6/(byte) next_piece_idx#10 )
|
||||
[281] (byte) game_over#28 ← phi( play_move_down::@21/(byte) game_over#52 play_move_down::@6/(byte) game_over#10 )
|
||||
[281] (byte) current_xpos#43 ← phi( play_move_down::@21/(byte) current_xpos#102 play_move_down::@6/(byte) current_xpos#121 )
|
||||
[281] (byte*) current_piece_gfx#35 ← phi( play_move_down::@21/(byte*) current_piece_gfx#7 play_move_down::@6/(byte*) current_piece_gfx#111 )
|
||||
[281] (byte) current_xpos#44 ← phi( play_move_down::@21/(byte) current_xpos#103 play_move_down::@6/(byte) current_xpos#122 )
|
||||
[281] (byte*) current_piece_gfx#36 ← phi( play_move_down::@21/(byte*) current_piece_gfx#74 play_move_down::@6/(byte*) current_piece_gfx#112 )
|
||||
[281] (byte) current_orientation#38 ← phi( play_move_down::@21/(byte/signed byte/word/signed word/dword/signed dword) 0 play_move_down::@6/(byte) current_orientation#13 )
|
||||
[281] (byte) current_piece_char#29 ← phi( play_move_down::@21/(byte) current_piece_char#4 play_move_down::@6/(byte) current_piece_char#21 )
|
||||
[281] (byte) current_piece_char#30 ← phi( play_move_down::@21/(byte) current_piece_char#5 play_move_down::@6/(byte) current_piece_char#10 )
|
||||
[281] (byte*) current_piece#29 ← phi( play_move_down::@21/(byte*~) current_piece#103 play_move_down::@6/(byte*) current_piece#10 )
|
||||
[281] (byte) level_bcd#32 ← phi( play_move_down::@21/(byte) level_bcd#19 play_move_down::@6/(byte) level_bcd#11 )
|
||||
[281] (byte) current_movedown_slow#38 ← phi( play_move_down::@21/(byte) current_movedown_slow#23 play_move_down::@6/(byte) current_movedown_slow#14 )
|
||||
[281] (byte) level#34 ← phi( play_move_down::@21/(byte) level#19 play_move_down::@6/(byte) level#10 )
|
||||
[281] (dword) score_bcd#27 ← phi( play_move_down::@21/(dword) score_bcd#16 play_move_down::@6/(dword) score_bcd#18 )
|
||||
[281] (word) lines_bcd#27 ← phi( play_move_down::@21/(word) lines_bcd#17 play_move_down::@6/(word) lines_bcd#19 )
|
||||
[281] (byte) current_ypos#38 ← phi( play_move_down::@21/(byte) current_ypos#5 play_move_down::@6/(byte) current_ypos#2 )
|
||||
[281] (byte) current_ypos#39 ← phi( play_move_down::@21/(byte) current_ypos#6 play_move_down::@6/(byte) current_ypos#3 )
|
||||
to:play_move_down::@return
|
||||
play_move_down::@return: scope:[play_move_down] from play_move_down::@4 play_move_down::@7
|
||||
[282] (byte) next_piece_idx#16 ← phi( play_move_down::@4/(byte) next_piece_idx#10 play_move_down::@7/(byte) next_piece_idx#31 )
|
||||
[282] (byte) game_over#15 ← phi( play_move_down::@4/(byte) game_over#10 play_move_down::@7/(byte) game_over#28 )
|
||||
[282] (byte) current_xpos#21 ← phi( play_move_down::@4/(byte) current_xpos#121 play_move_down::@7/(byte) current_xpos#43 )
|
||||
[282] (byte*) current_piece_gfx#19 ← phi( play_move_down::@4/(byte*) current_piece_gfx#111 play_move_down::@7/(byte*) current_piece_gfx#35 )
|
||||
[282] (byte) current_xpos#22 ← phi( play_move_down::@4/(byte) current_xpos#122 play_move_down::@7/(byte) current_xpos#44 )
|
||||
[282] (byte*) current_piece_gfx#20 ← phi( play_move_down::@4/(byte*) current_piece_gfx#112 play_move_down::@7/(byte*) current_piece_gfx#36 )
|
||||
[282] (byte) current_orientation#20 ← phi( play_move_down::@4/(byte) current_orientation#13 play_move_down::@7/(byte) current_orientation#38 )
|
||||
[282] (byte) current_piece_char#15 ← phi( play_move_down::@4/(byte) current_piece_char#21 play_move_down::@7/(byte) current_piece_char#29 )
|
||||
[282] (byte) current_piece_char#16 ← phi( play_move_down::@4/(byte) current_piece_char#10 play_move_down::@7/(byte) current_piece_char#30 )
|
||||
[282] (byte*) current_piece#15 ← phi( play_move_down::@4/(byte*) current_piece#10 play_move_down::@7/(byte*) current_piece#29 )
|
||||
[282] (byte) level_bcd#17 ← phi( play_move_down::@4/(byte) level_bcd#11 play_move_down::@7/(byte) level_bcd#32 )
|
||||
[282] (byte) current_movedown_slow#21 ← phi( play_move_down::@4/(byte) current_movedown_slow#14 play_move_down::@7/(byte) current_movedown_slow#38 )
|
||||
[282] (byte) level#17 ← phi( play_move_down::@4/(byte) level#10 play_move_down::@7/(byte) level#34 )
|
||||
[282] (dword) score_bcd#14 ← phi( play_move_down::@4/(dword) score_bcd#18 play_move_down::@7/(dword) score_bcd#27 )
|
||||
[282] (word) lines_bcd#15 ← phi( play_move_down::@4/(word) lines_bcd#19 play_move_down::@7/(word) lines_bcd#27 )
|
||||
[282] (byte) current_ypos#18 ← phi( play_move_down::@4/(byte) current_ypos#10 play_move_down::@7/(byte) current_ypos#38 )
|
||||
[282] (byte) current_ypos#19 ← phi( play_move_down::@4/(byte) current_ypos#11 play_move_down::@7/(byte) current_ypos#39 )
|
||||
[282] (byte) current_movedown_counter#14 ← phi( play_move_down::@4/(byte) current_movedown_counter#12 play_move_down::@7/(byte/signed byte/word/signed word/dword/signed dword) 0 )
|
||||
[282] (byte) play_move_down::return#3 ← phi( play_move_down::@4/(byte/signed byte/word/signed word/dword/signed dword) 0 play_move_down::@7/(byte/signed byte/word/signed word/dword/signed dword) 1 )
|
||||
[283] return
|
||||
to:@return
|
||||
play_move_down::@6: scope:[play_move_down] from play_move_down::@18
|
||||
[284] (byte) current_ypos#2 ← ++ (byte) current_ypos#10
|
||||
[284] (byte) current_ypos#3 ← ++ (byte) current_ypos#11
|
||||
to:play_move_down::@7
|
||||
play_spawn_current: scope:[play_spawn_current] from main::@29 main::@30 play_move_down::@21
|
||||
[285] (byte) game_over#65 ← phi( main::@29/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@30/(byte) game_over#52 play_move_down::@21/(byte) game_over#10 )
|
||||
[285] (byte) next_piece_idx#17 ← phi( main::@29/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@30/(byte) play_spawn_current::piece_idx#2 play_move_down::@21/(byte) next_piece_idx#10 )
|
||||
[286] (byte) play_spawn_current::current_piece_idx#0 ← (byte) next_piece_idx#17
|
||||
[287] (byte~) play_spawn_current::$0 ← (byte) play_spawn_current::current_piece_idx#0 << (byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
[288] (byte) current_piece_char#4 ← *((const byte[]) PIECES_CHARS#0 + (byte) play_spawn_current::current_piece_idx#0)
|
||||
[289] (byte*) current_piece_gfx#7 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$0) + (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
[290] (byte) current_xpos#102 ← *((const byte[]) PIECES_START_X#0 + (byte) play_spawn_current::current_piece_idx#0)
|
||||
[291] (byte) current_ypos#5 ← *((const byte[]) PIECES_START_Y#0 + (byte) play_spawn_current::current_piece_idx#0)
|
||||
[292] (byte) play_collision::xpos#4 ← (byte) current_xpos#102
|
||||
[293] (byte) play_collision::ypos#4 ← (byte) current_ypos#5
|
||||
[288] (byte) current_piece_char#5 ← *((const byte[]) PIECES_CHARS#0 + (byte) play_spawn_current::current_piece_idx#0)
|
||||
[289] (byte*) current_piece_gfx#74 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$0) + (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
[290] (byte) current_xpos#103 ← *((const byte[]) PIECES_START_X#0 + (byte) play_spawn_current::current_piece_idx#0)
|
||||
[291] (byte) current_ypos#6 ← *((const byte[]) PIECES_START_Y#0 + (byte) play_spawn_current::current_piece_idx#0)
|
||||
[292] (byte) play_collision::xpos#4 ← (byte) current_xpos#103
|
||||
[293] (byte) play_collision::ypos#4 ← (byte) current_ypos#6
|
||||
[294] (byte*~) current_piece#102 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$0)
|
||||
[295] call play_collision
|
||||
[296] (byte) play_collision::return#10 ← (byte) play_collision::return#15
|
||||
@ -792,24 +792,24 @@ play_remove_lines::@18: scope:[play_remove_lines] from play_remove_lines::@2
|
||||
[366] phi()
|
||||
to:play_remove_lines::@3
|
||||
play_lock_current: scope:[play_lock_current] from play_move_down::@13
|
||||
[367] (byte) play_lock_current::ypos2#0 ← (byte) current_ypos#10 << (byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
[367] (byte) play_lock_current::ypos2#0 ← (byte) current_ypos#11 << (byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
to:play_lock_current::@1
|
||||
play_lock_current::@1: scope:[play_lock_current] from play_lock_current play_lock_current::@7
|
||||
[368] (byte) play_lock_current::l#6 ← phi( play_lock_current/(byte/signed byte/word/signed word/dword/signed dword) 0 play_lock_current::@7/(byte) play_lock_current::l#1 )
|
||||
[368] (byte) play_lock_current::i#3 ← phi( play_lock_current/(byte/signed byte/word/signed word/dword/signed dword) 0 play_lock_current::@7/(byte~) play_lock_current::i#7 )
|
||||
[368] (byte) play_lock_current::ypos2#2 ← phi( play_lock_current/(byte) play_lock_current::ypos2#0 play_lock_current::@7/(byte) play_lock_current::ypos2#1 )
|
||||
[369] (byte*) play_lock_current::playfield_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte) play_lock_current::ypos2#2)
|
||||
[370] (byte) play_lock_current::col#0 ← (byte) current_xpos#121
|
||||
[370] (byte) play_lock_current::col#0 ← (byte) current_xpos#122
|
||||
to:play_lock_current::@2
|
||||
play_lock_current::@2: scope:[play_lock_current] from play_lock_current::@1 play_lock_current::@8
|
||||
[371] (byte) play_lock_current::c#2 ← phi( play_lock_current::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 play_lock_current::@8/(byte) play_lock_current::c#1 )
|
||||
[371] (byte) play_lock_current::col#2 ← phi( play_lock_current::@1/(byte) play_lock_current::col#0 play_lock_current::@8/(byte) play_lock_current::col#1 )
|
||||
[371] (byte) play_lock_current::i#2 ← phi( play_lock_current::@1/(byte) play_lock_current::i#3 play_lock_current::@8/(byte~) play_lock_current::i#9 )
|
||||
[372] (byte) play_lock_current::i#1 ← ++ (byte) play_lock_current::i#2
|
||||
[373] if(*((byte*) current_piece_gfx#111 + (byte) play_lock_current::i#2)==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_lock_current::@3
|
||||
[373] if(*((byte*) current_piece_gfx#112 + (byte) play_lock_current::i#2)==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_lock_current::@3
|
||||
to:play_lock_current::@4
|
||||
play_lock_current::@4: scope:[play_lock_current] from play_lock_current::@2
|
||||
[374] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::col#2) ← (byte) current_piece_char#21
|
||||
[374] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::col#2) ← (byte) current_piece_char#10
|
||||
to:play_lock_current::@3
|
||||
play_lock_current::@3: scope:[play_lock_current] from play_lock_current::@2 play_lock_current::@4
|
||||
[375] (byte) play_lock_current::col#1 ← ++ (byte) play_lock_current::col#2
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -331,45 +331,45 @@
|
||||
(byte*~) current_piece#98 current_piece#98 zp ZP_WORD:5 4.0
|
||||
(byte*~) current_piece#99 current_piece#99 zp ZP_WORD:5 4.0
|
||||
(byte) current_piece_char
|
||||
(byte~) current_piece_char#110 reg byte x 4.0
|
||||
(byte~) current_piece_char#111 reg byte x 22.0
|
||||
(byte) current_piece_char#15 current_piece_char zp ZP_BYTE:28 3.3421052631578956
|
||||
(byte) current_piece_char#21 current_piece_char zp ZP_BYTE:28 187.38888888888889
|
||||
(byte) current_piece_char#29 current_piece_char zp ZP_BYTE:28 6.0
|
||||
(byte) current_piece_char#4 current_piece_char zp ZP_BYTE:28 0.23529411764705882
|
||||
(byte) current_piece_char#67 reg byte x 50.699999999999996
|
||||
(byte) current_piece_char#10 current_piece_char zp ZP_BYTE:28 187.38888888888889
|
||||
(byte~) current_piece_char#106 reg byte x 4.0
|
||||
(byte~) current_piece_char#107 reg byte x 22.0
|
||||
(byte) current_piece_char#16 current_piece_char zp ZP_BYTE:28 3.3421052631578956
|
||||
(byte) current_piece_char#30 current_piece_char zp ZP_BYTE:28 6.0
|
||||
(byte) current_piece_char#5 current_piece_char zp ZP_BYTE:28 0.23529411764705882
|
||||
(byte) current_piece_char#68 reg byte x 50.699999999999996
|
||||
(byte*) current_piece_gfx
|
||||
(byte*) current_piece_gfx#111 current_piece_gfx zp ZP_WORD:30 187.38888888888889
|
||||
(byte*~) current_piece_gfx#122 current_piece_gfx#122 zp ZP_WORD:5 2.0
|
||||
(byte*~) current_piece_gfx#123 current_piece_gfx#123 zp ZP_WORD:5 11.0
|
||||
(byte*) current_piece_gfx#17 current_piece_gfx zp ZP_WORD:30 6.047619047619047
|
||||
(byte*) current_piece_gfx#19 current_piece_gfx zp ZP_WORD:30 0.3571428571428571
|
||||
(byte*) current_piece_gfx#20 current_piece_gfx zp ZP_WORD:30 1.3333333333333333
|
||||
(byte*) current_piece_gfx#35 current_piece_gfx zp ZP_WORD:30 6.0
|
||||
(byte*) current_piece_gfx#6 current_piece_gfx zp ZP_WORD:30 4.0
|
||||
(byte*) current_piece_gfx#63 current_piece_gfx#63 zp ZP_WORD:5 50.699999999999996
|
||||
(byte*) current_piece_gfx#7 current_piece_gfx zp ZP_WORD:30 0.24242424242424243
|
||||
(byte*) current_piece_gfx#112 current_piece_gfx zp ZP_WORD:30 187.38888888888889
|
||||
(byte*~) current_piece_gfx#118 current_piece_gfx#118 zp ZP_WORD:5 2.0
|
||||
(byte*~) current_piece_gfx#119 current_piece_gfx#119 zp ZP_WORD:5 11.0
|
||||
(byte*) current_piece_gfx#18 current_piece_gfx zp ZP_WORD:30 6.047619047619047
|
||||
(byte*) current_piece_gfx#20 current_piece_gfx zp ZP_WORD:30 0.3571428571428571
|
||||
(byte*) current_piece_gfx#21 current_piece_gfx zp ZP_WORD:30 1.3333333333333333
|
||||
(byte*) current_piece_gfx#36 current_piece_gfx zp ZP_WORD:30 6.0
|
||||
(byte*) current_piece_gfx#64 current_piece_gfx#64 zp ZP_WORD:5 50.699999999999996
|
||||
(byte*) current_piece_gfx#7 current_piece_gfx zp ZP_WORD:30 4.0
|
||||
(byte*) current_piece_gfx#74 current_piece_gfx zp ZP_WORD:30 0.24242424242424243
|
||||
(byte) current_xpos
|
||||
(byte) current_xpos#102 current_xpos zp ZP_BYTE:32 0.3125
|
||||
(byte) current_xpos#121 current_xpos zp ZP_BYTE:32 20.75925925925926
|
||||
(byte~) current_xpos#132 current_xpos#132 zp ZP_BYTE:10 1.3333333333333333
|
||||
(byte~) current_xpos#133 current_xpos#133 zp ZP_BYTE:10 7.333333333333333
|
||||
(byte) current_xpos#18 current_xpos zp ZP_BYTE:32 6.047619047619047
|
||||
(byte) current_xpos#21 current_xpos zp ZP_BYTE:32 0.7692307692307692
|
||||
(byte) current_xpos#25 current_xpos zp ZP_BYTE:32 0.4666666666666666
|
||||
(byte) current_xpos#43 current_xpos zp ZP_BYTE:32 6.0
|
||||
(byte) current_xpos#5 current_xpos zp ZP_BYTE:32 4.0
|
||||
(byte) current_xpos#58 current_xpos#58 zp ZP_BYTE:10 5.7
|
||||
(byte) current_xpos#7 current_xpos zp ZP_BYTE:32 4.0
|
||||
(byte) current_xpos#103 current_xpos zp ZP_BYTE:32 0.3125
|
||||
(byte) current_xpos#122 current_xpos zp ZP_BYTE:32 20.75925925925926
|
||||
(byte~) current_xpos#128 current_xpos#128 zp ZP_BYTE:10 1.3333333333333333
|
||||
(byte~) current_xpos#129 current_xpos#129 zp ZP_BYTE:10 7.333333333333333
|
||||
(byte) current_xpos#19 current_xpos zp ZP_BYTE:32 6.047619047619047
|
||||
(byte) current_xpos#22 current_xpos zp ZP_BYTE:32 0.7692307692307692
|
||||
(byte) current_xpos#26 current_xpos zp ZP_BYTE:32 0.4666666666666666
|
||||
(byte) current_xpos#44 current_xpos zp ZP_BYTE:32 6.0
|
||||
(byte) current_xpos#59 current_xpos#59 zp ZP_BYTE:10 5.7
|
||||
(byte) current_xpos#6 current_xpos zp ZP_BYTE:32 4.0
|
||||
(byte) current_xpos#8 current_xpos zp ZP_BYTE:32 4.0
|
||||
(byte) current_ypos
|
||||
(byte) current_ypos#10 current_ypos zp ZP_BYTE:16 3.297297297297297
|
||||
(byte~) current_ypos#108 reg byte y 1.0
|
||||
(byte~) current_ypos#109 reg byte y 4.4
|
||||
(byte) current_ypos#12 reg byte y 15.0
|
||||
(byte) current_ypos#18 current_ypos zp ZP_BYTE:16 1.683544303797468
|
||||
(byte) current_ypos#2 current_ypos zp ZP_BYTE:16 4.0
|
||||
(byte) current_ypos#38 current_ypos zp ZP_BYTE:16 6.0
|
||||
(byte) current_ypos#5 current_ypos zp ZP_BYTE:16 0.3225806451612903
|
||||
(byte~) current_ypos#104 reg byte y 1.0
|
||||
(byte~) current_ypos#105 reg byte y 4.4
|
||||
(byte) current_ypos#11 current_ypos zp ZP_BYTE:16 3.297297297297297
|
||||
(byte) current_ypos#13 reg byte y 15.0
|
||||
(byte) current_ypos#19 current_ypos zp ZP_BYTE:16 1.683544303797468
|
||||
(byte) current_ypos#3 current_ypos zp ZP_BYTE:16 4.0
|
||||
(byte) current_ypos#39 current_ypos zp ZP_BYTE:16 6.0
|
||||
(byte) current_ypos#6 current_ypos zp ZP_BYTE:16 0.3225806451612903
|
||||
(byte) game_over
|
||||
(byte) game_over#10 game_over zp ZP_BYTE:34 4.804347826086958
|
||||
(byte) game_over#15 game_over zp ZP_BYTE:34 3.1052631578947376
|
||||
@ -976,11 +976,11 @@
|
||||
(byte*) render_next::next_piece_gfx#3 next_piece_gfx zp ZP_WORD:5 204.0
|
||||
(byte*~) render_next::next_piece_gfx#9 next_piece_gfx zp ZP_WORD:5 4.0
|
||||
(byte*) render_next::screen_next_area
|
||||
(byte*) render_next::screen_next_area#10 screen_next_area zp ZP_WORD:7 0.5
|
||||
(byte*) render_next::screen_next_area#2 screen_next_area zp ZP_WORD:7 701.0
|
||||
(byte*) render_next::screen_next_area#3 screen_next_area zp ZP_WORD:7 67.33333333333333
|
||||
(byte*) render_next::screen_next_area#4 screen_next_area zp ZP_WORD:7 684.1666666666667
|
||||
(byte*) render_next::screen_next_area#9 screen_next_area zp ZP_WORD:7 204.0
|
||||
(byte*) render_next::screen_next_area#10 screen_next_area zp ZP_WORD:7 204.0
|
||||
(byte*) render_next::screen_next_area#11 screen_next_area zp ZP_WORD:7 0.5
|
||||
(byte*) render_next::screen_next_area#3 screen_next_area zp ZP_WORD:7 701.0
|
||||
(byte*) render_next::screen_next_area#4 screen_next_area zp ZP_WORD:7 67.33333333333333
|
||||
(byte*) render_next::screen_next_area#5 screen_next_area zp ZP_WORD:7 684.1666666666667
|
||||
(void()) render_playfield()
|
||||
(byte~) render_playfield::$2 reg byte a 202.0
|
||||
(byte~) render_playfield::$3 reg byte a 202.0
|
||||
@ -1020,7 +1020,7 @@
|
||||
(word) render_score::score_offset
|
||||
(const word) render_score::score_offset#0 score_offset = (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 5+(byte/signed byte/word/signed word/dword/signed dword) 28
|
||||
(byte*) render_score::screen
|
||||
(byte*) render_score::screen#2 screen zp ZP_WORD:5 0.75
|
||||
(byte*) render_score::screen#3 screen zp ZP_WORD:5 0.75
|
||||
(void()) render_screen_original((byte*) render_screen_original::screen)
|
||||
(label) render_screen_original::@1
|
||||
(label) render_screen_original::@2
|
||||
@ -1189,17 +1189,17 @@ interrupt(HARDWARE_CLOBBER)(void()) sprites_irq()
|
||||
zp ZP_BYTE:2 [ render_screen_show#16 render_screen_show#13 play_init::idx#2 play_init::idx#1 sprites_init::xpos#2 sprites_init::xpos#1 render_screen_original::y#6 render_screen_original::y#1 ]
|
||||
zp ZP_BYTE:3 [ render_screen_render#18 render_screen_render#11 ]
|
||||
zp ZP_BYTE:4 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 play_remove_lines::y#8 play_remove_lines::y#1 play_lock_current::l#6 play_lock_current::l#1 play_spawn_current::$0 play_update_score::lines_before#0 ]
|
||||
zp ZP_WORD:5 [ render_score::screen#2 render_bcd::screen#6 render_bcd::screen#0 render_bcd::screen#1 render_bcd::screen#2 render_bcd::screen#3 render_bcd::screen#4 render_bcd::screen#5 render_next::next_piece_gfx#2 render_next::next_piece_gfx#3 render_next::next_piece_gfx#1 render_next::next_piece_gfx#9 current_piece_gfx#63 current_piece_gfx#122 current_piece_gfx#123 render_playfield::screen_line#2 render_playfield::screen_line#0 render_playfield::screen_line#1 current_piece#17 current_piece#98 current_piece#99 current_piece#100 current_piece#101 current_piece#102 play_collision::piece_gfx#0 play_init::pli#2 play_init::pli#1 render_init::li_1#2 render_init::li_1#1 render_screen_original::oscr#2 render_screen_original::oscr#4 render_screen_original::oscr#1 play_lock_current::playfield_line#0 ]
|
||||
zp ZP_WORD:7 [ render_bcd::offset#6 render_bcd::screen_pos#3 render_bcd::screen_pos#0 render_bcd::screen_pos#2 render_bcd::screen_pos#1 render_next::screen_next_area#4 render_next::screen_next_area#9 render_next::screen_next_area#3 render_next::screen_next_area#10 render_next::screen_next_area#2 render_init::li_2#2 render_init::li_2#1 render_screen_original::ocols#2 render_screen_original::ocols#4 render_screen_original::ocols#1 render_moving::screen_line#0 play_collision::playfield_line#0 ]
|
||||
zp ZP_WORD:5 [ render_score::screen#3 render_bcd::screen#6 render_bcd::screen#0 render_bcd::screen#1 render_bcd::screen#2 render_bcd::screen#3 render_bcd::screen#4 render_bcd::screen#5 render_next::next_piece_gfx#2 render_next::next_piece_gfx#3 render_next::next_piece_gfx#1 render_next::next_piece_gfx#9 current_piece_gfx#64 current_piece_gfx#118 current_piece_gfx#119 render_playfield::screen_line#2 render_playfield::screen_line#0 render_playfield::screen_line#1 current_piece#17 current_piece#98 current_piece#99 current_piece#100 current_piece#101 current_piece#102 play_collision::piece_gfx#0 play_init::pli#2 play_init::pli#1 render_init::li_1#2 render_init::li_1#1 render_screen_original::oscr#2 render_screen_original::oscr#4 render_screen_original::oscr#1 play_lock_current::playfield_line#0 ]
|
||||
zp ZP_WORD:7 [ render_bcd::offset#6 render_bcd::screen_pos#3 render_bcd::screen_pos#0 render_bcd::screen_pos#2 render_bcd::screen_pos#1 render_next::screen_next_area#5 render_next::screen_next_area#10 render_next::screen_next_area#4 render_next::screen_next_area#11 render_next::screen_next_area#3 render_init::li_2#2 render_init::li_2#1 render_screen_original::ocols#2 render_screen_original::ocols#4 render_screen_original::ocols#1 render_moving::screen_line#0 play_collision::playfield_line#0 ]
|
||||
reg byte y [ render_bcd::only_low#6 ]
|
||||
reg byte x [ render_bcd::bcd#6 render_bcd::bcd#0 render_bcd::bcd#1 render_bcd::bcd#2 render_bcd::bcd#3 render_bcd::bcd#4 render_bcd::bcd#5 ]
|
||||
reg byte a [ render_screen_render#15 render_screen_render#68 ]
|
||||
reg byte y [ next_piece_idx#12 next_piece_idx#84 next_piece_idx#85 ]
|
||||
zp ZP_BYTE:9 [ render_next::l#7 render_next::l#1 render_screen_render#33 render_screen_render#69 render_playfield::l#2 render_playfield::l#1 play_movement::return#2 play_movement::render#1 play_movement::return#0 play_movement::render#2 play_remove_lines::removed#11 play_remove_lines::removed#7 play_remove_lines::removed#1 play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 keyboard_event_pressed::keycode#5 keyboard_event_scan::row#2 keyboard_event_scan::row#1 ]
|
||||
reg byte x [ render_next::c#2 render_next::c#1 ]
|
||||
reg byte y [ current_ypos#12 current_ypos#108 current_ypos#109 ]
|
||||
zp ZP_BYTE:10 [ current_xpos#58 current_xpos#132 current_xpos#133 render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 play_remove_lines::x#2 play_remove_lines::x#1 play_lock_current::col#2 play_lock_current::col#0 play_lock_current::col#1 keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 keyboard_event_scan::keycode#15 render_next::next_piece_char#0 keyboard_event_pressed::row_bits#0 ]
|
||||
reg byte x [ current_piece_char#67 current_piece_char#110 current_piece_char#111 ]
|
||||
reg byte y [ current_ypos#13 current_ypos#104 current_ypos#105 ]
|
||||
zp ZP_BYTE:10 [ current_xpos#59 current_xpos#128 current_xpos#129 render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 play_remove_lines::x#2 play_remove_lines::x#1 play_lock_current::col#2 play_lock_current::col#0 play_lock_current::col#1 keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 keyboard_event_scan::keycode#15 render_next::next_piece_char#0 keyboard_event_pressed::row_bits#0 ]
|
||||
reg byte x [ current_piece_char#68 current_piece_char#106 current_piece_char#107 ]
|
||||
zp ZP_BYTE:11 [ render_moving::ypos2#2 render_moving::ypos2#0 render_moving::ypos2#1 render_playfield::c#2 render_playfield::c#1 play_collision::ypos#5 play_collision::ypos#0 play_collision::ypos#1 play_collision::ypos#2 play_collision::ypos#3 play_collision::ypos#4 play_collision::ypos2#2 play_collision::ypos2#0 play_collision::ypos2#1 play_remove_lines::full#4 play_remove_lines::full#2 play_lock_current::i#1 keyboard_event_scan::row_scan#0 ]
|
||||
zp ZP_BYTE:12 [ render_moving::l#4 render_moving::l#1 play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 play_remove_lines::c#0 ]
|
||||
zp ZP_BYTE:13 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 play_collision::l#6 play_collision::l#1 ]
|
||||
@ -1212,17 +1212,17 @@ reg byte x [ play_collision::c#2 play_collision::c#1 ]
|
||||
reg byte a [ play_collision::return#15 ]
|
||||
reg byte a [ play_move_leftright::return#2 ]
|
||||
reg byte x [ play_move_down::movedown#6 play_move_down::movedown#3 play_move_down::movedown#7 play_move_down::movedown#2 play_move_down::movedown#10 ]
|
||||
zp ZP_BYTE:16 [ current_ypos#38 current_ypos#10 current_ypos#18 current_ypos#5 current_ypos#2 play_lock_current::ypos2#2 play_lock_current::ypos2#0 play_lock_current::ypos2#1 ]
|
||||
zp ZP_BYTE:16 [ current_ypos#39 current_ypos#11 current_ypos#19 current_ypos#6 current_ypos#3 play_lock_current::ypos2#2 play_lock_current::ypos2#0 play_lock_current::ypos2#1 ]
|
||||
zp ZP_WORD:17 [ lines_bcd#27 lines_bcd#17 lines_bcd#19 lines_bcd#15 lines_bcd#30 render_screen_original::screen#7 render_screen_original::screen#6 render_screen_original::screen#5 render_screen_original::screen#8 render_screen_original::screen#9 render_screen_original::screen#10 render_screen_original::screen#2 render_screen_original::screen#3 ]
|
||||
zp ZP_DWORD:19 [ score_bcd#27 score_bcd#16 score_bcd#18 score_bcd#14 score_bcd#30 ]
|
||||
zp ZP_BYTE:23 [ level#34 level#19 level#10 level#17 level#21 ]
|
||||
zp ZP_BYTE:24 [ current_movedown_slow#38 current_movedown_slow#23 current_movedown_slow#14 current_movedown_slow#21 current_movedown_slow#1 current_movedown_slow#69 current_movedown_slow#10 ]
|
||||
zp ZP_BYTE:25 [ level_bcd#32 level_bcd#19 level_bcd#11 level_bcd#17 level_bcd#64 level_bcd#21 level_bcd#8 ]
|
||||
zp ZP_WORD:26 [ current_piece#29 current_piece#103 current_piece#10 current_piece#15 current_piece#96 render_screen_original::cols#6 render_screen_original::cols#5 render_screen_original::cols#4 render_screen_original::cols#7 render_screen_original::cols#3 render_screen_original::cols#1 render_screen_original::cols#2 ]
|
||||
zp ZP_BYTE:28 [ current_piece_char#29 current_piece_char#21 current_piece_char#15 current_piece_char#4 ]
|
||||
zp ZP_BYTE:28 [ current_piece_char#30 current_piece_char#10 current_piece_char#16 current_piece_char#5 ]
|
||||
zp ZP_BYTE:29 [ current_orientation#38 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ]
|
||||
zp ZP_WORD:30 [ current_piece_gfx#35 current_piece_gfx#111 current_piece_gfx#17 current_piece_gfx#7 current_piece_gfx#19 current_piece_gfx#20 current_piece_gfx#6 ]
|
||||
zp ZP_BYTE:32 [ current_xpos#43 current_xpos#121 current_xpos#18 current_xpos#102 current_xpos#21 current_xpos#25 current_xpos#7 current_xpos#5 ]
|
||||
zp ZP_WORD:30 [ current_piece_gfx#36 current_piece_gfx#112 current_piece_gfx#18 current_piece_gfx#74 current_piece_gfx#20 current_piece_gfx#21 current_piece_gfx#7 ]
|
||||
zp ZP_BYTE:32 [ current_xpos#44 current_xpos#122 current_xpos#19 current_xpos#103 current_xpos#22 current_xpos#26 current_xpos#8 current_xpos#6 ]
|
||||
reg byte x [ play_move_down::return#3 ]
|
||||
zp ZP_BYTE:33 [ next_piece_idx#17 next_piece_idx#31 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#2 play_spawn_current::piece_idx#1 ]
|
||||
zp ZP_BYTE:34 [ game_over#65 game_over#28 game_over#10 game_over#15 game_over#52 ]
|
||||
|
@ -8,8 +8,8 @@
|
||||
@end: scope:[] from @1
|
||||
[3] phi()
|
||||
main: scope:[main] from @1
|
||||
[4] *((const byte*) main::screen#0) ← (const byte) main::a#0
|
||||
[5] *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (const byte) main::a#0
|
||||
[4] *((const byte*) main::screen#0) ← (const byte) main::a#1
|
||||
[5] *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (const byte) main::a#1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main
|
||||
[6] return
|
||||
|
@ -3,11 +3,13 @@ CONTROL FLOW GRAPH SSA
|
||||
@begin: scope:[] from
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
(byte) main::a#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
(byte) main::b#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
(byte*) main::screen#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
|
||||
(byte) main::b#0 ← (byte/signed byte/word/signed word/dword/signed dword) 12
|
||||
(byte) main::a#0 ← (byte) main::b#0
|
||||
*((byte*) main::screen#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte) main::a#0
|
||||
*((byte*) main::screen#0 + (byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte) main::b#0
|
||||
(byte) main::b#1 ← (byte/signed byte/word/signed word/dword/signed dword) 12
|
||||
(byte) main::a#1 ← (byte) main::b#1
|
||||
*((byte*) main::screen#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte) main::a#1
|
||||
*((byte*) main::screen#0 + (byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte) main::b#1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main
|
||||
return
|
||||
@ -28,21 +30,26 @@ SYMBOL TABLE SSA
|
||||
(label) main::@return
|
||||
(byte) main::a
|
||||
(byte) main::a#0
|
||||
(byte) main::a#1
|
||||
(byte) main::b
|
||||
(byte) main::b#0
|
||||
(byte) main::b#1
|
||||
(byte*) main::screen
|
||||
(byte*) main::screen#0
|
||||
|
||||
Culled Empty Block (label) @2
|
||||
Successful SSA optimization Pass2CullEmptyBlocks
|
||||
Alias (byte) main::a#0 = (byte) main::b#0
|
||||
Alias (byte) main::a#1 = (byte) main::b#1
|
||||
Successful SSA optimization Pass2AliasElimination
|
||||
Constant (const byte) main::a#0 = 0
|
||||
Constant (const byte) main::b#0 = 0
|
||||
Constant (const byte*) main::screen#0 = ((byte*))1024
|
||||
Constant (const byte) main::a#0 = 12
|
||||
Constant (const byte) main::a#1 = 12
|
||||
Successful SSA optimization Pass2ConstantIdentification
|
||||
Consolidated array index constant in *(main::screen#0+0)
|
||||
Consolidated array index constant in *(main::screen#0+1)
|
||||
Successful SSA optimization Pass2ConstantAdditionElimination
|
||||
Successful SSA optimization PassNEliminateUnusedVars
|
||||
Simplifying constant plus zero main::screen#0+0
|
||||
Adding NOP phi() at start of @begin
|
||||
Adding NOP phi() at start of @1
|
||||
@ -67,8 +74,8 @@ FINAL CONTROL FLOW GRAPH
|
||||
@end: scope:[] from @1
|
||||
[3] phi()
|
||||
main: scope:[main] from @1
|
||||
[4] *((const byte*) main::screen#0) ← (const byte) main::a#0
|
||||
[5] *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (const byte) main::a#0
|
||||
[4] *((const byte*) main::screen#0) ← (const byte) main::a#1
|
||||
[5] *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (const byte) main::a#1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main
|
||||
[6] return
|
||||
@ -110,10 +117,10 @@ bend:
|
||||
main: {
|
||||
.label screen = $400
|
||||
.const a = $c
|
||||
//SEG10 [4] *((const byte*) main::screen#0) ← (const byte) main::a#0 -- _deref_pbuc1=vbuc2
|
||||
//SEG10 [4] *((const byte*) main::screen#0) ← (const byte) main::a#1 -- _deref_pbuc1=vbuc2
|
||||
lda #a
|
||||
sta screen
|
||||
//SEG11 [5] *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (const byte) main::a#0 -- _deref_pbuc1=vbuc2
|
||||
//SEG11 [5] *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (const byte) main::a#1 -- _deref_pbuc1=vbuc2
|
||||
lda #a
|
||||
sta screen+1
|
||||
jmp breturn
|
||||
@ -124,8 +131,8 @@ main: {
|
||||
}
|
||||
|
||||
REGISTER UPLIFT POTENTIAL REGISTERS
|
||||
Statement [4] *((const byte*) main::screen#0) ← (const byte) main::a#0 [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
Statement [5] *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (const byte) main::a#0 [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
Statement [4] *((const byte*) main::screen#0) ← (const byte) main::a#1 [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
Statement [5] *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (const byte) main::a#1 [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [main]
|
||||
@ -160,10 +167,10 @@ bend:
|
||||
main: {
|
||||
.label screen = $400
|
||||
.const a = $c
|
||||
//SEG10 [4] *((const byte*) main::screen#0) ← (const byte) main::a#0 -- _deref_pbuc1=vbuc2
|
||||
//SEG10 [4] *((const byte*) main::screen#0) ← (const byte) main::a#1 -- _deref_pbuc1=vbuc2
|
||||
lda #a
|
||||
sta screen
|
||||
//SEG11 [5] *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (const byte) main::a#0 -- _deref_pbuc1=vbuc2
|
||||
//SEG11 [5] *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (const byte) main::a#1 -- _deref_pbuc1=vbuc2
|
||||
lda #a
|
||||
sta screen+1
|
||||
jmp breturn
|
||||
@ -200,7 +207,7 @@ FINAL SYMBOL TABLE
|
||||
(void()) main()
|
||||
(label) main::@return
|
||||
(byte) main::a
|
||||
(const byte) main::a#0 a = (byte/signed byte/word/signed word/dword/signed dword) 12
|
||||
(const byte) main::a#1 a = (byte/signed byte/word/signed word/dword/signed dword) 12
|
||||
(byte) main::b
|
||||
(byte*) main::screen
|
||||
(const byte*) main::screen#0 screen = ((byte*))(word/signed word/dword/signed dword) 1024
|
||||
@ -227,10 +234,10 @@ Score: 16
|
||||
main: {
|
||||
.label screen = $400
|
||||
.const a = $c
|
||||
//SEG10 [4] *((const byte*) main::screen#0) ← (const byte) main::a#0 -- _deref_pbuc1=vbuc2
|
||||
//SEG10 [4] *((const byte*) main::screen#0) ← (const byte) main::a#1 -- _deref_pbuc1=vbuc2
|
||||
lda #a
|
||||
sta screen
|
||||
//SEG11 [5] *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (const byte) main::a#0 -- _deref_pbuc1=vbuc2
|
||||
//SEG11 [5] *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (const byte) main::a#1 -- _deref_pbuc1=vbuc2
|
||||
sta screen+1
|
||||
//SEG12 main::@return
|
||||
//SEG13 [6] return
|
||||
|
@ -4,7 +4,7 @@
|
||||
(void()) main()
|
||||
(label) main::@return
|
||||
(byte) main::a
|
||||
(const byte) main::a#0 a = (byte/signed byte/word/signed word/dword/signed dword) 12
|
||||
(const byte) main::a#1 a = (byte/signed byte/word/signed word/dword/signed dword) 12
|
||||
(byte) main::b
|
||||
(byte*) main::screen
|
||||
(const byte*) main::screen#0 screen = ((byte*))(word/signed word/dword/signed dword) 1024
|
||||
|
@ -48,19 +48,19 @@ bitmap_line: scope:[bitmap_line] from lines::@1
|
||||
[25] if((byte) bitmap_line::x0#0<(byte) bitmap_line::x1#0) goto bitmap_line::@1
|
||||
to:bitmap_line::@15
|
||||
bitmap_line::@15: scope:[bitmap_line] from bitmap_line
|
||||
[26] (byte) bitmap_line::xd#1 ← (byte) bitmap_line::x0#0 - (byte) bitmap_line::x1#0
|
||||
[26] (byte) bitmap_line::xd#2 ← (byte) bitmap_line::x0#0 - (byte) bitmap_line::x1#0
|
||||
[27] if((byte) bitmap_line::y0#0<(byte) bitmap_line::y1#0) goto bitmap_line::@2
|
||||
to:bitmap_line::@16
|
||||
bitmap_line::@16: scope:[bitmap_line] from bitmap_line::@15
|
||||
[28] (byte) bitmap_line::yd#1 ← (byte) bitmap_line::y0#0 - (byte) bitmap_line::y1#0
|
||||
[29] if((byte) bitmap_line::yd#1<(byte) bitmap_line::xd#1) goto bitmap_line::@3
|
||||
[28] (byte) bitmap_line::yd#2 ← (byte) bitmap_line::y0#0 - (byte) bitmap_line::y1#0
|
||||
[29] if((byte) bitmap_line::yd#2<(byte) bitmap_line::xd#2) goto bitmap_line::@3
|
||||
to:bitmap_line::@17
|
||||
bitmap_line::@17: scope:[bitmap_line] from bitmap_line::@16
|
||||
[30] (byte) bitmap_line_ydxi::y#0 ← (byte) bitmap_line::y1#0
|
||||
[31] (byte) bitmap_line_ydxi::x#0 ← (byte) bitmap_line::x1#0
|
||||
[32] (byte) bitmap_line_ydxi::y1#0 ← (byte) bitmap_line::y0#0
|
||||
[33] (byte) bitmap_line_ydxi::yd#0 ← (byte) bitmap_line::yd#1
|
||||
[34] (byte) bitmap_line_ydxi::xd#0 ← (byte) bitmap_line::xd#1
|
||||
[33] (byte) bitmap_line_ydxi::yd#0 ← (byte) bitmap_line::yd#2
|
||||
[34] (byte) bitmap_line_ydxi::xd#0 ← (byte) bitmap_line::xd#2
|
||||
[35] call bitmap_line_ydxi
|
||||
to:bitmap_line::@return
|
||||
bitmap_line::@return: scope:[bitmap_line] from bitmap_line::@10 bitmap_line::@13 bitmap_line::@17 bitmap_line::@20 bitmap_line::@24 bitmap_line::@27 bitmap_line::@3 bitmap_line::@6
|
||||
@ -70,72 +70,72 @@ bitmap_line::@3: scope:[bitmap_line] from bitmap_line::@16
|
||||
[37] (byte) bitmap_line_xdyi::x#0 ← (byte) bitmap_line::x1#0
|
||||
[38] (byte) bitmap_line_xdyi::y#0 ← (byte) bitmap_line::y1#0
|
||||
[39] (byte) bitmap_line_xdyi::x1#0 ← (byte) bitmap_line::x0#0
|
||||
[40] (byte) bitmap_line_xdyi::xd#0 ← (byte) bitmap_line::xd#1
|
||||
[41] (byte) bitmap_line_xdyi::yd#0 ← (byte) bitmap_line::yd#1
|
||||
[40] (byte) bitmap_line_xdyi::xd#0 ← (byte) bitmap_line::xd#2
|
||||
[41] (byte) bitmap_line_xdyi::yd#0 ← (byte) bitmap_line::yd#2
|
||||
[42] call bitmap_line_xdyi
|
||||
to:bitmap_line::@return
|
||||
bitmap_line::@2: scope:[bitmap_line] from bitmap_line::@15
|
||||
[43] (byte) bitmap_line::yd#0 ← (byte) bitmap_line::y1#0 - (byte) bitmap_line::y0#0
|
||||
[44] if((byte) bitmap_line::yd#0<(byte) bitmap_line::xd#1) goto bitmap_line::@6
|
||||
[43] (byte) bitmap_line::yd#1 ← (byte) bitmap_line::y1#0 - (byte) bitmap_line::y0#0
|
||||
[44] if((byte) bitmap_line::yd#1<(byte) bitmap_line::xd#2) goto bitmap_line::@6
|
||||
to:bitmap_line::@20
|
||||
bitmap_line::@20: scope:[bitmap_line] from bitmap_line::@2
|
||||
[45] (byte) bitmap_line_ydxd::y#0 ← (byte) bitmap_line::y0#0
|
||||
[46] (byte) bitmap_line_ydxd::x#0 ← (byte) bitmap_line::x0#0
|
||||
[47] (byte) bitmap_line_ydxd::y1#0 ← (byte) bitmap_line::y1#0
|
||||
[48] (byte) bitmap_line_ydxd::yd#0 ← (byte) bitmap_line::yd#0
|
||||
[49] (byte) bitmap_line_ydxd::xd#0 ← (byte) bitmap_line::xd#1
|
||||
[48] (byte) bitmap_line_ydxd::yd#0 ← (byte) bitmap_line::yd#1
|
||||
[49] (byte) bitmap_line_ydxd::xd#0 ← (byte) bitmap_line::xd#2
|
||||
[50] call bitmap_line_ydxd
|
||||
to:bitmap_line::@return
|
||||
bitmap_line::@6: scope:[bitmap_line] from bitmap_line::@2
|
||||
[51] (byte) bitmap_line_xdyd::x#0 ← (byte) bitmap_line::x1#0
|
||||
[52] (byte) bitmap_line_xdyd::y#0 ← (byte) bitmap_line::y1#0
|
||||
[53] (byte) bitmap_line_xdyd::x1#0 ← (byte) bitmap_line::x0#0
|
||||
[54] (byte) bitmap_line_xdyd::xd#0 ← (byte) bitmap_line::xd#1
|
||||
[55] (byte) bitmap_line_xdyd::yd#0 ← (byte) bitmap_line::yd#0
|
||||
[54] (byte) bitmap_line_xdyd::xd#0 ← (byte) bitmap_line::xd#2
|
||||
[55] (byte) bitmap_line_xdyd::yd#0 ← (byte) bitmap_line::yd#1
|
||||
[56] call bitmap_line_xdyd
|
||||
to:bitmap_line::@return
|
||||
bitmap_line::@1: scope:[bitmap_line] from bitmap_line
|
||||
[57] (byte) bitmap_line::xd#0 ← (byte) bitmap_line::x1#0 - (byte) bitmap_line::x0#0
|
||||
[57] (byte) bitmap_line::xd#1 ← (byte) bitmap_line::x1#0 - (byte) bitmap_line::x0#0
|
||||
[58] if((byte) bitmap_line::y0#0<(byte) bitmap_line::y1#0) goto bitmap_line::@9
|
||||
to:bitmap_line::@23
|
||||
bitmap_line::@23: scope:[bitmap_line] from bitmap_line::@1
|
||||
[59] (byte) bitmap_line::yd#3 ← (byte) bitmap_line::y0#0 - (byte) bitmap_line::y1#0
|
||||
[60] if((byte) bitmap_line::yd#3<(byte) bitmap_line::xd#0) goto bitmap_line::@10
|
||||
[59] (byte) bitmap_line::yd#10 ← (byte) bitmap_line::y0#0 - (byte) bitmap_line::y1#0
|
||||
[60] if((byte) bitmap_line::yd#10<(byte) bitmap_line::xd#1) goto bitmap_line::@10
|
||||
to:bitmap_line::@24
|
||||
bitmap_line::@24: scope:[bitmap_line] from bitmap_line::@23
|
||||
[61] (byte) bitmap_line_ydxd::y#1 ← (byte) bitmap_line::y1#0
|
||||
[62] (byte) bitmap_line_ydxd::x#1 ← (byte) bitmap_line::x1#0
|
||||
[63] (byte) bitmap_line_ydxd::y1#1 ← (byte) bitmap_line::y0#0
|
||||
[64] (byte) bitmap_line_ydxd::yd#1 ← (byte) bitmap_line::yd#3
|
||||
[65] (byte) bitmap_line_ydxd::xd#1 ← (byte) bitmap_line::xd#0
|
||||
[64] (byte) bitmap_line_ydxd::yd#1 ← (byte) bitmap_line::yd#10
|
||||
[65] (byte) bitmap_line_ydxd::xd#1 ← (byte) bitmap_line::xd#1
|
||||
[66] call bitmap_line_ydxd
|
||||
to:bitmap_line::@return
|
||||
bitmap_line::@10: scope:[bitmap_line] from bitmap_line::@23
|
||||
[67] (byte) bitmap_line_xdyd::x#1 ← (byte) bitmap_line::x0#0
|
||||
[68] (byte) bitmap_line_xdyd::y#1 ← (byte) bitmap_line::y0#0
|
||||
[69] (byte) bitmap_line_xdyd::x1#1 ← (byte) bitmap_line::x1#0
|
||||
[70] (byte) bitmap_line_xdyd::xd#1 ← (byte) bitmap_line::xd#0
|
||||
[71] (byte) bitmap_line_xdyd::yd#1 ← (byte) bitmap_line::yd#3
|
||||
[70] (byte) bitmap_line_xdyd::xd#1 ← (byte) bitmap_line::xd#1
|
||||
[71] (byte) bitmap_line_xdyd::yd#1 ← (byte) bitmap_line::yd#10
|
||||
[72] call bitmap_line_xdyd
|
||||
to:bitmap_line::@return
|
||||
bitmap_line::@9: scope:[bitmap_line] from bitmap_line::@1
|
||||
[73] (byte) bitmap_line::yd#10 ← (byte) bitmap_line::y1#0 - (byte) bitmap_line::y0#0
|
||||
[74] if((byte) bitmap_line::yd#10<(byte) bitmap_line::xd#0) goto bitmap_line::@13
|
||||
[73] (byte) bitmap_line::yd#11 ← (byte) bitmap_line::y1#0 - (byte) bitmap_line::y0#0
|
||||
[74] if((byte) bitmap_line::yd#11<(byte) bitmap_line::xd#1) goto bitmap_line::@13
|
||||
to:bitmap_line::@27
|
||||
bitmap_line::@27: scope:[bitmap_line] from bitmap_line::@9
|
||||
[75] (byte) bitmap_line_ydxi::y#1 ← (byte) bitmap_line::y0#0
|
||||
[76] (byte) bitmap_line_ydxi::x#1 ← (byte) bitmap_line::x0#0
|
||||
[77] (byte) bitmap_line_ydxi::y1#1 ← (byte) bitmap_line::y1#0
|
||||
[78] (byte) bitmap_line_ydxi::yd#1 ← (byte) bitmap_line::yd#10
|
||||
[79] (byte) bitmap_line_ydxi::xd#1 ← (byte) bitmap_line::xd#0
|
||||
[78] (byte) bitmap_line_ydxi::yd#1 ← (byte) bitmap_line::yd#11
|
||||
[79] (byte) bitmap_line_ydxi::xd#1 ← (byte) bitmap_line::xd#1
|
||||
[80] call bitmap_line_ydxi
|
||||
to:bitmap_line::@return
|
||||
bitmap_line::@13: scope:[bitmap_line] from bitmap_line::@9
|
||||
[81] (byte) bitmap_line_xdyi::x#1 ← (byte) bitmap_line::x0#0
|
||||
[82] (byte) bitmap_line_xdyi::y#1 ← (byte) bitmap_line::y0#0
|
||||
[83] (byte) bitmap_line_xdyi::x1#1 ← (byte) bitmap_line::x1#0
|
||||
[84] (byte) bitmap_line_xdyi::xd#1 ← (byte) bitmap_line::xd#0
|
||||
[85] (byte) bitmap_line_xdyi::yd#1 ← (byte) bitmap_line::yd#10
|
||||
[84] (byte) bitmap_line_xdyi::xd#1 ← (byte) bitmap_line::xd#1
|
||||
[85] (byte) bitmap_line_xdyi::yd#1 ← (byte) bitmap_line::yd#11
|
||||
[86] call bitmap_line_xdyi
|
||||
to:bitmap_line::@return
|
||||
bitmap_line_xdyi: scope:[bitmap_line_xdyi] from bitmap_line::@13 bitmap_line::@3
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -158,17 +158,17 @@
|
||||
(byte) bitmap_line::x1
|
||||
(byte) bitmap_line::x1#0 x1 zp ZP_BYTE:8 5.409090909090908
|
||||
(byte) bitmap_line::xd
|
||||
(byte) bitmap_line::xd#0 xd zp ZP_BYTE:4 0.7
|
||||
(byte) bitmap_line::xd#1 xd zp ZP_BYTE:4 0.7
|
||||
(byte) bitmap_line::xd#2 xd zp ZP_BYTE:4 0.7
|
||||
(byte) bitmap_line::y0
|
||||
(byte) bitmap_line::y0#0 y0 zp ZP_BYTE:6 5.952380952380948
|
||||
(byte) bitmap_line::y1
|
||||
(byte) bitmap_line::y1#0 reg byte y 6.249999999999996
|
||||
(byte) bitmap_line::yd
|
||||
(byte) bitmap_line::yd#0 yd zp ZP_BYTE:3 0.8888888888888888
|
||||
(byte) bitmap_line::yd#1 yd zp ZP_BYTE:3 0.8888888888888888
|
||||
(byte) bitmap_line::yd#10 yd zp ZP_BYTE:3 0.8888888888888888
|
||||
(byte) bitmap_line::yd#3 yd zp ZP_BYTE:3 0.8888888888888888
|
||||
(byte) bitmap_line::yd#11 yd zp ZP_BYTE:3 0.8888888888888888
|
||||
(byte) bitmap_line::yd#2 yd zp ZP_BYTE:3 0.8888888888888888
|
||||
(void()) bitmap_line_xdyd((byte) bitmap_line_xdyd::x , (byte) bitmap_line_xdyd::y , (byte) bitmap_line_xdyd::x1 , (byte) bitmap_line_xdyd::xd , (byte) bitmap_line_xdyd::yd)
|
||||
(byte/signed word/word/dword/signed dword~) bitmap_line_xdyd::$6 $6 zp ZP_BYTE:7 2002.0
|
||||
(label) bitmap_line_xdyd::@1
|
||||
@ -377,8 +377,8 @@
|
||||
(label) main::@4
|
||||
|
||||
zp ZP_BYTE:2 [ lines::l#2 lines::l#1 bitmap_clear::y#4 bitmap_clear::y#1 bitmap_init::$6 ]
|
||||
zp ZP_BYTE:3 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#1 bitmap_line_xdyi::yd#0 bitmap_line::yd#1 bitmap_line::yd#10 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#0 bitmap_line_ydxi::yd#1 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#1 bitmap_line_xdyd::yd#0 bitmap_line::yd#0 bitmap_line::yd#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 ]
|
||||
zp ZP_BYTE:4 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#1 bitmap_line_xdyi::xd#0 bitmap_line::xd#1 bitmap_line::xd#0 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#0 bitmap_line_ydxi::xd#1 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#1 bitmap_line_xdyd::xd#0 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 ]
|
||||
zp ZP_BYTE:3 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#1 bitmap_line_xdyi::yd#0 bitmap_line::yd#2 bitmap_line::yd#11 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#0 bitmap_line_ydxi::yd#1 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#1 bitmap_line_xdyd::yd#0 bitmap_line::yd#1 bitmap_line::yd#10 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 ]
|
||||
zp ZP_BYTE:4 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#1 bitmap_line_xdyi::xd#0 bitmap_line::xd#2 bitmap_line::xd#1 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#0 bitmap_line_ydxi::xd#1 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#1 bitmap_line_xdyd::xd#0 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 ]
|
||||
zp ZP_BYTE:5 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#1 bitmap_line_xdyi::x1#0 bitmap_line::x0#0 bitmap_line_ydxi::e#3 bitmap_line_ydxi::e#0 bitmap_line_ydxi::e#6 bitmap_line_ydxi::e#2 bitmap_line_ydxi::e#1 bitmap_line_xdyd::e#3 bitmap_line_xdyd::e#0 bitmap_line_xdyd::e#6 bitmap_line_xdyd::e#2 bitmap_line_xdyd::e#1 bitmap_line_ydxd::e#3 bitmap_line_ydxd::e#0 bitmap_line_ydxd::e#6 bitmap_line_ydxd::e#2 bitmap_line_ydxd::e#1 ]
|
||||
reg byte x [ bitmap_line_xdyi::x#3 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#1 bitmap_line_xdyi::x#0 bitmap_line_xdyi::x#2 ]
|
||||
zp ZP_BYTE:6 [ bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 bitmap_line::y0#0 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y1#0 bitmap_line_ydxi::y1#1 bitmap_line_xdyd::y#3 bitmap_line_xdyd::y#5 bitmap_line_xdyd::y#1 bitmap_line_xdyd::y#0 bitmap_line_xdyd::y#6 bitmap_line_xdyd::y#2 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y1#0 bitmap_line_ydxd::y1#1 ]
|
||||
|
@ -88,127 +88,127 @@ render_logo: scope:[render_logo] from loop::@6
|
||||
[44] if((signed word) render_logo::xpos#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_logo::@1
|
||||
to:render_logo::@2
|
||||
render_logo::@2: scope:[render_logo] from render_logo render_logo::@22
|
||||
[45] (byte) render_logo::screen_idx#17 ← phi( render_logo/(byte/signed byte/word/signed word/dword/signed dword) 0 render_logo::@22/(byte) render_logo::screen_idx#2 )
|
||||
[46] if((byte) render_logo::screen_idx#17!=(byte)(signed byte) render_logo::x_char#0) goto render_logo::@5
|
||||
[45] (byte) render_logo::screen_idx#18 ← phi( render_logo/(byte/signed byte/word/signed word/dword/signed dword) 0 render_logo::@22/(byte) render_logo::screen_idx#3 )
|
||||
[46] if((byte) render_logo::screen_idx#18!=(byte)(signed byte) render_logo::x_char#0) goto render_logo::@5
|
||||
to:render_logo::@6
|
||||
render_logo::@6: scope:[render_logo] from render_logo::@2 render_logo::@26
|
||||
[47] (byte) render_logo::logo_idx#11 ← phi( render_logo::@26/(byte) render_logo::logo_idx#2 render_logo::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 )
|
||||
[47] (byte) render_logo::screen_idx#19 ← phi( render_logo::@26/(byte) render_logo::screen_idx#3 render_logo::@2/(byte) render_logo::screen_idx#17 )
|
||||
[48] if((byte) render_logo::screen_idx#19!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto render_logo::@9
|
||||
[47] (byte) render_logo::logo_idx#10 ← phi( render_logo::@26/(byte) render_logo::logo_idx#3 render_logo::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 )
|
||||
[47] (byte) render_logo::screen_idx#10 ← phi( render_logo::@26/(byte) render_logo::screen_idx#4 render_logo::@2/(byte) render_logo::screen_idx#18 )
|
||||
[48] if((byte) render_logo::screen_idx#10!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto render_logo::@9
|
||||
to:render_logo::@return
|
||||
render_logo::@return: scope:[render_logo] from render_logo::@15 render_logo::@6
|
||||
[49] return
|
||||
to:@return
|
||||
render_logo::@9: scope:[render_logo] from render_logo::@6
|
||||
[50] (byte/signed word/word/dword/signed dword~) render_logo::$15 ← (byte) render_logo::logo_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
[51] *((const byte*) SCREEN#0 + (byte) render_logo::screen_idx#19) ← (byte/signed word/word/dword/signed dword~) render_logo::$15
|
||||
[50] (byte/signed word/word/dword/signed dword~) render_logo::$15 ← (byte) render_logo::logo_idx#10 + (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
[51] *((const byte*) SCREEN#0 + (byte) render_logo::screen_idx#10) ← (byte/signed word/word/dword/signed dword~) render_logo::$15
|
||||
to:render_logo::@9_1
|
||||
render_logo::@9_1: scope:[render_logo] from render_logo::@9
|
||||
[52] (byte/signed word/word/dword/signed dword~) render_logo::$34 ← (byte) render_logo::logo_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
[53] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) render_logo::screen_idx#19) ← (byte/signed word/word/dword/signed dword~) render_logo::$34
|
||||
[52] (byte/signed word/word/dword/signed dword~) render_logo::$34 ← (byte) render_logo::logo_idx#10 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
[53] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) render_logo::screen_idx#10) ← (byte/signed word/word/dword/signed dword~) render_logo::$34
|
||||
to:render_logo::@9_2
|
||||
render_logo::@9_2: scope:[render_logo] from render_logo::@9_1
|
||||
[54] (byte/signed word/word/dword/signed dword~) render_logo::$38 ← (byte) render_logo::logo_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 2
|
||||
[55] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) render_logo::screen_idx#19) ← (byte/signed word/word/dword/signed dword~) render_logo::$38
|
||||
[54] (byte/signed word/word/dword/signed dword~) render_logo::$38 ← (byte) render_logo::logo_idx#10 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 2
|
||||
[55] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) render_logo::screen_idx#10) ← (byte/signed word/word/dword/signed dword~) render_logo::$38
|
||||
to:render_logo::@9_3
|
||||
render_logo::@9_3: scope:[render_logo] from render_logo::@9_2
|
||||
[56] (byte/signed word/word/dword/signed dword~) render_logo::$42 ← (byte) render_logo::logo_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 3
|
||||
[57] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 3 + (byte) render_logo::screen_idx#19) ← (byte/signed word/word/dword/signed dword~) render_logo::$42
|
||||
[56] (byte/signed word/word/dword/signed dword~) render_logo::$42 ← (byte) render_logo::logo_idx#10 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 3
|
||||
[57] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 3 + (byte) render_logo::screen_idx#10) ← (byte/signed word/word/dword/signed dword~) render_logo::$42
|
||||
to:render_logo::@9_4
|
||||
render_logo::@9_4: scope:[render_logo] from render_logo::@9_3
|
||||
[58] (byte/signed word/word/dword/signed dword~) render_logo::$46 ← (byte) render_logo::logo_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 4
|
||||
[59] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 4 + (byte) render_logo::screen_idx#19) ← (byte/signed word/word/dword/signed dword~) render_logo::$46
|
||||
[58] (byte/signed word/word/dword/signed dword~) render_logo::$46 ← (byte) render_logo::logo_idx#10 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 4
|
||||
[59] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 4 + (byte) render_logo::screen_idx#10) ← (byte/signed word/word/dword/signed dword~) render_logo::$46
|
||||
to:render_logo::@9_5
|
||||
render_logo::@9_5: scope:[render_logo] from render_logo::@9_4
|
||||
[60] (byte/signed word/word/dword/signed dword~) render_logo::$50 ← (byte) render_logo::logo_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 5
|
||||
[61] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 5 + (byte) render_logo::screen_idx#19) ← (byte/signed word/word/dword/signed dword~) render_logo::$50
|
||||
[60] (byte/signed word/word/dword/signed dword~) render_logo::$50 ← (byte) render_logo::logo_idx#10 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 5
|
||||
[61] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 5 + (byte) render_logo::screen_idx#10) ← (byte/signed word/word/dword/signed dword~) render_logo::$50
|
||||
to:render_logo::@26
|
||||
render_logo::@26: scope:[render_logo] from render_logo::@9_5
|
||||
[62] (byte) render_logo::screen_idx#3 ← ++ (byte) render_logo::screen_idx#19
|
||||
[63] (byte) render_logo::logo_idx#2 ← ++ (byte) render_logo::logo_idx#11
|
||||
[62] (byte) render_logo::screen_idx#4 ← ++ (byte) render_logo::screen_idx#10
|
||||
[63] (byte) render_logo::logo_idx#3 ← ++ (byte) render_logo::logo_idx#10
|
||||
to:render_logo::@6
|
||||
render_logo::@5: scope:[render_logo] from render_logo::@2
|
||||
[64] *((const byte*) SCREEN#0 + (byte) render_logo::screen_idx#17) ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
[64] *((const byte*) SCREEN#0 + (byte) render_logo::screen_idx#18) ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
to:render_logo::@5_1
|
||||
render_logo::@5_1: scope:[render_logo] from render_logo::@5
|
||||
[65] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) render_logo::screen_idx#17) ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
[65] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) render_logo::screen_idx#18) ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
to:render_logo::@5_2
|
||||
render_logo::@5_2: scope:[render_logo] from render_logo::@5_1
|
||||
[66] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) render_logo::screen_idx#17) ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
[66] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) render_logo::screen_idx#18) ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
to:render_logo::@5_3
|
||||
render_logo::@5_3: scope:[render_logo] from render_logo::@5_2
|
||||
[67] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 3 + (byte) render_logo::screen_idx#17) ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
[67] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 3 + (byte) render_logo::screen_idx#18) ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
to:render_logo::@5_4
|
||||
render_logo::@5_4: scope:[render_logo] from render_logo::@5_3
|
||||
[68] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 4 + (byte) render_logo::screen_idx#17) ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
[68] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 4 + (byte) render_logo::screen_idx#18) ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
to:render_logo::@5_5
|
||||
render_logo::@5_5: scope:[render_logo] from render_logo::@5_4
|
||||
[69] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 5 + (byte) render_logo::screen_idx#17) ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
[69] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 5 + (byte) render_logo::screen_idx#18) ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
to:render_logo::@22
|
||||
render_logo::@22: scope:[render_logo] from render_logo::@5_5
|
||||
[70] (byte) render_logo::screen_idx#2 ← ++ (byte) render_logo::screen_idx#17
|
||||
[70] (byte) render_logo::screen_idx#3 ← ++ (byte) render_logo::screen_idx#18
|
||||
to:render_logo::@2
|
||||
render_logo::@1: scope:[render_logo] from render_logo
|
||||
[71] (signed byte~) render_logo::$17 ← - (signed byte) render_logo::x_char#0
|
||||
[72] (byte~) render_logo::logo_idx#13 ← (byte)(signed byte~) render_logo::$17
|
||||
[72] (byte~) render_logo::logo_idx#14 ← (byte)(signed byte~) render_logo::$17
|
||||
to:render_logo::@11
|
||||
render_logo::@11: scope:[render_logo] from render_logo::@1 render_logo::@31
|
||||
[73] (byte) render_logo::screen_idx#20 ← phi( render_logo::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 render_logo::@31/(byte) render_logo::screen_idx#4 )
|
||||
[73] (byte) render_logo::logo_idx#10 ← phi( render_logo::@1/(byte~) render_logo::logo_idx#13 render_logo::@31/(byte) render_logo::logo_idx#3 )
|
||||
[74] if((byte) render_logo::logo_idx#10!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto render_logo::@14
|
||||
[73] (byte) render_logo::screen_idx#21 ← phi( render_logo::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 render_logo::@31/(byte) render_logo::screen_idx#5 )
|
||||
[73] (byte) render_logo::logo_idx#11 ← phi( render_logo::@1/(byte~) render_logo::logo_idx#14 render_logo::@31/(byte) render_logo::logo_idx#4 )
|
||||
[74] if((byte) render_logo::logo_idx#11!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto render_logo::@14
|
||||
to:render_logo::@15
|
||||
render_logo::@15: scope:[render_logo] from render_logo::@11 render_logo::@35
|
||||
[75] (byte) render_logo::screen_idx#14 ← phi( render_logo::@11/(byte) render_logo::screen_idx#20 render_logo::@35/(byte) render_logo::screen_idx#5 )
|
||||
[76] if((byte) render_logo::screen_idx#14!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto render_logo::@18
|
||||
[75] (byte) render_logo::screen_idx#15 ← phi( render_logo::@11/(byte) render_logo::screen_idx#21 render_logo::@35/(byte) render_logo::screen_idx#6 )
|
||||
[76] if((byte) render_logo::screen_idx#15!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto render_logo::@18
|
||||
to:render_logo::@return
|
||||
render_logo::@18: scope:[render_logo] from render_logo::@15
|
||||
[77] *((const byte*) SCREEN#0 + (byte) render_logo::screen_idx#14) ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
[77] *((const byte*) SCREEN#0 + (byte) render_logo::screen_idx#15) ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
to:render_logo::@18_1
|
||||
render_logo::@18_1: scope:[render_logo] from render_logo::@18
|
||||
[78] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) render_logo::screen_idx#14) ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
[78] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) render_logo::screen_idx#15) ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
to:render_logo::@18_2
|
||||
render_logo::@18_2: scope:[render_logo] from render_logo::@18_1
|
||||
[79] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) render_logo::screen_idx#14) ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
[79] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) render_logo::screen_idx#15) ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
to:render_logo::@18_3
|
||||
render_logo::@18_3: scope:[render_logo] from render_logo::@18_2
|
||||
[80] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 3 + (byte) render_logo::screen_idx#14) ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
[80] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 3 + (byte) render_logo::screen_idx#15) ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
to:render_logo::@18_4
|
||||
render_logo::@18_4: scope:[render_logo] from render_logo::@18_3
|
||||
[81] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 4 + (byte) render_logo::screen_idx#14) ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
[81] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 4 + (byte) render_logo::screen_idx#15) ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
to:render_logo::@18_5
|
||||
render_logo::@18_5: scope:[render_logo] from render_logo::@18_4
|
||||
[82] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 5 + (byte) render_logo::screen_idx#14) ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
[82] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 5 + (byte) render_logo::screen_idx#15) ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
to:render_logo::@35
|
||||
render_logo::@35: scope:[render_logo] from render_logo::@18_5
|
||||
[83] (byte) render_logo::screen_idx#5 ← ++ (byte) render_logo::screen_idx#14
|
||||
[83] (byte) render_logo::screen_idx#6 ← ++ (byte) render_logo::screen_idx#15
|
||||
to:render_logo::@15
|
||||
render_logo::@14: scope:[render_logo] from render_logo::@11
|
||||
[84] (byte/signed word/word/dword/signed dword~) render_logo::$23 ← (byte) render_logo::logo_idx#10 + (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
[85] *((const byte*) SCREEN#0 + (byte) render_logo::screen_idx#20) ← (byte/signed word/word/dword/signed dword~) render_logo::$23
|
||||
[84] (byte/signed word/word/dword/signed dword~) render_logo::$23 ← (byte) render_logo::logo_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
[85] *((const byte*) SCREEN#0 + (byte) render_logo::screen_idx#21) ← (byte/signed word/word/dword/signed dword~) render_logo::$23
|
||||
to:render_logo::@14_1
|
||||
render_logo::@14_1: scope:[render_logo] from render_logo::@14
|
||||
[86] (byte/signed word/word/dword/signed dword~) render_logo::$80 ← (byte) render_logo::logo_idx#10 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
[87] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) render_logo::screen_idx#20) ← (byte/signed word/word/dword/signed dword~) render_logo::$80
|
||||
[86] (byte/signed word/word/dword/signed dword~) render_logo::$80 ← (byte) render_logo::logo_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
[87] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) render_logo::screen_idx#21) ← (byte/signed word/word/dword/signed dword~) render_logo::$80
|
||||
to:render_logo::@14_2
|
||||
render_logo::@14_2: scope:[render_logo] from render_logo::@14_1
|
||||
[88] (byte/signed word/word/dword/signed dword~) render_logo::$84 ← (byte) render_logo::logo_idx#10 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 2
|
||||
[89] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) render_logo::screen_idx#20) ← (byte/signed word/word/dword/signed dword~) render_logo::$84
|
||||
[88] (byte/signed word/word/dword/signed dword~) render_logo::$84 ← (byte) render_logo::logo_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 2
|
||||
[89] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) render_logo::screen_idx#21) ← (byte/signed word/word/dword/signed dword~) render_logo::$84
|
||||
to:render_logo::@14_3
|
||||
render_logo::@14_3: scope:[render_logo] from render_logo::@14_2
|
||||
[90] (byte/signed word/word/dword/signed dword~) render_logo::$88 ← (byte) render_logo::logo_idx#10 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 3
|
||||
[91] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 3 + (byte) render_logo::screen_idx#20) ← (byte/signed word/word/dword/signed dword~) render_logo::$88
|
||||
[90] (byte/signed word/word/dword/signed dword~) render_logo::$88 ← (byte) render_logo::logo_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 3
|
||||
[91] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 3 + (byte) render_logo::screen_idx#21) ← (byte/signed word/word/dword/signed dword~) render_logo::$88
|
||||
to:render_logo::@14_4
|
||||
render_logo::@14_4: scope:[render_logo] from render_logo::@14_3
|
||||
[92] (byte/signed word/word/dword/signed dword~) render_logo::$92 ← (byte) render_logo::logo_idx#10 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 4
|
||||
[93] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 4 + (byte) render_logo::screen_idx#20) ← (byte/signed word/word/dword/signed dword~) render_logo::$92
|
||||
[92] (byte/signed word/word/dword/signed dword~) render_logo::$92 ← (byte) render_logo::logo_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 4
|
||||
[93] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 4 + (byte) render_logo::screen_idx#21) ← (byte/signed word/word/dword/signed dword~) render_logo::$92
|
||||
to:render_logo::@14_5
|
||||
render_logo::@14_5: scope:[render_logo] from render_logo::@14_4
|
||||
[94] (byte/signed word/word/dword/signed dword~) render_logo::$96 ← (byte) render_logo::logo_idx#10 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 5
|
||||
[95] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 5 + (byte) render_logo::screen_idx#20) ← (byte/signed word/word/dword/signed dword~) render_logo::$96
|
||||
[94] (byte/signed word/word/dword/signed dword~) render_logo::$96 ← (byte) render_logo::logo_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 5
|
||||
[95] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 5 + (byte) render_logo::screen_idx#21) ← (byte/signed word/word/dword/signed dword~) render_logo::$96
|
||||
to:render_logo::@31
|
||||
render_logo::@31: scope:[render_logo] from render_logo::@14_5
|
||||
[96] (byte) render_logo::screen_idx#4 ← ++ (byte) render_logo::screen_idx#20
|
||||
[97] (byte) render_logo::logo_idx#3 ← ++ (byte) render_logo::logo_idx#10
|
||||
[96] (byte) render_logo::screen_idx#5 ← ++ (byte) render_logo::screen_idx#21
|
||||
[97] (byte) render_logo::logo_idx#4 ← ++ (byte) render_logo::logo_idx#11
|
||||
to:render_logo::@11
|
||||
sin16s_gen2: scope:[sin16s_gen2] from main::@2
|
||||
[98] phi()
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -335,21 +335,21 @@
|
||||
(label) render_logo::@return
|
||||
(byte) render_logo::line
|
||||
(byte) render_logo::logo_idx
|
||||
(byte) render_logo::logo_idx#10 reg byte y 60.73333333333334
|
||||
(byte) render_logo::logo_idx#11 reg byte y 53.86666666666667
|
||||
(byte~) render_logo::logo_idx#13 reg byte y 4.0
|
||||
(byte) render_logo::logo_idx#2 reg byte y 202.0
|
||||
(byte) render_logo::logo_idx#10 reg byte y 53.86666666666667
|
||||
(byte) render_logo::logo_idx#11 reg byte y 60.73333333333334
|
||||
(byte~) render_logo::logo_idx#14 reg byte y 4.0
|
||||
(byte) render_logo::logo_idx#3 reg byte y 202.0
|
||||
(byte) render_logo::logo_idx#4 reg byte y 202.0
|
||||
(byte) render_logo::logo_start
|
||||
(byte) render_logo::screen_idx
|
||||
(byte) render_logo::screen_idx#14 reg byte x 126.25
|
||||
(byte) render_logo::screen_idx#17 reg byte x 126.25
|
||||
(byte) render_logo::screen_idx#19 reg byte x 72.14285714285714
|
||||
(byte) render_logo::screen_idx#2 reg byte x 202.0
|
||||
(byte) render_logo::screen_idx#20 reg byte x 64.92857142857143
|
||||
(byte) render_logo::screen_idx#3 reg byte x 101.0
|
||||
(byte) render_logo::screen_idx#10 reg byte x 72.14285714285714
|
||||
(byte) render_logo::screen_idx#15 reg byte x 126.25
|
||||
(byte) render_logo::screen_idx#18 reg byte x 126.25
|
||||
(byte) render_logo::screen_idx#21 reg byte x 64.92857142857143
|
||||
(byte) render_logo::screen_idx#3 reg byte x 202.0
|
||||
(byte) render_logo::screen_idx#4 reg byte x 101.0
|
||||
(byte) render_logo::screen_idx#5 reg byte x 202.0
|
||||
(byte) render_logo::screen_idx#5 reg byte x 101.0
|
||||
(byte) render_logo::screen_idx#6 reg byte x 202.0
|
||||
(signed byte) render_logo::x_char
|
||||
(signed byte) render_logo::x_char#0 x_char zp ZP_BYTE:22 0.36363636363636365
|
||||
(signed word) render_logo::xpos
|
||||
@ -438,10 +438,10 @@
|
||||
|
||||
reg byte x [ main::ch#2 main::ch#1 ]
|
||||
zp ZP_WORD:2 [ xsin_idx#11 xsin_idx#19 xsin_idx#3 sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 fill::addr#2 fill::addr#0 fill::addr#1 ]
|
||||
reg byte x [ render_logo::screen_idx#19 render_logo::screen_idx#3 render_logo::screen_idx#17 render_logo::screen_idx#2 ]
|
||||
reg byte y [ render_logo::logo_idx#11 render_logo::logo_idx#2 ]
|
||||
reg byte y [ render_logo::logo_idx#10 render_logo::logo_idx#13 render_logo::logo_idx#3 ]
|
||||
reg byte x [ render_logo::screen_idx#14 render_logo::screen_idx#20 render_logo::screen_idx#4 render_logo::screen_idx#5 ]
|
||||
reg byte x [ render_logo::screen_idx#10 render_logo::screen_idx#4 render_logo::screen_idx#18 render_logo::screen_idx#3 ]
|
||||
reg byte y [ render_logo::logo_idx#10 render_logo::logo_idx#3 ]
|
||||
reg byte y [ render_logo::logo_idx#11 render_logo::logo_idx#14 render_logo::logo_idx#4 ]
|
||||
reg byte x [ render_logo::screen_idx#15 render_logo::screen_idx#21 render_logo::screen_idx#5 render_logo::screen_idx#6 ]
|
||||
zp ZP_DWORD:4 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ]
|
||||
zp ZP_WORD:8 [ sin16s_gen2::i#2 sin16s_gen2::i#1 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 loop::$1 loop::xpos#0 render_logo::xpos#0 fill::end#0 ]
|
||||
zp ZP_DWORD:10 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#2 sin16s_gen2::$5 mulu16_sel::$0 mulu16_sel::$1 sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 sin16s::$6 ]
|
||||
|
@ -17,10 +17,10 @@ main::@1: scope:[main] from main main::@1
|
||||
[8] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@1
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1 main::@2
|
||||
[9] (byte) main::j#2 ← phi( main::@2/(byte) main::j#1 main::@1/(byte/signed byte/word/signed word/dword/signed dword) 100 )
|
||||
[10] *((const byte*) SCREEN2#0 + (byte) main::j#2) ← (byte) main::j#2
|
||||
[11] (byte) main::j#1 ← -- (byte) main::j#2
|
||||
[12] if((byte) main::j#1!=(byte/word/signed word/dword/signed dword) 255) goto main::@2
|
||||
[9] (byte) main::j#3 ← phi( main::@2/(byte) main::j#2 main::@1/(byte/signed byte/word/signed word/dword/signed dword) 100 )
|
||||
[10] *((const byte*) SCREEN2#0 + (byte) main::j#3) ← (byte) main::j#3
|
||||
[11] (byte) main::j#2 ← -- (byte) main::j#3
|
||||
[12] if((byte) main::j#2!=(byte/word/signed word/dword/signed dword) 255) goto main::@2
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@2
|
||||
[13] return
|
||||
|
@ -20,14 +20,15 @@ main::@1: scope:[main] from main main::@1
|
||||
to:main::@3
|
||||
main::@3: scope:[main] from main::@1
|
||||
(byte*) SCREEN2#2 ← phi( main::@1/(byte*) SCREEN2#3 )
|
||||
(byte) main::j#0 ← (byte/signed byte/word/signed word/dword/signed dword) 100
|
||||
(byte) main::j#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
(byte) main::j#1 ← (byte/signed byte/word/signed word/dword/signed dword) 100
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@2 main::@3
|
||||
(byte*) SCREEN2#1 ← phi( main::@2/(byte*) SCREEN2#1 main::@3/(byte*) SCREEN2#2 )
|
||||
(byte) main::j#2 ← phi( main::@2/(byte) main::j#1 main::@3/(byte) main::j#0 )
|
||||
*((byte*) SCREEN2#1 + (byte) main::j#2) ← (byte) main::j#2
|
||||
(byte) main::j#1 ← (byte) main::j#2 + rangenext(100,0)
|
||||
(bool~) main::$1 ← (byte) main::j#1 != rangelast(100,0)
|
||||
(byte) main::j#3 ← phi( main::@2/(byte) main::j#2 main::@3/(byte) main::j#1 )
|
||||
*((byte*) SCREEN2#1 + (byte) main::j#3) ← (byte) main::j#3
|
||||
(byte) main::j#2 ← (byte) main::j#3 + rangenext(100,0)
|
||||
(bool~) main::$1 ← (byte) main::j#2 != rangelast(100,0)
|
||||
if((bool~) main::$1) goto main::@2
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@2
|
||||
@ -74,6 +75,7 @@ SYMBOL TABLE SSA
|
||||
(byte) main::j#0
|
||||
(byte) main::j#1
|
||||
(byte) main::j#2
|
||||
(byte) main::j#3
|
||||
|
||||
Culled Empty Block (label) @2
|
||||
Successful SSA optimization Pass2CullEmptyBlocks
|
||||
@ -92,23 +94,25 @@ Redundant Phi (byte*) SCREEN2#2 (byte*) SCREEN2#4
|
||||
Redundant Phi (byte*) SCREEN2#1 (byte*) SCREEN2#2
|
||||
Successful SSA optimization Pass2RedundantPhiElimination
|
||||
Simple Condition (bool~) main::$0 [8] if((byte) main::i#1!=rangelast(0,255)) goto main::@1
|
||||
Simple Condition (bool~) main::$1 [15] if((byte) main::j#1!=rangelast(100,0)) goto main::@2
|
||||
Simple Condition (bool~) main::$1 [16] if((byte) main::j#2!=rangelast(100,0)) goto main::@2
|
||||
Successful SSA optimization Pass2ConditionalJumpSimplification
|
||||
Constant (const byte*) SCREEN1#0 = ((byte*))1024
|
||||
Constant (const byte*) SCREEN2#0 = ((byte*))1280
|
||||
Constant (const byte) main::i#0 = 0
|
||||
Constant (const byte) main::j#0 = 100
|
||||
Constant (const byte) main::j#0 = 0
|
||||
Constant (const byte) main::j#1 = 100
|
||||
Successful SSA optimization Pass2ConstantIdentification
|
||||
Successful SSA optimization PassNEliminateUnusedVars
|
||||
Resolved ranged next value main::i#1 ← ++ main::i#2 to ++
|
||||
Resolved ranged comparison value if(main::i#1!=rangelast(0,255)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
Resolved ranged next value main::j#1 ← -- main::j#2 to --
|
||||
Resolved ranged comparison value if(main::j#1!=rangelast(100,0)) goto main::@2 to (byte/word/signed word/dword/signed dword) 255
|
||||
Resolved ranged next value main::j#2 ← -- main::j#3 to --
|
||||
Resolved ranged comparison value if(main::j#2!=rangelast(100,0)) goto main::@2 to (byte/word/signed word/dword/signed dword) 255
|
||||
Culled Empty Block (label) main::@3
|
||||
Successful SSA optimization Pass2CullEmptyBlocks
|
||||
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#1
|
||||
Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
Constant inlined main::j#0 = (byte/signed byte/word/signed word/dword/signed dword) 100
|
||||
Constant inlined main::j#1 = (byte/signed byte/word/signed word/dword/signed dword) 100
|
||||
Successful SSA optimization Pass2ConstantInlining
|
||||
Added new block during phi lifting main::@5(between main::@1 and main::@1)
|
||||
Added new block during phi lifting main::@6(between main::@2 and main::@2)
|
||||
@ -120,7 +124,7 @@ CALL GRAPH
|
||||
Calls in [] to main:2
|
||||
|
||||
Created 2 initial phi equivalence classes
|
||||
Coalesced [14] main::j#3 ← main::j#1
|
||||
Coalesced [14] main::j#4 ← main::j#2
|
||||
Coalesced [15] main::i#3 ← main::i#1
|
||||
Coalesced down to 2 phi equivalence classes
|
||||
Culled Empty Block (label) main::@6
|
||||
@ -150,10 +154,10 @@ main::@1: scope:[main] from main main::@1
|
||||
[8] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@1
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1 main::@2
|
||||
[9] (byte) main::j#2 ← phi( main::@2/(byte) main::j#1 main::@1/(byte/signed byte/word/signed word/dword/signed dword) 100 )
|
||||
[10] *((const byte*) SCREEN2#0 + (byte) main::j#2) ← (byte) main::j#2
|
||||
[11] (byte) main::j#1 ← -- (byte) main::j#2
|
||||
[12] if((byte) main::j#1!=(byte/word/signed word/dword/signed dword) 255) goto main::@2
|
||||
[9] (byte) main::j#3 ← phi( main::@2/(byte) main::j#2 main::@1/(byte/signed byte/word/signed word/dword/signed dword) 100 )
|
||||
[10] *((const byte*) SCREEN2#0 + (byte) main::j#3) ← (byte) main::j#3
|
||||
[11] (byte) main::j#2 ← -- (byte) main::j#3
|
||||
[12] if((byte) main::j#2!=(byte/word/signed word/dword/signed dword) 255) goto main::@2
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@2
|
||||
[13] return
|
||||
@ -168,17 +172,17 @@ VARIABLE REGISTER WEIGHTS
|
||||
(byte) main::i#1 16.5
|
||||
(byte) main::i#2 22.0
|
||||
(byte) main::j
|
||||
(byte) main::j#1 16.5
|
||||
(byte) main::j#2 22.0
|
||||
(byte) main::j#2 16.5
|
||||
(byte) main::j#3 22.0
|
||||
|
||||
Initial phi equivalence classes
|
||||
[ main::i#2 main::i#1 ]
|
||||
[ main::j#2 main::j#1 ]
|
||||
[ main::j#3 main::j#2 ]
|
||||
Complete equivalence classes
|
||||
[ main::i#2 main::i#1 ]
|
||||
[ main::j#2 main::j#1 ]
|
||||
[ main::j#3 main::j#2 ]
|
||||
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:3 [ main::j#3 main::j#2 ]
|
||||
|
||||
INITIAL ASM
|
||||
//SEG0 File Comments
|
||||
@ -234,23 +238,23 @@ main: {
|
||||
bne b1_from_b1
|
||||
//SEG19 [9] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
|
||||
b2_from_b1:
|
||||
//SEG20 [9] phi (byte) main::j#2 = (byte/signed byte/word/signed word/dword/signed dword) 100 [phi:main::@1->main::@2#0] -- vbuz1=vbuc1
|
||||
//SEG20 [9] phi (byte) main::j#3 = (byte/signed byte/word/signed word/dword/signed dword) 100 [phi:main::@1->main::@2#0] -- vbuz1=vbuc1
|
||||
lda #$64
|
||||
sta j
|
||||
jmp b2
|
||||
//SEG21 [9] phi from main::@2 to main::@2 [phi:main::@2->main::@2]
|
||||
b2_from_b2:
|
||||
//SEG22 [9] phi (byte) main::j#2 = (byte) main::j#1 [phi:main::@2->main::@2#0] -- register_copy
|
||||
//SEG22 [9] phi (byte) main::j#3 = (byte) main::j#2 [phi:main::@2->main::@2#0] -- register_copy
|
||||
jmp b2
|
||||
//SEG23 main::@2
|
||||
b2:
|
||||
//SEG24 [10] *((const byte*) SCREEN2#0 + (byte) main::j#2) ← (byte) main::j#2 -- pbuc1_derefidx_vbuz1=vbuz1
|
||||
//SEG24 [10] *((const byte*) SCREEN2#0 + (byte) main::j#3) ← (byte) main::j#3 -- pbuc1_derefidx_vbuz1=vbuz1
|
||||
ldy j
|
||||
tya
|
||||
sta SCREEN2,y
|
||||
//SEG25 [11] (byte) main::j#1 ← -- (byte) main::j#2 -- vbuz1=_dec_vbuz1
|
||||
//SEG25 [11] (byte) main::j#2 ← -- (byte) main::j#3 -- vbuz1=_dec_vbuz1
|
||||
dec j
|
||||
//SEG26 [12] if((byte) main::j#1!=(byte/word/signed word/dword/signed dword) 255) goto main::@2 -- vbuz1_neq_vbuc1_then_la1
|
||||
//SEG26 [12] if((byte) main::j#2!=(byte/word/signed word/dword/signed dword) 255) goto main::@2 -- vbuz1_neq_vbuc1_then_la1
|
||||
lda j
|
||||
cmp #$ff
|
||||
bne b2_from_b2
|
||||
@ -263,13 +267,13 @@ main: {
|
||||
|
||||
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::j#2 main::j#1 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:3 [ main::j#3 main::j#2 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y ,
|
||||
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [main] 38.5: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] 38.5: zp ZP_BYTE:3 [ main::j#2 main::j#1 ]
|
||||
Uplift Scope [main] 38.5: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] 38.5: zp ZP_BYTE:3 [ main::j#3 main::j#2 ]
|
||||
Uplift Scope []
|
||||
|
||||
Uplifting [main] best 478 combination reg byte x [ main::i#2 main::i#1 ] reg byte x [ main::j#2 main::j#1 ]
|
||||
Uplifting [main] best 478 combination reg byte x [ main::i#2 main::i#1 ] reg byte x [ main::j#3 main::j#2 ]
|
||||
Uplifting [] best 478 combination
|
||||
|
||||
ASSEMBLER BEFORE OPTIMIZATION
|
||||
@ -321,21 +325,21 @@ main: {
|
||||
bne b1_from_b1
|
||||
//SEG19 [9] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
|
||||
b2_from_b1:
|
||||
//SEG20 [9] phi (byte) main::j#2 = (byte/signed byte/word/signed word/dword/signed dword) 100 [phi:main::@1->main::@2#0] -- vbuxx=vbuc1
|
||||
//SEG20 [9] phi (byte) main::j#3 = (byte/signed byte/word/signed word/dword/signed dword) 100 [phi:main::@1->main::@2#0] -- vbuxx=vbuc1
|
||||
ldx #$64
|
||||
jmp b2
|
||||
//SEG21 [9] phi from main::@2 to main::@2 [phi:main::@2->main::@2]
|
||||
b2_from_b2:
|
||||
//SEG22 [9] phi (byte) main::j#2 = (byte) main::j#1 [phi:main::@2->main::@2#0] -- register_copy
|
||||
//SEG22 [9] phi (byte) main::j#3 = (byte) main::j#2 [phi:main::@2->main::@2#0] -- register_copy
|
||||
jmp b2
|
||||
//SEG23 main::@2
|
||||
b2:
|
||||
//SEG24 [10] *((const byte*) SCREEN2#0 + (byte) main::j#2) ← (byte) main::j#2 -- pbuc1_derefidx_vbuxx=vbuxx
|
||||
//SEG24 [10] *((const byte*) SCREEN2#0 + (byte) main::j#3) ← (byte) main::j#3 -- pbuc1_derefidx_vbuxx=vbuxx
|
||||
txa
|
||||
sta SCREEN2,x
|
||||
//SEG25 [11] (byte) main::j#1 ← -- (byte) main::j#2 -- vbuxx=_dec_vbuxx
|
||||
//SEG25 [11] (byte) main::j#2 ← -- (byte) main::j#3 -- vbuxx=_dec_vbuxx
|
||||
dex
|
||||
//SEG26 [12] if((byte) main::j#1!=(byte/word/signed word/dword/signed dword) 255) goto main::@2 -- vbuxx_neq_vbuc1_then_la1
|
||||
//SEG26 [12] if((byte) main::j#2!=(byte/word/signed word/dword/signed dword) 255) goto main::@2 -- vbuxx_neq_vbuc1_then_la1
|
||||
cpx #$ff
|
||||
bne b2_from_b2
|
||||
jmp breturn
|
||||
@ -391,11 +395,11 @@ FINAL SYMBOL TABLE
|
||||
(byte) main::i#1 reg byte x 16.5
|
||||
(byte) main::i#2 reg byte x 22.0
|
||||
(byte) main::j
|
||||
(byte) main::j#1 reg byte x 16.5
|
||||
(byte) main::j#2 reg byte x 22.0
|
||||
(byte) main::j#2 reg byte x 16.5
|
||||
(byte) main::j#3 reg byte x 22.0
|
||||
|
||||
reg byte x [ main::i#2 main::i#1 ]
|
||||
reg byte x [ main::j#2 main::j#1 ]
|
||||
reg byte x [ main::j#3 main::j#2 ]
|
||||
|
||||
|
||||
FINAL ASSEMBLER
|
||||
@ -435,18 +439,18 @@ main: {
|
||||
cpx #0
|
||||
bne b1
|
||||
//SEG19 [9] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
|
||||
//SEG20 [9] phi (byte) main::j#2 = (byte/signed byte/word/signed word/dword/signed dword) 100 [phi:main::@1->main::@2#0] -- vbuxx=vbuc1
|
||||
//SEG20 [9] phi (byte) main::j#3 = (byte/signed byte/word/signed word/dword/signed dword) 100 [phi:main::@1->main::@2#0] -- vbuxx=vbuc1
|
||||
ldx #$64
|
||||
//SEG21 [9] phi from main::@2 to main::@2 [phi:main::@2->main::@2]
|
||||
//SEG22 [9] phi (byte) main::j#2 = (byte) main::j#1 [phi:main::@2->main::@2#0] -- register_copy
|
||||
//SEG22 [9] phi (byte) main::j#3 = (byte) main::j#2 [phi:main::@2->main::@2#0] -- register_copy
|
||||
//SEG23 main::@2
|
||||
b2:
|
||||
//SEG24 [10] *((const byte*) SCREEN2#0 + (byte) main::j#2) ← (byte) main::j#2 -- pbuc1_derefidx_vbuxx=vbuxx
|
||||
//SEG24 [10] *((const byte*) SCREEN2#0 + (byte) main::j#3) ← (byte) main::j#3 -- pbuc1_derefidx_vbuxx=vbuxx
|
||||
txa
|
||||
sta SCREEN2,x
|
||||
//SEG25 [11] (byte) main::j#1 ← -- (byte) main::j#2 -- vbuxx=_dec_vbuxx
|
||||
//SEG25 [11] (byte) main::j#2 ← -- (byte) main::j#3 -- vbuxx=_dec_vbuxx
|
||||
dex
|
||||
//SEG26 [12] if((byte) main::j#1!=(byte/word/signed word/dword/signed dword) 255) goto main::@2 -- vbuxx_neq_vbuc1_then_la1
|
||||
//SEG26 [12] if((byte) main::j#2!=(byte/word/signed word/dword/signed dword) 255) goto main::@2 -- vbuxx_neq_vbuc1_then_la1
|
||||
cpx #$ff
|
||||
bne b2
|
||||
//SEG27 main::@return
|
||||
|
@ -13,8 +13,8 @@
|
||||
(byte) main::i#1 reg byte x 16.5
|
||||
(byte) main::i#2 reg byte x 22.0
|
||||
(byte) main::j
|
||||
(byte) main::j#1 reg byte x 16.5
|
||||
(byte) main::j#2 reg byte x 22.0
|
||||
(byte) main::j#2 reg byte x 16.5
|
||||
(byte) main::j#3 reg byte x 22.0
|
||||
|
||||
reg byte x [ main::i#2 main::i#1 ]
|
||||
reg byte x [ main::j#2 main::j#1 ]
|
||||
reg byte x [ main::j#3 main::j#2 ]
|
||||
|
@ -11,10 +11,10 @@ main: scope:[main] from @1
|
||||
[4] phi()
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
[5] (byte) main::a#0 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@1/(byte) main::i#1 )
|
||||
[6] *((const byte*) SCREEN#0 + (byte) main::a#0) ← (byte) main::a#0
|
||||
[7] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 80 + (byte) main::a#0) ← (byte) main::a#0
|
||||
[8] (byte) main::i#1 ← ++ (byte) main::a#0
|
||||
[5] (byte) main::a#1 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@1/(byte) main::i#1 )
|
||||
[6] *((const byte*) SCREEN#0 + (byte) main::a#1) ← (byte) main::a#1
|
||||
[7] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 80 + (byte) main::a#1) ← (byte) main::a#1
|
||||
[8] (byte) main::i#1 ← ++ (byte) main::a#1
|
||||
[9] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
|
@ -4,14 +4,15 @@ CONTROL FLOW GRAPH SSA
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
(byte) main::a#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
(byte) main::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 )
|
||||
(byte) main::a#0 ← (byte) main::i#2
|
||||
*((byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::a#0
|
||||
(byte) main::a#1 ← (byte) main::i#2
|
||||
*((byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::a#1
|
||||
(byte*~) main::$0 ← (byte*) SCREEN#0 + (byte/signed byte/word/signed word/dword/signed dword) 80
|
||||
*((byte*~) main::$0 + (byte) main::i#2) ← (byte) main::a#0
|
||||
*((byte*~) main::$0 + (byte) main::i#2) ← (byte) main::a#1
|
||||
(byte) main::i#1 ← (byte) main::i#2 + rangenext(0,39)
|
||||
(bool~) main::$1 ← (byte) main::i#1 != rangelast(0,39)
|
||||
if((bool~) main::$1) goto main::@1
|
||||
@ -40,6 +41,7 @@ SYMBOL TABLE SSA
|
||||
(label) main::@return
|
||||
(byte) main::a
|
||||
(byte) main::a#0
|
||||
(byte) main::a#1
|
||||
(byte) main::i
|
||||
(byte) main::i#0
|
||||
(byte) main::i#1
|
||||
@ -47,16 +49,18 @@ SYMBOL TABLE SSA
|
||||
|
||||
Culled Empty Block (label) @2
|
||||
Successful SSA optimization Pass2CullEmptyBlocks
|
||||
Alias (byte) main::a#0 = (byte) main::i#2
|
||||
Alias (byte) main::a#1 = (byte) main::i#2
|
||||
Successful SSA optimization Pass2AliasElimination
|
||||
Simple Condition (bool~) main::$1 [9] if((byte) main::i#1!=rangelast(0,39)) goto main::@1
|
||||
Simple Condition (bool~) main::$1 [10] if((byte) main::i#1!=rangelast(0,39)) goto main::@1
|
||||
Successful SSA optimization Pass2ConditionalJumpSimplification
|
||||
Constant (const byte*) SCREEN#0 = ((byte*))1024
|
||||
Constant (const byte) main::a#0 = 0
|
||||
Constant (const byte) main::i#0 = 0
|
||||
Successful SSA optimization Pass2ConstantIdentification
|
||||
Constant (const byte*) main::$0 = SCREEN#0+80
|
||||
Successful SSA optimization Pass2ConstantIdentification
|
||||
Resolved ranged next value main::i#1 ← ++ main::a#0 to ++
|
||||
Successful SSA optimization PassNEliminateUnusedVars
|
||||
Resolved ranged next value main::i#1 ← ++ main::a#1 to ++
|
||||
Resolved ranged comparison value if(main::i#1!=rangelast(0,39)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 40
|
||||
Inlining constant with var siblings (const byte) main::i#0
|
||||
Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
@ -71,7 +75,7 @@ CALL GRAPH
|
||||
Calls in [] to main:2
|
||||
|
||||
Created 1 initial phi equivalence classes
|
||||
Coalesced [11] main::a#1 ← main::i#1
|
||||
Coalesced [11] main::a#2 ← main::i#1
|
||||
Coalesced down to 1 phi equivalence classes
|
||||
Culled Empty Block (label) main::@3
|
||||
Adding NOP phi() at start of @begin
|
||||
@ -93,10 +97,10 @@ main: scope:[main] from @1
|
||||
[4] phi()
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
[5] (byte) main::a#0 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@1/(byte) main::i#1 )
|
||||
[6] *((const byte*) SCREEN#0 + (byte) main::a#0) ← (byte) main::a#0
|
||||
[7] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 80 + (byte) main::a#0) ← (byte) main::a#0
|
||||
[8] (byte) main::i#1 ← ++ (byte) main::a#0
|
||||
[5] (byte) main::a#1 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@1/(byte) main::i#1 )
|
||||
[6] *((const byte*) SCREEN#0 + (byte) main::a#1) ← (byte) main::a#1
|
||||
[7] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 80 + (byte) main::a#1) ← (byte) main::a#1
|
||||
[8] (byte) main::i#1 ← ++ (byte) main::a#1
|
||||
[9] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
@ -108,15 +112,15 @@ VARIABLE REGISTER WEIGHTS
|
||||
(byte*) SCREEN
|
||||
(void()) main()
|
||||
(byte) main::a
|
||||
(byte) main::a#0 22.0
|
||||
(byte) main::a#1 22.0
|
||||
(byte) main::i
|
||||
(byte) main::i#1 16.5
|
||||
|
||||
Initial phi equivalence classes
|
||||
[ main::a#0 main::i#1 ]
|
||||
[ main::a#1 main::i#1 ]
|
||||
Complete equivalence classes
|
||||
[ main::a#0 main::i#1 ]
|
||||
Allocated zp ZP_BYTE:2 [ main::a#0 main::i#1 ]
|
||||
[ main::a#1 main::i#1 ]
|
||||
Allocated zp ZP_BYTE:2 [ main::a#1 main::i#1 ]
|
||||
|
||||
INITIAL ASM
|
||||
//SEG0 File Comments
|
||||
@ -148,25 +152,25 @@ main: {
|
||||
.label i = 2
|
||||
//SEG11 [5] phi from main to main::@1 [phi:main->main::@1]
|
||||
b1_from_main:
|
||||
//SEG12 [5] phi (byte) main::a#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1
|
||||
//SEG12 [5] phi (byte) main::a#1 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1
|
||||
lda #0
|
||||
sta a
|
||||
jmp b1
|
||||
//SEG13 [5] phi from main::@1 to main::@1 [phi:main::@1->main::@1]
|
||||
b1_from_b1:
|
||||
//SEG14 [5] phi (byte) main::a#0 = (byte) main::i#1 [phi:main::@1->main::@1#0] -- register_copy
|
||||
//SEG14 [5] phi (byte) main::a#1 = (byte) main::i#1 [phi:main::@1->main::@1#0] -- register_copy
|
||||
jmp b1
|
||||
//SEG15 main::@1
|
||||
b1:
|
||||
//SEG16 [6] *((const byte*) SCREEN#0 + (byte) main::a#0) ← (byte) main::a#0 -- pbuc1_derefidx_vbuz1=vbuz1
|
||||
//SEG16 [6] *((const byte*) SCREEN#0 + (byte) main::a#1) ← (byte) main::a#1 -- pbuc1_derefidx_vbuz1=vbuz1
|
||||
ldy a
|
||||
tya
|
||||
sta SCREEN,y
|
||||
//SEG17 [7] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 80 + (byte) main::a#0) ← (byte) main::a#0 -- pbuc1_derefidx_vbuz1=vbuz1
|
||||
//SEG17 [7] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 80 + (byte) main::a#1) ← (byte) main::a#1 -- pbuc1_derefidx_vbuz1=vbuz1
|
||||
ldy a
|
||||
tya
|
||||
sta SCREEN+$50,y
|
||||
//SEG18 [8] (byte) main::i#1 ← ++ (byte) main::a#0 -- vbuz1=_inc_vbuz1
|
||||
//SEG18 [8] (byte) main::i#1 ← ++ (byte) main::a#1 -- vbuz1=_inc_vbuz1
|
||||
inc i
|
||||
//SEG19 [9] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto main::@1 -- vbuz1_neq_vbuc1_then_la1
|
||||
lda i
|
||||
@ -180,13 +184,13 @@ main: {
|
||||
}
|
||||
|
||||
REGISTER UPLIFT POTENTIAL REGISTERS
|
||||
Potential registers zp ZP_BYTE:2 [ main::a#0 main::i#1 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:2 [ main::a#1 main::i#1 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y ,
|
||||
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [main] 38.5: zp ZP_BYTE:2 [ main::a#0 main::i#1 ]
|
||||
Uplift Scope [main] 38.5: zp ZP_BYTE:2 [ main::a#1 main::i#1 ]
|
||||
Uplift Scope []
|
||||
|
||||
Uplifting [main] best 333 combination reg byte x [ main::a#0 main::i#1 ]
|
||||
Uplifting [main] best 333 combination reg byte x [ main::a#1 main::i#1 ]
|
||||
Uplifting [] best 333 combination
|
||||
|
||||
ASSEMBLER BEFORE OPTIMIZATION
|
||||
@ -217,22 +221,22 @@ bend:
|
||||
main: {
|
||||
//SEG11 [5] phi from main to main::@1 [phi:main->main::@1]
|
||||
b1_from_main:
|
||||
//SEG12 [5] phi (byte) main::a#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1
|
||||
//SEG12 [5] phi (byte) main::a#1 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1
|
||||
ldx #0
|
||||
jmp b1
|
||||
//SEG13 [5] phi from main::@1 to main::@1 [phi:main::@1->main::@1]
|
||||
b1_from_b1:
|
||||
//SEG14 [5] phi (byte) main::a#0 = (byte) main::i#1 [phi:main::@1->main::@1#0] -- register_copy
|
||||
//SEG14 [5] phi (byte) main::a#1 = (byte) main::i#1 [phi:main::@1->main::@1#0] -- register_copy
|
||||
jmp b1
|
||||
//SEG15 main::@1
|
||||
b1:
|
||||
//SEG16 [6] *((const byte*) SCREEN#0 + (byte) main::a#0) ← (byte) main::a#0 -- pbuc1_derefidx_vbuxx=vbuxx
|
||||
//SEG16 [6] *((const byte*) SCREEN#0 + (byte) main::a#1) ← (byte) main::a#1 -- pbuc1_derefidx_vbuxx=vbuxx
|
||||
txa
|
||||
sta SCREEN,x
|
||||
//SEG17 [7] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 80 + (byte) main::a#0) ← (byte) main::a#0 -- pbuc1_derefidx_vbuxx=vbuxx
|
||||
//SEG17 [7] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 80 + (byte) main::a#1) ← (byte) main::a#1 -- pbuc1_derefidx_vbuxx=vbuxx
|
||||
txa
|
||||
sta SCREEN+$50,x
|
||||
//SEG18 [8] (byte) main::i#1 ← ++ (byte) main::a#0 -- vbuxx=_inc_vbuxx
|
||||
//SEG18 [8] (byte) main::i#1 ← ++ (byte) main::a#1 -- vbuxx=_inc_vbuxx
|
||||
inx
|
||||
//SEG19 [9] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto main::@1 -- vbuxx_neq_vbuc1_then_la1
|
||||
cpx #$28
|
||||
@ -279,11 +283,11 @@ FINAL SYMBOL TABLE
|
||||
(label) main::@1
|
||||
(label) main::@return
|
||||
(byte) main::a
|
||||
(byte) main::a#0 reg byte x 22.0
|
||||
(byte) main::a#1 reg byte x 22.0
|
||||
(byte) main::i
|
||||
(byte) main::i#1 reg byte x 16.5
|
||||
|
||||
reg byte x [ main::a#0 main::i#1 ]
|
||||
reg byte x [ main::a#1 main::i#1 ]
|
||||
|
||||
|
||||
FINAL ASSEMBLER
|
||||
@ -306,19 +310,19 @@ Score: 231
|
||||
//SEG10 main
|
||||
main: {
|
||||
//SEG11 [5] phi from main to main::@1 [phi:main->main::@1]
|
||||
//SEG12 [5] phi (byte) main::a#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1
|
||||
//SEG12 [5] phi (byte) main::a#1 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1
|
||||
ldx #0
|
||||
//SEG13 [5] phi from main::@1 to main::@1 [phi:main::@1->main::@1]
|
||||
//SEG14 [5] phi (byte) main::a#0 = (byte) main::i#1 [phi:main::@1->main::@1#0] -- register_copy
|
||||
//SEG14 [5] phi (byte) main::a#1 = (byte) main::i#1 [phi:main::@1->main::@1#0] -- register_copy
|
||||
//SEG15 main::@1
|
||||
b1:
|
||||
//SEG16 [6] *((const byte*) SCREEN#0 + (byte) main::a#0) ← (byte) main::a#0 -- pbuc1_derefidx_vbuxx=vbuxx
|
||||
//SEG16 [6] *((const byte*) SCREEN#0 + (byte) main::a#1) ← (byte) main::a#1 -- pbuc1_derefidx_vbuxx=vbuxx
|
||||
txa
|
||||
sta SCREEN,x
|
||||
//SEG17 [7] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 80 + (byte) main::a#0) ← (byte) main::a#0 -- pbuc1_derefidx_vbuxx=vbuxx
|
||||
//SEG17 [7] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 80 + (byte) main::a#1) ← (byte) main::a#1 -- pbuc1_derefidx_vbuxx=vbuxx
|
||||
txa
|
||||
sta SCREEN+$50,x
|
||||
//SEG18 [8] (byte) main::i#1 ← ++ (byte) main::a#0 -- vbuxx=_inc_vbuxx
|
||||
//SEG18 [8] (byte) main::i#1 ← ++ (byte) main::a#1 -- vbuxx=_inc_vbuxx
|
||||
inx
|
||||
//SEG19 [9] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto main::@1 -- vbuxx_neq_vbuc1_then_la1
|
||||
cpx #$28
|
||||
|
@ -7,8 +7,8 @@
|
||||
(label) main::@1
|
||||
(label) main::@return
|
||||
(byte) main::a
|
||||
(byte) main::a#0 reg byte x 22.0
|
||||
(byte) main::a#1 reg byte x 22.0
|
||||
(byte) main::i
|
||||
(byte) main::i#1 reg byte x 16.5
|
||||
|
||||
reg byte x [ main::a#0 main::i#1 ]
|
||||
reg byte x [ main::a#1 main::i#1 ]
|
||||
|
@ -19,21 +19,21 @@ print_msg: {
|
||||
.label msg = 4
|
||||
cpx #1
|
||||
beq b1
|
||||
lda #<msg_2
|
||||
sta msg
|
||||
lda #>msg_2
|
||||
sta msg+1
|
||||
jmp b2
|
||||
b1:
|
||||
lda #<msg_1
|
||||
sta msg
|
||||
lda #>msg_1
|
||||
sta msg+1
|
||||
jmp b2
|
||||
b1:
|
||||
lda #<msg_0
|
||||
sta msg
|
||||
lda #>msg_0
|
||||
sta msg+1
|
||||
b2:
|
||||
jsr print
|
||||
rts
|
||||
msg_0: .text "Hello @"
|
||||
msg_1: .text "World!@"
|
||||
msg_1: .text "Hello @"
|
||||
msg_2: .text "World!@"
|
||||
}
|
||||
// print(byte* zeropage(4) msg)
|
||||
print: {
|
||||
|
@ -27,8 +27,8 @@ print_msg::@3: scope:[print_msg] from print_msg
|
||||
[11] phi()
|
||||
to:print_msg::@2
|
||||
print_msg::@2: scope:[print_msg] from print_msg print_msg::@3
|
||||
[12] (byte*) print_msg::msg#2 ← phi( print_msg/(const byte*) print_msg::msg#0 print_msg::@3/(const byte*) print_msg::msg#1 )
|
||||
[13] (byte*) print::msg#0 ← (byte*) print_msg::msg#2
|
||||
[12] (byte*) print_msg::msg#3 ← phi( print_msg/(const byte*) print_msg::msg#1 print_msg::@3/(const byte*) print_msg::msg#2 )
|
||||
[13] (byte*) print::msg#0 ← (byte*) print_msg::msg#3
|
||||
[14] call print
|
||||
to:print_msg::@return
|
||||
print_msg::@return: scope:[print_msg] from print_msg::@2
|
||||
|
@ -25,21 +25,22 @@ main::@return: scope:[main] from main::@2
|
||||
print_msg: scope:[print_msg] from main main::@1
|
||||
(byte*) screen#24 ← phi( main/(byte*) screen#17 main::@1/(byte*) screen#0 )
|
||||
(byte) print_msg::idx#2 ← phi( main/(byte) print_msg::idx#0 main::@1/(byte) print_msg::idx#1 )
|
||||
(byte*) print_msg::msg#0 ← (byte*) 0
|
||||
(bool~) print_msg::$0 ← (byte) print_msg::idx#2 == (byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
if((bool~) print_msg::$0) goto print_msg::@1
|
||||
to:print_msg::@3
|
||||
print_msg::@1: scope:[print_msg] from print_msg
|
||||
(byte*) screen#21 ← phi( print_msg/(byte*) screen#24 )
|
||||
(byte*) print_msg::msg#0 ← (const string) print_msg::$2
|
||||
(byte*) print_msg::msg#1 ← (const string) print_msg::$2
|
||||
to:print_msg::@2
|
||||
print_msg::@3: scope:[print_msg] from print_msg
|
||||
(byte*) screen#22 ← phi( print_msg/(byte*) screen#24 )
|
||||
(byte*) print_msg::msg#1 ← (const string) print_msg::$3
|
||||
(byte*) print_msg::msg#2 ← (const string) print_msg::$3
|
||||
to:print_msg::@2
|
||||
print_msg::@2: scope:[print_msg] from print_msg::@1 print_msg::@3
|
||||
(byte*) screen#18 ← phi( print_msg::@1/(byte*) screen#21 print_msg::@3/(byte*) screen#22 )
|
||||
(byte*) print_msg::msg#2 ← phi( print_msg::@1/(byte*) print_msg::msg#0 print_msg::@3/(byte*) print_msg::msg#1 )
|
||||
(byte*) print::msg#0 ← (byte*) print_msg::msg#2
|
||||
(byte*) print_msg::msg#3 ← phi( print_msg::@1/(byte*) print_msg::msg#1 print_msg::@3/(byte*) print_msg::msg#2 )
|
||||
(byte*) print::msg#0 ← (byte*) print_msg::msg#3
|
||||
call print
|
||||
to:print_msg::@5
|
||||
print_msg::@5: scope:[print_msg] from print_msg::@2
|
||||
@ -124,6 +125,7 @@ SYMBOL TABLE SSA
|
||||
(byte*) print_msg::msg#0
|
||||
(byte*) print_msg::msg#1
|
||||
(byte*) print_msg::msg#2
|
||||
(byte*) print_msg::msg#3
|
||||
(byte*) screen
|
||||
(byte*) screen#0
|
||||
(byte*) screen#1
|
||||
@ -170,15 +172,17 @@ Redundant Phi (byte*) print::msg#4 (byte*) print::msg#0
|
||||
Redundant Phi (byte*) screen#23 (byte*) screen#18
|
||||
Redundant Phi (byte*) screen#16 (byte*) screen#1
|
||||
Successful SSA optimization Pass2RedundantPhiElimination
|
||||
Simple Condition (bool~) print_msg::$0 [14] if((byte) print_msg::idx#2==(byte/signed byte/word/signed word/dword/signed dword) 1) goto print_msg::@1
|
||||
Simple Condition (bool~) print::$0 [31] if(*((byte*) print::msg#2)!=(byte) '@') goto print::@2
|
||||
Simple Condition (bool~) print_msg::$0 [15] if((byte) print_msg::idx#2==(byte/signed byte/word/signed word/dword/signed dword) 1) goto print_msg::@1
|
||||
Simple Condition (bool~) print::$0 [32] if(*((byte*) print::msg#2)!=(byte) '@') goto print::@2
|
||||
Successful SSA optimization Pass2ConditionalJumpSimplification
|
||||
Constant (const byte) print_msg::idx#0 = 1
|
||||
Constant (const byte) print_msg::idx#1 = 2
|
||||
Constant (const byte*) print_msg::msg#0 = print_msg::$2
|
||||
Constant (const byte*) print_msg::msg#1 = print_msg::$3
|
||||
Constant (const byte*) print_msg::msg#0 = 0
|
||||
Constant (const byte*) print_msg::msg#1 = print_msg::$2
|
||||
Constant (const byte*) print_msg::msg#2 = print_msg::$3
|
||||
Constant (const byte*) screen#20 = ((byte*))1024
|
||||
Successful SSA optimization Pass2ConstantIdentification
|
||||
Successful SSA optimization PassNEliminateUnusedVars
|
||||
Culled Empty Block (label) main::@2
|
||||
Culled Empty Block (label) print_msg::@1
|
||||
Culled Empty Block (label) print_msg::@5
|
||||
@ -187,19 +191,19 @@ Culled Empty Block (label) @4
|
||||
Successful SSA optimization Pass2CullEmptyBlocks
|
||||
Inlining constant with var siblings (const byte) print_msg::idx#0
|
||||
Inlining constant with var siblings (const byte) print_msg::idx#1
|
||||
Inlining constant with var siblings (const byte*) print_msg::msg#0
|
||||
Inlining constant with var siblings (const byte*) print_msg::msg#1
|
||||
Inlining constant with var siblings (const byte*) print_msg::msg#2
|
||||
Inlining constant with var siblings (const byte*) screen#20
|
||||
Constant inlined print_msg::idx#1 = (byte/signed byte/word/signed word/dword/signed dword) 2
|
||||
Constant inlined print_msg::idx#0 = (byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
Constant inlined screen#20 = ((byte*))(word/signed word/dword/signed dword) 1024
|
||||
Constant inlined print_msg::$3 = (const byte*) print_msg::msg#1
|
||||
Constant inlined print_msg::$2 = (const byte*) print_msg::msg#0
|
||||
Constant inlined print_msg::$3 = (const byte*) print_msg::msg#2
|
||||
Constant inlined print_msg::$2 = (const byte*) print_msg::msg#1
|
||||
Successful SSA optimization Pass2ConstantInlining
|
||||
Inlining constant with var siblings (const byte*) print_msg::msg#0
|
||||
Inlining constant with var siblings (const byte*) print_msg::msg#1
|
||||
Inlining constant with var siblings (const byte*) print_msg::msg#0
|
||||
Inlining constant with var siblings (const byte*) print_msg::msg#2
|
||||
Inlining constant with var siblings (const byte*) print_msg::msg#1
|
||||
Inlining constant with var siblings (const byte*) print_msg::msg#2
|
||||
Adding NOP phi() at start of @begin
|
||||
Adding NOP phi() at start of @3
|
||||
Adding NOP phi() at start of @end
|
||||
@ -255,8 +259,8 @@ print_msg::@3: scope:[print_msg] from print_msg
|
||||
[11] phi()
|
||||
to:print_msg::@2
|
||||
print_msg::@2: scope:[print_msg] from print_msg print_msg::@3
|
||||
[12] (byte*) print_msg::msg#2 ← phi( print_msg/(const byte*) print_msg::msg#0 print_msg::@3/(const byte*) print_msg::msg#1 )
|
||||
[13] (byte*) print::msg#0 ← (byte*) print_msg::msg#2
|
||||
[12] (byte*) print_msg::msg#3 ← phi( print_msg/(const byte*) print_msg::msg#1 print_msg::@3/(const byte*) print_msg::msg#2 )
|
||||
[13] (byte*) print::msg#0 ← (byte*) print_msg::msg#3
|
||||
[14] call print
|
||||
to:print_msg::@return
|
||||
print_msg::@return: scope:[print_msg] from print_msg::@2
|
||||
@ -291,7 +295,7 @@ VARIABLE REGISTER WEIGHTS
|
||||
(byte) print_msg::idx
|
||||
(byte) print_msg::idx#2 2.0
|
||||
(byte*) print_msg::msg
|
||||
(byte*) print_msg::msg#2 2.0
|
||||
(byte*) print_msg::msg#3 2.0
|
||||
(byte*) screen
|
||||
(byte*) screen#14 4.625
|
||||
(byte*) screen#18 0.6666666666666666
|
||||
@ -300,16 +304,16 @@ VARIABLE REGISTER WEIGHTS
|
||||
Initial phi equivalence classes
|
||||
[ print_msg::idx#2 ]
|
||||
[ screen#18 screen#14 screen#6 ]
|
||||
[ print_msg::msg#2 ]
|
||||
[ print_msg::msg#3 ]
|
||||
[ print::msg#2 print::msg#0 print::msg#1 ]
|
||||
Complete equivalence classes
|
||||
[ print_msg::idx#2 ]
|
||||
[ screen#18 screen#14 screen#6 ]
|
||||
[ print_msg::msg#2 ]
|
||||
[ print_msg::msg#3 ]
|
||||
[ print::msg#2 print::msg#0 print::msg#1 ]
|
||||
Allocated zp ZP_BYTE:2 [ print_msg::idx#2 ]
|
||||
Allocated zp ZP_WORD:3 [ screen#18 screen#14 screen#6 ]
|
||||
Allocated zp ZP_WORD:5 [ print_msg::msg#2 ]
|
||||
Allocated zp ZP_WORD:5 [ print_msg::msg#3 ]
|
||||
Allocated zp ZP_WORD:7 [ print::msg#2 print::msg#0 print::msg#1 ]
|
||||
|
||||
INITIAL ASM
|
||||
@ -386,23 +390,23 @@ print_msg: {
|
||||
b3:
|
||||
//SEG27 [12] phi from print_msg::@3 to print_msg::@2 [phi:print_msg::@3->print_msg::@2]
|
||||
b2_from_b3:
|
||||
//SEG28 [12] phi (byte*) print_msg::msg#2 = (const byte*) print_msg::msg#1 [phi:print_msg::@3->print_msg::@2#0] -- pbuz1=pbuc1
|
||||
//SEG28 [12] phi (byte*) print_msg::msg#3 = (const byte*) print_msg::msg#2 [phi:print_msg::@3->print_msg::@2#0] -- pbuz1=pbuc1
|
||||
lda #<msg_2
|
||||
sta msg
|
||||
lda #>msg_2
|
||||
sta msg+1
|
||||
jmp b2
|
||||
//SEG29 [12] phi from print_msg to print_msg::@2 [phi:print_msg->print_msg::@2]
|
||||
b2_from_print_msg:
|
||||
//SEG30 [12] phi (byte*) print_msg::msg#3 = (const byte*) print_msg::msg#1 [phi:print_msg->print_msg::@2#0] -- pbuz1=pbuc1
|
||||
lda #<msg_1
|
||||
sta msg
|
||||
lda #>msg_1
|
||||
sta msg+1
|
||||
jmp b2
|
||||
//SEG29 [12] phi from print_msg to print_msg::@2 [phi:print_msg->print_msg::@2]
|
||||
b2_from_print_msg:
|
||||
//SEG30 [12] phi (byte*) print_msg::msg#2 = (const byte*) print_msg::msg#0 [phi:print_msg->print_msg::@2#0] -- pbuz1=pbuc1
|
||||
lda #<msg_0
|
||||
sta msg
|
||||
lda #>msg_0
|
||||
sta msg+1
|
||||
jmp b2
|
||||
//SEG31 print_msg::@2
|
||||
b2:
|
||||
//SEG32 [13] (byte*) print::msg#0 ← (byte*) print_msg::msg#2 -- pbuz1=pbuz2
|
||||
//SEG32 [13] (byte*) print::msg#0 ← (byte*) print_msg::msg#3 -- pbuz1=pbuz2
|
||||
lda msg
|
||||
sta print.msg
|
||||
lda msg+1
|
||||
@ -416,8 +420,8 @@ print_msg: {
|
||||
breturn:
|
||||
//SEG36 [15] return
|
||||
rts
|
||||
msg_0: .text "Hello @"
|
||||
msg_1: .text "World!@"
|
||||
msg_1: .text "Hello @"
|
||||
msg_2: .text "World!@"
|
||||
}
|
||||
//SEG37 print
|
||||
// print(byte* zeropage(7) msg)
|
||||
@ -462,27 +466,27 @@ print: {
|
||||
}
|
||||
|
||||
REGISTER UPLIFT POTENTIAL REGISTERS
|
||||
Statement [13] (byte*) print::msg#0 ← (byte*) print_msg::msg#2 [ screen#18 print::msg#0 ] ( main:2::print_msg:5 [ screen#18 print::msg#0 ] main:2::print_msg:7 [ screen#18 print::msg#0 ] ) always clobbers reg byte a
|
||||
Statement [13] (byte*) print::msg#0 ← (byte*) print_msg::msg#3 [ screen#18 print::msg#0 ] ( main:2::print_msg:5 [ screen#18 print::msg#0 ] main:2::print_msg:7 [ screen#18 print::msg#0 ] ) always clobbers reg byte a
|
||||
Statement [18] if(*((byte*) print::msg#2)!=(byte) '@') goto print::@2 [ screen#14 print::msg#2 ] ( main:2::print_msg:5::print:14 [ screen#14 print::msg#2 ] main:2::print_msg:7::print:14 [ screen#14 print::msg#2 ] ) always clobbers reg byte a reg byte y
|
||||
Statement [20] *((byte*) screen#14) ← *((byte*) print::msg#2) [ screen#14 print::msg#2 ] ( main:2::print_msg:5::print:14 [ screen#14 print::msg#2 ] main:2::print_msg:7::print:14 [ screen#14 print::msg#2 ] ) always clobbers reg byte a reg byte y
|
||||
Potential registers zp ZP_BYTE:2 [ print_msg::idx#2 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_WORD:3 [ screen#18 screen#14 screen#6 ] : zp ZP_WORD:3 ,
|
||||
Potential registers zp ZP_WORD:5 [ print_msg::msg#2 ] : zp ZP_WORD:5 ,
|
||||
Potential registers zp ZP_WORD:5 [ print_msg::msg#3 ] : zp ZP_WORD:5 ,
|
||||
Potential registers zp ZP_WORD:7 [ print::msg#2 print::msg#0 print::msg#1 ] : zp ZP_WORD:7 ,
|
||||
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [print] 35.5: zp ZP_WORD:7 [ print::msg#2 print::msg#0 print::msg#1 ]
|
||||
Uplift Scope [] 16.29: zp ZP_WORD:3 [ screen#18 screen#14 screen#6 ]
|
||||
Uplift Scope [print_msg] 2: zp ZP_BYTE:2 [ print_msg::idx#2 ] 2: zp ZP_WORD:5 [ print_msg::msg#2 ]
|
||||
Uplift Scope [print_msg] 2: zp ZP_BYTE:2 [ print_msg::idx#2 ] 2: zp ZP_WORD:5 [ print_msg::msg#3 ]
|
||||
Uplift Scope [main]
|
||||
|
||||
Uplifting [print] best 740 combination zp ZP_WORD:7 [ print::msg#2 print::msg#0 print::msg#1 ]
|
||||
Uplifting [] best 740 combination zp ZP_WORD:3 [ screen#18 screen#14 screen#6 ]
|
||||
Uplifting [print_msg] best 731 combination reg byte x [ print_msg::idx#2 ] zp ZP_WORD:5 [ print_msg::msg#2 ]
|
||||
Uplifting [print_msg] best 731 combination reg byte x [ print_msg::idx#2 ] zp ZP_WORD:5 [ print_msg::msg#3 ]
|
||||
Uplifting [main] best 731 combination
|
||||
Coalescing zero page register with common assignment [ zp ZP_WORD:5 [ print_msg::msg#2 ] ] with [ zp ZP_WORD:7 [ print::msg#2 print::msg#0 print::msg#1 ] ] - score: 1
|
||||
Coalescing zero page register with common assignment [ zp ZP_WORD:5 [ print_msg::msg#3 ] ] with [ zp ZP_WORD:7 [ print::msg#2 print::msg#0 print::msg#1 ] ] - score: 1
|
||||
Allocated (was zp ZP_WORD:3) zp ZP_WORD:2 [ screen#18 screen#14 screen#6 ]
|
||||
Allocated (was zp ZP_WORD:5) zp ZP_WORD:4 [ print_msg::msg#2 print::msg#2 print::msg#0 print::msg#1 ]
|
||||
Allocated (was zp ZP_WORD:5) zp ZP_WORD:4 [ print_msg::msg#3 print::msg#2 print::msg#0 print::msg#1 ]
|
||||
|
||||
ASSEMBLER BEFORE OPTIMIZATION
|
||||
//SEG0 File Comments
|
||||
@ -554,23 +558,23 @@ print_msg: {
|
||||
b3:
|
||||
//SEG27 [12] phi from print_msg::@3 to print_msg::@2 [phi:print_msg::@3->print_msg::@2]
|
||||
b2_from_b3:
|
||||
//SEG28 [12] phi (byte*) print_msg::msg#2 = (const byte*) print_msg::msg#1 [phi:print_msg::@3->print_msg::@2#0] -- pbuz1=pbuc1
|
||||
//SEG28 [12] phi (byte*) print_msg::msg#3 = (const byte*) print_msg::msg#2 [phi:print_msg::@3->print_msg::@2#0] -- pbuz1=pbuc1
|
||||
lda #<msg_2
|
||||
sta msg
|
||||
lda #>msg_2
|
||||
sta msg+1
|
||||
jmp b2
|
||||
//SEG29 [12] phi from print_msg to print_msg::@2 [phi:print_msg->print_msg::@2]
|
||||
b2_from_print_msg:
|
||||
//SEG30 [12] phi (byte*) print_msg::msg#3 = (const byte*) print_msg::msg#1 [phi:print_msg->print_msg::@2#0] -- pbuz1=pbuc1
|
||||
lda #<msg_1
|
||||
sta msg
|
||||
lda #>msg_1
|
||||
sta msg+1
|
||||
jmp b2
|
||||
//SEG29 [12] phi from print_msg to print_msg::@2 [phi:print_msg->print_msg::@2]
|
||||
b2_from_print_msg:
|
||||
//SEG30 [12] phi (byte*) print_msg::msg#2 = (const byte*) print_msg::msg#0 [phi:print_msg->print_msg::@2#0] -- pbuz1=pbuc1
|
||||
lda #<msg_0
|
||||
sta msg
|
||||
lda #>msg_0
|
||||
sta msg+1
|
||||
jmp b2
|
||||
//SEG31 print_msg::@2
|
||||
b2:
|
||||
//SEG32 [13] (byte*) print::msg#0 ← (byte*) print_msg::msg#2
|
||||
//SEG32 [13] (byte*) print::msg#0 ← (byte*) print_msg::msg#3
|
||||
//SEG33 [14] call print
|
||||
//SEG34 [16] phi from print_msg::@2 to print [phi:print_msg::@2->print]
|
||||
print_from_b2:
|
||||
@ -580,8 +584,8 @@ print_msg: {
|
||||
breturn:
|
||||
//SEG36 [15] return
|
||||
rts
|
||||
msg_0: .text "Hello @"
|
||||
msg_1: .text "World!@"
|
||||
msg_1: .text "Hello @"
|
||||
msg_2: .text "World!@"
|
||||
}
|
||||
//SEG37 print
|
||||
// print(byte* zeropage(4) msg)
|
||||
@ -689,9 +693,9 @@ FINAL SYMBOL TABLE
|
||||
(byte) print_msg::idx
|
||||
(byte) print_msg::idx#2 reg byte x 2.0
|
||||
(byte*) print_msg::msg
|
||||
(const byte*) print_msg::msg#0 msg#0 = (string) "Hello @"
|
||||
(const byte*) print_msg::msg#1 msg#1 = (string) "World!@"
|
||||
(byte*) print_msg::msg#2 msg zp ZP_WORD:4 2.0
|
||||
(const byte*) print_msg::msg#1 msg#1 = (string) "Hello @"
|
||||
(const byte*) print_msg::msg#2 msg#2 = (string) "World!@"
|
||||
(byte*) print_msg::msg#3 msg zp ZP_WORD:4 2.0
|
||||
(byte*) screen
|
||||
(byte*) screen#14 screen zp ZP_WORD:2 4.625
|
||||
(byte*) screen#18 screen zp ZP_WORD:2 0.6666666666666666
|
||||
@ -699,7 +703,7 @@ FINAL SYMBOL TABLE
|
||||
|
||||
reg byte x [ print_msg::idx#2 ]
|
||||
zp ZP_WORD:2 [ screen#18 screen#14 screen#6 ]
|
||||
zp ZP_WORD:4 [ print_msg::msg#2 print::msg#2 print::msg#0 print::msg#1 ]
|
||||
zp ZP_WORD:4 [ print_msg::msg#3 print::msg#2 print::msg#0 print::msg#1 ]
|
||||
|
||||
|
||||
FINAL ASSEMBLER
|
||||
@ -754,30 +758,30 @@ print_msg: {
|
||||
//SEG25 [11] phi from print_msg to print_msg::@3 [phi:print_msg->print_msg::@3]
|
||||
//SEG26 print_msg::@3
|
||||
//SEG27 [12] phi from print_msg::@3 to print_msg::@2 [phi:print_msg::@3->print_msg::@2]
|
||||
//SEG28 [12] phi (byte*) print_msg::msg#2 = (const byte*) print_msg::msg#1 [phi:print_msg::@3->print_msg::@2#0] -- pbuz1=pbuc1
|
||||
lda #<msg_1
|
||||
//SEG28 [12] phi (byte*) print_msg::msg#3 = (const byte*) print_msg::msg#2 [phi:print_msg::@3->print_msg::@2#0] -- pbuz1=pbuc1
|
||||
lda #<msg_2
|
||||
sta msg
|
||||
lda #>msg_1
|
||||
lda #>msg_2
|
||||
sta msg+1
|
||||
jmp b2
|
||||
//SEG29 [12] phi from print_msg to print_msg::@2 [phi:print_msg->print_msg::@2]
|
||||
b1:
|
||||
//SEG30 [12] phi (byte*) print_msg::msg#2 = (const byte*) print_msg::msg#0 [phi:print_msg->print_msg::@2#0] -- pbuz1=pbuc1
|
||||
lda #<msg_0
|
||||
//SEG30 [12] phi (byte*) print_msg::msg#3 = (const byte*) print_msg::msg#1 [phi:print_msg->print_msg::@2#0] -- pbuz1=pbuc1
|
||||
lda #<msg_1
|
||||
sta msg
|
||||
lda #>msg_0
|
||||
lda #>msg_1
|
||||
sta msg+1
|
||||
//SEG31 print_msg::@2
|
||||
b2:
|
||||
//SEG32 [13] (byte*) print::msg#0 ← (byte*) print_msg::msg#2
|
||||
//SEG32 [13] (byte*) print::msg#0 ← (byte*) print_msg::msg#3
|
||||
//SEG33 [14] call print
|
||||
//SEG34 [16] phi from print_msg::@2 to print [phi:print_msg::@2->print]
|
||||
jsr print
|
||||
//SEG35 print_msg::@return
|
||||
//SEG36 [15] return
|
||||
rts
|
||||
msg_0: .text "Hello @"
|
||||
msg_1: .text "World!@"
|
||||
msg_1: .text "Hello @"
|
||||
msg_2: .text "World!@"
|
||||
}
|
||||
//SEG37 print
|
||||
// print(byte* zeropage(4) msg)
|
||||
|
@ -19,9 +19,9 @@
|
||||
(byte) print_msg::idx
|
||||
(byte) print_msg::idx#2 reg byte x 2.0
|
||||
(byte*) print_msg::msg
|
||||
(const byte*) print_msg::msg#0 msg#0 = (string) "Hello @"
|
||||
(const byte*) print_msg::msg#1 msg#1 = (string) "World!@"
|
||||
(byte*) print_msg::msg#2 msg zp ZP_WORD:4 2.0
|
||||
(const byte*) print_msg::msg#1 msg#1 = (string) "Hello @"
|
||||
(const byte*) print_msg::msg#2 msg#2 = (string) "World!@"
|
||||
(byte*) print_msg::msg#3 msg zp ZP_WORD:4 2.0
|
||||
(byte*) screen
|
||||
(byte*) screen#14 screen zp ZP_WORD:2 4.625
|
||||
(byte*) screen#18 screen zp ZP_WORD:2 0.6666666666666666
|
||||
@ -29,4 +29,4 @@
|
||||
|
||||
reg byte x [ print_msg::idx#2 ]
|
||||
zp ZP_WORD:2 [ screen#18 screen#14 screen#6 ]
|
||||
zp ZP_WORD:4 [ print_msg::msg#2 print::msg#2 print::msg#0 print::msg#1 ]
|
||||
zp ZP_WORD:4 [ print_msg::msg#3 print::msg#2 print::msg#0 print::msg#1 ]
|
||||
|
@ -54,7 +54,7 @@ rvaluevar::@return: scope:[rvaluevar] from rvaluevar::@1
|
||||
[23] return
|
||||
to:@return
|
||||
rvaluevar::@2: scope:[rvaluevar] from rvaluevar::@1
|
||||
[24] (byte) rvaluevar::b#0 ← *((byte*) rvaluevar::screen#2)
|
||||
[24] (byte) rvaluevar::b#1 ← *((byte*) rvaluevar::screen#2)
|
||||
[25] (byte*) rvaluevar::screen#1 ← ++ (byte*) rvaluevar::screen#2
|
||||
[26] (byte) rvaluevar::i#1 ← ++ (byte) rvaluevar::i#2
|
||||
to:rvaluevar::@1
|
||||
|
@ -82,6 +82,7 @@ lvaluevar::@return: scope:[lvaluevar] from lvaluevar::@1
|
||||
to:@return
|
||||
rvaluevar: scope:[rvaluevar] from main::@2
|
||||
(byte*) rvaluevar::screen#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
|
||||
(byte) rvaluevar::b#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
(byte) rvaluevar::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 2
|
||||
to:rvaluevar::@1
|
||||
rvaluevar::@1: scope:[rvaluevar] from rvaluevar rvaluevar::@2
|
||||
@ -93,7 +94,7 @@ rvaluevar::@1: scope:[rvaluevar] from rvaluevar rvaluevar::@2
|
||||
rvaluevar::@2: scope:[rvaluevar] from rvaluevar::@1
|
||||
(byte) rvaluevar::i#3 ← phi( rvaluevar::@1/(byte) rvaluevar::i#2 )
|
||||
(byte*) rvaluevar::screen#2 ← phi( rvaluevar::@1/(byte*) rvaluevar::screen#3 )
|
||||
(byte) rvaluevar::b#0 ← *((byte*) rvaluevar::screen#2)
|
||||
(byte) rvaluevar::b#1 ← *((byte*) rvaluevar::screen#2)
|
||||
(byte*) rvaluevar::screen#1 ← ++ (byte*) rvaluevar::screen#2
|
||||
(byte) rvaluevar::i#1 ← ++ (byte) rvaluevar::i#3
|
||||
to:rvaluevar::@1
|
||||
@ -172,6 +173,7 @@ SYMBOL TABLE SSA
|
||||
(label) rvaluevar::@return
|
||||
(byte) rvaluevar::b
|
||||
(byte) rvaluevar::b#0
|
||||
(byte) rvaluevar::b#1
|
||||
(byte) rvaluevar::i
|
||||
(byte) rvaluevar::i#0
|
||||
(byte) rvaluevar::i#1
|
||||
@ -201,7 +203,7 @@ Successful SSA optimization Pass2RedundantPhiElimination
|
||||
Simple Condition (bool~) lvalue::$0 [11] if((byte) lvalue::i#2<(byte/signed byte/word/signed word/dword/signed dword) 10) goto lvalue::@2
|
||||
Simple Condition (bool~) rvalue::$0 [22] if((byte) rvalue::i#2<(byte/signed byte/word/signed word/dword/signed dword) 10) goto rvalue::@2
|
||||
Simple Condition (bool~) lvaluevar::$0 [32] if((byte) lvaluevar::i#2<(byte/signed byte/word/signed word/dword/signed dword) 10) goto lvaluevar::@2
|
||||
Simple Condition (bool~) rvaluevar::$0 [42] if((byte) rvaluevar::i#2<(byte/signed byte/word/signed word/dword/signed dword) 10) goto rvaluevar::@2
|
||||
Simple Condition (bool~) rvaluevar::$0 [43] if((byte) rvaluevar::i#2<(byte/signed byte/word/signed word/dword/signed dword) 10) goto rvaluevar::@2
|
||||
Successful SSA optimization Pass2ConditionalJumpSimplification
|
||||
Constant (const byte[1024]) lvalue::SCREEN#0 = ((byte*))1024
|
||||
Constant (const byte) lvalue::i#0 = 2
|
||||
@ -211,11 +213,13 @@ Constant (const byte*) lvaluevar::screen#0 = ((byte*))1024
|
||||
Constant (const byte) lvaluevar::b#0 = 4
|
||||
Constant (const byte) lvaluevar::i#0 = 2
|
||||
Constant (const byte*) rvaluevar::screen#0 = ((byte*))1024
|
||||
Constant (const byte) rvaluevar::b#0 = 0
|
||||
Constant (const byte) rvaluevar::i#0 = 2
|
||||
Successful SSA optimization Pass2ConstantIdentification
|
||||
Consolidated array index constant in *(lvalue::SCREEN#0+1)
|
||||
Consolidated array index constant in *(rvalue::SCREEN#0+1)
|
||||
Successful SSA optimization Pass2ConstantAdditionElimination
|
||||
Successful SSA optimization PassNEliminateUnusedVars
|
||||
Inlining constant with var siblings (const byte) lvalue::i#0
|
||||
Inlining constant with var siblings (const byte) rvalue::i#0
|
||||
Inlining constant with var siblings (const byte*) lvaluevar::screen#0
|
||||
@ -317,7 +321,7 @@ rvaluevar::@return: scope:[rvaluevar] from rvaluevar::@1
|
||||
[23] return
|
||||
to:@return
|
||||
rvaluevar::@2: scope:[rvaluevar] from rvaluevar::@1
|
||||
[24] (byte) rvaluevar::b#0 ← *((byte*) rvaluevar::screen#2)
|
||||
[24] (byte) rvaluevar::b#1 ← *((byte*) rvaluevar::screen#2)
|
||||
[25] (byte*) rvaluevar::screen#1 ← ++ (byte*) rvaluevar::screen#2
|
||||
[26] (byte) rvaluevar::i#1 ← ++ (byte) rvaluevar::i#2
|
||||
to:rvaluevar::@1
|
||||
@ -379,7 +383,7 @@ VARIABLE REGISTER WEIGHTS
|
||||
(byte) rvalue::i#2 14.666666666666666
|
||||
(void()) rvaluevar()
|
||||
(byte) rvaluevar::b
|
||||
(byte) rvaluevar::b#0 110.0
|
||||
(byte) rvaluevar::b#1 110.0
|
||||
(byte) rvaluevar::i
|
||||
(byte) rvaluevar::i#1 22.0
|
||||
(byte) rvaluevar::i#2 8.25
|
||||
@ -394,7 +398,7 @@ Initial phi equivalence classes
|
||||
[ rvaluevar::screen#2 rvaluevar::screen#1 ]
|
||||
[ rvalue::i#2 rvalue::i#1 ]
|
||||
[ lvalue::i#2 lvalue::i#1 ]
|
||||
Added variable rvaluevar::b#0 to zero page equivalence class [ rvaluevar::b#0 ]
|
||||
Added variable rvaluevar::b#1 to zero page equivalence class [ rvaluevar::b#1 ]
|
||||
Added variable rvalue::b#0 to zero page equivalence class [ rvalue::b#0 ]
|
||||
Added variable rvalue::b#1 to zero page equivalence class [ rvalue::b#1 ]
|
||||
Added variable rvalue::b#2 to zero page equivalence class [ rvalue::b#2 ]
|
||||
@ -405,7 +409,7 @@ Complete equivalence classes
|
||||
[ rvaluevar::screen#2 rvaluevar::screen#1 ]
|
||||
[ rvalue::i#2 rvalue::i#1 ]
|
||||
[ lvalue::i#2 lvalue::i#1 ]
|
||||
[ rvaluevar::b#0 ]
|
||||
[ rvaluevar::b#1 ]
|
||||
[ rvalue::b#0 ]
|
||||
[ rvalue::b#1 ]
|
||||
[ rvalue::b#2 ]
|
||||
@ -415,7 +419,7 @@ Allocated zp ZP_BYTE:5 [ rvaluevar::i#2 rvaluevar::i#1 ]
|
||||
Allocated zp ZP_WORD:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ]
|
||||
Allocated zp ZP_BYTE:8 [ rvalue::i#2 rvalue::i#1 ]
|
||||
Allocated zp ZP_BYTE:9 [ lvalue::i#2 lvalue::i#1 ]
|
||||
Allocated zp ZP_BYTE:10 [ rvaluevar::b#0 ]
|
||||
Allocated zp ZP_BYTE:10 [ rvaluevar::b#1 ]
|
||||
Allocated zp ZP_BYTE:11 [ rvalue::b#0 ]
|
||||
Allocated zp ZP_BYTE:12 [ rvalue::b#1 ]
|
||||
Allocated zp ZP_BYTE:13 [ rvalue::b#2 ]
|
||||
@ -555,7 +559,7 @@ rvaluevar: {
|
||||
rts
|
||||
//SEG48 rvaluevar::@2
|
||||
b2:
|
||||
//SEG49 [24] (byte) rvaluevar::b#0 ← *((byte*) rvaluevar::screen#2) -- vbuz1=_deref_pbuz2
|
||||
//SEG49 [24] (byte) rvaluevar::b#1 ← *((byte*) rvaluevar::screen#2) -- vbuz1=_deref_pbuz2
|
||||
ldy #0
|
||||
lda (screen),y
|
||||
sta b
|
||||
@ -666,7 +670,7 @@ REGISTER UPLIFT POTENTIAL REGISTERS
|
||||
Statement [17] *((byte*) lvaluevar::screen#2) ← (const byte) lvaluevar::b#0 [ lvaluevar::i#2 lvaluevar::screen#2 ] ( main:2::lvaluevar:11 [ lvaluevar::i#2 lvaluevar::screen#2 ] ) always clobbers reg byte a reg byte y
|
||||
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ lvaluevar::i#2 lvaluevar::i#1 ]
|
||||
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ lvaluevar::i#2 lvaluevar::i#1 ]
|
||||
Statement [24] (byte) rvaluevar::b#0 ← *((byte*) rvaluevar::screen#2) [ rvaluevar::i#2 rvaluevar::screen#2 ] ( main:2::rvaluevar:9 [ rvaluevar::i#2 rvaluevar::screen#2 ] ) always clobbers reg byte a reg byte y
|
||||
Statement [24] (byte) rvaluevar::b#1 ← *((byte*) rvaluevar::screen#2) [ rvaluevar::i#2 rvaluevar::screen#2 ] ( main:2::rvaluevar:9 [ rvaluevar::i#2 rvaluevar::screen#2 ] ) always clobbers reg byte a reg byte y
|
||||
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ rvaluevar::i#2 rvaluevar::i#1 ]
|
||||
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:5 [ rvaluevar::i#2 rvaluevar::i#1 ]
|
||||
Statement [34] *((const byte[1024]) lvalue::SCREEN#0) ← (byte/signed byte/word/signed word/dword/signed dword) 1 [ ] ( main:2::lvalue:5 [ ] ) always clobbers reg byte a
|
||||
@ -674,7 +678,7 @@ Statement [35] *((const byte[1024]) lvalue::SCREEN#0+(byte/signed byte/word/sign
|
||||
Statement [39] *((const byte[1024]) lvalue::SCREEN#0 + (byte) lvalue::i#2) ← (byte/signed byte/word/signed word/dword/signed dword) 3 [ lvalue::i#2 ] ( main:2::lvalue:5 [ lvalue::i#2 ] ) always clobbers reg byte a
|
||||
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 [ lvalue::i#2 lvalue::i#1 ]
|
||||
Statement [17] *((byte*) lvaluevar::screen#2) ← (const byte) lvaluevar::b#0 [ lvaluevar::i#2 lvaluevar::screen#2 ] ( main:2::lvaluevar:11 [ lvaluevar::i#2 lvaluevar::screen#2 ] ) always clobbers reg byte a reg byte y
|
||||
Statement [24] (byte) rvaluevar::b#0 ← *((byte*) rvaluevar::screen#2) [ rvaluevar::i#2 rvaluevar::screen#2 ] ( main:2::rvaluevar:9 [ rvaluevar::i#2 rvaluevar::screen#2 ] ) always clobbers reg byte a reg byte y
|
||||
Statement [24] (byte) rvaluevar::b#1 ← *((byte*) rvaluevar::screen#2) [ rvaluevar::i#2 rvaluevar::screen#2 ] ( main:2::rvaluevar:9 [ rvaluevar::i#2 rvaluevar::screen#2 ] ) always clobbers reg byte a reg byte y
|
||||
Statement [34] *((const byte[1024]) lvalue::SCREEN#0) ← (byte/signed byte/word/signed word/dword/signed dword) 1 [ ] ( main:2::lvalue:5 [ ] ) always clobbers reg byte a
|
||||
Statement [35] *((const byte[1024]) lvalue::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword) 2 [ ] ( main:2::lvalue:5 [ ] ) always clobbers reg byte a
|
||||
Statement [39] *((const byte[1024]) lvalue::SCREEN#0 + (byte) lvalue::i#2) ← (byte/signed byte/word/signed word/dword/signed dword) 3 [ lvalue::i#2 ] ( main:2::lvalue:5 [ lvalue::i#2 ] ) always clobbers reg byte a
|
||||
@ -684,14 +688,14 @@ Potential registers zp ZP_BYTE:5 [ rvaluevar::i#2 rvaluevar::i#1 ] : zp ZP_BYTE:
|
||||
Potential registers zp ZP_WORD:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ] : zp ZP_WORD:6 ,
|
||||
Potential registers zp ZP_BYTE:8 [ rvalue::i#2 rvalue::i#1 ] : zp ZP_BYTE:8 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:9 [ lvalue::i#2 lvalue::i#1 ] : zp ZP_BYTE:9 , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:10 [ rvaluevar::b#0 ] : zp ZP_BYTE:10 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:10 [ rvaluevar::b#1 ] : zp ZP_BYTE:10 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:11 [ rvalue::b#0 ] : zp ZP_BYTE:11 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:12 [ rvalue::b#1 ] : zp ZP_BYTE:12 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:13 [ rvalue::b#2 ] : zp ZP_BYTE:13 , reg byte a , reg byte x , reg byte y ,
|
||||
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [rvalue] 110: zp ZP_BYTE:13 [ rvalue::b#2 ] 36.67: zp ZP_BYTE:8 [ rvalue::i#2 rvalue::i#1 ] 20: zp ZP_BYTE:11 [ rvalue::b#0 ] 20: zp ZP_BYTE:12 [ rvalue::b#1 ]
|
||||
Uplift Scope [rvaluevar] 110: zp ZP_BYTE:10 [ rvaluevar::b#0 ] 30.25: zp ZP_BYTE:5 [ rvaluevar::i#2 rvaluevar::i#1 ] 22: zp ZP_WORD:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ]
|
||||
Uplift Scope [rvaluevar] 110: zp ZP_BYTE:10 [ rvaluevar::b#1 ] 30.25: zp ZP_BYTE:5 [ rvaluevar::i#2 rvaluevar::i#1 ] 22: zp ZP_WORD:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ]
|
||||
Uplift Scope [lvaluevar] 30.25: zp ZP_BYTE:2 [ lvaluevar::i#2 lvaluevar::i#1 ] 22: zp ZP_WORD:3 [ lvaluevar::screen#2 lvaluevar::screen#1 ]
|
||||
Uplift Scope [lvalue] 36.67: zp ZP_BYTE:9 [ lvalue::i#2 lvalue::i#1 ]
|
||||
Uplift Scope [main]
|
||||
@ -699,7 +703,7 @@ Uplift Scope []
|
||||
|
||||
Uplifting [rvalue] best 1868 combination reg byte a [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ] reg byte a [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ]
|
||||
Limited combination testing to 100 combinations of 256 possible.
|
||||
Uplifting [rvaluevar] best 1748 combination reg byte a [ rvaluevar::b#0 ] reg byte x [ rvaluevar::i#2 rvaluevar::i#1 ] zp ZP_WORD:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ]
|
||||
Uplifting [rvaluevar] best 1748 combination reg byte a [ rvaluevar::b#1 ] reg byte x [ rvaluevar::i#2 rvaluevar::i#1 ] zp ZP_WORD:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ]
|
||||
Uplifting [lvaluevar] best 1658 combination reg byte x [ lvaluevar::i#2 lvaluevar::i#1 ] zp ZP_WORD:3 [ lvaluevar::screen#2 lvaluevar::screen#1 ]
|
||||
Uplifting [lvalue] best 1538 combination reg byte x [ lvalue::i#2 lvalue::i#1 ]
|
||||
Uplifting [main] best 1538 combination
|
||||
@ -835,7 +839,7 @@ rvaluevar: {
|
||||
rts
|
||||
//SEG48 rvaluevar::@2
|
||||
b2:
|
||||
//SEG49 [24] (byte) rvaluevar::b#0 ← *((byte*) rvaluevar::screen#2) -- vbuaa=_deref_pbuz1
|
||||
//SEG49 [24] (byte) rvaluevar::b#1 ← *((byte*) rvaluevar::screen#2) -- vbuaa=_deref_pbuz1
|
||||
ldy #0
|
||||
lda (screen),y
|
||||
//SEG50 [25] (byte*) rvaluevar::screen#1 ← ++ (byte*) rvaluevar::screen#2 -- pbuz1=_inc_pbuz1
|
||||
@ -1026,7 +1030,7 @@ FINAL SYMBOL TABLE
|
||||
(label) rvaluevar::@2
|
||||
(label) rvaluevar::@return
|
||||
(byte) rvaluevar::b
|
||||
(byte) rvaluevar::b#0 reg byte a 110.0
|
||||
(byte) rvaluevar::b#1 reg byte a 110.0
|
||||
(byte) rvaluevar::i
|
||||
(byte) rvaluevar::i#1 reg byte x 22.0
|
||||
(byte) rvaluevar::i#2 reg byte x 8.25
|
||||
@ -1039,7 +1043,7 @@ zp ZP_WORD:2 [ lvaluevar::screen#2 lvaluevar::screen#1 rvaluevar::screen#2 rvalu
|
||||
reg byte x [ rvaluevar::i#2 rvaluevar::i#1 ]
|
||||
reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
reg byte x [ lvalue::i#2 lvalue::i#1 ]
|
||||
reg byte a [ rvaluevar::b#0 ]
|
||||
reg byte a [ rvaluevar::b#1 ]
|
||||
reg byte a [ rvalue::b#0 ]
|
||||
reg byte a [ rvalue::b#1 ]
|
||||
reg byte a [ rvalue::b#2 ]
|
||||
@ -1144,7 +1148,7 @@ rvaluevar: {
|
||||
rts
|
||||
//SEG48 rvaluevar::@2
|
||||
b2:
|
||||
//SEG49 [24] (byte) rvaluevar::b#0 ← *((byte*) rvaluevar::screen#2) -- vbuaa=_deref_pbuz1
|
||||
//SEG49 [24] (byte) rvaluevar::b#1 ← *((byte*) rvaluevar::screen#2) -- vbuaa=_deref_pbuz1
|
||||
ldy #0
|
||||
lda (screen),y
|
||||
//SEG50 [25] (byte*) rvaluevar::screen#1 ← ++ (byte*) rvaluevar::screen#2 -- pbuz1=_inc_pbuz1
|
||||
|
@ -45,7 +45,7 @@
|
||||
(label) rvaluevar::@2
|
||||
(label) rvaluevar::@return
|
||||
(byte) rvaluevar::b
|
||||
(byte) rvaluevar::b#0 reg byte a 110.0
|
||||
(byte) rvaluevar::b#1 reg byte a 110.0
|
||||
(byte) rvaluevar::i
|
||||
(byte) rvaluevar::i#1 reg byte x 22.0
|
||||
(byte) rvaluevar::i#2 reg byte x 8.25
|
||||
@ -58,7 +58,7 @@ zp ZP_WORD:2 [ lvaluevar::screen#2 lvaluevar::screen#1 rvaluevar::screen#2 rvalu
|
||||
reg byte x [ rvaluevar::i#2 rvaluevar::i#1 ]
|
||||
reg byte x [ rvalue::i#2 rvalue::i#1 ]
|
||||
reg byte x [ lvalue::i#2 lvalue::i#1 ]
|
||||
reg byte a [ rvaluevar::b#0 ]
|
||||
reg byte a [ rvaluevar::b#1 ]
|
||||
reg byte a [ rvalue::b#0 ]
|
||||
reg byte a [ rvalue::b#1 ]
|
||||
reg byte a [ rvalue::b#2 ]
|
||||
|
@ -18,6 +18,6 @@ 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 + (byte) main::i#2)
|
||||
[8] (byte) main::b#1 ← *((const byte[1024]) main::SCREEN#0 + (byte) main::i#2)
|
||||
[9] (byte) main::i#1 ← ++ (byte) main::i#2
|
||||
to:main::@1
|
||||
|
@ -4,6 +4,7 @@ CONTROL FLOW GRAPH SSA
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
(byte[1024]) main::SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
|
||||
(byte) main::b#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
(byte) main::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 2
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
@ -13,7 +14,7 @@ main::@1: scope:[main] from main main::@2
|
||||
to:main::@return
|
||||
main::@2: scope:[main] from main::@1
|
||||
(byte) main::i#3 ← phi( main::@1/(byte) main::i#2 )
|
||||
(byte) main::b#0 ← *((byte[1024]) main::SCREEN#0 + (byte) main::i#3)
|
||||
(byte) main::b#1 ← *((byte[1024]) main::SCREEN#0 + (byte) main::i#3)
|
||||
(byte) main::i#1 ← ++ (byte) main::i#3
|
||||
to:main::@1
|
||||
main::@return: scope:[main] from main::@1
|
||||
@ -40,6 +41,7 @@ SYMBOL TABLE SSA
|
||||
(byte[1024]) main::SCREEN#0
|
||||
(byte) main::b
|
||||
(byte) main::b#0
|
||||
(byte) main::b#1
|
||||
(byte) main::i
|
||||
(byte) main::i#0
|
||||
(byte) main::i#1
|
||||
@ -50,11 +52,13 @@ Culled Empty Block (label) @2
|
||||
Successful SSA optimization Pass2CullEmptyBlocks
|
||||
Alias (byte) main::i#2 = (byte) main::i#3
|
||||
Successful SSA optimization Pass2AliasElimination
|
||||
Simple Condition (bool~) main::$0 [4] if((byte) main::i#2<(byte/signed byte/word/signed word/dword/signed dword) 10) goto main::@2
|
||||
Simple Condition (bool~) main::$0 [5] if((byte) main::i#2<(byte/signed byte/word/signed word/dword/signed dword) 10) goto main::@2
|
||||
Successful SSA optimization Pass2ConditionalJumpSimplification
|
||||
Constant (const byte[1024]) main::SCREEN#0 = ((byte*))1024
|
||||
Constant (const byte) main::b#0 = 0
|
||||
Constant (const byte) main::i#0 = 2
|
||||
Successful SSA optimization Pass2ConstantIdentification
|
||||
Successful SSA optimization PassNEliminateUnusedVars
|
||||
Inlining constant with var siblings (const byte) main::i#0
|
||||
Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 2
|
||||
Successful SSA optimization Pass2ConstantInlining
|
||||
@ -94,7 +98,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 + (byte) main::i#2)
|
||||
[8] (byte) main::b#1 ← *((const byte[1024]) main::SCREEN#0 + (byte) main::i#2)
|
||||
[9] (byte) main::i#1 ← ++ (byte) main::i#2
|
||||
to:main::@1
|
||||
|
||||
@ -103,19 +107,19 @@ VARIABLE REGISTER WEIGHTS
|
||||
(void()) main()
|
||||
(byte[1024]) main::SCREEN
|
||||
(byte) main::b
|
||||
(byte) main::b#0 110.0
|
||||
(byte) main::b#1 110.0
|
||||
(byte) main::i
|
||||
(byte) main::i#1 22.0
|
||||
(byte) main::i#2 14.666666666666666
|
||||
|
||||
Initial phi equivalence classes
|
||||
[ main::i#2 main::i#1 ]
|
||||
Added variable main::b#0 to zero page equivalence class [ main::b#0 ]
|
||||
Added variable main::b#1 to zero page equivalence class [ main::b#1 ]
|
||||
Complete equivalence classes
|
||||
[ main::i#2 main::i#1 ]
|
||||
[ main::b#0 ]
|
||||
[ main::b#1 ]
|
||||
Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
|
||||
Allocated zp ZP_BYTE:3 [ main::b#0 ]
|
||||
Allocated zp ZP_BYTE:3 [ main::b#1 ]
|
||||
|
||||
INITIAL ASM
|
||||
//SEG0 File Comments
|
||||
@ -166,7 +170,7 @@ main: {
|
||||
rts
|
||||
//SEG17 main::@2
|
||||
b2:
|
||||
//SEG18 [8] (byte) main::b#0 ← *((const byte[1024]) main::SCREEN#0 + (byte) main::i#2) -- vbuz1=pbuc1_derefidx_vbuz2
|
||||
//SEG18 [8] (byte) main::b#1 ← *((const byte[1024]) main::SCREEN#0 + (byte) main::i#2) -- vbuz1=pbuc1_derefidx_vbuz2
|
||||
ldy i
|
||||
lda SCREEN,y
|
||||
sta b
|
||||
@ -180,13 +184,13 @@ main: {
|
||||
|
||||
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 ,
|
||||
Potential registers zp ZP_BYTE:3 [ main::b#1 ] : 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] 110: zp ZP_BYTE:3 [ main::b#1 ] 36.67: 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 [main] best 238 combination reg byte a [ main::b#1 ] reg byte x [ main::i#2 main::i#1 ]
|
||||
Uplifting [] best 238 combination
|
||||
|
||||
ASSEMBLER BEFORE OPTIMIZATION
|
||||
@ -234,7 +238,7 @@ main: {
|
||||
rts
|
||||
//SEG17 main::@2
|
||||
b2:
|
||||
//SEG18 [8] (byte) main::b#0 ← *((const byte[1024]) main::SCREEN#0 + (byte) main::i#2) -- vbuaa=pbuc1_derefidx_vbuxx
|
||||
//SEG18 [8] (byte) main::b#1 ← *((const byte[1024]) main::SCREEN#0 + (byte) main::i#2) -- vbuaa=pbuc1_derefidx_vbuxx
|
||||
lda SCREEN,x
|
||||
//SEG19 [9] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx
|
||||
inx
|
||||
@ -277,13 +281,13 @@ FINAL SYMBOL TABLE
|
||||
(byte[1024]) main::SCREEN
|
||||
(const byte[1024]) main::SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
|
||||
(byte) main::b
|
||||
(byte) main::b#0 reg byte a 110.0
|
||||
(byte) main::b#1 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
|
||||
|
||||
reg byte x [ main::i#2 main::i#1 ]
|
||||
reg byte a [ main::b#0 ]
|
||||
reg byte a [ main::b#1 ]
|
||||
|
||||
|
||||
FINAL ASSEMBLER
|
||||
@ -320,7 +324,7 @@ main: {
|
||||
rts
|
||||
//SEG17 main::@2
|
||||
b2:
|
||||
//SEG18 [8] (byte) main::b#0 ← *((const byte[1024]) main::SCREEN#0 + (byte) main::i#2) -- vbuaa=pbuc1_derefidx_vbuxx
|
||||
//SEG18 [8] (byte) main::b#1 ← *((const byte[1024]) main::SCREEN#0 + (byte) main::i#2) -- vbuaa=pbuc1_derefidx_vbuxx
|
||||
lda SCREEN,x
|
||||
//SEG19 [9] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx
|
||||
inx
|
||||
|
@ -8,10 +8,10 @@
|
||||
(byte[1024]) main::SCREEN
|
||||
(const byte[1024]) main::SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
|
||||
(byte) main::b
|
||||
(byte) main::b#0 reg byte a 110.0
|
||||
(byte) main::b#1 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
|
||||
|
||||
reg byte x [ main::i#2 main::i#1 ]
|
||||
reg byte a [ main::b#0 ]
|
||||
reg byte a [ main::b#1 ]
|
||||
|
@ -23,10 +23,10 @@ main::@23: scope:[main] from main::@1
|
||||
[9] phi()
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1 main::@23
|
||||
[10] (byte) main::r#40 ← phi( main::@1/(byte) '-' main::@23/(byte) '+' )
|
||||
[10] (byte) main::r#41 ← phi( main::@1/(byte) '-' main::@23/(byte) '+' )
|
||||
[11] (byte) printu::a#0 ← (byte) main::a#10
|
||||
[12] (byte) printu::b#0 ← (byte) main::b#0
|
||||
[13] (byte) printu::res#0 ← (byte) main::r#40
|
||||
[13] (byte) printu::res#0 ← (byte) main::r#41
|
||||
[14] call printu
|
||||
to:main::@46
|
||||
main::@46: scope:[main] from main::@2
|
||||
@ -36,9 +36,9 @@ main::@24: scope:[main] from main::@46
|
||||
[16] phi()
|
||||
to:main::@3
|
||||
main::@3: scope:[main] from main::@24 main::@46
|
||||
[17] (byte) main::r#41 ← phi( main::@24/(byte) '+' main::@46/(byte) '-' )
|
||||
[17] (byte) main::r#42 ← phi( main::@24/(byte) '+' main::@46/(byte) '-' )
|
||||
[18] (byte) printu::a#1 ← (byte) main::a#10
|
||||
[19] (byte) printu::res#1 ← (byte) main::r#41
|
||||
[19] (byte) printu::res#1 ← (byte) main::r#42
|
||||
[20] call printu
|
||||
to:main::@47
|
||||
main::@47: scope:[main] from main::@3
|
||||
@ -48,10 +48,10 @@ main::@25: scope:[main] from main::@47
|
||||
[22] phi()
|
||||
to:main::@4
|
||||
main::@4: scope:[main] from main::@25 main::@47
|
||||
[23] (byte) main::r#42 ← phi( main::@25/(byte) '+' main::@47/(byte) '-' )
|
||||
[23] (byte) main::r#43 ← phi( main::@25/(byte) '+' main::@47/(byte) '-' )
|
||||
[24] (byte) printu::a#2 ← (byte) main::a#10
|
||||
[25] (byte) printu::b#2 ← *((const byte[5]) main::cs#0 + (byte) main::i#10)
|
||||
[26] (byte) printu::res#2 ← (byte) main::r#42
|
||||
[26] (byte) printu::res#2 ← (byte) main::r#43
|
||||
[27] call printu
|
||||
to:main::@48
|
||||
main::@48: scope:[main] from main::@4
|
||||
@ -61,10 +61,10 @@ main::@26: scope:[main] from main::@48
|
||||
[29] phi()
|
||||
to:main::@5
|
||||
main::@5: scope:[main] from main::@26 main::@48
|
||||
[30] (byte) main::r#43 ← phi( main::@26/(byte) '+' main::@48/(byte) '-' )
|
||||
[30] (byte) main::r#44 ← phi( main::@26/(byte) '+' main::@48/(byte) '-' )
|
||||
[31] (byte) printu::a#3 ← (byte) main::a#10
|
||||
[32] (byte) printu::b#3 ← (byte) main::a#10
|
||||
[33] (byte) printu::res#3 ← (byte) main::r#43
|
||||
[33] (byte) printu::res#3 ← (byte) main::r#44
|
||||
[34] call printu
|
||||
to:main::@49
|
||||
main::@49: scope:[main] from main::@5
|
||||
@ -78,10 +78,10 @@ main::@27: scope:[main] from main::@50
|
||||
[38] phi()
|
||||
to:main::@6
|
||||
main::@6: scope:[main] from main::@27 main::@50
|
||||
[39] (byte) main::r#44 ← phi( main::@27/(byte) '+' main::@50/(byte) '-' )
|
||||
[39] (byte) main::r#45 ← phi( main::@27/(byte) '+' main::@50/(byte) '-' )
|
||||
[40] (byte) printu::a#4 ← (byte) main::a#10
|
||||
[41] (byte) printu::b#4 ← (byte) main::b#0
|
||||
[42] (byte) printu::res#4 ← (byte) main::r#44
|
||||
[42] (byte) printu::res#4 ← (byte) main::r#45
|
||||
[43] (byte*~) print_char_cursor#159 ← (byte*) print_line_cursor#1
|
||||
[44] call printu
|
||||
to:main::@51
|
||||
@ -92,9 +92,9 @@ main::@28: scope:[main] from main::@51
|
||||
[46] phi()
|
||||
to:main::@7
|
||||
main::@7: scope:[main] from main::@28 main::@51
|
||||
[47] (byte) main::r#45 ← phi( main::@28/(byte) '+' main::@51/(byte) '-' )
|
||||
[47] (byte) main::r#46 ← phi( main::@28/(byte) '+' main::@51/(byte) '-' )
|
||||
[48] (byte) printu::a#5 ← (byte) main::a#10
|
||||
[49] (byte) printu::res#5 ← (byte) main::r#45
|
||||
[49] (byte) printu::res#5 ← (byte) main::r#46
|
||||
[50] call printu
|
||||
to:main::@52
|
||||
main::@52: scope:[main] from main::@7
|
||||
@ -104,10 +104,10 @@ main::@29: scope:[main] from main::@52
|
||||
[52] phi()
|
||||
to:main::@8
|
||||
main::@8: scope:[main] from main::@29 main::@52
|
||||
[53] (byte) main::r#46 ← phi( main::@29/(byte) '+' main::@52/(byte) '-' )
|
||||
[53] (byte) main::r#47 ← phi( main::@29/(byte) '+' main::@52/(byte) '-' )
|
||||
[54] (byte) printu::a#6 ← (byte) main::a#10
|
||||
[55] (byte) printu::b#6 ← *((const byte[5]) main::cs#0 + (byte) main::i#10)
|
||||
[56] (byte) printu::res#6 ← (byte) main::r#46
|
||||
[56] (byte) printu::res#6 ← (byte) main::r#47
|
||||
[57] call printu
|
||||
to:main::@53
|
||||
main::@53: scope:[main] from main::@8
|
||||
@ -117,10 +117,10 @@ main::@30: scope:[main] from main::@53
|
||||
[59] phi()
|
||||
to:main::@9
|
||||
main::@9: scope:[main] from main::@30 main::@53
|
||||
[60] (byte) main::r#47 ← phi( main::@30/(byte) '+' main::@53/(byte) '-' )
|
||||
[60] (byte) main::r#48 ← phi( main::@30/(byte) '+' main::@53/(byte) '-' )
|
||||
[61] (byte) printu::a#7 ← (byte) main::a#10
|
||||
[62] (byte) printu::b#7 ← (byte) main::a#10
|
||||
[63] (byte) printu::res#7 ← (byte) main::r#47
|
||||
[63] (byte) printu::res#7 ← (byte) main::r#48
|
||||
[64] call printu
|
||||
to:main::@54
|
||||
main::@54: scope:[main] from main::@9
|
||||
@ -134,10 +134,10 @@ main::@31: scope:[main] from main::@55
|
||||
[68] phi()
|
||||
to:main::@10
|
||||
main::@10: scope:[main] from main::@31 main::@55
|
||||
[69] (byte) main::r#48 ← phi( main::@31/(byte) '+' main::@55/(byte) '-' )
|
||||
[69] (byte) main::r#49 ← phi( main::@31/(byte) '+' main::@55/(byte) '-' )
|
||||
[70] (byte) printu::a#8 ← (byte) main::a#10
|
||||
[71] (byte) printu::b#8 ← (byte) main::b#0
|
||||
[72] (byte) printu::res#8 ← (byte) main::r#48
|
||||
[72] (byte) printu::res#8 ← (byte) main::r#49
|
||||
[73] (byte*~) print_char_cursor#143 ← (byte*) print_line_cursor#1
|
||||
[74] call printu
|
||||
to:main::@56
|
||||
@ -148,9 +148,9 @@ main::@32: scope:[main] from main::@56
|
||||
[76] phi()
|
||||
to:main::@11
|
||||
main::@11: scope:[main] from main::@32 main::@56
|
||||
[77] (byte) main::r#49 ← phi( main::@32/(byte) '+' main::@56/(byte) '-' )
|
||||
[77] (byte) main::r#50 ← phi( main::@32/(byte) '+' main::@56/(byte) '-' )
|
||||
[78] (byte) printu::a#9 ← (byte) main::a#10
|
||||
[79] (byte) printu::res#9 ← (byte) main::r#49
|
||||
[79] (byte) printu::res#9 ← (byte) main::r#50
|
||||
[80] call printu
|
||||
to:main::@57
|
||||
main::@57: scope:[main] from main::@11
|
||||
@ -160,10 +160,10 @@ main::@33: scope:[main] from main::@57
|
||||
[82] phi()
|
||||
to:main::@12
|
||||
main::@12: scope:[main] from main::@33 main::@57
|
||||
[83] (byte) main::r#50 ← phi( main::@33/(byte) '+' main::@57/(byte) '-' )
|
||||
[83] (byte) main::r#51 ← phi( main::@33/(byte) '+' main::@57/(byte) '-' )
|
||||
[84] (byte) printu::a#10 ← (byte) main::a#10
|
||||
[85] (byte) printu::b#10 ← *((const byte[5]) main::cs#0 + (byte) main::i#10)
|
||||
[86] (byte) printu::res#10 ← (byte) main::r#50
|
||||
[86] (byte) printu::res#10 ← (byte) main::r#51
|
||||
[87] call printu
|
||||
to:main::@58
|
||||
main::@58: scope:[main] from main::@12
|
||||
@ -173,10 +173,10 @@ main::@34: scope:[main] from main::@58
|
||||
[89] phi()
|
||||
to:main::@13
|
||||
main::@13: scope:[main] from main::@34 main::@58
|
||||
[90] (byte) main::r#51 ← phi( main::@34/(byte) '+' main::@58/(byte) '-' )
|
||||
[90] (byte) main::r#52 ← phi( main::@34/(byte) '+' main::@58/(byte) '-' )
|
||||
[91] (byte) printu::a#11 ← (byte) main::a#10
|
||||
[92] (byte) printu::b#11 ← (byte) main::a#10
|
||||
[93] (byte) printu::res#11 ← (byte) main::r#51
|
||||
[93] (byte) printu::res#11 ← (byte) main::r#52
|
||||
[94] call printu
|
||||
to:main::@59
|
||||
main::@59: scope:[main] from main::@13
|
||||
@ -190,10 +190,10 @@ main::@35: scope:[main] from main::@60
|
||||
[98] phi()
|
||||
to:main::@14
|
||||
main::@14: scope:[main] from main::@35 main::@60
|
||||
[99] (byte) main::r#52 ← phi( main::@35/(byte) '+' main::@60/(byte) '-' )
|
||||
[99] (byte) main::r#53 ← phi( main::@35/(byte) '+' main::@60/(byte) '-' )
|
||||
[100] (byte) printu::a#12 ← (byte) main::a#10
|
||||
[101] (byte) printu::b#12 ← (byte) main::b#0
|
||||
[102] (byte) printu::res#12 ← (byte) main::r#52
|
||||
[102] (byte) printu::res#12 ← (byte) main::r#53
|
||||
[103] (byte*~) print_char_cursor#147 ← (byte*) print_line_cursor#1
|
||||
[104] call printu
|
||||
to:main::@61
|
||||
@ -204,9 +204,9 @@ main::@36: scope:[main] from main::@61
|
||||
[106] phi()
|
||||
to:main::@15
|
||||
main::@15: scope:[main] from main::@36 main::@61
|
||||
[107] (byte) main::r#53 ← phi( main::@36/(byte) '+' main::@61/(byte) '-' )
|
||||
[107] (byte) main::r#54 ← phi( main::@36/(byte) '+' main::@61/(byte) '-' )
|
||||
[108] (byte) printu::a#13 ← (byte) main::a#10
|
||||
[109] (byte) printu::res#13 ← (byte) main::r#53
|
||||
[109] (byte) printu::res#13 ← (byte) main::r#54
|
||||
[110] call printu
|
||||
to:main::@62
|
||||
main::@62: scope:[main] from main::@15
|
||||
@ -216,10 +216,10 @@ main::@37: scope:[main] from main::@62
|
||||
[112] phi()
|
||||
to:main::@16
|
||||
main::@16: scope:[main] from main::@37 main::@62
|
||||
[113] (byte) main::r#54 ← phi( main::@37/(byte) '+' main::@62/(byte) '-' )
|
||||
[113] (byte) main::r#55 ← phi( main::@37/(byte) '+' main::@62/(byte) '-' )
|
||||
[114] (byte) printu::a#14 ← (byte) main::a#10
|
||||
[115] (byte) printu::b#14 ← *((const byte[5]) main::cs#0 + (byte) main::i#10)
|
||||
[116] (byte) printu::res#14 ← (byte) main::r#54
|
||||
[116] (byte) printu::res#14 ← (byte) main::r#55
|
||||
[117] call printu
|
||||
to:main::@63
|
||||
main::@63: scope:[main] from main::@16
|
||||
@ -229,10 +229,10 @@ main::@38: scope:[main] from main::@63
|
||||
[119] phi()
|
||||
to:main::@17
|
||||
main::@17: scope:[main] from main::@38 main::@63
|
||||
[120] (byte) main::r#55 ← phi( main::@38/(byte) '+' main::@63/(byte) '-' )
|
||||
[120] (byte) main::r#56 ← phi( main::@38/(byte) '+' main::@63/(byte) '-' )
|
||||
[121] (byte) printu::a#15 ← (byte) main::a#10
|
||||
[122] (byte) printu::b#15 ← (byte) main::a#10
|
||||
[123] (byte) printu::res#15 ← (byte) main::r#55
|
||||
[123] (byte) printu::res#15 ← (byte) main::r#56
|
||||
[124] call printu
|
||||
to:main::@64
|
||||
main::@64: scope:[main] from main::@17
|
||||
@ -246,10 +246,10 @@ main::@39: scope:[main] from main::@65
|
||||
[128] phi()
|
||||
to:main::@18
|
||||
main::@18: scope:[main] from main::@39 main::@65
|
||||
[129] (byte) main::r#56 ← phi( main::@39/(byte) '+' main::@65/(byte) '-' )
|
||||
[129] (byte) main::r#57 ← phi( main::@39/(byte) '+' main::@65/(byte) '-' )
|
||||
[130] (byte) printu::a#16 ← (byte) main::a#10
|
||||
[131] (byte) printu::b#16 ← (byte) main::b#0
|
||||
[132] (byte) printu::res#16 ← (byte) main::r#56
|
||||
[132] (byte) printu::res#16 ← (byte) main::r#57
|
||||
[133] (byte*~) print_char_cursor#151 ← (byte*) print_line_cursor#1
|
||||
[134] call printu
|
||||
to:main::@66
|
||||
@ -260,9 +260,9 @@ main::@40: scope:[main] from main::@66
|
||||
[136] phi()
|
||||
to:main::@19
|
||||
main::@19: scope:[main] from main::@40 main::@66
|
||||
[137] (byte) main::r#57 ← phi( main::@40/(byte) '+' main::@66/(byte) '-' )
|
||||
[137] (byte) main::r#58 ← phi( main::@40/(byte) '+' main::@66/(byte) '-' )
|
||||
[138] (byte) printu::a#17 ← (byte) main::a#10
|
||||
[139] (byte) printu::res#17 ← (byte) main::r#57
|
||||
[139] (byte) printu::res#17 ← (byte) main::r#58
|
||||
[140] call printu
|
||||
to:main::@67
|
||||
main::@67: scope:[main] from main::@19
|
||||
@ -272,10 +272,10 @@ main::@41: scope:[main] from main::@67
|
||||
[142] phi()
|
||||
to:main::@20
|
||||
main::@20: scope:[main] from main::@41 main::@67
|
||||
[143] (byte) main::r#58 ← phi( main::@41/(byte) '+' main::@67/(byte) '-' )
|
||||
[143] (byte) main::r#59 ← phi( main::@41/(byte) '+' main::@67/(byte) '-' )
|
||||
[144] (byte) printu::a#18 ← (byte) main::a#10
|
||||
[145] (byte) printu::b#18 ← *((const byte[5]) main::cs#0 + (byte) main::i#10)
|
||||
[146] (byte) printu::res#18 ← (byte) main::r#58
|
||||
[146] (byte) printu::res#18 ← (byte) main::r#59
|
||||
[147] call printu
|
||||
to:main::@68
|
||||
main::@68: scope:[main] from main::@20
|
||||
@ -285,10 +285,10 @@ main::@42: scope:[main] from main::@68
|
||||
[149] phi()
|
||||
to:main::@21
|
||||
main::@21: scope:[main] from main::@42 main::@68
|
||||
[150] (byte) main::r#59 ← phi( main::@42/(byte) '+' main::@68/(byte) '-' )
|
||||
[150] (byte) main::r#60 ← phi( main::@42/(byte) '+' main::@68/(byte) '-' )
|
||||
[151] (byte) printu::a#19 ← (byte) main::a#10
|
||||
[152] (byte) printu::b#19 ← (byte) main::a#10
|
||||
[153] (byte) printu::res#19 ← (byte) main::r#59
|
||||
[153] (byte) printu::res#19 ← (byte) main::r#60
|
||||
[154] call printu
|
||||
to:main::@69
|
||||
main::@69: scope:[main] from main::@21
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -86,26 +86,26 @@
|
||||
(const string) main::op4 op4 = (string) "> @"
|
||||
(const string) main::op8 op8 = (string) "<=@"
|
||||
(byte) main::r
|
||||
(byte) main::r#40 reg byte x 3.6666666666666665
|
||||
(byte) main::r#41 reg byte x 5.5
|
||||
(byte) main::r#42 reg byte x 3.6666666666666665
|
||||
(byte) main::r#41 reg byte x 3.6666666666666665
|
||||
(byte) main::r#42 reg byte x 5.5
|
||||
(byte) main::r#43 reg byte x 3.6666666666666665
|
||||
(byte) main::r#44 reg byte x 3.6666666666666665
|
||||
(byte) main::r#45 reg byte x 5.5
|
||||
(byte) main::r#46 reg byte x 3.6666666666666665
|
||||
(byte) main::r#45 reg byte x 3.6666666666666665
|
||||
(byte) main::r#46 reg byte x 5.5
|
||||
(byte) main::r#47 reg byte x 3.6666666666666665
|
||||
(byte) main::r#48 reg byte x 3.6666666666666665
|
||||
(byte) main::r#49 reg byte x 5.5
|
||||
(byte) main::r#50 reg byte x 3.6666666666666665
|
||||
(byte) main::r#49 reg byte x 3.6666666666666665
|
||||
(byte) main::r#50 reg byte x 5.5
|
||||
(byte) main::r#51 reg byte x 3.6666666666666665
|
||||
(byte) main::r#52 reg byte x 3.6666666666666665
|
||||
(byte) main::r#53 reg byte x 5.5
|
||||
(byte) main::r#54 reg byte x 3.6666666666666665
|
||||
(byte) main::r#53 reg byte x 3.6666666666666665
|
||||
(byte) main::r#54 reg byte x 5.5
|
||||
(byte) main::r#55 reg byte x 3.6666666666666665
|
||||
(byte) main::r#56 reg byte x 3.6666666666666665
|
||||
(byte) main::r#57 reg byte x 5.5
|
||||
(byte) main::r#58 reg byte x 3.6666666666666665
|
||||
(byte) main::r#57 reg byte x 3.6666666666666665
|
||||
(byte) main::r#58 reg byte x 5.5
|
||||
(byte) main::r#59 reg byte x 3.6666666666666665
|
||||
(byte) main::r#60 reg byte x 3.6666666666666665
|
||||
(void()) print_byte((byte) print_byte::b)
|
||||
(byte~) print_byte::$0 reg byte a 4.0
|
||||
(byte~) print_byte::$2 reg byte a 4.0
|
||||
@ -233,7 +233,6 @@
|
||||
|
||||
zp ZP_BYTE:2 [ main::a#10 main::a#1 printu::a#20 printu::a#8 printu::a#9 printu::a#10 printu::a#11 printu::a#12 printu::a#13 printu::a#14 printu::a#15 printu::a#16 printu::a#17 printu::a#0 printu::a#18 printu::a#19 printu::a#1 printu::a#2 printu::a#3 printu::a#4 printu::a#5 printu::a#6 printu::a#7 ]
|
||||
zp ZP_BYTE:3 [ main::i#10 main::i#1 ]
|
||||
reg byte x [ main::r#40 ]
|
||||
reg byte x [ main::r#41 ]
|
||||
reg byte x [ main::r#42 ]
|
||||
reg byte x [ main::r#43 ]
|
||||
@ -253,6 +252,7 @@ reg byte x [ main::r#56 ]
|
||||
reg byte x [ main::r#57 ]
|
||||
reg byte x [ main::r#58 ]
|
||||
reg byte x [ main::r#59 ]
|
||||
reg byte x [ main::r#60 ]
|
||||
zp ZP_WORD:4 [ print_line_cursor#13 print_line_cursor#25 print_line_cursor#27 print_line_cursor#1 print_cls::sc#2 print_cls::sc#1 ]
|
||||
zp ZP_WORD:6 [ printu::op#20 print_str::str#2 print_str::str#1 print_str::str#0 ]
|
||||
zp ZP_BYTE:8 [ printu::b#20 printu::b#8 printu::b#10 printu::b#11 printu::b#12 printu::b#14 printu::b#15 printu::b#16 printu::b#0 printu::b#18 printu::b#19 printu::b#2 printu::b#3 printu::b#4 printu::b#6 printu::b#7 ]
|
||||
|
@ -11,23 +11,23 @@ main: scope:[main] from @1
|
||||
[4] phi()
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@4
|
||||
[5] (word) main::line#5 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@4/(word) main::line#1 )
|
||||
[5] (word) main::line#6 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@4/(word) main::line#2 )
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1 main::@2
|
||||
[6] (byte) main::c#4 ← phi( main::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@2/(byte) main::c#1 )
|
||||
[7] (word~) main::$0 ← (word) main::line#5 + (byte) main::c#4
|
||||
[8] (word~) main::$2 ← (word) main::line#5 + (byte) main::c#4
|
||||
[7] (word~) main::$0 ← (word) main::line#6 + (byte) main::c#4
|
||||
[8] (word~) main::$2 ← (word) main::line#6 + (byte) main::c#4
|
||||
[9] *((const byte*) main::screen#0 + (word~) main::$0) ← *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 40 + (word~) main::$2)
|
||||
[10] (byte) main::c#1 ← ++ (byte) main::c#4
|
||||
[11] if((byte) main::c#1<(byte/signed byte/word/signed word/dword/signed dword) 40) goto main::@2
|
||||
to:main::@4
|
||||
main::@4: scope:[main] from main::@2
|
||||
[12] (word) main::line#1 ← (word) main::line#5 + (byte/signed byte/word/signed word/dword/signed dword) 40
|
||||
[13] if((word) main::line#1<(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 24) goto main::@1
|
||||
[12] (word) main::line#2 ← (word) main::line#6 + (byte/signed byte/word/signed word/dword/signed dword) 40
|
||||
[13] if((word) main::line#2<(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 24) goto main::@1
|
||||
to:main::@3
|
||||
main::@3: scope:[main] from main::@3 main::@4
|
||||
[14] (byte) main::c#5 ← phi( main::@3/(byte) main::c#3 main::@4/(byte/signed byte/word/signed word/dword/signed dword) 0 )
|
||||
[15] (word~) main::$6 ← (word) main::line#1 + (byte) main::c#5
|
||||
[15] (word~) main::$6 ← (word) main::line#2 + (byte) main::c#5
|
||||
[16] *((const byte*) main::screen#0 + (word~) main::$6) ← (byte) ' '
|
||||
[17] (byte) main::c#3 ← ++ (byte) main::c#5
|
||||
[18] if((byte) main::c#3<(byte/signed byte/word/signed word/dword/signed dword) 40) goto main::@3
|
||||
|
@ -5,18 +5,19 @@ CONTROL FLOW GRAPH SSA
|
||||
main: scope:[main] from @1
|
||||
(byte*) main::screen#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
|
||||
(word) main::line#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
(word) main::line#1 ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@4
|
||||
(byte*) main::screen#3 ← phi( main/(byte*) main::screen#0 main::@4/(byte*) main::screen#5 )
|
||||
(word) main::line#5 ← phi( main/(word) main::line#0 main::@4/(word) main::line#1 )
|
||||
(word) main::line#6 ← phi( main/(word) main::line#1 main::@4/(word) main::line#2 )
|
||||
(byte) main::c#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1 main::@2
|
||||
(byte*) main::screen#1 ← phi( main::@1/(byte*) main::screen#3 main::@2/(byte*) main::screen#1 )
|
||||
(byte) main::c#4 ← phi( main::@1/(byte) main::c#0 main::@2/(byte) main::c#1 )
|
||||
(word) main::line#2 ← phi( main::@1/(word) main::line#5 main::@2/(word) main::line#2 )
|
||||
(word~) main::$0 ← (word) main::line#2 + (byte) main::c#4
|
||||
(word~) main::$1 ← (word) main::line#2 + (byte) main::c#4
|
||||
(word) main::line#3 ← phi( main::@1/(word) main::line#6 main::@2/(word) main::line#3 )
|
||||
(word~) main::$0 ← (word) main::line#3 + (byte) main::c#4
|
||||
(word~) main::$1 ← (word) main::line#3 + (byte) main::c#4
|
||||
(word/signed dword/dword~) main::$2 ← (word~) main::$1 + (byte/signed byte/word/signed word/dword/signed dword) 40
|
||||
*((byte*) main::screen#1 + (word~) main::$0) ← *((byte*) main::screen#1 + (word/signed dword/dword~) main::$2)
|
||||
(byte) main::c#1 ← ++ (byte) main::c#4
|
||||
@ -25,22 +26,22 @@ main::@2: scope:[main] from main::@1 main::@2
|
||||
to:main::@4
|
||||
main::@4: scope:[main] from main::@2
|
||||
(byte*) main::screen#5 ← phi( main::@2/(byte*) main::screen#1 )
|
||||
(word) main::line#3 ← phi( main::@2/(word) main::line#2 )
|
||||
(word) main::line#1 ← (word) main::line#3 + (byte/signed byte/word/signed word/dword/signed dword) 40
|
||||
(word) main::line#4 ← phi( main::@2/(word) main::line#3 )
|
||||
(word) main::line#2 ← (word) main::line#4 + (byte/signed byte/word/signed word/dword/signed dword) 40
|
||||
(word/signed word/dword/signed dword~) main::$4 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 24
|
||||
(bool~) main::$5 ← (word) main::line#1 < (word/signed word/dword/signed dword~) main::$4
|
||||
(bool~) main::$5 ← (word) main::line#2 < (word/signed word/dword/signed dword~) main::$4
|
||||
if((bool~) main::$5) goto main::@1
|
||||
to:main::@5
|
||||
main::@5: scope:[main] from main::@4
|
||||
(byte*) main::screen#4 ← phi( main::@4/(byte*) main::screen#5 )
|
||||
(word) main::line#6 ← phi( main::@4/(word) main::line#1 )
|
||||
(word) main::line#7 ← phi( main::@4/(word) main::line#2 )
|
||||
(byte) main::c#2 ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
to:main::@3
|
||||
main::@3: scope:[main] from main::@3 main::@5
|
||||
(byte*) main::screen#2 ← phi( main::@3/(byte*) main::screen#2 main::@5/(byte*) main::screen#4 )
|
||||
(byte) main::c#5 ← phi( main::@3/(byte) main::c#3 main::@5/(byte) main::c#2 )
|
||||
(word) main::line#4 ← phi( main::@3/(word) main::line#4 main::@5/(word) main::line#6 )
|
||||
(word~) main::$6 ← (word) main::line#4 + (byte) main::c#5
|
||||
(word) main::line#5 ← phi( main::@3/(word) main::line#5 main::@5/(word) main::line#7 )
|
||||
(word~) main::$6 ← (word) main::line#5 + (byte) main::c#5
|
||||
*((byte*) main::screen#2 + (word~) main::$6) ← (byte) ' '
|
||||
(byte) main::c#3 ← ++ (byte) main::c#5
|
||||
(bool~) main::$7 ← (byte) main::c#3 < (byte/signed byte/word/signed word/dword/signed dword) 40
|
||||
@ -91,6 +92,7 @@ SYMBOL TABLE SSA
|
||||
(word) main::line#4
|
||||
(word) main::line#5
|
||||
(word) main::line#6
|
||||
(word) main::line#7
|
||||
(byte*) main::screen
|
||||
(byte*) main::screen#0
|
||||
(byte*) main::screen#1
|
||||
@ -101,30 +103,32 @@ SYMBOL TABLE SSA
|
||||
|
||||
Culled Empty Block (label) @2
|
||||
Successful SSA optimization Pass2CullEmptyBlocks
|
||||
Alias (word) main::line#2 = (word) main::line#3
|
||||
Alias (word) main::line#3 = (word) main::line#4
|
||||
Alias (byte*) main::screen#1 = (byte*) main::screen#5 (byte*) main::screen#4
|
||||
Alias (word) main::line#1 = (word) main::line#6
|
||||
Alias (word) main::line#2 = (word) main::line#7
|
||||
Successful SSA optimization Pass2AliasElimination
|
||||
Self Phi Eliminated (word) main::line#2
|
||||
Self Phi Eliminated (word) main::line#3
|
||||
Self Phi Eliminated (byte*) main::screen#1
|
||||
Self Phi Eliminated (word) main::line#4
|
||||
Self Phi Eliminated (word) main::line#5
|
||||
Self Phi Eliminated (byte*) main::screen#2
|
||||
Successful SSA optimization Pass2SelfPhiElimination
|
||||
Redundant Phi (word) main::line#2 (word) main::line#5
|
||||
Redundant Phi (word) main::line#3 (word) main::line#6
|
||||
Redundant Phi (byte*) main::screen#1 (byte*) main::screen#3
|
||||
Redundant Phi (word) main::line#4 (word) main::line#1
|
||||
Redundant Phi (word) main::line#5 (word) main::line#2
|
||||
Redundant Phi (byte*) main::screen#2 (byte*) main::screen#1
|
||||
Successful SSA optimization Pass2RedundantPhiElimination
|
||||
Simple Condition (bool~) main::$3 [11] if((byte) main::c#1<(byte/signed byte/word/signed word/dword/signed dword) 40) goto main::@2
|
||||
Simple Condition (bool~) main::$5 [16] if((word) main::line#1<(word/signed word/dword/signed dword~) main::$4) goto main::@1
|
||||
Simple Condition (bool~) main::$7 [24] if((byte) main::c#3<(byte/signed byte/word/signed word/dword/signed dword) 40) goto main::@3
|
||||
Simple Condition (bool~) main::$3 [12] if((byte) main::c#1<(byte/signed byte/word/signed word/dword/signed dword) 40) goto main::@2
|
||||
Simple Condition (bool~) main::$5 [17] if((word) main::line#2<(word/signed word/dword/signed dword~) main::$4) goto main::@1
|
||||
Simple Condition (bool~) main::$7 [25] if((byte) main::c#3<(byte/signed byte/word/signed word/dword/signed dword) 40) goto main::@3
|
||||
Successful SSA optimization Pass2ConditionalJumpSimplification
|
||||
Constant (const byte*) main::screen#0 = ((byte*))1024
|
||||
Constant (const word) main::line#0 = 0
|
||||
Constant (const word) main::line#1 = 0
|
||||
Constant (const byte) main::c#0 = 0
|
||||
Constant (const word/signed word/dword/signed dword) main::$4 = 40*24
|
||||
Constant (const byte) main::c#2 = 0
|
||||
Successful SSA optimization Pass2ConstantIdentification
|
||||
Successful SSA optimization PassNEliminateUnusedVars
|
||||
Culled Empty Block (label) main::@5
|
||||
Successful SSA optimization Pass2CullEmptyBlocks
|
||||
Self Phi Eliminated (byte*) main::screen#3
|
||||
@ -136,13 +140,13 @@ Successful SSA optimization Pass2ConstantAdditionElimination
|
||||
Inferred type updated to word in [4] (word/signed dword/dword~) main::$2 ← (word~) main::$1
|
||||
Alias (word~) main::$2 = (word~) main::$1
|
||||
Successful SSA optimization Pass2AliasElimination
|
||||
Inlining constant with var siblings (const word) main::line#0
|
||||
Inlining constant with var siblings (const word) main::line#1
|
||||
Inlining constant with var siblings (const byte) main::c#0
|
||||
Inlining constant with var siblings (const byte) main::c#2
|
||||
Constant inlined main::c#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
Constant inlined main::$4 = (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 24
|
||||
Constant inlined main::line#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
Constant inlined main::c#2 = (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
Constant inlined main::line#1 = (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
Successful SSA optimization Pass2ConstantInlining
|
||||
Added new block during phi lifting main::@7(between main::@4 and main::@1)
|
||||
Added new block during phi lifting main::@8(between main::@2 and main::@2)
|
||||
@ -156,7 +160,7 @@ Calls in [] to main:2
|
||||
|
||||
Created 3 initial phi equivalence classes
|
||||
Coalesced [20] main::c#7 ← main::c#3
|
||||
Coalesced [21] main::line#7 ← main::line#1
|
||||
Coalesced [21] main::line#8 ← main::line#2
|
||||
Coalesced [22] main::c#6 ← main::c#1
|
||||
Coalesced down to 3 phi equivalence classes
|
||||
Culled Empty Block (label) main::@9
|
||||
@ -181,23 +185,23 @@ main: scope:[main] from @1
|
||||
[4] phi()
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@4
|
||||
[5] (word) main::line#5 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@4/(word) main::line#1 )
|
||||
[5] (word) main::line#6 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@4/(word) main::line#2 )
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1 main::@2
|
||||
[6] (byte) main::c#4 ← phi( main::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@2/(byte) main::c#1 )
|
||||
[7] (word~) main::$0 ← (word) main::line#5 + (byte) main::c#4
|
||||
[8] (word~) main::$2 ← (word) main::line#5 + (byte) main::c#4
|
||||
[7] (word~) main::$0 ← (word) main::line#6 + (byte) main::c#4
|
||||
[8] (word~) main::$2 ← (word) main::line#6 + (byte) main::c#4
|
||||
[9] *((const byte*) main::screen#0 + (word~) main::$0) ← *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 40 + (word~) main::$2)
|
||||
[10] (byte) main::c#1 ← ++ (byte) main::c#4
|
||||
[11] if((byte) main::c#1<(byte/signed byte/word/signed word/dword/signed dword) 40) goto main::@2
|
||||
to:main::@4
|
||||
main::@4: scope:[main] from main::@2
|
||||
[12] (word) main::line#1 ← (word) main::line#5 + (byte/signed byte/word/signed word/dword/signed dword) 40
|
||||
[13] if((word) main::line#1<(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 24) goto main::@1
|
||||
[12] (word) main::line#2 ← (word) main::line#6 + (byte/signed byte/word/signed word/dword/signed dword) 40
|
||||
[13] if((word) main::line#2<(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 24) goto main::@1
|
||||
to:main::@3
|
||||
main::@3: scope:[main] from main::@3 main::@4
|
||||
[14] (byte) main::c#5 ← phi( main::@3/(byte) main::c#3 main::@4/(byte/signed byte/word/signed word/dword/signed dword) 0 )
|
||||
[15] (word~) main::$6 ← (word) main::line#1 + (byte) main::c#5
|
||||
[15] (word~) main::$6 ← (word) main::line#2 + (byte) main::c#5
|
||||
[16] *((const byte*) main::screen#0 + (word~) main::$6) ← (byte) ' '
|
||||
[17] (byte) main::c#3 ← ++ (byte) main::c#5
|
||||
[18] if((byte) main::c#3<(byte/signed byte/word/signed word/dword/signed dword) 40) goto main::@3
|
||||
@ -218,25 +222,25 @@ VARIABLE REGISTER WEIGHTS
|
||||
(byte) main::c#4 101.0
|
||||
(byte) main::c#5 11.0
|
||||
(word) main::line
|
||||
(word) main::line#1 6.285714285714286
|
||||
(word) main::line#5 32.0
|
||||
(word) main::line#2 6.285714285714286
|
||||
(word) main::line#6 32.0
|
||||
(byte*) main::screen
|
||||
|
||||
Initial phi equivalence classes
|
||||
[ main::line#5 main::line#1 ]
|
||||
[ main::line#6 main::line#2 ]
|
||||
[ main::c#4 main::c#1 ]
|
||||
[ main::c#5 main::c#3 ]
|
||||
Added variable main::$0 to zero page equivalence class [ main::$0 ]
|
||||
Added variable main::$2 to zero page equivalence class [ main::$2 ]
|
||||
Added variable main::$6 to zero page equivalence class [ main::$6 ]
|
||||
Complete equivalence classes
|
||||
[ main::line#5 main::line#1 ]
|
||||
[ main::line#6 main::line#2 ]
|
||||
[ main::c#4 main::c#1 ]
|
||||
[ main::c#5 main::c#3 ]
|
||||
[ main::$0 ]
|
||||
[ main::$2 ]
|
||||
[ main::$6 ]
|
||||
Allocated zp ZP_WORD:2 [ main::line#5 main::line#1 ]
|
||||
Allocated zp ZP_WORD:2 [ main::line#6 main::line#2 ]
|
||||
Allocated zp ZP_BYTE:4 [ main::c#4 main::c#1 ]
|
||||
Allocated zp ZP_BYTE:5 [ main::c#5 main::c#3 ]
|
||||
Allocated zp ZP_WORD:6 [ main::$0 ]
|
||||
@ -278,7 +282,7 @@ main: {
|
||||
.label c_5 = 5
|
||||
//SEG11 [5] phi from main to main::@1 [phi:main->main::@1]
|
||||
b1_from_main:
|
||||
//SEG12 [5] phi (word) main::line#5 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#0] -- vwuz1=vbuc1
|
||||
//SEG12 [5] phi (word) main::line#6 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#0] -- vwuz1=vbuc1
|
||||
lda #<0
|
||||
sta line
|
||||
lda #>0
|
||||
@ -286,7 +290,7 @@ main: {
|
||||
jmp b1
|
||||
//SEG13 [5] phi from main::@4 to main::@1 [phi:main::@4->main::@1]
|
||||
b1_from_b4:
|
||||
//SEG14 [5] phi (word) main::line#5 = (word) main::line#1 [phi:main::@4->main::@1#0] -- register_copy
|
||||
//SEG14 [5] phi (word) main::line#6 = (word) main::line#2 [phi:main::@4->main::@1#0] -- register_copy
|
||||
jmp b1
|
||||
//SEG15 main::@1
|
||||
b1:
|
||||
@ -302,7 +306,7 @@ main: {
|
||||
jmp b2
|
||||
//SEG20 main::@2
|
||||
b2:
|
||||
//SEG21 [7] (word~) main::$0 ← (word) main::line#5 + (byte) main::c#4 -- vwuz1=vwuz2_plus_vbuz3
|
||||
//SEG21 [7] (word~) main::$0 ← (word) main::line#6 + (byte) main::c#4 -- vwuz1=vwuz2_plus_vbuz3
|
||||
lda c
|
||||
clc
|
||||
adc line
|
||||
@ -310,7 +314,7 @@ main: {
|
||||
lda #0
|
||||
adc line+1
|
||||
sta _0+1
|
||||
//SEG22 [8] (word~) main::$2 ← (word) main::line#5 + (byte) main::c#4 -- vwuz1=vwuz2_plus_vbuz3
|
||||
//SEG22 [8] (word~) main::$2 ← (word) main::line#6 + (byte) main::c#4 -- vwuz1=vwuz2_plus_vbuz3
|
||||
lda c
|
||||
clc
|
||||
adc line
|
||||
@ -346,7 +350,7 @@ main: {
|
||||
jmp b4
|
||||
//SEG26 main::@4
|
||||
b4:
|
||||
//SEG27 [12] (word) main::line#1 ← (word) main::line#5 + (byte/signed byte/word/signed word/dword/signed dword) 40 -- vwuz1=vwuz1_plus_vbuc1
|
||||
//SEG27 [12] (word) main::line#2 ← (word) main::line#6 + (byte/signed byte/word/signed word/dword/signed dword) 40 -- vwuz1=vwuz1_plus_vbuc1
|
||||
clc
|
||||
lda line
|
||||
adc #<$28
|
||||
@ -354,7 +358,7 @@ main: {
|
||||
lda line+1
|
||||
adc #>$28
|
||||
sta line+1
|
||||
//SEG28 [13] if((word) main::line#1<(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 24) goto main::@1 -- vwuz1_lt_vwuc1_then_la1
|
||||
//SEG28 [13] if((word) main::line#2<(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 24) goto main::@1 -- vwuz1_lt_vwuc1_then_la1
|
||||
lda line+1
|
||||
cmp #>$28*$18
|
||||
bcc b1_from_b4
|
||||
@ -376,7 +380,7 @@ main: {
|
||||
jmp b3
|
||||
//SEG33 main::@3
|
||||
b3:
|
||||
//SEG34 [15] (word~) main::$6 ← (word) main::line#1 + (byte) main::c#5 -- vwuz1=vwuz2_plus_vbuz3
|
||||
//SEG34 [15] (word~) main::$6 ← (word) main::line#2 + (byte) main::c#5 -- vwuz1=vwuz2_plus_vbuz3
|
||||
lda c_5
|
||||
clc
|
||||
adc line
|
||||
@ -409,23 +413,23 @@ main: {
|
||||
}
|
||||
|
||||
REGISTER UPLIFT POTENTIAL REGISTERS
|
||||
Statement [7] (word~) main::$0 ← (word) main::line#5 + (byte) main::c#4 [ main::line#5 main::c#4 main::$0 ] ( main:2 [ main::line#5 main::c#4 main::$0 ] ) always clobbers reg byte a
|
||||
Statement [7] (word~) main::$0 ← (word) main::line#6 + (byte) main::c#4 [ main::line#6 main::c#4 main::$0 ] ( main:2 [ main::line#6 main::c#4 main::$0 ] ) always clobbers reg byte a
|
||||
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ main::c#4 main::c#1 ]
|
||||
Statement [8] (word~) main::$2 ← (word) main::line#5 + (byte) main::c#4 [ main::line#5 main::c#4 main::$0 main::$2 ] ( main:2 [ main::line#5 main::c#4 main::$0 main::$2 ] ) always clobbers reg byte a
|
||||
Statement [9] *((const byte*) main::screen#0 + (word~) main::$0) ← *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 40 + (word~) main::$2) [ main::line#5 main::c#4 ] ( main:2 [ main::line#5 main::c#4 ] ) always clobbers reg byte a
|
||||
Statement [12] (word) main::line#1 ← (word) main::line#5 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ main::line#1 ] ( main:2 [ main::line#1 ] ) always clobbers reg byte a
|
||||
Statement [13] if((word) main::line#1<(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 24) goto main::@1 [ main::line#1 ] ( main:2 [ main::line#1 ] ) always clobbers reg byte a
|
||||
Statement [15] (word~) main::$6 ← (word) main::line#1 + (byte) main::c#5 [ main::line#1 main::c#5 main::$6 ] ( main:2 [ main::line#1 main::c#5 main::$6 ] ) always clobbers reg byte a
|
||||
Statement [8] (word~) main::$2 ← (word) main::line#6 + (byte) main::c#4 [ main::line#6 main::c#4 main::$0 main::$2 ] ( main:2 [ main::line#6 main::c#4 main::$0 main::$2 ] ) always clobbers reg byte a
|
||||
Statement [9] *((const byte*) main::screen#0 + (word~) main::$0) ← *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 40 + (word~) main::$2) [ main::line#6 main::c#4 ] ( main:2 [ main::line#6 main::c#4 ] ) always clobbers reg byte a
|
||||
Statement [12] (word) main::line#2 ← (word) main::line#6 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ main::line#2 ] ( main:2 [ main::line#2 ] ) always clobbers reg byte a
|
||||
Statement [13] if((word) main::line#2<(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 24) goto main::@1 [ main::line#2 ] ( main:2 [ main::line#2 ] ) always clobbers reg byte a
|
||||
Statement [15] (word~) main::$6 ← (word) main::line#2 + (byte) main::c#5 [ main::line#2 main::c#5 main::$6 ] ( main:2 [ main::line#2 main::c#5 main::$6 ] ) always clobbers reg byte a
|
||||
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ main::c#5 main::c#3 ]
|
||||
Statement [16] *((const byte*) main::screen#0 + (word~) main::$6) ← (byte) ' ' [ main::line#1 main::c#5 ] ( main:2 [ main::line#1 main::c#5 ] ) always clobbers reg byte a
|
||||
Statement [7] (word~) main::$0 ← (word) main::line#5 + (byte) main::c#4 [ main::line#5 main::c#4 main::$0 ] ( main:2 [ main::line#5 main::c#4 main::$0 ] ) always clobbers reg byte a
|
||||
Statement [8] (word~) main::$2 ← (word) main::line#5 + (byte) main::c#4 [ main::line#5 main::c#4 main::$0 main::$2 ] ( main:2 [ main::line#5 main::c#4 main::$0 main::$2 ] ) always clobbers reg byte a
|
||||
Statement [9] *((const byte*) main::screen#0 + (word~) main::$0) ← *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 40 + (word~) main::$2) [ main::line#5 main::c#4 ] ( main:2 [ main::line#5 main::c#4 ] ) always clobbers reg byte a
|
||||
Statement [12] (word) main::line#1 ← (word) main::line#5 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ main::line#1 ] ( main:2 [ main::line#1 ] ) always clobbers reg byte a
|
||||
Statement [13] if((word) main::line#1<(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 24) goto main::@1 [ main::line#1 ] ( main:2 [ main::line#1 ] ) always clobbers reg byte a
|
||||
Statement [15] (word~) main::$6 ← (word) main::line#1 + (byte) main::c#5 [ main::line#1 main::c#5 main::$6 ] ( main:2 [ main::line#1 main::c#5 main::$6 ] ) always clobbers reg byte a
|
||||
Statement [16] *((const byte*) main::screen#0 + (word~) main::$6) ← (byte) ' ' [ main::line#1 main::c#5 ] ( main:2 [ main::line#1 main::c#5 ] ) always clobbers reg byte a
|
||||
Potential registers zp ZP_WORD:2 [ main::line#5 main::line#1 ] : zp ZP_WORD:2 ,
|
||||
Statement [16] *((const byte*) main::screen#0 + (word~) main::$6) ← (byte) ' ' [ main::line#2 main::c#5 ] ( main:2 [ main::line#2 main::c#5 ] ) always clobbers reg byte a
|
||||
Statement [7] (word~) main::$0 ← (word) main::line#6 + (byte) main::c#4 [ main::line#6 main::c#4 main::$0 ] ( main:2 [ main::line#6 main::c#4 main::$0 ] ) always clobbers reg byte a
|
||||
Statement [8] (word~) main::$2 ← (word) main::line#6 + (byte) main::c#4 [ main::line#6 main::c#4 main::$0 main::$2 ] ( main:2 [ main::line#6 main::c#4 main::$0 main::$2 ] ) always clobbers reg byte a
|
||||
Statement [9] *((const byte*) main::screen#0 + (word~) main::$0) ← *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 40 + (word~) main::$2) [ main::line#6 main::c#4 ] ( main:2 [ main::line#6 main::c#4 ] ) always clobbers reg byte a
|
||||
Statement [12] (word) main::line#2 ← (word) main::line#6 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ main::line#2 ] ( main:2 [ main::line#2 ] ) always clobbers reg byte a
|
||||
Statement [13] if((word) main::line#2<(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 24) goto main::@1 [ main::line#2 ] ( main:2 [ main::line#2 ] ) always clobbers reg byte a
|
||||
Statement [15] (word~) main::$6 ← (word) main::line#2 + (byte) main::c#5 [ main::line#2 main::c#5 main::$6 ] ( main:2 [ main::line#2 main::c#5 main::$6 ] ) always clobbers reg byte a
|
||||
Statement [16] *((const byte*) main::screen#0 + (word~) main::$6) ← (byte) ' ' [ main::line#2 main::c#5 ] ( main:2 [ main::line#2 main::c#5 ] ) always clobbers reg byte a
|
||||
Potential registers zp ZP_WORD:2 [ main::line#6 main::line#2 ] : zp ZP_WORD:2 ,
|
||||
Potential registers zp ZP_BYTE:4 [ main::c#4 main::c#1 ] : zp ZP_BYTE:4 , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:5 [ main::c#5 main::c#3 ] : zp ZP_BYTE:5 , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_WORD:6 [ main::$0 ] : zp ZP_WORD:6 ,
|
||||
@ -433,10 +437,10 @@ Potential registers zp ZP_WORD:8 [ main::$2 ] : zp ZP_WORD:8 ,
|
||||
Potential registers zp ZP_WORD:10 [ main::$6 ] : zp ZP_WORD:10 ,
|
||||
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [main] 252.5: zp ZP_BYTE:4 [ main::c#4 main::c#1 ] 202: zp ZP_WORD:8 [ main::$2 ] 101: zp ZP_WORD:6 [ main::$0 ] 38.29: zp ZP_WORD:2 [ main::line#5 main::line#1 ] 27.5: zp ZP_BYTE:5 [ main::c#5 main::c#3 ] 22: zp ZP_WORD:10 [ main::$6 ]
|
||||
Uplift Scope [main] 252.5: zp ZP_BYTE:4 [ main::c#4 main::c#1 ] 202: zp ZP_WORD:8 [ main::$2 ] 101: zp ZP_WORD:6 [ main::$0 ] 38.29: zp ZP_WORD:2 [ main::line#6 main::line#2 ] 27.5: zp ZP_BYTE:5 [ main::c#5 main::c#3 ] 22: zp ZP_WORD:10 [ main::$6 ]
|
||||
Uplift Scope []
|
||||
|
||||
Uplifting [main] best 11298 combination reg byte x [ main::c#4 main::c#1 ] zp ZP_WORD:8 [ main::$2 ] zp ZP_WORD:6 [ main::$0 ] zp ZP_WORD:2 [ main::line#5 main::line#1 ] reg byte x [ main::c#5 main::c#3 ] zp ZP_WORD:10 [ main::$6 ]
|
||||
Uplifting [main] best 11298 combination reg byte x [ main::c#4 main::c#1 ] zp ZP_WORD:8 [ main::$2 ] zp ZP_WORD:6 [ main::$0 ] zp ZP_WORD:2 [ main::line#6 main::line#2 ] reg byte x [ main::c#5 main::c#3 ] zp ZP_WORD:10 [ main::$6 ]
|
||||
Uplifting [] best 11298 combination
|
||||
Coalescing zero page register [ zp ZP_WORD:6 [ main::$0 ] ] with [ zp ZP_WORD:10 [ main::$6 ] ]
|
||||
Allocated (was zp ZP_WORD:6) zp ZP_WORD:4 [ main::$0 main::$6 ]
|
||||
@ -474,7 +478,7 @@ main: {
|
||||
.label line = 2
|
||||
//SEG11 [5] phi from main to main::@1 [phi:main->main::@1]
|
||||
b1_from_main:
|
||||
//SEG12 [5] phi (word) main::line#5 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#0] -- vwuz1=vbuc1
|
||||
//SEG12 [5] phi (word) main::line#6 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#0] -- vwuz1=vbuc1
|
||||
lda #<0
|
||||
sta line
|
||||
lda #>0
|
||||
@ -482,7 +486,7 @@ main: {
|
||||
jmp b1
|
||||
//SEG13 [5] phi from main::@4 to main::@1 [phi:main::@4->main::@1]
|
||||
b1_from_b4:
|
||||
//SEG14 [5] phi (word) main::line#5 = (word) main::line#1 [phi:main::@4->main::@1#0] -- register_copy
|
||||
//SEG14 [5] phi (word) main::line#6 = (word) main::line#2 [phi:main::@4->main::@1#0] -- register_copy
|
||||
jmp b1
|
||||
//SEG15 main::@1
|
||||
b1:
|
||||
@ -497,7 +501,7 @@ main: {
|
||||
jmp b2
|
||||
//SEG20 main::@2
|
||||
b2:
|
||||
//SEG21 [7] (word~) main::$0 ← (word) main::line#5 + (byte) main::c#4 -- vwuz1=vwuz2_plus_vbuxx
|
||||
//SEG21 [7] (word~) main::$0 ← (word) main::line#6 + (byte) main::c#4 -- vwuz1=vwuz2_plus_vbuxx
|
||||
txa
|
||||
clc
|
||||
adc line
|
||||
@ -505,7 +509,7 @@ main: {
|
||||
lda #0
|
||||
adc line+1
|
||||
sta _0+1
|
||||
//SEG22 [8] (word~) main::$2 ← (word) main::line#5 + (byte) main::c#4 -- vwuz1=vwuz2_plus_vbuxx
|
||||
//SEG22 [8] (word~) main::$2 ← (word) main::line#6 + (byte) main::c#4 -- vwuz1=vwuz2_plus_vbuxx
|
||||
txa
|
||||
clc
|
||||
adc line
|
||||
@ -540,7 +544,7 @@ main: {
|
||||
jmp b4
|
||||
//SEG26 main::@4
|
||||
b4:
|
||||
//SEG27 [12] (word) main::line#1 ← (word) main::line#5 + (byte/signed byte/word/signed word/dword/signed dword) 40 -- vwuz1=vwuz1_plus_vbuc1
|
||||
//SEG27 [12] (word) main::line#2 ← (word) main::line#6 + (byte/signed byte/word/signed word/dword/signed dword) 40 -- vwuz1=vwuz1_plus_vbuc1
|
||||
clc
|
||||
lda line
|
||||
adc #<$28
|
||||
@ -548,7 +552,7 @@ main: {
|
||||
lda line+1
|
||||
adc #>$28
|
||||
sta line+1
|
||||
//SEG28 [13] if((word) main::line#1<(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 24) goto main::@1 -- vwuz1_lt_vwuc1_then_la1
|
||||
//SEG28 [13] if((word) main::line#2<(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 24) goto main::@1 -- vwuz1_lt_vwuc1_then_la1
|
||||
lda line+1
|
||||
cmp #>$28*$18
|
||||
bcc b1_from_b4
|
||||
@ -569,7 +573,7 @@ main: {
|
||||
jmp b3
|
||||
//SEG33 main::@3
|
||||
b3:
|
||||
//SEG34 [15] (word~) main::$6 ← (word) main::line#1 + (byte) main::c#5 -- vwuz1=vwuz2_plus_vbuxx
|
||||
//SEG34 [15] (word~) main::$6 ← (word) main::line#2 + (byte) main::c#5 -- vwuz1=vwuz2_plus_vbuxx
|
||||
txa
|
||||
clc
|
||||
adc line
|
||||
@ -660,12 +664,12 @@ FINAL SYMBOL TABLE
|
||||
(byte) main::c#4 reg byte x 101.0
|
||||
(byte) main::c#5 reg byte x 11.0
|
||||
(word) main::line
|
||||
(word) main::line#1 line zp ZP_WORD:2 6.285714285714286
|
||||
(word) main::line#5 line zp ZP_WORD:2 32.0
|
||||
(word) main::line#2 line zp ZP_WORD:2 6.285714285714286
|
||||
(word) main::line#6 line zp ZP_WORD:2 32.0
|
||||
(byte*) main::screen
|
||||
(const byte*) main::screen#0 screen = ((byte*))(word/signed word/dword/signed dword) 1024
|
||||
|
||||
zp ZP_WORD:2 [ main::line#5 main::line#1 ]
|
||||
zp ZP_WORD:2 [ main::line#6 main::line#2 ]
|
||||
reg byte x [ main::c#4 main::c#1 ]
|
||||
reg byte x [ main::c#5 main::c#3 ]
|
||||
zp ZP_WORD:4 [ main::$0 main::$6 ]
|
||||
@ -696,12 +700,12 @@ main: {
|
||||
.label _6 = 4
|
||||
.label line = 2
|
||||
//SEG11 [5] phi from main to main::@1 [phi:main->main::@1]
|
||||
//SEG12 [5] phi (word) main::line#5 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#0] -- vwuz1=vbuc1
|
||||
//SEG12 [5] phi (word) main::line#6 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#0] -- vwuz1=vbuc1
|
||||
lda #<0
|
||||
sta line
|
||||
sta line+1
|
||||
//SEG13 [5] phi from main::@4 to main::@1 [phi:main::@4->main::@1]
|
||||
//SEG14 [5] phi (word) main::line#5 = (word) main::line#1 [phi:main::@4->main::@1#0] -- register_copy
|
||||
//SEG14 [5] phi (word) main::line#6 = (word) main::line#2 [phi:main::@4->main::@1#0] -- register_copy
|
||||
//SEG15 main::@1
|
||||
b1:
|
||||
//SEG16 [6] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
|
||||
@ -711,7 +715,7 @@ main: {
|
||||
//SEG19 [6] phi (byte) main::c#4 = (byte) main::c#1 [phi:main::@2->main::@2#0] -- register_copy
|
||||
//SEG20 main::@2
|
||||
b2:
|
||||
//SEG21 [7] (word~) main::$0 ← (word) main::line#5 + (byte) main::c#4 -- vwuz1=vwuz2_plus_vbuxx
|
||||
//SEG21 [7] (word~) main::$0 ← (word) main::line#6 + (byte) main::c#4 -- vwuz1=vwuz2_plus_vbuxx
|
||||
txa
|
||||
clc
|
||||
adc line
|
||||
@ -719,7 +723,7 @@ main: {
|
||||
lda #0
|
||||
adc line+1
|
||||
sta _0+1
|
||||
//SEG22 [8] (word~) main::$2 ← (word) main::line#5 + (byte) main::c#4 -- vwuz1=vwuz2_plus_vbuxx
|
||||
//SEG22 [8] (word~) main::$2 ← (word) main::line#6 + (byte) main::c#4 -- vwuz1=vwuz2_plus_vbuxx
|
||||
txa
|
||||
clc
|
||||
adc line
|
||||
@ -752,7 +756,7 @@ main: {
|
||||
cpx #$28
|
||||
bcc b2
|
||||
//SEG26 main::@4
|
||||
//SEG27 [12] (word) main::line#1 ← (word) main::line#5 + (byte/signed byte/word/signed word/dword/signed dword) 40 -- vwuz1=vwuz1_plus_vbuc1
|
||||
//SEG27 [12] (word) main::line#2 ← (word) main::line#6 + (byte/signed byte/word/signed word/dword/signed dword) 40 -- vwuz1=vwuz1_plus_vbuc1
|
||||
clc
|
||||
lda line
|
||||
adc #<$28
|
||||
@ -760,7 +764,7 @@ main: {
|
||||
lda line+1
|
||||
adc #>$28
|
||||
sta line+1
|
||||
//SEG28 [13] if((word) main::line#1<(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 24) goto main::@1 -- vwuz1_lt_vwuc1_then_la1
|
||||
//SEG28 [13] if((word) main::line#2<(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 24) goto main::@1 -- vwuz1_lt_vwuc1_then_la1
|
||||
cmp #>$28*$18
|
||||
bcc b1
|
||||
bne !+
|
||||
@ -776,7 +780,7 @@ main: {
|
||||
//SEG32 [14] phi (byte) main::c#5 = (byte) main::c#3 [phi:main::@3->main::@3#0] -- register_copy
|
||||
//SEG33 main::@3
|
||||
b3:
|
||||
//SEG34 [15] (word~) main::$6 ← (word) main::line#1 + (byte) main::c#5 -- vwuz1=vwuz2_plus_vbuxx
|
||||
//SEG34 [15] (word~) main::$6 ← (word) main::line#2 + (byte) main::c#5 -- vwuz1=vwuz2_plus_vbuxx
|
||||
txa
|
||||
clc
|
||||
adc line
|
||||
|
@ -16,12 +16,12 @@
|
||||
(byte) main::c#4 reg byte x 101.0
|
||||
(byte) main::c#5 reg byte x 11.0
|
||||
(word) main::line
|
||||
(word) main::line#1 line zp ZP_WORD:2 6.285714285714286
|
||||
(word) main::line#5 line zp ZP_WORD:2 32.0
|
||||
(word) main::line#2 line zp ZP_WORD:2 6.285714285714286
|
||||
(word) main::line#6 line zp ZP_WORD:2 32.0
|
||||
(byte*) main::screen
|
||||
(const byte*) main::screen#0 screen = ((byte*))(word/signed word/dword/signed dword) 1024
|
||||
|
||||
zp ZP_WORD:2 [ main::line#5 main::line#1 ]
|
||||
zp ZP_WORD:2 [ main::line#6 main::line#2 ]
|
||||
reg byte x [ main::c#4 main::c#1 ]
|
||||
reg byte x [ main::c#5 main::c#3 ]
|
||||
zp ZP_WORD:4 [ main::$0 main::$6 ]
|
||||
|
21
src/test/ref/uninitialized.asm
Normal file
21
src/test/ref/uninitialized.asm
Normal file
@ -0,0 +1,21 @@
|
||||
// Tests uninitialized values of variables.
|
||||
.pc = $801 "Basic"
|
||||
:BasicUpstart(main)
|
||||
.pc = $80d "Program"
|
||||
.const b = 0
|
||||
.const w = 0
|
||||
.label ptr = 0
|
||||
.label SCREEN = $400
|
||||
main: {
|
||||
lda #b
|
||||
sta SCREEN
|
||||
lda #<w
|
||||
sta SCREEN+2
|
||||
lda #>w
|
||||
sta SCREEN+3
|
||||
lda #<ptr
|
||||
sta SCREEN+5
|
||||
lda #>ptr
|
||||
sta SCREEN+5
|
||||
rts
|
||||
}
|
19
src/test/ref/uninitialized.cfg
Normal file
19
src/test/ref/uninitialized.cfg
Normal file
@ -0,0 +1,19 @@
|
||||
@begin: scope:[] from
|
||||
[0] phi()
|
||||
to:@1
|
||||
@1: scope:[] from @begin
|
||||
[1] phi()
|
||||
[2] call main
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
[3] phi()
|
||||
main: scope:[main] from @1
|
||||
[4] *((const byte*) SCREEN#0) ← (const byte) b#0
|
||||
[5] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← <(const word) w#0
|
||||
[6] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← >(const word) w#0
|
||||
[7] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 5) ← ((byte))<(const byte*) ptr#0
|
||||
[8] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 5) ← ((byte))>(const byte*) ptr#0
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main
|
||||
[9] return
|
||||
to:@return
|
337
src/test/ref/uninitialized.log
Normal file
337
src/test/ref/uninitialized.log
Normal file
@ -0,0 +1,337 @@
|
||||
|
||||
CONTROL FLOW GRAPH SSA
|
||||
@begin: scope:[] from
|
||||
(byte) b#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
(word) w#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
(byte*) ptr#0 ← (byte*) 0
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
(byte*) ptr#1 ← phi( @1/(byte*) ptr#2 )
|
||||
(word) w#1 ← phi( @1/(word) w#2 )
|
||||
(byte) b#1 ← phi( @1/(byte) b#2 )
|
||||
*((byte*) SCREEN#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte) b#1
|
||||
(byte~) main::$0 ← < (word) w#1
|
||||
*((byte*) SCREEN#0 + (byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte~) main::$0
|
||||
(byte~) main::$1 ← > (word) w#1
|
||||
*((byte*) SCREEN#0 + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte~) main::$1
|
||||
(byte~) main::$2 ← < (byte*) ptr#1
|
||||
(byte~) main::$3 ← ((byte)) (byte~) main::$2
|
||||
*((byte*) SCREEN#0 + (byte/signed byte/word/signed word/dword/signed dword) 5) ← (byte~) main::$3
|
||||
(byte~) main::$4 ← > (byte*) ptr#1
|
||||
(byte~) main::$5 ← ((byte)) (byte~) main::$4
|
||||
*((byte*) SCREEN#0 + (byte/signed byte/word/signed word/dword/signed dword) 5) ← (byte~) main::$5
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main
|
||||
return
|
||||
to:@return
|
||||
@1: scope:[] from @begin
|
||||
(byte*) ptr#2 ← phi( @begin/(byte*) ptr#0 )
|
||||
(word) w#2 ← phi( @begin/(word) w#0 )
|
||||
(byte) b#2 ← phi( @begin/(byte) b#0 )
|
||||
call main
|
||||
to:@2
|
||||
@2: scope:[] from @1
|
||||
to:@end
|
||||
@end: scope:[] from @2
|
||||
|
||||
SYMBOL TABLE SSA
|
||||
(label) @1
|
||||
(label) @2
|
||||
(label) @begin
|
||||
(label) @end
|
||||
(byte*) SCREEN
|
||||
(byte*) SCREEN#0
|
||||
(byte) b
|
||||
(byte) b#0
|
||||
(byte) b#1
|
||||
(byte) b#2
|
||||
(void()) main()
|
||||
(byte~) main::$0
|
||||
(byte~) main::$1
|
||||
(byte~) main::$2
|
||||
(byte~) main::$3
|
||||
(byte~) main::$4
|
||||
(byte~) main::$5
|
||||
(label) main::@return
|
||||
(byte*) ptr
|
||||
(byte*) ptr#0
|
||||
(byte*) ptr#1
|
||||
(byte*) ptr#2
|
||||
(word) w
|
||||
(word) w#0
|
||||
(word) w#1
|
||||
(word) w#2
|
||||
|
||||
Culled Empty Block (label) @2
|
||||
Successful SSA optimization Pass2CullEmptyBlocks
|
||||
Alias (byte) b#0 = (byte) b#2
|
||||
Alias (word) w#0 = (word) w#2
|
||||
Alias (byte*) ptr#0 = (byte*) ptr#2
|
||||
Successful SSA optimization Pass2AliasElimination
|
||||
Redundant Phi (byte) b#1 (byte) b#0
|
||||
Redundant Phi (word) w#1 (word) w#0
|
||||
Redundant Phi (byte*) ptr#1 (byte*) ptr#0
|
||||
Successful SSA optimization Pass2RedundantPhiElimination
|
||||
Constant (const byte) b#0 = 0
|
||||
Constant (const word) w#0 = 0
|
||||
Constant (const byte*) ptr#0 = 0
|
||||
Constant (const byte*) SCREEN#0 = ((byte*))1024
|
||||
Successful SSA optimization Pass2ConstantIdentification
|
||||
Constant (const byte) main::$0 = <w#0
|
||||
Constant (const byte) main::$1 = >w#0
|
||||
Constant (const byte) main::$2 = <ptr#0
|
||||
Constant (const byte) main::$4 = >ptr#0
|
||||
Successful SSA optimization Pass2ConstantIdentification
|
||||
Constant (const byte) main::$3 = ((byte))main::$2
|
||||
Constant (const byte) main::$5 = ((byte))main::$4
|
||||
Successful SSA optimization Pass2ConstantIdentification
|
||||
Consolidated array index constant in *(SCREEN#0+0)
|
||||
Consolidated array index constant in *(SCREEN#0+2)
|
||||
Consolidated array index constant in *(SCREEN#0+3)
|
||||
Consolidated array index constant in *(SCREEN#0+5)
|
||||
Consolidated array index constant in *(SCREEN#0+5)
|
||||
Successful SSA optimization Pass2ConstantAdditionElimination
|
||||
Constant inlined main::$1 = >(const word) w#0
|
||||
Constant inlined main::$2 = <(const byte*) ptr#0
|
||||
Constant inlined main::$0 = <(const word) w#0
|
||||
Constant inlined main::$5 = ((byte))>(const byte*) ptr#0
|
||||
Constant inlined main::$3 = ((byte))<(const byte*) ptr#0
|
||||
Constant inlined main::$4 = >(const byte*) ptr#0
|
||||
Successful SSA optimization Pass2ConstantInlining
|
||||
Simplifying constant plus zero SCREEN#0+0
|
||||
Adding NOP phi() at start of @begin
|
||||
Adding NOP phi() at start of @1
|
||||
Adding NOP phi() at start of @end
|
||||
CALL GRAPH
|
||||
Calls in [] to main:2
|
||||
|
||||
Created 0 initial phi equivalence classes
|
||||
Coalesced down to 0 phi equivalence classes
|
||||
Adding NOP phi() at start of @begin
|
||||
Adding NOP phi() at start of @1
|
||||
Adding NOP phi() at start of @end
|
||||
|
||||
FINAL CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
[0] phi()
|
||||
to:@1
|
||||
@1: scope:[] from @begin
|
||||
[1] phi()
|
||||
[2] call main
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
[3] phi()
|
||||
main: scope:[main] from @1
|
||||
[4] *((const byte*) SCREEN#0) ← (const byte) b#0
|
||||
[5] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← <(const word) w#0
|
||||
[6] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← >(const word) w#0
|
||||
[7] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 5) ← ((byte))<(const byte*) ptr#0
|
||||
[8] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 5) ← ((byte))>(const byte*) ptr#0
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main
|
||||
[9] return
|
||||
to:@return
|
||||
|
||||
|
||||
VARIABLE REGISTER WEIGHTS
|
||||
(byte*) SCREEN
|
||||
(byte) b
|
||||
(void()) main()
|
||||
(byte*) ptr
|
||||
(word) w
|
||||
|
||||
Initial phi equivalence classes
|
||||
Complete equivalence classes
|
||||
|
||||
INITIAL ASM
|
||||
//SEG0 File Comments
|
||||
// Tests uninitialized values of variables.
|
||||
//SEG1 Basic Upstart
|
||||
.pc = $801 "Basic"
|
||||
:BasicUpstart(bbegin)
|
||||
.pc = $80d "Program"
|
||||
//SEG2 Global Constants & labels
|
||||
.const b = 0
|
||||
.const w = 0
|
||||
.label ptr = 0
|
||||
.label SCREEN = $400
|
||||
//SEG3 @begin
|
||||
bbegin:
|
||||
//SEG4 [1] phi from @begin to @1 [phi:@begin->@1]
|
||||
b1_from_bbegin:
|
||||
jmp b1
|
||||
//SEG5 @1
|
||||
b1:
|
||||
//SEG6 [2] call main
|
||||
jsr main
|
||||
//SEG7 [3] phi from @1 to @end [phi:@1->@end]
|
||||
bend_from_b1:
|
||||
jmp bend
|
||||
//SEG8 @end
|
||||
bend:
|
||||
//SEG9 main
|
||||
main: {
|
||||
//SEG10 [4] *((const byte*) SCREEN#0) ← (const byte) b#0 -- _deref_pbuc1=vbuc2
|
||||
lda #b
|
||||
sta SCREEN
|
||||
//SEG11 [5] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← <(const word) w#0 -- _deref_pbuc1=vbuc2
|
||||
lda #<w
|
||||
sta SCREEN+2
|
||||
//SEG12 [6] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← >(const word) w#0 -- _deref_pbuc1=vbuc2
|
||||
lda #>w
|
||||
sta SCREEN+3
|
||||
//SEG13 [7] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 5) ← ((byte))<(const byte*) ptr#0 -- _deref_pbuc1=vbuc2
|
||||
lda #<ptr
|
||||
sta SCREEN+5
|
||||
//SEG14 [8] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 5) ← ((byte))>(const byte*) ptr#0 -- _deref_pbuc1=vbuc2
|
||||
lda #>ptr
|
||||
sta SCREEN+5
|
||||
jmp breturn
|
||||
//SEG15 main::@return
|
||||
breturn:
|
||||
//SEG16 [9] return
|
||||
rts
|
||||
}
|
||||
|
||||
REGISTER UPLIFT POTENTIAL REGISTERS
|
||||
Statement [4] *((const byte*) SCREEN#0) ← (const byte) b#0 [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
Statement [5] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← <(const word) w#0 [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
Statement [6] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← >(const word) w#0 [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
Statement [7] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 5) ← ((byte))<(const byte*) ptr#0 [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
Statement [8] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 5) ← ((byte))>(const byte*) ptr#0 [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [main]
|
||||
Uplift Scope []
|
||||
|
||||
Uplifting [main] best 51 combination
|
||||
Uplifting [] best 51 combination
|
||||
|
||||
ASSEMBLER BEFORE OPTIMIZATION
|
||||
//SEG0 File Comments
|
||||
// Tests uninitialized values of variables.
|
||||
//SEG1 Basic Upstart
|
||||
.pc = $801 "Basic"
|
||||
:BasicUpstart(bbegin)
|
||||
.pc = $80d "Program"
|
||||
//SEG2 Global Constants & labels
|
||||
.const b = 0
|
||||
.const w = 0
|
||||
.label ptr = 0
|
||||
.label SCREEN = $400
|
||||
//SEG3 @begin
|
||||
bbegin:
|
||||
//SEG4 [1] phi from @begin to @1 [phi:@begin->@1]
|
||||
b1_from_bbegin:
|
||||
jmp b1
|
||||
//SEG5 @1
|
||||
b1:
|
||||
//SEG6 [2] call main
|
||||
jsr main
|
||||
//SEG7 [3] phi from @1 to @end [phi:@1->@end]
|
||||
bend_from_b1:
|
||||
jmp bend
|
||||
//SEG8 @end
|
||||
bend:
|
||||
//SEG9 main
|
||||
main: {
|
||||
//SEG10 [4] *((const byte*) SCREEN#0) ← (const byte) b#0 -- _deref_pbuc1=vbuc2
|
||||
lda #b
|
||||
sta SCREEN
|
||||
//SEG11 [5] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← <(const word) w#0 -- _deref_pbuc1=vbuc2
|
||||
lda #<w
|
||||
sta SCREEN+2
|
||||
//SEG12 [6] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← >(const word) w#0 -- _deref_pbuc1=vbuc2
|
||||
lda #>w
|
||||
sta SCREEN+3
|
||||
//SEG13 [7] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 5) ← ((byte))<(const byte*) ptr#0 -- _deref_pbuc1=vbuc2
|
||||
lda #<ptr
|
||||
sta SCREEN+5
|
||||
//SEG14 [8] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 5) ← ((byte))>(const byte*) ptr#0 -- _deref_pbuc1=vbuc2
|
||||
lda #>ptr
|
||||
sta SCREEN+5
|
||||
jmp breturn
|
||||
//SEG15 main::@return
|
||||
breturn:
|
||||
//SEG16 [9] return
|
||||
rts
|
||||
}
|
||||
|
||||
ASSEMBLER OPTIMIZATIONS
|
||||
Removing instruction jmp b1
|
||||
Removing instruction jmp bend
|
||||
Removing instruction jmp breturn
|
||||
Succesful ASM optimization Pass5NextJumpElimination
|
||||
Removing instruction b1_from_bbegin:
|
||||
Removing instruction b1:
|
||||
Removing instruction bend_from_b1:
|
||||
Succesful ASM optimization Pass5RedundantLabelElimination
|
||||
Removing instruction bend:
|
||||
Removing instruction breturn:
|
||||
Succesful ASM optimization Pass5UnusedLabelElimination
|
||||
Updating BasicUpstart to call main directly
|
||||
Removing instruction jsr main
|
||||
Succesful ASM optimization Pass5SkipBegin
|
||||
Removing instruction bbegin:
|
||||
Succesful ASM optimization Pass5UnusedLabelElimination
|
||||
|
||||
FINAL SYMBOL TABLE
|
||||
(label) @1
|
||||
(label) @begin
|
||||
(label) @end
|
||||
(byte*) SCREEN
|
||||
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
|
||||
(byte) b
|
||||
(const byte) b#0 b = (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
(void()) main()
|
||||
(label) main::@return
|
||||
(byte*) ptr
|
||||
(const byte*) ptr#0 ptr = (byte*) 0
|
||||
(word) w
|
||||
(const word) w#0 w = (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
|
||||
|
||||
|
||||
FINAL ASSEMBLER
|
||||
Score: 36
|
||||
|
||||
//SEG0 File Comments
|
||||
// Tests uninitialized values of variables.
|
||||
//SEG1 Basic Upstart
|
||||
.pc = $801 "Basic"
|
||||
:BasicUpstart(main)
|
||||
.pc = $80d "Program"
|
||||
//SEG2 Global Constants & labels
|
||||
.const b = 0
|
||||
.const w = 0
|
||||
.label ptr = 0
|
||||
.label SCREEN = $400
|
||||
//SEG3 @begin
|
||||
//SEG4 [1] phi from @begin to @1 [phi:@begin->@1]
|
||||
//SEG5 @1
|
||||
//SEG6 [2] call main
|
||||
//SEG7 [3] phi from @1 to @end [phi:@1->@end]
|
||||
//SEG8 @end
|
||||
//SEG9 main
|
||||
main: {
|
||||
//SEG10 [4] *((const byte*) SCREEN#0) ← (const byte) b#0 -- _deref_pbuc1=vbuc2
|
||||
lda #b
|
||||
sta SCREEN
|
||||
//SEG11 [5] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← <(const word) w#0 -- _deref_pbuc1=vbuc2
|
||||
lda #<w
|
||||
sta SCREEN+2
|
||||
//SEG12 [6] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← >(const word) w#0 -- _deref_pbuc1=vbuc2
|
||||
lda #>w
|
||||
sta SCREEN+3
|
||||
//SEG13 [7] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 5) ← ((byte))<(const byte*) ptr#0 -- _deref_pbuc1=vbuc2
|
||||
lda #<ptr
|
||||
sta SCREEN+5
|
||||
//SEG14 [8] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 5) ← ((byte))>(const byte*) ptr#0 -- _deref_pbuc1=vbuc2
|
||||
lda #>ptr
|
||||
sta SCREEN+5
|
||||
//SEG15 main::@return
|
||||
//SEG16 [9] return
|
||||
rts
|
||||
}
|
||||
|
14
src/test/ref/uninitialized.sym
Normal file
14
src/test/ref/uninitialized.sym
Normal file
@ -0,0 +1,14 @@
|
||||
(label) @1
|
||||
(label) @begin
|
||||
(label) @end
|
||||
(byte*) SCREEN
|
||||
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
|
||||
(byte) b
|
||||
(const byte) b#0 b = (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
(void()) main()
|
||||
(label) main::@return
|
||||
(byte*) ptr
|
||||
(const byte*) ptr#0 ptr = (byte*) 0
|
||||
(word) w
|
||||
(const word) w#0 w = (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
|
@ -5,8 +5,6 @@ Resolved forward reference screen to (byte*) screen
|
||||
|
||||
CONTROL FLOW GRAPH SSA
|
||||
@begin: scope:[] from
|
||||
(byte) b#6 ← phi( )
|
||||
(byte*) screen#6 ← phi( )
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
(byte*) screen#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
|
||||
@ -14,22 +12,22 @@ main: scope:[main] from @1
|
||||
*((byte*) screen#0) ← (byte) b#0
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main
|
||||
(byte) b#3 ← phi( main/(byte) b#0 )
|
||||
(byte*) screen#3 ← phi( main/(byte*) screen#0 )
|
||||
(byte*) screen#1 ← (byte*) screen#3
|
||||
(byte) b#1 ← (byte) b#3
|
||||
(byte) b#4 ← phi( main/(byte) b#0 )
|
||||
(byte*) screen#4 ← phi( main/(byte*) screen#0 )
|
||||
(byte*) screen#1 ← (byte*) screen#4
|
||||
(byte) b#1 ← (byte) b#4
|
||||
return
|
||||
to:@return
|
||||
@1: scope:[] from @begin
|
||||
(byte) b#5 ← phi( @begin/(byte) b#6 )
|
||||
(byte*) screen#5 ← phi( @begin/(byte*) screen#6 )
|
||||
(byte*) screen#2 ← (byte*) 0
|
||||
(byte) b#2 ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
call main
|
||||
to:@2
|
||||
@2: scope:[] from @1
|
||||
(byte) b#4 ← phi( @1/(byte) b#1 )
|
||||
(byte*) screen#4 ← phi( @1/(byte*) screen#1 )
|
||||
(byte*) screen#2 ← (byte*) screen#4
|
||||
(byte) b#2 ← (byte) b#4
|
||||
(byte) b#5 ← phi( @1/(byte) b#1 )
|
||||
(byte*) screen#5 ← phi( @1/(byte*) screen#1 )
|
||||
(byte*) screen#3 ← (byte*) screen#5
|
||||
(byte) b#3 ← (byte) b#5
|
||||
to:@end
|
||||
@end: scope:[] from @2
|
||||
|
||||
@ -45,7 +43,6 @@ SYMBOL TABLE SSA
|
||||
(byte) b#3
|
||||
(byte) b#4
|
||||
(byte) b#5
|
||||
(byte) b#6
|
||||
(void()) main()
|
||||
(label) main::@return
|
||||
(byte*) screen
|
||||
@ -55,23 +52,21 @@ SYMBOL TABLE SSA
|
||||
(byte*) screen#3
|
||||
(byte*) screen#4
|
||||
(byte*) screen#5
|
||||
(byte*) screen#6
|
||||
|
||||
Alias (byte*) screen#0 = (byte*) screen#3 (byte*) screen#1
|
||||
Alias (byte) b#0 = (byte) b#3 (byte) b#1
|
||||
Alias (byte*) screen#5 = (byte*) screen#6
|
||||
Alias (byte) b#5 = (byte) b#6
|
||||
Alias (byte*) screen#2 = (byte*) screen#4
|
||||
Alias (byte) b#2 = (byte) b#4
|
||||
Alias (byte*) screen#0 = (byte*) screen#4 (byte*) screen#1
|
||||
Alias (byte) b#0 = (byte) b#4 (byte) b#1
|
||||
Alias (byte*) screen#3 = (byte*) screen#5
|
||||
Alias (byte) b#3 = (byte) b#5
|
||||
Successful SSA optimization Pass2AliasElimination
|
||||
Redundant Phi (byte*) screen#5 VOID
|
||||
Redundant Phi (byte) b#5 VOID
|
||||
Redundant Phi (byte*) screen#2 (byte*) screen#0
|
||||
Redundant Phi (byte) b#2 (byte) b#0
|
||||
Redundant Phi (byte*) screen#3 (byte*) screen#0
|
||||
Redundant Phi (byte) b#3 (byte) b#0
|
||||
Successful SSA optimization Pass2RedundantPhiElimination
|
||||
Constant (const byte*) screen#0 = ((byte*))1024
|
||||
Constant (const byte) b#0 = 'a'
|
||||
Constant (const byte*) screen#2 = 0
|
||||
Constant (const byte) b#2 = 0
|
||||
Successful SSA optimization Pass2ConstantIdentification
|
||||
Successful SSA optimization PassNEliminateUnusedVars
|
||||
Culled Empty Block (label) @2
|
||||
Successful SSA optimization Pass2CullEmptyBlocks
|
||||
Adding NOP phi() at start of @begin
|
||||
|
@ -8,7 +8,7 @@
|
||||
@end: scope:[] from @1
|
||||
[3] phi()
|
||||
main: scope:[main] from @1
|
||||
[4] *((const byte*) screen#0) ← (byte) 'a'
|
||||
[4] *((const byte*) screen#1) ← (byte) 'a'
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main
|
||||
[5] return
|
||||
|
@ -1,24 +1,24 @@
|
||||
|
||||
CONTROL FLOW GRAPH SSA
|
||||
@begin: scope:[] from
|
||||
(byte*) screen#6 ← phi( )
|
||||
(byte*) screen#0 ← (byte*) 0
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
(byte*) screen#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
|
||||
*((byte*) screen#0) ← (byte) 'a'
|
||||
(byte*) screen#1 ← ((byte*)) (word/signed word/dword/signed dword) 1024
|
||||
*((byte*) screen#1) ← (byte) 'a'
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main
|
||||
(byte*) screen#3 ← phi( main/(byte*) screen#0 )
|
||||
(byte*) screen#1 ← (byte*) screen#3
|
||||
(byte*) screen#4 ← phi( main/(byte*) screen#1 )
|
||||
(byte*) screen#2 ← (byte*) screen#4
|
||||
return
|
||||
to:@return
|
||||
@1: scope:[] from @begin
|
||||
(byte*) screen#5 ← phi( @begin/(byte*) screen#6 )
|
||||
(byte*) screen#6 ← phi( @begin/(byte*) screen#0 )
|
||||
call main
|
||||
to:@2
|
||||
@2: scope:[] from @1
|
||||
(byte*) screen#4 ← phi( @1/(byte*) screen#1 )
|
||||
(byte*) screen#2 ← (byte*) screen#4
|
||||
(byte*) screen#5 ← phi( @1/(byte*) screen#2 )
|
||||
(byte*) screen#3 ← (byte*) screen#5
|
||||
to:@end
|
||||
@end: scope:[] from @2
|
||||
|
||||
@ -38,15 +38,16 @@ SYMBOL TABLE SSA
|
||||
(byte*) screen#5
|
||||
(byte*) screen#6
|
||||
|
||||
Alias (byte*) screen#0 = (byte*) screen#3 (byte*) screen#1
|
||||
Alias (byte*) screen#5 = (byte*) screen#6
|
||||
Alias (byte*) screen#2 = (byte*) screen#4
|
||||
Alias (byte*) screen#1 = (byte*) screen#4 (byte*) screen#2
|
||||
Alias (byte*) screen#0 = (byte*) screen#6
|
||||
Alias (byte*) screen#3 = (byte*) screen#5
|
||||
Successful SSA optimization Pass2AliasElimination
|
||||
Redundant Phi (byte*) screen#5 VOID
|
||||
Redundant Phi (byte*) screen#2 (byte*) screen#0
|
||||
Redundant Phi (byte*) screen#3 (byte*) screen#1
|
||||
Successful SSA optimization Pass2RedundantPhiElimination
|
||||
Constant (const byte*) screen#0 = ((byte*))1024
|
||||
Constant (const byte*) screen#0 = 0
|
||||
Constant (const byte*) screen#1 = ((byte*))1024
|
||||
Successful SSA optimization Pass2ConstantIdentification
|
||||
Successful SSA optimization PassNEliminateUnusedVars
|
||||
Culled Empty Block (label) @2
|
||||
Successful SSA optimization Pass2CullEmptyBlocks
|
||||
Adding NOP phi() at start of @begin
|
||||
@ -72,7 +73,7 @@ FINAL CONTROL FLOW GRAPH
|
||||
@end: scope:[] from @1
|
||||
[3] phi()
|
||||
main: scope:[main] from @1
|
||||
[4] *((const byte*) screen#0) ← (byte) 'a'
|
||||
[4] *((const byte*) screen#1) ← (byte) 'a'
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main
|
||||
[5] return
|
||||
@ -111,7 +112,7 @@ bend_from_b1:
|
||||
bend:
|
||||
//SEG9 main
|
||||
main: {
|
||||
//SEG10 [4] *((const byte*) screen#0) ← (byte) 'a' -- _deref_pbuc1=vbuc2
|
||||
//SEG10 [4] *((const byte*) screen#1) ← (byte) 'a' -- _deref_pbuc1=vbuc2
|
||||
lda #'a'
|
||||
sta screen
|
||||
jmp breturn
|
||||
@ -122,7 +123,7 @@ main: {
|
||||
}
|
||||
|
||||
REGISTER UPLIFT POTENTIAL REGISTERS
|
||||
Statement [4] *((const byte*) screen#0) ← (byte) 'a' [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
Statement [4] *((const byte*) screen#1) ← (byte) 'a' [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [main]
|
||||
@ -156,7 +157,7 @@ bend_from_b1:
|
||||
bend:
|
||||
//SEG9 main
|
||||
main: {
|
||||
//SEG10 [4] *((const byte*) screen#0) ← (byte) 'a' -- _deref_pbuc1=vbuc2
|
||||
//SEG10 [4] *((const byte*) screen#1) ← (byte) 'a' -- _deref_pbuc1=vbuc2
|
||||
lda #'a'
|
||||
sta screen
|
||||
jmp breturn
|
||||
@ -191,7 +192,7 @@ FINAL SYMBOL TABLE
|
||||
(void()) main()
|
||||
(label) main::@return
|
||||
(byte*) screen
|
||||
(const byte*) screen#0 screen = ((byte*))(word/signed word/dword/signed dword) 1024
|
||||
(const byte*) screen#1 screen = ((byte*))(word/signed word/dword/signed dword) 1024
|
||||
|
||||
|
||||
|
||||
@ -214,7 +215,7 @@ Score: 12
|
||||
//SEG8 @end
|
||||
//SEG9 main
|
||||
main: {
|
||||
//SEG10 [4] *((const byte*) screen#0) ← (byte) 'a' -- _deref_pbuc1=vbuc2
|
||||
//SEG10 [4] *((const byte*) screen#1) ← (byte) 'a' -- _deref_pbuc1=vbuc2
|
||||
lda #'a'
|
||||
sta screen
|
||||
//SEG11 main::@return
|
||||
|
@ -4,5 +4,5 @@
|
||||
(void()) main()
|
||||
(label) main::@return
|
||||
(byte*) screen
|
||||
(const byte*) screen#0 screen = ((byte*))(word/signed word/dword/signed dword) 1024
|
||||
(const byte*) screen#1 screen = ((byte*))(word/signed word/dword/signed dword) 1024
|
||||
|
||||
|
@ -119,25 +119,25 @@ findcol::@2: scope:[findcol] from findcol::@1 findcol::@9
|
||||
[59] if((byte) findcol::x#0<(byte) findcol::xp#0) goto findcol::@4
|
||||
to:findcol::@12
|
||||
findcol::@12: scope:[findcol] from findcol::@2
|
||||
[60] (byte) findcol::diff#1 ← (byte) findcol::x#0 - (byte) findcol::xp#0
|
||||
[60] (byte) findcol::diff#2 ← (byte) findcol::x#0 - (byte) findcol::xp#0
|
||||
to:findcol::@5
|
||||
findcol::@5: scope:[findcol] from findcol::@12 findcol::@4
|
||||
[61] (byte) findcol::diff#4 ← phi( findcol::@12/(byte) findcol::diff#1 findcol::@4/(byte) findcol::diff#0 )
|
||||
[61] (byte) findcol::diff#5 ← phi( findcol::@12/(byte) findcol::diff#2 findcol::@4/(byte) findcol::diff#1 )
|
||||
[62] if((byte) findcol::y#0<(byte) findcol::yp#0) goto findcol::@6
|
||||
to:findcol::@14
|
||||
findcol::@14: scope:[findcol] from findcol::@5
|
||||
[63] (byte~) findcol::$8 ← (byte) findcol::y#0 - (byte) findcol::yp#0
|
||||
[64] (byte) findcol::diff#3 ← (byte) findcol::diff#4 + (byte~) findcol::$8
|
||||
[64] (byte) findcol::diff#4 ← (byte) findcol::diff#5 + (byte~) findcol::$8
|
||||
to:findcol::@7
|
||||
findcol::@7: scope:[findcol] from findcol::@14 findcol::@6
|
||||
[65] (byte) findcol::diff#6 ← phi( findcol::@14/(byte) findcol::diff#3 findcol::@6/(byte) findcol::diff#2 )
|
||||
[66] if((byte) findcol::diff#6>=(byte) findcol::mindiff#10) goto findcol::@21
|
||||
[65] (byte) findcol::diff#7 ← phi( findcol::@14/(byte) findcol::diff#4 findcol::@6/(byte) findcol::diff#3 )
|
||||
[66] if((byte) findcol::diff#7>=(byte) findcol::mindiff#10) goto findcol::@21
|
||||
to:findcol::@16
|
||||
findcol::@16: scope:[findcol] from findcol::@7
|
||||
[67] (byte) findcol::mincol#1 ← *((const byte[]) COLS#0 + (byte) findcol::i#10)
|
||||
to:findcol::@8
|
||||
findcol::@8: scope:[findcol] from findcol::@16 findcol::@21
|
||||
[68] (byte) findcol::mindiff#11 ← phi( findcol::@16/(byte) findcol::diff#6 findcol::@21/(byte~) findcol::mindiff#15 )
|
||||
[68] (byte) findcol::mindiff#11 ← phi( findcol::@16/(byte) findcol::diff#7 findcol::@21/(byte~) findcol::mindiff#15 )
|
||||
[68] (byte) findcol::mincol#2 ← phi( findcol::@16/(byte) findcol::mincol#1 findcol::@21/(byte) findcol::mincol#10 )
|
||||
[69] (byte) findcol::i#1 ← ++ (byte) findcol::i#10
|
||||
[70] if((byte) findcol::i#1<(const byte) numpoints#0) goto findcol::@19
|
||||
@ -150,10 +150,10 @@ findcol::@21: scope:[findcol] from findcol::@7
|
||||
to:findcol::@8
|
||||
findcol::@6: scope:[findcol] from findcol::@5
|
||||
[73] (byte~) findcol::$10 ← (byte) findcol::yp#0 - (byte) findcol::y#0
|
||||
[74] (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte~) findcol::$10
|
||||
[74] (byte) findcol::diff#3 ← (byte) findcol::diff#5 + (byte~) findcol::$10
|
||||
to:findcol::@7
|
||||
findcol::@4: scope:[findcol] from findcol::@2
|
||||
[75] (byte) findcol::diff#0 ← (byte) findcol::xp#0 - (byte) findcol::x#0
|
||||
[75] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0
|
||||
to:findcol::@5
|
||||
initscreen: scope:[initscreen] from main
|
||||
[76] phi()
|
||||
|
@ -200,6 +200,7 @@ findcol::@2: scope:[findcol] from findcol::@1 findcol::@3
|
||||
(byte) findcol::y#10 ← phi( findcol::@1/(byte) findcol::y#5 findcol::@3/(byte) findcol::y#11 )
|
||||
(byte) findcol::xp#1 ← phi( findcol::@1/(byte) findcol::xp#0 findcol::@3/(byte) findcol::xp#4 )
|
||||
(byte) findcol::x#2 ← phi( findcol::@1/(byte) findcol::x#1 findcol::@3/(byte) findcol::x#7 )
|
||||
(byte) findcol::diff#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
(bool~) findcol::$4 ← (byte) findcol::x#2 < (byte) findcol::xp#1
|
||||
if((bool~) findcol::$4) goto findcol::@4
|
||||
to:findcol::@12
|
||||
@ -244,7 +245,7 @@ findcol::@4: scope:[findcol] from findcol::@2
|
||||
(byte) findcol::x#3 ← phi( findcol::@2/(byte) findcol::x#2 )
|
||||
(byte) findcol::xp#2 ← phi( findcol::@2/(byte) findcol::xp#1 )
|
||||
(byte~) findcol::$6 ← (byte) findcol::xp#2 - (byte) findcol::x#3
|
||||
(byte) findcol::diff#0 ← (byte~) findcol::$6
|
||||
(byte) findcol::diff#1 ← (byte~) findcol::$6
|
||||
to:findcol::@5
|
||||
findcol::@12: scope:[findcol] from findcol::@2
|
||||
(byte) findcol::mincol#8 ← phi( findcol::@2/(byte) findcol::mincol#10 )
|
||||
@ -256,7 +257,7 @@ findcol::@12: scope:[findcol] from findcol::@2
|
||||
(byte) findcol::xp#3 ← phi( findcol::@2/(byte) findcol::xp#1 )
|
||||
(byte) findcol::x#4 ← phi( findcol::@2/(byte) findcol::x#2 )
|
||||
(byte~) findcol::$5 ← (byte) findcol::x#4 - (byte) findcol::xp#3
|
||||
(byte) findcol::diff#1 ← (byte~) findcol::$5
|
||||
(byte) findcol::diff#2 ← (byte~) findcol::$5
|
||||
to:findcol::@5
|
||||
findcol::@5: scope:[findcol] from findcol::@12 findcol::@4
|
||||
(byte) findcol::mincol#7 ← phi( findcol::@12/(byte) findcol::mincol#8 findcol::@4/(byte) findcol::mincol#9 )
|
||||
@ -264,7 +265,7 @@ findcol::@5: scope:[findcol] from findcol::@12 findcol::@4
|
||||
(byte) numpoints#6 ← phi( findcol::@12/(byte) numpoints#7 findcol::@4/(byte) numpoints#8 )
|
||||
(byte) findcol::i#8 ← phi( findcol::@12/(byte) findcol::i#9 findcol::@4/(byte) findcol::i#10 )
|
||||
(byte) findcol::mindiff#5 ← phi( findcol::@12/(byte) findcol::mindiff#6 findcol::@4/(byte) findcol::mindiff#7 )
|
||||
(byte) findcol::diff#8 ← phi( findcol::@12/(byte) findcol::diff#1 findcol::@4/(byte) findcol::diff#0 )
|
||||
(byte) findcol::diff#9 ← phi( findcol::@12/(byte) findcol::diff#2 findcol::@4/(byte) findcol::diff#1 )
|
||||
(byte) findcol::yp#2 ← phi( findcol::@12/(byte) findcol::yp#5 findcol::@4/(byte) findcol::yp#6 )
|
||||
(byte) findcol::y#2 ← phi( findcol::@12/(byte) findcol::y#6 findcol::@4/(byte) findcol::y#7 )
|
||||
(bool~) findcol::$7 ← (byte) findcol::y#2 < (byte) findcol::yp#2
|
||||
@ -276,12 +277,12 @@ findcol::@6: scope:[findcol] from findcol::@5
|
||||
(byte) numpoints#5 ← phi( findcol::@5/(byte) numpoints#6 )
|
||||
(byte) findcol::i#7 ← phi( findcol::@5/(byte) findcol::i#8 )
|
||||
(byte) findcol::mindiff#4 ← phi( findcol::@5/(byte) findcol::mindiff#5 )
|
||||
(byte) findcol::diff#4 ← phi( findcol::@5/(byte) findcol::diff#8 )
|
||||
(byte) findcol::diff#5 ← phi( findcol::@5/(byte) findcol::diff#9 )
|
||||
(byte) findcol::y#3 ← phi( findcol::@5/(byte) findcol::y#2 )
|
||||
(byte) findcol::yp#3 ← phi( findcol::@5/(byte) findcol::yp#2 )
|
||||
(byte~) findcol::$10 ← (byte) findcol::yp#3 - (byte) findcol::y#3
|
||||
(byte~) findcol::$11 ← (byte) findcol::diff#4 + (byte~) findcol::$10
|
||||
(byte) findcol::diff#2 ← (byte~) findcol::$11
|
||||
(byte~) findcol::$11 ← (byte) findcol::diff#5 + (byte~) findcol::$10
|
||||
(byte) findcol::diff#3 ← (byte~) findcol::$11
|
||||
to:findcol::@7
|
||||
findcol::@14: scope:[findcol] from findcol::@5
|
||||
(byte) findcol::mincol#5 ← phi( findcol::@5/(byte) findcol::mincol#7 )
|
||||
@ -289,12 +290,12 @@ findcol::@14: scope:[findcol] from findcol::@5
|
||||
(byte) numpoints#4 ← phi( findcol::@5/(byte) numpoints#6 )
|
||||
(byte) findcol::i#6 ← phi( findcol::@5/(byte) findcol::i#8 )
|
||||
(byte) findcol::mindiff#3 ← phi( findcol::@5/(byte) findcol::mindiff#5 )
|
||||
(byte) findcol::diff#5 ← phi( findcol::@5/(byte) findcol::diff#8 )
|
||||
(byte) findcol::diff#6 ← phi( findcol::@5/(byte) findcol::diff#9 )
|
||||
(byte) findcol::yp#4 ← phi( findcol::@5/(byte) findcol::yp#2 )
|
||||
(byte) findcol::y#4 ← phi( findcol::@5/(byte) findcol::y#2 )
|
||||
(byte~) findcol::$8 ← (byte) findcol::y#4 - (byte) findcol::yp#4
|
||||
(byte~) findcol::$9 ← (byte) findcol::diff#5 + (byte~) findcol::$8
|
||||
(byte) findcol::diff#3 ← (byte~) findcol::$9
|
||||
(byte~) findcol::$9 ← (byte) findcol::diff#6 + (byte~) findcol::$8
|
||||
(byte) findcol::diff#4 ← (byte~) findcol::$9
|
||||
to:findcol::@7
|
||||
findcol::@7: scope:[findcol] from findcol::@14 findcol::@6
|
||||
(byte) findcol::y#13 ← phi( findcol::@14/(byte) findcol::y#4 findcol::@6/(byte) findcol::y#3 )
|
||||
@ -303,8 +304,8 @@ findcol::@7: scope:[findcol] from findcol::@14 findcol::@6
|
||||
(byte) numpoints#3 ← phi( findcol::@14/(byte) numpoints#4 findcol::@6/(byte) numpoints#5 )
|
||||
(byte) findcol::i#5 ← phi( findcol::@14/(byte) findcol::i#6 findcol::@6/(byte) findcol::i#7 )
|
||||
(byte) findcol::mindiff#2 ← phi( findcol::@14/(byte) findcol::mindiff#3 findcol::@6/(byte) findcol::mindiff#4 )
|
||||
(byte) findcol::diff#6 ← phi( findcol::@14/(byte) findcol::diff#3 findcol::@6/(byte) findcol::diff#2 )
|
||||
(bool~) findcol::$12 ← (byte) findcol::diff#6 < (byte) findcol::mindiff#2
|
||||
(byte) findcol::diff#7 ← phi( findcol::@14/(byte) findcol::diff#4 findcol::@6/(byte) findcol::diff#3 )
|
||||
(bool~) findcol::$12 ← (byte) findcol::diff#7 < (byte) findcol::mindiff#2
|
||||
(bool~) findcol::$13 ← ! (bool~) findcol::$12
|
||||
if((bool~) findcol::$13) goto findcol::@8
|
||||
to:findcol::@16
|
||||
@ -324,8 +325,8 @@ findcol::@16: scope:[findcol] from findcol::@7
|
||||
(byte) findcol::x#9 ← phi( findcol::@7/(byte) findcol::x#10 )
|
||||
(byte) numpoints#2 ← phi( findcol::@7/(byte) numpoints#3 )
|
||||
(byte) findcol::i#4 ← phi( findcol::@7/(byte) findcol::i#5 )
|
||||
(byte) findcol::diff#7 ← phi( findcol::@7/(byte) findcol::diff#6 )
|
||||
(byte) findcol::mindiff#1 ← (byte) findcol::diff#7
|
||||
(byte) findcol::diff#8 ← phi( findcol::@7/(byte) findcol::diff#7 )
|
||||
(byte) findcol::mindiff#1 ← (byte) findcol::diff#8
|
||||
(byte) findcol::mincol#1 ← *((byte[]) COLS#0 + (byte) findcol::i#4)
|
||||
to:findcol::@8
|
||||
findcol::@17: scope:[findcol] from findcol::@8
|
||||
@ -449,6 +450,7 @@ SYMBOL TABLE SSA
|
||||
(byte) findcol::diff#6
|
||||
(byte) findcol::diff#7
|
||||
(byte) findcol::diff#8
|
||||
(byte) findcol::diff#9
|
||||
(byte) findcol::i
|
||||
(byte) findcol::i#0
|
||||
(byte) findcol::i#1
|
||||
@ -631,8 +633,8 @@ Inversing boolean not [37] (bool~) animate::$11 ← *((byte[]) YPOS#0 + (byte/si
|
||||
Inversing boolean not [43] (bool~) animate::$14 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 3) != (byte/word/signed word/dword/signed dword) 255 from [42] (bool~) animate::$13 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 3) == (byte/word/signed word/dword/signed dword) 255
|
||||
Inversing boolean not [50] (bool~) animate::$17 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 3) < (byte/signed byte/word/signed word/dword/signed dword) 40 from [49] (bool~) animate::$16 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 3) >= (byte/signed byte/word/signed word/dword/signed dword) 40
|
||||
Inversing boolean not [96] (bool~) findcol::$1 ← (byte) findcol::x#1 != (byte) findcol::xp#0 from [95] (bool~) findcol::$0 ← (byte) findcol::x#1 == (byte) findcol::xp#0
|
||||
Inversing boolean not [103] (bool~) findcol::$3 ← (byte) findcol::y#1 != (byte) findcol::yp#1 from [102] (bool~) findcol::$2 ← (byte) findcol::y#1 == (byte) findcol::yp#1
|
||||
Inversing boolean not [129] (bool~) findcol::$13 ← (byte) findcol::diff#6 >= (byte) findcol::mindiff#2 from [128] (bool~) findcol::$12 ← (byte) findcol::diff#6 < (byte) findcol::mindiff#2
|
||||
Inversing boolean not [104] (bool~) findcol::$3 ← (byte) findcol::y#1 != (byte) findcol::yp#1 from [103] (bool~) findcol::$2 ← (byte) findcol::y#1 == (byte) findcol::yp#1
|
||||
Inversing boolean not [130] (bool~) findcol::$13 ← (byte) findcol::diff#7 >= (byte) findcol::mindiff#2 from [129] (bool~) findcol::$12 ← (byte) findcol::diff#7 < (byte) findcol::mindiff#2
|
||||
Successful SSA optimization Pass2UnaryNotSimplification
|
||||
Alias (byte*) COLORS#3 = (byte*) COLORS#5
|
||||
Alias (byte) numpoints#20 = (byte) numpoints#22
|
||||
@ -662,19 +664,19 @@ Alias (byte) findcol::mindiff#6 = (byte) findcol::mindiff#7 (byte) findcol::mind
|
||||
Alias (byte) findcol::i#10 = (byte) findcol::i#11 (byte) findcol::i#9
|
||||
Alias (byte) numpoints#7 = (byte) numpoints#8 (byte) numpoints#9
|
||||
Alias (byte) findcol::mincol#10 = (byte) findcol::mincol#9 (byte) findcol::mincol#8
|
||||
Alias (byte) findcol::diff#0 = (byte~) findcol::$6
|
||||
Alias (byte) findcol::diff#1 = (byte~) findcol::$5
|
||||
Alias (byte) findcol::diff#1 = (byte~) findcol::$6
|
||||
Alias (byte) findcol::diff#2 = (byte~) findcol::$5
|
||||
Alias (byte) findcol::yp#2 = (byte) findcol::yp#3 (byte) findcol::yp#4
|
||||
Alias (byte) findcol::y#2 = (byte) findcol::y#3 (byte) findcol::y#4
|
||||
Alias (byte) findcol::diff#4 = (byte) findcol::diff#8 (byte) findcol::diff#5
|
||||
Alias (byte) findcol::diff#5 = (byte) findcol::diff#9 (byte) findcol::diff#6
|
||||
Alias (byte) findcol::mindiff#3 = (byte) findcol::mindiff#4 (byte) findcol::mindiff#5
|
||||
Alias (byte) findcol::i#6 = (byte) findcol::i#7 (byte) findcol::i#8
|
||||
Alias (byte) numpoints#4 = (byte) numpoints#5 (byte) numpoints#6
|
||||
Alias (byte) findcol::x#11 = (byte) findcol::x#12 (byte) findcol::x#13
|
||||
Alias (byte) findcol::mincol#5 = (byte) findcol::mincol#6 (byte) findcol::mincol#7
|
||||
Alias (byte) findcol::diff#2 = (byte~) findcol::$11
|
||||
Alias (byte) findcol::diff#3 = (byte~) findcol::$9
|
||||
Alias (byte) findcol::diff#6 = (byte) findcol::diff#7 (byte) findcol::mindiff#1
|
||||
Alias (byte) findcol::diff#3 = (byte~) findcol::$11
|
||||
Alias (byte) findcol::diff#4 = (byte~) findcol::$9
|
||||
Alias (byte) findcol::diff#7 = (byte) findcol::diff#8 (byte) findcol::mindiff#1
|
||||
Alias (byte) findcol::i#4 = (byte) findcol::i#5
|
||||
Alias (byte) numpoints#2 = (byte) numpoints#3
|
||||
Alias (byte) findcol::x#10 = (byte) findcol::x#9
|
||||
@ -737,11 +739,11 @@ Simple Condition (bool~) initscreen::$1 [62] if((byte*) initscreen::screen#1<(by
|
||||
Simple Condition (bool~) render::$1 [80] if((byte) render::x#1!=rangelast(0,39)) goto render::@2
|
||||
Simple Condition (bool~) render::$3 [86] if((byte) render::y#1!=rangelast(0,24)) goto render::@1
|
||||
Simple Condition (bool~) findcol::$1 [97] if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@2
|
||||
Simple Condition (bool~) findcol::$4 [100] if((byte) findcol::x#0<(byte) findcol::xp#0) goto findcol::@4
|
||||
Simple Condition (bool~) findcol::$3 [104] if((byte) findcol::y#0!=(byte) findcol::yp#0) goto findcol::@3
|
||||
Simple Condition (bool~) findcol::$7 [118] if((byte) findcol::y#0<(byte) findcol::yp#0) goto findcol::@6
|
||||
Simple Condition (bool~) findcol::$13 [130] if((byte) findcol::diff#6>=(byte) findcol::mindiff#10) goto findcol::@8
|
||||
Simple Condition (bool~) findcol::$14 [134] if((byte) findcol::i#1<(byte) numpoints#15) goto findcol::@1
|
||||
Simple Condition (bool~) findcol::$4 [101] if((byte) findcol::x#0<(byte) findcol::xp#0) goto findcol::@4
|
||||
Simple Condition (bool~) findcol::$3 [105] if((byte) findcol::y#0!=(byte) findcol::yp#0) goto findcol::@3
|
||||
Simple Condition (bool~) findcol::$7 [119] if((byte) findcol::y#0<(byte) findcol::yp#0) goto findcol::@6
|
||||
Simple Condition (bool~) findcol::$13 [131] if((byte) findcol::diff#7>=(byte) findcol::mindiff#10) goto findcol::@8
|
||||
Simple Condition (bool~) findcol::$14 [135] if((byte) findcol::i#1<(byte) numpoints#15) goto findcol::@1
|
||||
Successful SSA optimization Pass2ConditionalJumpSimplification
|
||||
Constant (const byte*) SCREEN#0 = ((byte*))1024
|
||||
Constant (const byte*) COLORS#0 = ((byte*))55296
|
||||
@ -755,6 +757,7 @@ Constant (const byte) render::x#0 = 0
|
||||
Constant (const byte) findcol::mindiff#0 = 255
|
||||
Constant (const byte) findcol::mincol#0 = 0
|
||||
Constant (const byte) findcol::i#0 = 0
|
||||
Constant (const byte) findcol::diff#0 = 0
|
||||
Constant (const byte) findcol::return#1 = 0
|
||||
Successful SSA optimization Pass2ConstantIdentification
|
||||
Constant (const byte*) initscreen::screen#0 = SCREEN#0
|
||||
@ -789,6 +792,7 @@ Consolidated array index constant in *(XPOS#0+3)
|
||||
Successful SSA optimization Pass2ConstantAdditionElimination
|
||||
if() condition always true - replacing block destination [3] if(true) goto main::@1
|
||||
Successful SSA optimization Pass2ConstantIfs
|
||||
Successful SSA optimization PassNEliminateUnusedVars
|
||||
Removing unused block main::@return
|
||||
Successful SSA optimization Pass2EliminateUnusedBlocks
|
||||
Resolved ranged next value render::x#1 ← ++ render::x#2 to ++
|
||||
@ -855,18 +859,18 @@ Created 12 initial phi equivalence classes
|
||||
Coalesced [51] render::y#6 ← render::y#1
|
||||
Coalesced [52] render::colline#6 ← render::colline#1
|
||||
Coalesced [53] render::x#4 ← render::x#1
|
||||
Coalesced [64] findcol::diff#9 ← findcol::diff#1
|
||||
Coalesced [69] findcol::diff#11 ← findcol::diff#3
|
||||
Coalesced [64] findcol::diff#10 ← findcol::diff#2
|
||||
Coalesced [69] findcol::diff#12 ← findcol::diff#4
|
||||
Coalesced [73] findcol::mincol#15 ← findcol::mincol#1
|
||||
Coalesced [74] findcol::mindiff#14 ← findcol::diff#6
|
||||
Coalesced [74] findcol::mindiff#14 ← findcol::diff#7
|
||||
Coalesced [78] findcol::return#6 ← findcol::mincol#2
|
||||
Coalesced [79] findcol::i#14 ← findcol::i#1
|
||||
Not coalescing [80] findcol::mindiff#13 ← findcol::mindiff#11
|
||||
Coalesced [81] findcol::mincol#14 ← findcol::mincol#2
|
||||
Coalesced (already) [82] findcol::mincol#16 ← findcol::mincol#10
|
||||
Not coalescing [83] findcol::mindiff#15 ← findcol::mindiff#10
|
||||
Coalesced [86] findcol::diff#12 ← findcol::diff#2
|
||||
Coalesced [88] findcol::diff#10 ← findcol::diff#0
|
||||
Coalesced [86] findcol::diff#13 ← findcol::diff#3
|
||||
Coalesced [88] findcol::diff#11 ← findcol::diff#1
|
||||
Coalesced [95] initscreen::screen#3 ← initscreen::screen#1
|
||||
Coalesced down to 9 phi equivalence classes
|
||||
Culled Empty Block (label) render::@6
|
||||
@ -1005,25 +1009,25 @@ findcol::@2: scope:[findcol] from findcol::@1 findcol::@9
|
||||
[59] if((byte) findcol::x#0<(byte) findcol::xp#0) goto findcol::@4
|
||||
to:findcol::@12
|
||||
findcol::@12: scope:[findcol] from findcol::@2
|
||||
[60] (byte) findcol::diff#1 ← (byte) findcol::x#0 - (byte) findcol::xp#0
|
||||
[60] (byte) findcol::diff#2 ← (byte) findcol::x#0 - (byte) findcol::xp#0
|
||||
to:findcol::@5
|
||||
findcol::@5: scope:[findcol] from findcol::@12 findcol::@4
|
||||
[61] (byte) findcol::diff#4 ← phi( findcol::@12/(byte) findcol::diff#1 findcol::@4/(byte) findcol::diff#0 )
|
||||
[61] (byte) findcol::diff#5 ← phi( findcol::@12/(byte) findcol::diff#2 findcol::@4/(byte) findcol::diff#1 )
|
||||
[62] if((byte) findcol::y#0<(byte) findcol::yp#0) goto findcol::@6
|
||||
to:findcol::@14
|
||||
findcol::@14: scope:[findcol] from findcol::@5
|
||||
[63] (byte~) findcol::$8 ← (byte) findcol::y#0 - (byte) findcol::yp#0
|
||||
[64] (byte) findcol::diff#3 ← (byte) findcol::diff#4 + (byte~) findcol::$8
|
||||
[64] (byte) findcol::diff#4 ← (byte) findcol::diff#5 + (byte~) findcol::$8
|
||||
to:findcol::@7
|
||||
findcol::@7: scope:[findcol] from findcol::@14 findcol::@6
|
||||
[65] (byte) findcol::diff#6 ← phi( findcol::@14/(byte) findcol::diff#3 findcol::@6/(byte) findcol::diff#2 )
|
||||
[66] if((byte) findcol::diff#6>=(byte) findcol::mindiff#10) goto findcol::@21
|
||||
[65] (byte) findcol::diff#7 ← phi( findcol::@14/(byte) findcol::diff#4 findcol::@6/(byte) findcol::diff#3 )
|
||||
[66] if((byte) findcol::diff#7>=(byte) findcol::mindiff#10) goto findcol::@21
|
||||
to:findcol::@16
|
||||
findcol::@16: scope:[findcol] from findcol::@7
|
||||
[67] (byte) findcol::mincol#1 ← *((const byte[]) COLS#0 + (byte) findcol::i#10)
|
||||
to:findcol::@8
|
||||
findcol::@8: scope:[findcol] from findcol::@16 findcol::@21
|
||||
[68] (byte) findcol::mindiff#11 ← phi( findcol::@16/(byte) findcol::diff#6 findcol::@21/(byte~) findcol::mindiff#15 )
|
||||
[68] (byte) findcol::mindiff#11 ← phi( findcol::@16/(byte) findcol::diff#7 findcol::@21/(byte~) findcol::mindiff#15 )
|
||||
[68] (byte) findcol::mincol#2 ← phi( findcol::@16/(byte) findcol::mincol#1 findcol::@21/(byte) findcol::mincol#10 )
|
||||
[69] (byte) findcol::i#1 ← ++ (byte) findcol::i#10
|
||||
[70] if((byte) findcol::i#1<(const byte) numpoints#0) goto findcol::@19
|
||||
@ -1036,10 +1040,10 @@ findcol::@21: scope:[findcol] from findcol::@7
|
||||
to:findcol::@8
|
||||
findcol::@6: scope:[findcol] from findcol::@5
|
||||
[73] (byte~) findcol::$10 ← (byte) findcol::yp#0 - (byte) findcol::y#0
|
||||
[74] (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte~) findcol::$10
|
||||
[74] (byte) findcol::diff#3 ← (byte) findcol::diff#5 + (byte~) findcol::$10
|
||||
to:findcol::@7
|
||||
findcol::@4: scope:[findcol] from findcol::@2
|
||||
[75] (byte) findcol::diff#0 ← (byte) findcol::xp#0 - (byte) findcol::x#0
|
||||
[75] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0
|
||||
to:findcol::@5
|
||||
initscreen: scope:[initscreen] from main
|
||||
[76] phi()
|
||||
@ -1074,12 +1078,12 @@ VARIABLE REGISTER WEIGHTS
|
||||
(byte~) findcol::$10 20002.0
|
||||
(byte~) findcol::$8 20002.0
|
||||
(byte) findcol::diff
|
||||
(byte) findcol::diff#0 20002.0
|
||||
(byte) findcol::diff#1 20002.0
|
||||
(byte) findcol::diff#2 20002.0
|
||||
(byte) findcol::diff#3 20002.0
|
||||
(byte) findcol::diff#4 10001.0
|
||||
(byte) findcol::diff#6 13334.666666666666
|
||||
(byte) findcol::diff#4 20002.0
|
||||
(byte) findcol::diff#5 10001.0
|
||||
(byte) findcol::diff#7 13334.666666666666
|
||||
(byte) findcol::i
|
||||
(byte) findcol::i#1 10001.0
|
||||
(byte) findcol::i#10 2631.842105263158
|
||||
@ -1129,8 +1133,8 @@ Initial phi equivalence classes
|
||||
[ findcol::i#10 findcol::i#1 ]
|
||||
[ findcol::mindiff#10 findcol::mindiff#13 ]
|
||||
[ findcol::return#2 findcol::mincol#10 findcol::mincol#2 findcol::mincol#1 ]
|
||||
[ findcol::diff#4 findcol::diff#1 findcol::diff#0 ]
|
||||
[ findcol::mindiff#11 findcol::diff#6 findcol::diff#3 findcol::diff#2 findcol::mindiff#15 ]
|
||||
[ findcol::diff#5 findcol::diff#2 findcol::diff#1 ]
|
||||
[ findcol::mindiff#11 findcol::diff#7 findcol::diff#4 findcol::diff#3 findcol::mindiff#15 ]
|
||||
[ initscreen::screen#2 initscreen::screen#1 ]
|
||||
Added variable animate::$0 to zero page equivalence class [ animate::$0 ]
|
||||
Added variable animate::$3 to zero page equivalence class [ animate::$3 ]
|
||||
@ -1154,8 +1158,8 @@ Complete equivalence classes
|
||||
[ findcol::i#10 findcol::i#1 ]
|
||||
[ findcol::mindiff#10 findcol::mindiff#13 ]
|
||||
[ findcol::return#2 findcol::mincol#10 findcol::mincol#2 findcol::mincol#1 ]
|
||||
[ findcol::diff#4 findcol::diff#1 findcol::diff#0 ]
|
||||
[ findcol::mindiff#11 findcol::diff#6 findcol::diff#3 findcol::diff#2 findcol::mindiff#15 ]
|
||||
[ findcol::diff#5 findcol::diff#2 findcol::diff#1 ]
|
||||
[ findcol::mindiff#11 findcol::diff#7 findcol::diff#4 findcol::diff#3 findcol::mindiff#15 ]
|
||||
[ initscreen::screen#2 initscreen::screen#1 ]
|
||||
[ animate::$0 ]
|
||||
[ animate::$3 ]
|
||||
@ -1178,8 +1182,8 @@ Allocated zp ZP_BYTE:5 [ render::x#2 render::x#1 ]
|
||||
Allocated zp ZP_BYTE:6 [ findcol::i#10 findcol::i#1 ]
|
||||
Allocated zp ZP_BYTE:7 [ findcol::mindiff#10 findcol::mindiff#13 ]
|
||||
Allocated zp ZP_BYTE:8 [ findcol::return#2 findcol::mincol#10 findcol::mincol#2 findcol::mincol#1 ]
|
||||
Allocated zp ZP_BYTE:9 [ findcol::diff#4 findcol::diff#1 findcol::diff#0 ]
|
||||
Allocated zp ZP_BYTE:10 [ findcol::mindiff#11 findcol::diff#6 findcol::diff#3 findcol::diff#2 findcol::mindiff#15 ]
|
||||
Allocated zp ZP_BYTE:9 [ findcol::diff#5 findcol::diff#2 findcol::diff#1 ]
|
||||
Allocated zp ZP_BYTE:10 [ findcol::mindiff#11 findcol::diff#7 findcol::diff#4 findcol::diff#3 findcol::mindiff#15 ]
|
||||
Allocated zp ZP_WORD:11 [ initscreen::screen#2 initscreen::screen#1 ]
|
||||
Allocated zp ZP_BYTE:13 [ animate::$0 ]
|
||||
Allocated zp ZP_BYTE:14 [ animate::$3 ]
|
||||
@ -1486,11 +1490,11 @@ findcol: {
|
||||
.label yp = $19
|
||||
.label return_2 = 8
|
||||
.label diff = 9
|
||||
.label diff_2 = $a
|
||||
.label diff_3 = $a
|
||||
.label diff_4 = $a
|
||||
.label i = 6
|
||||
.label mincol = 8
|
||||
.label diff_6 = $a
|
||||
.label diff_7 = $a
|
||||
.label mindiff = 7
|
||||
.label mindiff_11 = $a
|
||||
.label mindiff_15 = $a
|
||||
@ -1546,7 +1550,7 @@ findcol: {
|
||||
jmp b12
|
||||
//SEG104 findcol::@12
|
||||
b12:
|
||||
//SEG105 [60] (byte) findcol::diff#1 ← (byte) findcol::x#0 - (byte) findcol::xp#0 -- vbuz1=vbuz2_minus_vbuz3
|
||||
//SEG105 [60] (byte) findcol::diff#2 ← (byte) findcol::x#0 - (byte) findcol::xp#0 -- vbuz1=vbuz2_minus_vbuz3
|
||||
lda x
|
||||
sec
|
||||
sbc xp
|
||||
@ -1554,7 +1558,7 @@ findcol: {
|
||||
//SEG106 [61] phi from findcol::@12 findcol::@4 to findcol::@5 [phi:findcol::@12/findcol::@4->findcol::@5]
|
||||
b5_from_b12:
|
||||
b5_from_b4:
|
||||
//SEG107 [61] phi (byte) findcol::diff#4 = (byte) findcol::diff#1 [phi:findcol::@12/findcol::@4->findcol::@5#0] -- register_copy
|
||||
//SEG107 [61] phi (byte) findcol::diff#5 = (byte) findcol::diff#2 [phi:findcol::@12/findcol::@4->findcol::@5#0] -- register_copy
|
||||
jmp b5
|
||||
//SEG108 findcol::@5
|
||||
b5:
|
||||
@ -1570,20 +1574,20 @@ findcol: {
|
||||
sec
|
||||
sbc yp
|
||||
sta _8
|
||||
//SEG112 [64] (byte) findcol::diff#3 ← (byte) findcol::diff#4 + (byte~) findcol::$8 -- vbuz1=vbuz2_plus_vbuz3
|
||||
//SEG112 [64] (byte) findcol::diff#4 ← (byte) findcol::diff#5 + (byte~) findcol::$8 -- vbuz1=vbuz2_plus_vbuz3
|
||||
lda diff
|
||||
clc
|
||||
adc _8
|
||||
sta diff_3
|
||||
sta diff_4
|
||||
//SEG113 [65] phi from findcol::@14 findcol::@6 to findcol::@7 [phi:findcol::@14/findcol::@6->findcol::@7]
|
||||
b7_from_b14:
|
||||
b7_from_b6:
|
||||
//SEG114 [65] phi (byte) findcol::diff#6 = (byte) findcol::diff#3 [phi:findcol::@14/findcol::@6->findcol::@7#0] -- register_copy
|
||||
//SEG114 [65] phi (byte) findcol::diff#7 = (byte) findcol::diff#4 [phi:findcol::@14/findcol::@6->findcol::@7#0] -- register_copy
|
||||
jmp b7
|
||||
//SEG115 findcol::@7
|
||||
b7:
|
||||
//SEG116 [66] if((byte) findcol::diff#6>=(byte) findcol::mindiff#10) goto findcol::@21 -- vbuz1_ge_vbuz2_then_la1
|
||||
lda diff_6
|
||||
//SEG116 [66] if((byte) findcol::diff#7>=(byte) findcol::mindiff#10) goto findcol::@21 -- vbuz1_ge_vbuz2_then_la1
|
||||
lda diff_7
|
||||
cmp mindiff
|
||||
bcs b21
|
||||
jmp b16
|
||||
@ -1596,7 +1600,7 @@ findcol: {
|
||||
//SEG119 [68] phi from findcol::@16 findcol::@21 to findcol::@8 [phi:findcol::@16/findcol::@21->findcol::@8]
|
||||
b8_from_b16:
|
||||
b8_from_b21:
|
||||
//SEG120 [68] phi (byte) findcol::mindiff#11 = (byte) findcol::diff#6 [phi:findcol::@16/findcol::@21->findcol::@8#0] -- register_copy
|
||||
//SEG120 [68] phi (byte) findcol::mindiff#11 = (byte) findcol::diff#7 [phi:findcol::@16/findcol::@21->findcol::@8#0] -- register_copy
|
||||
//SEG121 [68] phi (byte) findcol::mincol#2 = (byte) findcol::mincol#1 [phi:findcol::@16/findcol::@21->findcol::@8#1] -- register_copy
|
||||
jmp b8
|
||||
//SEG122 findcol::@8
|
||||
@ -1635,15 +1639,15 @@ findcol: {
|
||||
sec
|
||||
sbc y
|
||||
sta _10
|
||||
//SEG137 [74] (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte~) findcol::$10 -- vbuz1=vbuz2_plus_vbuz3
|
||||
//SEG137 [74] (byte) findcol::diff#3 ← (byte) findcol::diff#5 + (byte~) findcol::$10 -- vbuz1=vbuz2_plus_vbuz3
|
||||
lda diff
|
||||
clc
|
||||
adc _10
|
||||
sta diff_2
|
||||
sta diff_3
|
||||
jmp b7_from_b6
|
||||
//SEG138 findcol::@4
|
||||
b4:
|
||||
//SEG139 [75] (byte) findcol::diff#0 ← (byte) findcol::xp#0 - (byte) findcol::x#0 -- vbuz1=vbuz2_minus_vbuz3
|
||||
//SEG139 [75] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0 -- vbuz1=vbuz2_minus_vbuz3
|
||||
lda xp
|
||||
sec
|
||||
sbc x
|
||||
@ -1712,7 +1716,7 @@ Statement [32] if(*((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dwo
|
||||
Statement [33] (byte/signed word/word/dword/signed dword~) animate::$18 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 40 [ animate::$18 ] ( main:2::animate:9 [ animate::$18 ] ) always clobbers reg byte a
|
||||
Statement [47] (byte*) render::colline#1 ← (byte*) render::colline#5 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ render::y#4 render::colline#1 ] ( main:2::render:7 [ render::y#4 render::colline#1 ] ) always clobbers reg byte a
|
||||
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ render::y#4 render::y#1 ]
|
||||
Statement [60] (byte) findcol::diff#1 ← (byte) findcol::x#0 - (byte) findcol::xp#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#1 ] ( main:2::render:7::findcol:41 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#1 ] ) always clobbers reg byte a
|
||||
Statement [60] (byte) findcol::diff#2 ← (byte) findcol::x#0 - (byte) findcol::xp#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#2 ] ( main:2::render:7::findcol:41 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#2 ] ) always clobbers reg byte a
|
||||
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ render::x#2 render::x#1 ]
|
||||
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:20 [ findcol::x#0 ]
|
||||
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:21 [ findcol::y#0 ]
|
||||
@ -1720,12 +1724,12 @@ Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ fi
|
||||
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:7 [ findcol::mindiff#10 findcol::mindiff#13 ]
|
||||
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:8 [ findcol::return#2 findcol::mincol#10 findcol::mincol#2 findcol::mincol#1 ]
|
||||
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:25 [ findcol::yp#0 ]
|
||||
Statement [63] (byte~) findcol::$8 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$8 ] ( main:2::render:7::findcol:41 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$8 ] ) always clobbers reg byte a
|
||||
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 [ findcol::diff#4 findcol::diff#1 findcol::diff#0 ]
|
||||
Statement [64] (byte) findcol::diff#3 ← (byte) findcol::diff#4 + (byte~) findcol::$8 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#3 ] ( main:2::render:7::findcol:41 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#3 ] ) always clobbers reg byte a
|
||||
Statement [73] (byte~) findcol::$10 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$10 ] ( main:2::render:7::findcol:41 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$10 ] ) always clobbers reg byte a
|
||||
Statement [74] (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte~) findcol::$10 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#2 ] ( main:2::render:7::findcol:41 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#2 ] ) always clobbers reg byte a
|
||||
Statement [75] (byte) findcol::diff#0 ← (byte) findcol::xp#0 - (byte) findcol::x#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#0 ] ( main:2::render:7::findcol:41 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#0 ] ) always clobbers reg byte a
|
||||
Statement [63] (byte~) findcol::$8 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#5 findcol::$8 ] ( main:2::render:7::findcol:41 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#5 findcol::$8 ] ) always clobbers reg byte a
|
||||
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 [ findcol::diff#5 findcol::diff#2 findcol::diff#1 ]
|
||||
Statement [64] (byte) findcol::diff#4 ← (byte) findcol::diff#5 + (byte~) findcol::$8 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 ] ( main:2::render:7::findcol:41 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 ] ) always clobbers reg byte a
|
||||
Statement [73] (byte~) findcol::$10 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#5 findcol::$10 ] ( main:2::render:7::findcol:41 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#5 findcol::$10 ] ) always clobbers reg byte a
|
||||
Statement [74] (byte) findcol::diff#3 ← (byte) findcol::diff#5 + (byte~) findcol::$10 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#3 ] ( main:2::render:7::findcol:41 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#3 ] ) always clobbers reg byte a
|
||||
Statement [75] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#1 ] ( main:2::render:7::findcol:41 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#1 ] ) always clobbers reg byte a
|
||||
Statement [78] *((byte*) initscreen::screen#2) ← (const byte) FILL#0 [ initscreen::screen#2 ] ( main:2::initscreen:5 [ initscreen::screen#2 ] ) always clobbers reg byte a reg byte y
|
||||
Statement [80] if((byte*) initscreen::screen#1<(const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000) goto initscreen::@1 [ initscreen::screen#1 ] ( main:2::initscreen:5 [ initscreen::screen#1 ] ) always clobbers reg byte a
|
||||
Statement [12] if(*((const byte[]) XPOS#0)!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto animate::@1 [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a
|
||||
@ -1742,12 +1746,12 @@ Statement [30] (byte/signed word/word/dword/signed dword~) animate::$15 ← *((c
|
||||
Statement [32] if(*((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3)<(byte/signed byte/word/signed word/dword/signed dword) 40) goto animate::@return [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a
|
||||
Statement [33] (byte/signed word/word/dword/signed dword~) animate::$18 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 40 [ animate::$18 ] ( main:2::animate:9 [ animate::$18 ] ) always clobbers reg byte a
|
||||
Statement [47] (byte*) render::colline#1 ← (byte*) render::colline#5 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ render::y#4 render::colline#1 ] ( main:2::render:7 [ render::y#4 render::colline#1 ] ) always clobbers reg byte a
|
||||
Statement [60] (byte) findcol::diff#1 ← (byte) findcol::x#0 - (byte) findcol::xp#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#1 ] ( main:2::render:7::findcol:41 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#1 ] ) always clobbers reg byte a
|
||||
Statement [63] (byte~) findcol::$8 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$8 ] ( main:2::render:7::findcol:41 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$8 ] ) always clobbers reg byte a
|
||||
Statement [64] (byte) findcol::diff#3 ← (byte) findcol::diff#4 + (byte~) findcol::$8 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#3 ] ( main:2::render:7::findcol:41 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#3 ] ) always clobbers reg byte a
|
||||
Statement [73] (byte~) findcol::$10 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$10 ] ( main:2::render:7::findcol:41 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$10 ] ) always clobbers reg byte a
|
||||
Statement [74] (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte~) findcol::$10 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#2 ] ( main:2::render:7::findcol:41 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#2 ] ) always clobbers reg byte a
|
||||
Statement [75] (byte) findcol::diff#0 ← (byte) findcol::xp#0 - (byte) findcol::x#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#0 ] ( main:2::render:7::findcol:41 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#0 ] ) always clobbers reg byte a
|
||||
Statement [60] (byte) findcol::diff#2 ← (byte) findcol::x#0 - (byte) findcol::xp#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#2 ] ( main:2::render:7::findcol:41 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#2 ] ) always clobbers reg byte a
|
||||
Statement [63] (byte~) findcol::$8 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#5 findcol::$8 ] ( main:2::render:7::findcol:41 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#5 findcol::$8 ] ) always clobbers reg byte a
|
||||
Statement [64] (byte) findcol::diff#4 ← (byte) findcol::diff#5 + (byte~) findcol::$8 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 ] ( main:2::render:7::findcol:41 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 ] ) always clobbers reg byte a
|
||||
Statement [73] (byte~) findcol::$10 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#5 findcol::$10 ] ( main:2::render:7::findcol:41 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#5 findcol::$10 ] ) always clobbers reg byte a
|
||||
Statement [74] (byte) findcol::diff#3 ← (byte) findcol::diff#5 + (byte~) findcol::$10 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#3 ] ( main:2::render:7::findcol:41 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#3 ] ) always clobbers reg byte a
|
||||
Statement [75] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#1 ] ( main:2::render:7::findcol:41 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#1 ] ) always clobbers reg byte a
|
||||
Statement [78] *((byte*) initscreen::screen#2) ← (const byte) FILL#0 [ initscreen::screen#2 ] ( main:2::initscreen:5 [ initscreen::screen#2 ] ) always clobbers reg byte a reg byte y
|
||||
Statement [80] if((byte*) initscreen::screen#1<(const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000) goto initscreen::@1 [ initscreen::screen#1 ] ( main:2::initscreen:5 [ initscreen::screen#1 ] ) always clobbers reg byte a
|
||||
Potential registers zp ZP_BYTE:2 [ render::y#4 render::y#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y ,
|
||||
@ -1756,8 +1760,8 @@ Potential registers zp ZP_BYTE:5 [ render::x#2 render::x#1 ] : zp ZP_BYTE:5 , re
|
||||
Potential registers zp ZP_BYTE:6 [ findcol::i#10 findcol::i#1 ] : zp ZP_BYTE:6 , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:7 [ findcol::mindiff#10 findcol::mindiff#13 ] : zp ZP_BYTE:7 , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:8 [ findcol::return#2 findcol::mincol#10 findcol::mincol#2 findcol::mincol#1 ] : zp ZP_BYTE:8 , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:9 [ findcol::diff#4 findcol::diff#1 findcol::diff#0 ] : zp ZP_BYTE:9 , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:10 [ findcol::mindiff#11 findcol::diff#6 findcol::diff#3 findcol::diff#2 findcol::mindiff#15 ] : zp ZP_BYTE:10 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:9 [ findcol::diff#5 findcol::diff#2 findcol::diff#1 ] : zp ZP_BYTE:9 , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:10 [ findcol::mindiff#11 findcol::diff#7 findcol::diff#4 findcol::diff#3 findcol::mindiff#15 ] : zp ZP_BYTE:10 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_WORD:11 [ initscreen::screen#2 initscreen::screen#1 ] : zp ZP_WORD:11 ,
|
||||
Potential registers zp ZP_BYTE:13 [ animate::$0 ] : zp ZP_BYTE:13 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:14 [ animate::$3 ] : zp ZP_BYTE:14 , reg byte a , reg byte x , reg byte y ,
|
||||
@ -1776,14 +1780,14 @@ Potential registers zp ZP_BYTE:26 [ findcol::$8 ] : zp ZP_BYTE:26 , reg byte a ,
|
||||
Potential registers zp ZP_BYTE:27 [ findcol::$10 ] : zp ZP_BYTE:27 , reg byte a , reg byte x , reg byte y ,
|
||||
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [findcol] 83,341.67: zp ZP_BYTE:10 [ findcol::mindiff#11 findcol::diff#6 findcol::diff#3 findcol::diff#2 findcol::mindiff#15 ] 50,005: zp ZP_BYTE:9 [ findcol::diff#4 findcol::diff#1 findcol::diff#0 ] 34,846.92: zp ZP_BYTE:8 [ findcol::return#2 findcol::mincol#10 findcol::mincol#2 findcol::mincol#1 ] 21,877.19: zp ZP_BYTE:7 [ findcol::mindiff#10 findcol::mindiff#13 ] 20,002: zp ZP_BYTE:26 [ findcol::$8 ] 20,002: zp ZP_BYTE:27 [ findcol::$10 ] 12,632.84: zp ZP_BYTE:6 [ findcol::i#10 findcol::i#1 ] 10,001: zp ZP_BYTE:24 [ findcol::xp#0 ] 6,250.62: zp ZP_BYTE:25 [ findcol::yp#0 ] 2,002: zp ZP_BYTE:22 [ findcol::return#0 ] 1,708.54: zp ZP_BYTE:21 [ findcol::y#0 ] 1,640.2: zp ZP_BYTE:20 [ findcol::x#0 ]
|
||||
Uplift Scope [findcol] 83,341.67: zp ZP_BYTE:10 [ findcol::mindiff#11 findcol::diff#7 findcol::diff#4 findcol::diff#3 findcol::mindiff#15 ] 50,005: zp ZP_BYTE:9 [ findcol::diff#5 findcol::diff#2 findcol::diff#1 ] 34,846.92: zp ZP_BYTE:8 [ findcol::return#2 findcol::mincol#10 findcol::mincol#2 findcol::mincol#1 ] 21,877.19: zp ZP_BYTE:7 [ findcol::mindiff#10 findcol::mindiff#13 ] 20,002: zp ZP_BYTE:26 [ findcol::$8 ] 20,002: zp ZP_BYTE:27 [ findcol::$10 ] 12,632.84: zp ZP_BYTE:6 [ findcol::i#10 findcol::i#1 ] 10,001: zp ZP_BYTE:24 [ findcol::xp#0 ] 6,250.62: zp ZP_BYTE:25 [ findcol::yp#0 ] 2,002: zp ZP_BYTE:22 [ findcol::return#0 ] 1,708.54: zp ZP_BYTE:21 [ findcol::y#0 ] 1,640.2: zp ZP_BYTE:20 [ findcol::x#0 ]
|
||||
Uplift Scope [render] 2,073.5: zp ZP_BYTE:5 [ render::x#2 render::x#1 ] 2,002: zp ZP_BYTE:23 [ render::col#0 ] 260.86: zp ZP_BYTE:2 [ render::y#4 render::y#1 ] 187.63: zp ZP_WORD:3 [ render::colline#5 render::colline#1 ]
|
||||
Uplift Scope [initscreen] 33: zp ZP_WORD:11 [ initscreen::screen#2 initscreen::screen#1 ]
|
||||
Uplift Scope [animate] 4: zp ZP_BYTE:13 [ animate::$0 ] 4: zp ZP_BYTE:14 [ animate::$3 ] 4: zp ZP_BYTE:15 [ animate::$6 ] 4: zp ZP_BYTE:16 [ animate::$9 ] 4: zp ZP_BYTE:17 [ animate::$12 ] 4: zp ZP_BYTE:18 [ animate::$15 ] 4: zp ZP_BYTE:19 [ animate::$18 ]
|
||||
Uplift Scope [main]
|
||||
Uplift Scope []
|
||||
|
||||
Uplifting [findcol] best 2033929 combination reg byte y [ findcol::mindiff#11 findcol::diff#6 findcol::diff#3 findcol::diff#2 findcol::mindiff#15 ] reg byte y [ findcol::diff#4 findcol::diff#1 findcol::diff#0 ] reg byte x [ findcol::return#2 findcol::mincol#10 findcol::mincol#2 findcol::mincol#1 ] zp ZP_BYTE:7 [ findcol::mindiff#10 findcol::mindiff#13 ] zp ZP_BYTE:26 [ findcol::$8 ] zp ZP_BYTE:27 [ findcol::$10 ] zp ZP_BYTE:6 [ findcol::i#10 findcol::i#1 ] zp ZP_BYTE:24 [ findcol::xp#0 ] zp ZP_BYTE:25 [ findcol::yp#0 ] zp ZP_BYTE:22 [ findcol::return#0 ] zp ZP_BYTE:21 [ findcol::y#0 ] zp ZP_BYTE:20 [ findcol::x#0 ]
|
||||
Uplifting [findcol] best 2033929 combination reg byte y [ findcol::mindiff#11 findcol::diff#7 findcol::diff#4 findcol::diff#3 findcol::mindiff#15 ] reg byte y [ findcol::diff#5 findcol::diff#2 findcol::diff#1 ] reg byte x [ findcol::return#2 findcol::mincol#10 findcol::mincol#2 findcol::mincol#1 ] zp ZP_BYTE:7 [ findcol::mindiff#10 findcol::mindiff#13 ] zp ZP_BYTE:26 [ findcol::$8 ] zp ZP_BYTE:27 [ findcol::$10 ] zp ZP_BYTE:6 [ findcol::i#10 findcol::i#1 ] zp ZP_BYTE:24 [ findcol::xp#0 ] zp ZP_BYTE:25 [ findcol::yp#0 ] zp ZP_BYTE:22 [ findcol::return#0 ] zp ZP_BYTE:21 [ findcol::y#0 ] zp ZP_BYTE:20 [ findcol::x#0 ]
|
||||
Limited combination testing to 100 combinations of 2239488 possible.
|
||||
Uplifting [render] best 2027929 combination zp ZP_BYTE:5 [ render::x#2 render::x#1 ] reg byte a [ render::col#0 ] zp ZP_BYTE:2 [ render::y#4 render::y#1 ] zp ZP_WORD:3 [ render::colline#5 render::colline#1 ]
|
||||
Uplifting [initscreen] best 2027929 combination zp ZP_WORD:11 [ initscreen::screen#2 initscreen::screen#1 ]
|
||||
@ -2133,7 +2137,7 @@ findcol: {
|
||||
jmp b12
|
||||
//SEG104 findcol::@12
|
||||
b12:
|
||||
//SEG105 [60] (byte) findcol::diff#1 ← (byte) findcol::x#0 - (byte) findcol::xp#0 -- vbuyy=vbuz1_minus_vbuz2
|
||||
//SEG105 [60] (byte) findcol::diff#2 ← (byte) findcol::x#0 - (byte) findcol::xp#0 -- vbuyy=vbuz1_minus_vbuz2
|
||||
lda x
|
||||
sec
|
||||
sbc xp
|
||||
@ -2141,7 +2145,7 @@ findcol: {
|
||||
//SEG106 [61] phi from findcol::@12 findcol::@4 to findcol::@5 [phi:findcol::@12/findcol::@4->findcol::@5]
|
||||
b5_from_b12:
|
||||
b5_from_b4:
|
||||
//SEG107 [61] phi (byte) findcol::diff#4 = (byte) findcol::diff#1 [phi:findcol::@12/findcol::@4->findcol::@5#0] -- register_copy
|
||||
//SEG107 [61] phi (byte) findcol::diff#5 = (byte) findcol::diff#2 [phi:findcol::@12/findcol::@4->findcol::@5#0] -- register_copy
|
||||
jmp b5
|
||||
//SEG108 findcol::@5
|
||||
b5:
|
||||
@ -2156,7 +2160,7 @@ findcol: {
|
||||
lda y
|
||||
sec
|
||||
sbc yp
|
||||
//SEG112 [64] (byte) findcol::diff#3 ← (byte) findcol::diff#4 + (byte~) findcol::$8 -- vbuyy=vbuyy_plus_vbuaa
|
||||
//SEG112 [64] (byte) findcol::diff#4 ← (byte) findcol::diff#5 + (byte~) findcol::$8 -- vbuyy=vbuyy_plus_vbuaa
|
||||
sty $ff
|
||||
clc
|
||||
adc $ff
|
||||
@ -2164,11 +2168,11 @@ findcol: {
|
||||
//SEG113 [65] phi from findcol::@14 findcol::@6 to findcol::@7 [phi:findcol::@14/findcol::@6->findcol::@7]
|
||||
b7_from_b14:
|
||||
b7_from_b6:
|
||||
//SEG114 [65] phi (byte) findcol::diff#6 = (byte) findcol::diff#3 [phi:findcol::@14/findcol::@6->findcol::@7#0] -- register_copy
|
||||
//SEG114 [65] phi (byte) findcol::diff#7 = (byte) findcol::diff#4 [phi:findcol::@14/findcol::@6->findcol::@7#0] -- register_copy
|
||||
jmp b7
|
||||
//SEG115 findcol::@7
|
||||
b7:
|
||||
//SEG116 [66] if((byte) findcol::diff#6>=(byte) findcol::mindiff#10) goto findcol::@21 -- vbuyy_ge_vbuz1_then_la1
|
||||
//SEG116 [66] if((byte) findcol::diff#7>=(byte) findcol::mindiff#10) goto findcol::@21 -- vbuyy_ge_vbuz1_then_la1
|
||||
cpy mindiff
|
||||
bcs b21
|
||||
jmp b16
|
||||
@ -2181,7 +2185,7 @@ findcol: {
|
||||
//SEG119 [68] phi from findcol::@16 findcol::@21 to findcol::@8 [phi:findcol::@16/findcol::@21->findcol::@8]
|
||||
b8_from_b16:
|
||||
b8_from_b21:
|
||||
//SEG120 [68] phi (byte) findcol::mindiff#11 = (byte) findcol::diff#6 [phi:findcol::@16/findcol::@21->findcol::@8#0] -- register_copy
|
||||
//SEG120 [68] phi (byte) findcol::mindiff#11 = (byte) findcol::diff#7 [phi:findcol::@16/findcol::@21->findcol::@8#0] -- register_copy
|
||||
//SEG121 [68] phi (byte) findcol::mincol#2 = (byte) findcol::mincol#1 [phi:findcol::@16/findcol::@21->findcol::@8#1] -- register_copy
|
||||
jmp b8
|
||||
//SEG122 findcol::@8
|
||||
@ -2217,7 +2221,7 @@ findcol: {
|
||||
lda yp
|
||||
sec
|
||||
sbc y
|
||||
//SEG137 [74] (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte~) findcol::$10 -- vbuyy=vbuyy_plus_vbuaa
|
||||
//SEG137 [74] (byte) findcol::diff#3 ← (byte) findcol::diff#5 + (byte~) findcol::$10 -- vbuyy=vbuyy_plus_vbuaa
|
||||
sty $ff
|
||||
clc
|
||||
adc $ff
|
||||
@ -2225,7 +2229,7 @@ findcol: {
|
||||
jmp b7_from_b6
|
||||
//SEG138 findcol::@4
|
||||
b4:
|
||||
//SEG139 [75] (byte) findcol::diff#0 ← (byte) findcol::xp#0 - (byte) findcol::x#0 -- vbuyy=vbuz1_minus_vbuz2
|
||||
//SEG139 [75] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0 -- vbuyy=vbuz1_minus_vbuz2
|
||||
lda xp
|
||||
sec
|
||||
sbc x
|
||||
@ -2439,12 +2443,12 @@ FINAL SYMBOL TABLE
|
||||
(label) findcol::@9
|
||||
(label) findcol::@return
|
||||
(byte) findcol::diff
|
||||
(byte) findcol::diff#0 reg byte y 20002.0
|
||||
(byte) findcol::diff#1 reg byte y 20002.0
|
||||
(byte) findcol::diff#2 reg byte y 20002.0
|
||||
(byte) findcol::diff#3 reg byte y 20002.0
|
||||
(byte) findcol::diff#4 reg byte y 10001.0
|
||||
(byte) findcol::diff#6 reg byte y 13334.666666666666
|
||||
(byte) findcol::diff#4 reg byte y 20002.0
|
||||
(byte) findcol::diff#5 reg byte y 10001.0
|
||||
(byte) findcol::diff#7 reg byte y 13334.666666666666
|
||||
(byte) findcol::i
|
||||
(byte) findcol::i#1 i zp ZP_BYTE:6 10001.0
|
||||
(byte) findcol::i#10 i zp ZP_BYTE:6 2631.842105263158
|
||||
@ -2503,8 +2507,8 @@ zp ZP_BYTE:5 [ render::x#2 render::x#1 findcol::x#0 ]
|
||||
zp ZP_BYTE:6 [ findcol::i#10 findcol::i#1 ]
|
||||
zp ZP_BYTE:7 [ findcol::mindiff#10 findcol::mindiff#13 ]
|
||||
reg byte x [ findcol::return#2 findcol::mincol#10 findcol::mincol#2 findcol::mincol#1 ]
|
||||
reg byte y [ findcol::diff#4 findcol::diff#1 findcol::diff#0 ]
|
||||
reg byte y [ findcol::mindiff#11 findcol::diff#6 findcol::diff#3 findcol::diff#2 findcol::mindiff#15 ]
|
||||
reg byte y [ findcol::diff#5 findcol::diff#2 findcol::diff#1 ]
|
||||
reg byte y [ findcol::mindiff#11 findcol::diff#7 findcol::diff#4 findcol::diff#3 findcol::mindiff#15 ]
|
||||
reg byte x [ animate::$0 ]
|
||||
reg byte x [ animate::$3 ]
|
||||
reg byte a [ animate::$6 ]
|
||||
@ -2768,12 +2772,12 @@ findcol: {
|
||||
cmp xp
|
||||
bcc b4
|
||||
//SEG104 findcol::@12
|
||||
//SEG105 [60] (byte) findcol::diff#1 ← (byte) findcol::x#0 - (byte) findcol::xp#0 -- vbuyy=vbuz1_minus_vbuz2
|
||||
//SEG105 [60] (byte) findcol::diff#2 ← (byte) findcol::x#0 - (byte) findcol::xp#0 -- vbuyy=vbuz1_minus_vbuz2
|
||||
sec
|
||||
sbc xp
|
||||
tay
|
||||
//SEG106 [61] phi from findcol::@12 findcol::@4 to findcol::@5 [phi:findcol::@12/findcol::@4->findcol::@5]
|
||||
//SEG107 [61] phi (byte) findcol::diff#4 = (byte) findcol::diff#1 [phi:findcol::@12/findcol::@4->findcol::@5#0] -- register_copy
|
||||
//SEG107 [61] phi (byte) findcol::diff#5 = (byte) findcol::diff#2 [phi:findcol::@12/findcol::@4->findcol::@5#0] -- register_copy
|
||||
//SEG108 findcol::@5
|
||||
b5:
|
||||
//SEG109 [62] if((byte) findcol::y#0<(byte) findcol::yp#0) goto findcol::@6 -- vbuz1_lt_vbuz2_then_la1
|
||||
@ -2784,16 +2788,16 @@ findcol: {
|
||||
//SEG111 [63] (byte~) findcol::$8 ← (byte) findcol::y#0 - (byte) findcol::yp#0 -- vbuaa=vbuz1_minus_vbuz2
|
||||
sec
|
||||
sbc yp
|
||||
//SEG112 [64] (byte) findcol::diff#3 ← (byte) findcol::diff#4 + (byte~) findcol::$8 -- vbuyy=vbuyy_plus_vbuaa
|
||||
//SEG112 [64] (byte) findcol::diff#4 ← (byte) findcol::diff#5 + (byte~) findcol::$8 -- vbuyy=vbuyy_plus_vbuaa
|
||||
sty $ff
|
||||
clc
|
||||
adc $ff
|
||||
tay
|
||||
//SEG113 [65] phi from findcol::@14 findcol::@6 to findcol::@7 [phi:findcol::@14/findcol::@6->findcol::@7]
|
||||
//SEG114 [65] phi (byte) findcol::diff#6 = (byte) findcol::diff#3 [phi:findcol::@14/findcol::@6->findcol::@7#0] -- register_copy
|
||||
//SEG114 [65] phi (byte) findcol::diff#7 = (byte) findcol::diff#4 [phi:findcol::@14/findcol::@6->findcol::@7#0] -- register_copy
|
||||
//SEG115 findcol::@7
|
||||
b7:
|
||||
//SEG116 [66] if((byte) findcol::diff#6>=(byte) findcol::mindiff#10) goto findcol::@21 -- vbuyy_ge_vbuz1_then_la1
|
||||
//SEG116 [66] if((byte) findcol::diff#7>=(byte) findcol::mindiff#10) goto findcol::@21 -- vbuyy_ge_vbuz1_then_la1
|
||||
cpy mindiff
|
||||
bcs b21
|
||||
//SEG117 findcol::@16
|
||||
@ -2802,7 +2806,7 @@ findcol: {
|
||||
lda COLS,x
|
||||
tax
|
||||
//SEG119 [68] phi from findcol::@16 findcol::@21 to findcol::@8 [phi:findcol::@16/findcol::@21->findcol::@8]
|
||||
//SEG120 [68] phi (byte) findcol::mindiff#11 = (byte) findcol::diff#6 [phi:findcol::@16/findcol::@21->findcol::@8#0] -- register_copy
|
||||
//SEG120 [68] phi (byte) findcol::mindiff#11 = (byte) findcol::diff#7 [phi:findcol::@16/findcol::@21->findcol::@8#0] -- register_copy
|
||||
//SEG121 [68] phi (byte) findcol::mincol#2 = (byte) findcol::mincol#1 [phi:findcol::@16/findcol::@21->findcol::@8#1] -- register_copy
|
||||
//SEG122 findcol::@8
|
||||
b8:
|
||||
@ -2835,7 +2839,7 @@ findcol: {
|
||||
lda yp
|
||||
sec
|
||||
sbc y
|
||||
//SEG137 [74] (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte~) findcol::$10 -- vbuyy=vbuyy_plus_vbuaa
|
||||
//SEG137 [74] (byte) findcol::diff#3 ← (byte) findcol::diff#5 + (byte~) findcol::$10 -- vbuyy=vbuyy_plus_vbuaa
|
||||
sty $ff
|
||||
clc
|
||||
adc $ff
|
||||
@ -2843,7 +2847,7 @@ findcol: {
|
||||
jmp b7
|
||||
//SEG138 findcol::@4
|
||||
b4:
|
||||
//SEG139 [75] (byte) findcol::diff#0 ← (byte) findcol::xp#0 - (byte) findcol::x#0 -- vbuyy=vbuz1_minus_vbuz2
|
||||
//SEG139 [75] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0 -- vbuyy=vbuz1_minus_vbuz2
|
||||
lda xp
|
||||
sec
|
||||
sbc x
|
||||
|
@ -50,12 +50,12 @@
|
||||
(label) findcol::@9
|
||||
(label) findcol::@return
|
||||
(byte) findcol::diff
|
||||
(byte) findcol::diff#0 reg byte y 20002.0
|
||||
(byte) findcol::diff#1 reg byte y 20002.0
|
||||
(byte) findcol::diff#2 reg byte y 20002.0
|
||||
(byte) findcol::diff#3 reg byte y 20002.0
|
||||
(byte) findcol::diff#4 reg byte y 10001.0
|
||||
(byte) findcol::diff#6 reg byte y 13334.666666666666
|
||||
(byte) findcol::diff#4 reg byte y 20002.0
|
||||
(byte) findcol::diff#5 reg byte y 10001.0
|
||||
(byte) findcol::diff#7 reg byte y 13334.666666666666
|
||||
(byte) findcol::i
|
||||
(byte) findcol::i#1 i zp ZP_BYTE:6 10001.0
|
||||
(byte) findcol::i#10 i zp ZP_BYTE:6 2631.842105263158
|
||||
@ -114,8 +114,8 @@ zp ZP_BYTE:5 [ render::x#2 render::x#1 findcol::x#0 ]
|
||||
zp ZP_BYTE:6 [ findcol::i#10 findcol::i#1 ]
|
||||
zp ZP_BYTE:7 [ findcol::mindiff#10 findcol::mindiff#13 ]
|
||||
reg byte x [ findcol::return#2 findcol::mincol#10 findcol::mincol#2 findcol::mincol#1 ]
|
||||
reg byte y [ findcol::diff#4 findcol::diff#1 findcol::diff#0 ]
|
||||
reg byte y [ findcol::mindiff#11 findcol::diff#6 findcol::diff#3 findcol::diff#2 findcol::mindiff#15 ]
|
||||
reg byte y [ findcol::diff#5 findcol::diff#2 findcol::diff#1 ]
|
||||
reg byte y [ findcol::mindiff#11 findcol::diff#7 findcol::diff#4 findcol::diff#3 findcol::mindiff#15 ]
|
||||
reg byte x [ animate::$0 ]
|
||||
reg byte x [ animate::$3 ]
|
||||
reg byte a [ animate::$6 ]
|
||||
|
Loading…
x
Reference in New Issue
Block a user