1
0
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:
jespergravgaard 2019-03-06 23:52:14 +01:00
parent ec863e5c43
commit 0362e12880
61 changed files with 5854 additions and 5142 deletions

View File

@ -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;
}

View File

@ -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");

View 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);
}

View 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;
}

View File

@ -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

View File

@ -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'

View File

@ -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 ]

View File

@ -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)

View File

@ -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

View File

@ -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 ]

View File

@ -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

View File

@ -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 ]

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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 ]

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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 ]

View File

@ -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

View File

@ -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 ]

View File

@ -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

View File

@ -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

View File

@ -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 ]

View File

@ -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

View File

@ -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

View File

@ -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 ]

View File

@ -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: {

View File

@ -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

View File

@ -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)

View File

@ -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 ]

View File

@ -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

View File

@ -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

View File

@ -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 ]

View File

@ -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

View File

@ -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

View File

@ -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 ]

View File

@ -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

View File

@ -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 ]

View File

@ -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

View File

@ -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

View File

@ -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 ]

View 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
}

View 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

View 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
}

View 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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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()

View File

@ -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

View File

@ -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 ]